]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
markup/goldmark: Apply Hugo Goldmark Extras when rendering TOC
authorJoe Mooring <joe.mooring@veriphor.com>
Mon, 11 Aug 2025 20:07:42 +0000 (13:07 -0700)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 14 Aug 2025 20:39:14 +0000 (22:39 +0200)
Closes #12605

go.mod
go.sum
markup/goldmark/convert.go
markup/goldmark/toc.go
markup/goldmark/toc_integration_test.go

diff --git a/go.mod b/go.mod
index b98be5e92795a61bb07afbe96e7ae7cc370795a6..38de3cb65f6c067af1eb7f9ccdac174c6f9eb3ae 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -38,7 +38,7 @@ require (
        github.com/gohugoio/go-i18n/v2 v2.1.3-0.20230805085216-e63c13218d0e
        github.com/gohugoio/hashstructure v0.5.0
        github.com/gohugoio/httpcache v0.7.0
-       github.com/gohugoio/hugo-goldmark-extensions/extras v0.3.0
+       github.com/gohugoio/hugo-goldmark-extensions/extras v0.5.0
        github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.3.1
        github.com/gohugoio/locales v0.14.0
        github.com/gohugoio/localescompressed v1.0.1
diff --git a/go.sum b/go.sum
index db8d08beb4610ce72156120e459ab94cdbeb2b99..6b87e6ddb3bbfc678c820f3869b52cb44233251b 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -261,8 +261,8 @@ github.com/gohugoio/hashstructure v0.5.0 h1:G2fjSBU36RdwEJBWJ+919ERvOVqAg9tfcYp4
 github.com/gohugoio/hashstructure v0.5.0/go.mod h1:Ser0TniXuu/eauYmrwM4o64EBvySxNzITEOLlm4igec=
 github.com/gohugoio/httpcache v0.7.0 h1:ukPnn04Rgvx48JIinZvZetBfHaWE7I01JR2Q2RrQ3Vs=
 github.com/gohugoio/httpcache v0.7.0/go.mod h1:fMlPrdY/vVJhAriLZnrF5QpN3BNAcoBClgAyQd+lGFI=
-github.com/gohugoio/hugo-goldmark-extensions/extras v0.3.0 h1:gj49kTR5Z4Hnm0ZaQrgPVazL3DUkppw+x6XhHCmh+Wk=
-github.com/gohugoio/hugo-goldmark-extensions/extras v0.3.0/go.mod h1:IMMj7xiUbLt1YNJ6m7AM4cnsX4cFnnfkleO/lBHGzUg=
+github.com/gohugoio/hugo-goldmark-extensions/extras v0.5.0 h1:dco+7YiOryRoPOMXwwaf+kktZSCtlFtreNdiJbETvYE=
+github.com/gohugoio/hugo-goldmark-extensions/extras v0.5.0/go.mod h1:CRrxQTKeM3imw+UoS4EHKyrqB7Zp6sAJiqHit+aMGTE=
 github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.3.1 h1:nUzXfRTszLliZuN0JTKeunXTRaiFX6ksaWP0puLLYAY=
 github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.3.1/go.mod h1:Wy8ThAA8p2/w1DY05vEzq6EIeI2mzDjvHsu7ULBVwog=
 github.com/gohugoio/locales v0.14.0 h1:Q0gpsZwfv7ATHMbcTNepFd59H7GoykzWJIxi113XGDc=
index ceacd150eeeaaca2910037dbd54d0f2895c8d802..fb374e6aee3efde3207ed3f1b41d748d2638bc0e 100644 (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),
index b4dcc425fa4b366acfbdec25c680a8cce8fb7a55..3fb53f875c2f05d24cd0ac69099fc3a71f2484e5 100644 (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
index b4dfeee05228981a1232c98b66e2e05d694fb97e..aaaf41a2fb53ae9886e942be98ba292cb691afe0 100644 (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>`,
+       )
+}