From 20c4311df4e61edb449ec93837cdde96a700b879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 20 Aug 2016 20:28:38 +0100 Subject: [PATCH] Switch to a more up to date TOML library Fixes #2089 --- commands/new.go | 2 +- hugolib/menu_test.go | 9 +++++---- parser/frontmatter.go | 24 +++++++++++++----------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/commands/new.go b/commands/new.go index fe4ed75e1..4cd8d7197 100644 --- a/commands/new.go +++ b/commands/new.go @@ -317,7 +317,7 @@ func newContentPathSection(path string) (string, string) { } func createConfig(inpath string, kind string) (err error) { - in := map[string]string{ + in := map[string]interface{}{ "baseurl": "http://replace-this-with-your-hugo-site.com/", "title": "My New Hugo Site", "languageCode": "en-us", diff --git a/hugolib/menu_test.go b/hugolib/menu_test.go index c7a6a4f05..df6ccf629 100644 --- a/hugolib/menu_test.go +++ b/hugolib/menu_test.go @@ -20,7 +20,7 @@ import ( "path/filepath" - "github.com/BurntSushi/toml" + toml "github.com/pelletier/go-toml" "github.com/spf13/hugo/hugofs" "github.com/spf13/hugo/source" "github.com/spf13/viper" @@ -701,11 +701,12 @@ func testSiteSetup(s *Site, t *testing.T) { } func tomlToMap(s string) (map[string]interface{}, error) { - var data = make(map[string]interface{}) - if _, err := toml.Decode(s, &data); err != nil { + tree, err := toml.Load(s) + + if err != nil { return nil, err } - return data, nil + return tree.ToMap(), nil } diff --git a/parser/frontmatter.go b/parser/frontmatter.go index 40418e684..b4ed54bcd 100644 --- a/parser/frontmatter.go +++ b/parser/frontmatter.go @@ -19,7 +19,8 @@ import ( "fmt" "strings" - "github.com/BurntSushi/toml" + toml "github.com/pelletier/go-toml" + "gopkg.in/yaml.v2" ) @@ -49,11 +50,8 @@ func InterfaceToConfig(in interface{}, mark rune) ([]byte, error) { } return b.Bytes(), nil case rune(TOMLLead[0]): - err := toml.NewEncoder(b).Encode(in) - if err != nil { - return nil, err - } - return b.Bytes(), nil + tree := toml.TreeFromMap(in.(map[string]interface{})) + return []byte(tree.String()), nil case rune(JSONLead[0]): by, err := json.MarshalIndent(in, "", " ") if err != nil { @@ -99,10 +97,8 @@ func InterfaceToFrontMatter(in interface{}, mark rune) ([]byte, error) { return nil, err } - err = toml.NewEncoder(b).Encode(in) - if err != nil { - return nil, err - } + tree := toml.TreeFromMap(in.(map[string]interface{})) + b.Write([]byte(tree.String())) _, err = b.Write([]byte("\n" + TOMLDelimUnix)) if err != nil { return nil, err @@ -166,9 +162,15 @@ func DetectFrontMatter(mark rune) (f *frontmatterType) { func HandleTOMLMetaData(datum []byte) (interface{}, error) { m := map[string]interface{}{} datum = removeTOMLIdentifier(datum) - if _, err := toml.Decode(string(datum), &m); err != nil { + + tree, err := toml.Load(string(datum)) + + if err != nil { return m, err } + + m = tree.ToMap() + return m, nil }