markup: Fix linenos codeblock hl option case regression

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
This commit is contained in:
Khayyam Saleem authored and GitHub committed 2023-02-05 20:06:25 +01:00
1 parent f9fc0e045b
commit 73ece30d84
2 files changed
+24 -2

No files matched your search

+7 -2
View 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 {
+17
View 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")
})
}