From 46f618756f294d4eba7601c842b9926d006e9f9d Mon Sep 17 00:00:00 2001 From: August Feng Date: Sat, 25 Nov 2023 22:33:02 -0500 Subject: parser/metadecoders: Accumulate org keywords into arrays Closes #11743 --- docs/content/en/content-management/front-matter.md | 2 +- parser/metadecoders/decoder.go | 5 ++--- parser/metadecoders/decoder_test.go | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/content/en/content-management/front-matter.md b/docs/content/en/content-management/front-matter.md index dba67ba10..7593fb759 100644 --- a/docs/content/en/content-management/front-matter.md +++ b/docs/content/en/content-management/front-matter.md @@ -31,7 +31,7 @@ JSON ORG : 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 diff --git a/parser/metadecoders/decoder.go b/parser/metadecoders/decoder.go index 35368e5a5..8d93d86a0 100644 --- a/parser/metadecoders/decoder.go +++ b/parser/metadecoders/decoder.go @@ -249,9 +249,8 @@ func (d Decoder) unmarshalORG(data []byte, v any) error { k = strings.ToLower(k) if strings.HasSuffix(k, "[]") { frontMatter[k[:len(k)-2]] = strings.Fields(v) - } else if k == "tags" || k == "categories" || k == "aliases" { - log.Printf("warn: Please use '#+%s[]:' notation, automatic conversion is deprecated.", k) - frontMatter[k] = strings.Fields(v) + } else if strings.Contains(v, "\n") { + frontMatter[k] = strings.Split(v, "\n") } else if k == "date" || k == "lastmod" || k == "publishdate" || k == "expirydate" { frontMatter[k] = parseORGDate(v) } else { diff --git a/parser/metadecoders/decoder_test.go b/parser/metadecoders/decoder_test.go index ff6f8c226..48def7d12 100644 --- a/parser/metadecoders/decoder_test.go +++ b/parser/metadecoders/decoder_test.go @@ -125,6 +125,7 @@ func TestUnmarshalToInterface(t *testing.T) { {[]byte(``), JSON, map[string]any{}}, {[]byte(nil), JSON, map[string]any{}}, {[]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(`#+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"}}, -- cgit v1.2.3