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 2023-02-05 14:06:25 -05:00 committed by GitHub
parent f9fc0e045b
commit 73ece30d84
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 2 deletions

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 {

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")
})
}