diff --git a/docs/content/en/functions/transform.Unmarshal.md b/docs/content/en/functions/transform.Unmarshal.md index 0220de5d5..6e3328963 100644 --- a/docs/content/en/functions/transform.Unmarshal.md +++ b/docs/content/en/functions/transform.Unmarshal.md @@ -35,8 +35,8 @@ The above prints `Hello Hugo`. Unmarshal with CSV as input has some options you can set: -comma -: The delmiter used, default is `,` +delimiter +: The delimiter used, default is `,` comment : The comment character ued in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.: diff --git a/hugolib/resource_chain_test.go b/hugolib/resource_chain_test.go index 90022d6dc..551ac0177 100644 --- a/hugolib/resource_chain_test.go +++ b/hugolib/resource_chain_test.go @@ -343,12 +343,11 @@ Publish 2: {{ $cssPublish2.Permalink }} b.WithTemplates("home.html", ` {{ $toml := "slogan = \"Hugo Rocks!\"" | resources.FromString "slogan.toml" | transform.Unmarshal }} {{ $csv1 := "\"Hugo Rocks\",\"Hugo is Fast!\"" | resources.FromString "slogans.csv" | transform.Unmarshal }} -{{ $csv2 := "a;b;c" | transform.Unmarshal (dict "comma" ";") }} +{{ $csv2 := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }} Slogan: {{ $toml.slogan }} CSV1: {{ $csv1 }} {{ len (index $csv1 0) }} -CSV2: {{ $csv2 }} - +CSV2: {{ $csv2 }} `) }, func(b *sitesBuilder) { b.AssertFileContent("public/index.html", diff --git a/parser/metadecoders/decoder.go b/parser/metadecoders/decoder.go index 0ca8575fe..2f3c27d45 100644 --- a/parser/metadecoders/decoder.go +++ b/parser/metadecoders/decoder.go @@ -31,8 +31,8 @@ import ( // Decoder provides some configuration options for the decoders. type Decoder struct { - // Comma is the field delimiter used in the CSV decoder. It defaults to ','. - Comma rune + // Delimiter is the field delimiter used in the CSV decoder. It defaults to ','. + Delimiter rune // Comment, if not 0, is the comment character ued in the CSV decoder. Lines beginning with the // Comment character without preceding whitespace are ignored. @@ -41,7 +41,7 @@ type Decoder struct { // Default is a Decoder in its default configuration. var Default = Decoder{ - Comma: ',', + Delimiter: ',', } // UnmarshalToMap will unmarshall data in format f into a new map. This is @@ -156,7 +156,7 @@ func (d Decoder) unmarshal(data []byte, f Format, v interface{}) error { func (d Decoder) unmarshalCSV(data []byte, v interface{}) error { r := csv.NewReader(bytes.NewReader(data)) - r.Comma = d.Comma + r.Comma = d.Delimiter r.Comment = d.Comment records, err := r.ReadAll() diff --git a/parser/metadecoders/format.go b/parser/metadecoders/format.go index 719fbf100..4f81528c3 100644 --- a/parser/metadecoders/format.go +++ b/parser/metadecoders/format.go @@ -92,7 +92,7 @@ func FormatFromFrontMatterType(typ pageparser.ItemType) Format { // in the given string. // It return an empty string if no format could be detected. func (d Decoder) FormatFromContentString(data string) Format { - csvIdx := strings.IndexRune(data, d.Comma) + csvIdx := strings.IndexRune(data, d.Delimiter) jsonIdx := strings.Index(data, "{") yamlIdx := strings.Index(data, ":") tomlIdx := strings.Index(data, "=") diff --git a/tpl/transform/unmarshal.go b/tpl/transform/unmarshal.go index e0574eb04..bc8386975 100644 --- a/tpl/transform/unmarshal.go +++ b/tpl/transform/unmarshal.go @@ -116,12 +116,12 @@ func decodeDecoder(m map[string]interface{}) (metadecoders.Decoder, error) { // mapstructure does not support string to rune conversion, so do that manually. // See https://github.com/mitchellh/mapstructure/issues/151 for k, v := range m { - if strings.EqualFold(k, "Comma") { + if strings.EqualFold(k, "Delimiter") { r, err := stringToRune(v) if err != nil { return opts, err } - opts.Comma = r + opts.Delimiter = r delete(m, k) } else if strings.EqualFold(k, "Comment") { diff --git a/tpl/transform/unmarshal_test.go b/tpl/transform/unmarshal_test.go index b1ce30b1f..d9ebd1f89 100644 --- a/tpl/transform/unmarshal_test.go +++ b/tpl/transform/unmarshal_test.go @@ -118,7 +118,7 @@ func TestUnmarshal(t *testing.T) { assert.Equal(5, len(first)) assert.Equal("Ford", first[1]) }}, - {testContentResource{key: "r1", content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"comma": ";"}, func(r [][]string) { + {testContentResource{key: "r1", content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"delimiter": ";"}, func(r [][]string) { assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) }}, @@ -126,13 +126,13 @@ func TestUnmarshal(t *testing.T) { assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) }}, - {"a;b;c", map[string]interface{}{"comma": ";"}, func(r [][]string) { + {"a;b;c", map[string]interface{}{"delimiter": ";"}, func(r [][]string) { assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) }}, {testContentResource{key: "r1", content: ` % This is a comment -a;b;c`, mime: media.CSVType}, map[string]interface{}{"CommA": ";", "Comment": "%"}, func(r [][]string) { +a;b;c`, mime: media.CSVType}, map[string]interface{}{"DElimiter": ";", "Comment": "%"}, func(r [][]string) { assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) }},