mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-18 21:11:19 +02:00
Adding support for TOML, updating documentation
This commit is contained in:
@@ -17,6 +17,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/BurntSushi/toml"
|
||||
"github.com/theplant/blackfriday"
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
@@ -154,6 +155,15 @@ func (page *Page) parseYamlMetaData(data []byte) ([]string, error) {
|
||||
return lines, err
|
||||
}
|
||||
|
||||
func (page *Page) parseTomlMetaData(data []byte) ([]string, error) {
|
||||
var err error
|
||||
|
||||
datum, lines := splitPageContent(data, "+++", "+++")
|
||||
|
||||
err = page.handleMetaData(page.handleTomlMetaData([]byte(strings.Join(datum, "\n"))))
|
||||
return lines, err
|
||||
}
|
||||
|
||||
func (page *Page) parseJsonMetaData(data []byte) ([]string, error) {
|
||||
var err error
|
||||
|
||||
@@ -185,15 +195,17 @@ func splitPageContent(data []byte, start string, end string) ([]string, []string
|
||||
break
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if found == 0 && strings.HasPrefix(line, start) {
|
||||
found += 1
|
||||
}
|
||||
} else { // Start token & end token are the same
|
||||
for i, line := range lines {
|
||||
if found == 1 && strings.HasPrefix(line, end) {
|
||||
datum = lines[1:i]
|
||||
lines = lines[i+1:]
|
||||
break
|
||||
}
|
||||
|
||||
if found == 0 && strings.HasPrefix(line, end) {
|
||||
datum = lines[1 : i+1]
|
||||
lines = lines[i+1:]
|
||||
break
|
||||
if found == 0 && strings.HasPrefix(line, start) {
|
||||
found = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
return datum, lines
|
||||
@@ -211,6 +223,14 @@ func (p *Page) Permalink() template.HTML {
|
||||
}
|
||||
}
|
||||
|
||||
func (page *Page) handleTomlMetaData(datum []byte) interface{} {
|
||||
m := map[string]interface{}{}
|
||||
if _, err := toml.Decode(string(datum), &m); err != nil {
|
||||
return fmt.Errorf("Invalid TOML in %s \nError parsing page meta data: %s", page.FileName, err)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
func (page *Page) handleYamlMetaData(datum []byte) interface{} {
|
||||
m := map[string]interface{}{}
|
||||
if err := goyaml.Unmarshal(datum, &m); err != nil {
|
||||
@@ -304,10 +324,14 @@ func (page *Page) parseFileHeading(data []byte) ([]string, error) {
|
||||
if len(data) == 0 {
|
||||
page.Err("Empty File, skipping")
|
||||
} else {
|
||||
if data[0] == '{' {
|
||||
switch data[0] {
|
||||
case '{':
|
||||
return page.parseJsonMetaData(data)
|
||||
case '-':
|
||||
return page.parseYamlMetaData(data)
|
||||
case '+':
|
||||
return page.parseTomlMetaData(data)
|
||||
}
|
||||
return page.parseYamlMetaData(data)
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user