parser/metadecoders: Accumulate org keywords into arrays

Closes #11743
This commit is contained in:
August Feng 2023-11-25 22:33:02 -05:00 committed by Bjørn Erik Pedersen
parent 8915343075
commit 46f618756f
3 changed files with 4 additions and 4 deletions

View file

@ -31,7 +31,7 @@ JSON
ORG ORG
: a group of Org mode keywords in the format '`#+KEY: VALUE`'. Any line that does not start with `#+` ends the front matter section. : a group of Org mode keywords in the format '`#+KEY: VALUE`'. Any line that does not start with `#+` ends the front matter section.
Keyword values can be either strings (`#+KEY: VALUE`) or a whitespace separated list of strings (`#+KEY[]: VALUE_1 VALUE_2`). Array values can either be separated into multiple lines (`#+KEY: VALUE_1` and `#+KEY: VALUE_2`) or a whitespace separated list of strings (`#+KEY[]: VALUE_1 VALUE_2`).
### Example ### Example

View file

@ -249,9 +249,8 @@ func (d Decoder) unmarshalORG(data []byte, v any) error {
k = strings.ToLower(k) k = strings.ToLower(k)
if strings.HasSuffix(k, "[]") { if strings.HasSuffix(k, "[]") {
frontMatter[k[:len(k)-2]] = strings.Fields(v) frontMatter[k[:len(k)-2]] = strings.Fields(v)
} else if k == "tags" || k == "categories" || k == "aliases" { } else if strings.Contains(v, "\n") {
log.Printf("warn: Please use '#+%s[]:' notation, automatic conversion is deprecated.", k) frontMatter[k] = strings.Split(v, "\n")
frontMatter[k] = strings.Fields(v)
} else if k == "date" || k == "lastmod" || k == "publishdate" || k == "expirydate" { } else if k == "date" || k == "lastmod" || k == "publishdate" || k == "expirydate" {
frontMatter[k] = parseORGDate(v) frontMatter[k] = parseORGDate(v)
} else { } else {

View file

@ -125,6 +125,7 @@ func TestUnmarshalToInterface(t *testing.T) {
{[]byte(``), JSON, map[string]any{}}, {[]byte(``), JSON, map[string]any{}},
{[]byte(nil), JSON, map[string]any{}}, {[]byte(nil), JSON, map[string]any{}},
{[]byte(`#+a: b`), ORG, expect}, {[]byte(`#+a: b`), ORG, expect},
{[]byte("#+a: foo bar\n#+a: baz"), ORG, map[string]any{"a": []string{string("foo bar"), string("baz")}}},
{[]byte(`#+DATE: <2020-06-26 Fri>`), ORG, map[string]any{"date": "2020-06-26"}}, {[]byte(`#+DATE: <2020-06-26 Fri>`), ORG, map[string]any{"date": "2020-06-26"}},
{[]byte(`#+LASTMOD: <2020-06-26 Fri>`), ORG, map[string]any{"lastmod": "2020-06-26"}}, {[]byte(`#+LASTMOD: <2020-06-26 Fri>`), ORG, map[string]any{"lastmod": "2020-06-26"}},
{[]byte(`#+PUBLISHDATE: <2020-06-26 Fri>`), ORG, map[string]any{"publishdate": "2020-06-26"}}, {[]byte(`#+PUBLISHDATE: <2020-06-26 Fri>`), ORG, map[string]any{"publishdate": "2020-06-26"}},