markup/goldmark: Apply Hugo Goldmark Extras when rendering TOC

Closes #12605
This commit is contained in:
Joe Mooring
2025-08-11 13:07:42 -07:00
committed by Bjørn Erik Pedersen
parent 04ee1b9784
commit 61482cfab6
5 changed files with 89 additions and 5 deletions
+18 -1
View File
@@ -102,9 +102,26 @@ func newMarkdown(pcfg converter.ProviderConfig) goldmark.Markdown {
if rendererOptions != nil {
copy(tocRendererOptions, rendererOptions)
}
tocRendererOptions = append(tocRendererOptions,
renderer.WithNodeRenderers(util.Prioritized(extension.NewStrikethroughHTMLRenderer(), 500)),
renderer.WithNodeRenderers(util.Prioritized(emoji.NewHTMLRenderer(), 200)))
renderer.WithNodeRenderers(util.Prioritized(emoji.NewHTMLRenderer(), 200)),
)
inlineTags := []extras.InlineTag{
extras.DeleteTag,
extras.InsertTag,
extras.MarkTag,
extras.SubscriptTag,
extras.SuperscriptTag,
}
for _, tag := range inlineTags {
tocRendererOptions = append(tocRendererOptions,
renderer.WithNodeRenderers(util.Prioritized(extras.NewInlineTagHTMLRenderer(tag), tag.RenderPriority)),
)
}
var (
extensions = []goldmark.Extender{
hugocontext.New(pcfg.Logger),
+7 -1
View File
@@ -23,6 +23,7 @@ import (
emojiAst "github.com/yuin/goldmark-emoji/ast"
"github.com/gohugoio/hugo-goldmark-extensions/extras"
"github.com/gohugoio/hugo/markup/tableofcontents"
"github.com/yuin/goldmark"
@@ -99,7 +100,12 @@ func (t *tocTransformer) Transform(n *ast.Document, reader text.Reader, pc parse
ast.KindImage,
ast.KindEmphasis,
strikethroughAst.KindStrikethrough,
emojiAst.KindEmoji:
emojiAst.KindEmoji,
extras.KindDelete,
extras.KindInsert,
extras.KindMark,
extras.KindSubscript,
extras.KindSuperscript:
err := t.r.Render(&headingText, reader.Source(), n)
if err != nil {
return s, err
+61
View File
@@ -14,6 +14,7 @@
package goldmark_test
import (
"strings"
"testing"
"github.com/gohugoio/hugo/hugolib"
@@ -303,3 +304,63 @@ title: home
b.AssertFileExists("public/index.html", true)
}
// Issue 12605
func TestTableOfContentsWithGoldmarkExtras(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
disableKinds = ['page','rss','section','sitemap','taxonomy','term']
[markup.goldmark.extensions]
strikethrough = false
[markup.goldmark.extensions.extras.delete]
enable = true
[markup.goldmark.extensions.extras.insert]
enable = true
[markup.goldmark.extensions.extras.mark]
enable = true
[markup.goldmark.extensions.extras.subscript]
enable = true
[markup.goldmark.extensions.extras.superscript]
enable = true
-- content/_index.md --
---
title: home
---
## ~~deleted~~
## ++inserted++
## ==marked==
## H~2~O
## 1^st^
-- layouts/home.html --
{{ .TableOfContents }}
`
b := hugolib.Test(t, files)
b.AssertFileContent("public/index.html",
`<li><a href="#deleted"><del>deleted</del></a></li>`,
`<li><a href="#inserted"><ins>inserted</ins></a></li>`,
`<li><a href="#marked"><mark>marked</mark></a></li>`,
`<li><a href="#h2o">H<sub>2</sub>O</a></li>`,
`<li><a href="#1st">1<sup>st</sup></a></li>`,
)
files = strings.ReplaceAll(files, "enable = true", "enable = false")
b = hugolib.Test(t, files)
b.AssertFileContent("public/index.html",
`<li><a href="#deleted">~~deleted~~</a></li>`,
`<li><a href="#inserted">++inserted++</a></li>`,
`<li><a href="#marked">==marked==</a></li>`,
`<li><a href="#h2o">H~2~O</a></li>`,
`<li><a href="#1st">1^st^</a></li>`,
)
}