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, ",") { for _, v := range strings.Split(in, ",") {
keyVal := strings.Split(v, "=") keyVal := strings.Split(v, "=")
key := strings.ToLower(strings.Trim(keyVal[0], " ")) key := strings.Trim(keyVal[0], " ")
if len(keyVal) != 2 { if len(keyVal) != 2 {
return opts, fmt.Errorf("invalid Highlight option: %s", key) return opts, fmt.Errorf("invalid Highlight option: %s", key)
} }
@ -216,6 +216,12 @@ func normalizeHighlightOptions(m map[string]any) {
return return
} }
// lowercase all keys
for k, v := range m {
delete(m, k)
m[strings.ToLower(k)] = v
}
baseLineNumber := 1 baseLineNumber := 1
if v, ok := m[linosStartKey]; ok { if v, ok := m[linosStartKey]; ok {
baseLineNumber = cast.ToInt(v) baseLineNumber = cast.ToInt(v)
@ -232,7 +238,6 @@ func normalizeHighlightOptions(m map[string]any) {
if vs, ok := v.(string); ok { if vs, ok := v.(string); ok {
m[k] = vs != "false" m[k] = vs != "false"
} }
case hlLinesKey: case hlLinesKey:
if hlRanges, ok := v.([][2]int); ok { if hlRanges, ok := v.([][2]int); ok {
for i := range hlRanges { 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.LineNoStart, qt.Equals, 32)
c.Assert(cfg.Hl_Lines, qt.Equals, "3-8 10-20") 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")
})
} }