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