diff options
author | Sebastian Boehm <sebastian@sometimesfood.org> | 2020-06-27 00:52:12 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-06-30 11:30:55 +0300 |
commit | c66dc6c74fa3bbe308ccaade8c76071b49908129 (patch) | |
tree | f56d533d9b74c82938e233d8eb9023ca638b7a29 | |
parent | 127d5feb32b466c4a0035e81f86684920dd88cfe (diff) |
Add support for native Org dates in frontmatter
-rw-r--r-- | parser/metadecoders/decoder.go | 11 | ||||
-rw-r--r-- | parser/metadecoders/decoder_test.go | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/parser/metadecoders/decoder.go b/parser/metadecoders/decoder.go index f90dc5703..1a4a57076 100644 --- a/parser/metadecoders/decoder.go +++ b/parser/metadecoders/decoder.go @@ -18,6 +18,7 @@ import ( "encoding/csv" "encoding/json" "fmt" + "regexp" "strings" "github.com/gohugoio/hugo/common/herrors" @@ -203,6 +204,14 @@ func (d Decoder) unmarshalCSV(data []byte, v interface{}) error { } +func parseORGDate(s string) string { + r := regexp.MustCompile(`[<\[](\d{4}-\d{2}-\d{2}) .*[>\]]`) + if m := r.FindStringSubmatch(s); m != nil { + return m[1] + } + return s +} + func (d Decoder) unmarshalORG(data []byte, v interface{}) error { config := org.New() config.Log = jww.WARN @@ -218,6 +227,8 @@ func (d Decoder) unmarshalORG(data []byte, v interface{}) error { } else if k == "tags" || k == "categories" || k == "aliases" { jww.WARN.Printf("Please use '#+%s[]:' notation, automatic conversion is deprecated.", k) frontMatter[k] = strings.Fields(v) + } else if k == "date" { + frontMatter[k] = parseORGDate(v) } else { frontMatter[k] = v } diff --git a/parser/metadecoders/decoder_test.go b/parser/metadecoders/decoder_test.go index 3cb2e6365..d11d578ba 100644 --- a/parser/metadecoders/decoder_test.go +++ b/parser/metadecoders/decoder_test.go @@ -69,6 +69,7 @@ func TestUnmarshalToInterface(t *testing.T) { {`[ "Brecker", "Blake", "Redman" ]`, JSON, []interface{}{"Brecker", "Blake", "Redman"}}, {`{ "a": "b" }`, JSON, expect}, {`#+a: b`, ORG, expect}, + {`#+DATE: <2020-06-26 Fri>`, ORG, map[string]interface{}{"date": "2020-06-26"}}, {`a = "b"`, TOML, expect}, {`a: "b"`, YAML, expect}, {`a,b,c`, CSV, [][]string{{"a", "b", "c"}}}, |