shithub: hugo

Download patch

ref: 67f4da30b184866434d14ae485e63910a66c62ef
parent: 6c42d3d49095a22f59b860b914b14ff40cb010ff
author: tycho garen <[email protected]>
date: Sat Jul 6 19:52:14 EDT 2013

revert: adding json support

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -15,6 +15,7 @@
 
 import (
 	"bytes"
+	"encoding/json"
 	"launchpad.net/goyaml"
 	"fmt"
 	"github.com/theplant/blackfriday"
@@ -31,17 +32,17 @@
 var _ = filepath.Base("")
 
 type Page struct {
-	Status          string
-	Images          []string
-	Content         template.HTML
-	Summary         template.HTML
-	RawMarkdown     string // TODO should be []byte
-	Params          map[string]interface{}
+	Status		string
+	Images		[]string
+	Content		template.HTML
+	Summary		template.HTML
+	RawMarkdown	string // TODO should be []byte
+	Params		map[string]interface{}
 	RenderedContent *bytes.Buffer
-	contentType     string
-	Draft           bool
-	Tmpl            *template.Template
-	Markup          string
+	contentType	string
+	Draft		bool
+	Tmpl		*template.Template
+	Markup		string
 	PageMeta
 	File
 	Position
@@ -66,12 +67,12 @@
 
 type Pages []*Page
 
-func (p Pages) Len() int           { return len(p) }
+func (p Pages) Len() int	   { return len(p) }
 func (p Pages) Less(i, j int) bool { return p[i].Date.Unix() > p[j].Date.Unix() }
-func (p Pages) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
+func (p Pages) Swap(i, j int)	   { p[i], p[j] = p[j], p[i] }
 
 // TODO eliminate unnecessary things
-func (p Pages) Sort()             { sort.Sort(p) }
+func (p Pages) Sort()		  { sort.Sort(p) }
 func (p Pages) Limit(n int) Pages { return p[0:n] }
 
 func initializePage(filename string) (page Page) {
@@ -175,6 +176,38 @@
 	return lines, err
 }
 
+func (page *Page) parseJsonMetaData(data []byte) ([]string, error) {
+	var err error
+
+	lines := strings.Split(string(data), "\n")
+	datum := lines[0:]
+
+	// go through content parse between "{" and "}"
+	// must be on their own lines (for now)
+	var found = 0
+	for i, line := range lines {
+		line = strings.TrimSpace(line)
+
+		if line == "{" {
+			found += 1
+		}
+
+		if line == "}" {
+			found -= 1
+		}
+
+		if found == 0 {
+			datum = lines[0 : i+1]
+			lines = lines[i+1:]
+			break
+		}
+	}
+
+	err = page.handleJsonMetaData([]byte(strings.Join(datum, "\n")))
+
+	return lines, err
+}
+
 func (p *Page) Permalink() template.HTML {
 	if len(strings.TrimSpace(p.Slug)) > 0 {
 		return template.HTML(MakePermalink(string(p.Site.BaseUrl), strings.TrimSpace(p.Section)+"/"+p.Slug))
@@ -267,6 +300,9 @@
 	if len(data) == 0 {
 		page.Err("Empty File, skipping")
 	} else {
+		if data[0] == '{' {
+			return page.parseJsonMetaData(data)
+		}
 		return page.parseYamlMetaData(data)
 	}
 	return nil, nil