]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
markup: Fix linenos codeblock hl option case regression
authorKhayyam Saleem <ksaleem@digitalocean.com>
Sun, 5 Feb 2023 19:06:25 +0000 (14:06 -0500)
committerGitHub <noreply@github.com>
Sun, 5 Feb 2023 19:06:25 +0000 (20:06 +0100)
This fixes a regression introduced in v0.93.0 where previously, a
mixed-case key for lineNos would be successfully parsed. This change
moves the configuration key lowercasing step into the configuration
normalization stage, which is called whether the highlighting config
is being parsed from a `string` or a `map`.

Fixes #10682

markup/highlight/config.go
markup/highlight/config_test.go

index 9013dd07298e3a2558b08cb67fd7ff1c82986753..b1f6d4603043255e91ccc85d39d0fce2c9daa699 100644 (file)
@@ -198,7 +198,7 @@ func parseHightlightOptions(in string) (map[string]any, error) {
 
        for _, v := range strings.Split(in, ",") {
                keyVal := strings.Split(v, "=")
-               key := strings.ToLower(strings.Trim(keyVal[0], " "))
+               key := strings.Trim(keyVal[0], " ")
                if len(keyVal) != 2 {
                        return opts, fmt.Errorf("invalid Highlight option: %s", key)
                }
@@ -216,6 +216,12 @@ func normalizeHighlightOptions(m map[string]any) {
                return
        }
 
+       // lowercase all keys
+       for k, v := range m {
+               delete(m, k)
+               m[strings.ToLower(k)] = v
+       }
+
        baseLineNumber := 1
        if v, ok := m[linosStartKey]; ok {
                baseLineNumber = cast.ToInt(v)
@@ -232,7 +238,6 @@ func normalizeHighlightOptions(m map[string]any) {
                        if vs, ok := v.(string); ok {
                                m[k] = vs != "false"
                        }
-
                case hlLinesKey:
                        if hlRanges, ok := v.([][2]int); ok {
                                for i := range hlRanges {
index ab92ecf36fa41aa6417b07fccb8e9b43415c944c..23da29ab616da82a5f0519a3416de12e690ab3f1 100644 (file)
@@ -53,4 +53,21 @@ func TestConfig(t *testing.T) {
                c.Assert(cfg.LineNoStart, qt.Equals, 32)
                c.Assert(cfg.Hl_Lines, qt.Equals, "3-8 10-20")
        })
+
+       c.Run("applyOptionsFromMap", func(c *qt.C) {
+               cfg := DefaultConfig
+               err := applyOptionsFromMap(map[string]any{
+                       "noclasses":   true,
+                       "lineNos":     "inline", // mixed case key, should work after normalization
+                       "linenostart": 32,
+                       "hl_lines":    "3-8 10-20",
+               }, &cfg)
+
+               c.Assert(err, qt.IsNil)
+               c.Assert(cfg.NoClasses, qt.Equals, true)
+               c.Assert(cfg.LineNos, qt.Equals, true)
+               c.Assert(cfg.LineNumbersInTable, qt.Equals, false)
+               c.Assert(cfg.LineNoStart, qt.Equals, 32)
+               c.Assert(cfg.Hl_Lines, qt.Equals, "3-8 10-20")
+       })
 }