markup/goldmark: Use Ordinal to create default lineanchors

The `Ordinal` starts at 0, so with a `hl-` prefix, this gives `hl-0-1` as a starting point.

Fixes #9567
This commit is contained in:
Bjørn Erik Pedersen 2022-02-25 07:45:37 +01:00
parent 78afdb88ab
commit 0f80be341f
3 changed files with 41 additions and 34 deletions

View file

@ -23,10 +23,19 @@ import (
"github.com/spf13/cast"
"github.com/gohugoio/hugo/config"
"github.com/gohugoio/hugo/markup/converter/hooks"
"github.com/mitchellh/mapstructure"
)
const (
lineanchorsKey = "lineanchors"
lineNosKey = "linenos"
hlLinesKey = "hl_lines"
linosStartKey = "linenostart"
noHlKey = "nohl"
)
var DefaultConfig = Config{
// The highlighter style to use.
// See https://xyproto.github.io/splash/docs/all.html
@ -38,7 +47,6 @@ var DefaultConfig = Config{
TabWidth: 4,
}
//
type Config struct {
Style string
@ -133,6 +141,16 @@ func applyOptionsFromMap(optsm map[string]interface{}, cfg *Config) error {
return mapstructure.WeakDecode(optsm, cfg)
}
func applyOptionsFromCodeBlockContext(ctx hooks.CodeblockContext, cfg *Config) error {
if cfg.LineAnchors == "" {
const lineAnchorPrefix = "hl-"
// Set it to the ordinal with a prefix.
cfg.LineAnchors = fmt.Sprintf("%s%d", lineAnchorPrefix, ctx.Ordinal())
}
return nil
}
// ApplyLegacyConfig applies legacy config from back when we had
// Pygments.
func ApplyLegacyConfig(cfg config.Provider, conf *Config) error {
@ -191,13 +209,6 @@ func normalizeHighlightOptions(m map[string]interface{}) {
return
}
const (
lineNosKey = "linenos"
hlLinesKey = "hl_lines"
linosStartKey = "linenostart"
noHlKey = "nohl"
)
baseLineNumber := 1
if v, ok := m[linosStartKey]; ok {
baseLineNumber = cast.ToInt(v)