diff options
author | Jonas Zeiger <[email protected]> | 2023-12-06 00:29:03 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-03-07 14:08:29 +0100 |
commit | 134e7d1d3d1ca901a274c56ef720c9c48be56b77 (patch) | |
tree | 7f5a20b3015d5a6b3eb751086c2d82c3c1d07c53 | |
parent | 1f48b717c7f1bb9ecdbf8a7f50cbcdc5cf1dcc0a (diff) | |
download | hugo-134e7d1d3d1ca901a274c56ef720c9c48be56b77.tar.gz hugo-134e7d1d3d1ca901a274c56ef720c9c48be56b77.zip |
markup/goldmark: TOC: render strikethrough, emojis
Configure the TOC (TableOfContents, toc.go) goldmark renderer to always
enable the Strikethrough and Emoji extensions. This allows handling
ast.KindStrikethrough and ast.KindEmoji AST nodes when rendering the TOC.
Fixes #7169
Fixes #11783
Fixes #12022
-rw-r--r-- | markup/goldmark/convert.go | 16 | ||||
-rw-r--r-- | markup/goldmark/toc.go | 8 | ||||
-rw-r--r-- | markup/goldmark/toc_integration_test.go | 14 |
3 files changed, 26 insertions, 12 deletions
diff --git a/markup/goldmark/convert.go b/markup/goldmark/convert.go index de06bedff..d835d17cf 100644 --- a/markup/goldmark/convert.go +++ b/markup/goldmark/convert.go @@ -18,14 +18,14 @@ import ( "bytes" "github.com/gohugoio/hugo-goldmark-extensions/passthrough" + "github.com/yuin/goldmark/util" + "github.com/gohugoio/hugo/markup/goldmark/codeblocks" "github.com/gohugoio/hugo/markup/goldmark/goldmark_config" "github.com/gohugoio/hugo/markup/goldmark/images" "github.com/gohugoio/hugo/markup/goldmark/internal/extensions/attributes" "github.com/gohugoio/hugo/markup/goldmark/internal/render" - "github.com/gohugoio/hugo/markup/converter" - "github.com/gohugoio/hugo/markup/tableofcontents" "github.com/yuin/goldmark" emoji "github.com/yuin/goldmark-emoji" "github.com/yuin/goldmark/ast" @@ -34,6 +34,9 @@ import ( "github.com/yuin/goldmark/renderer" "github.com/yuin/goldmark/renderer/html" "github.com/yuin/goldmark/text" + + "github.com/gohugoio/hugo/markup/converter" + "github.com/gohugoio/hugo/markup/tableofcontents" ) const ( @@ -91,10 +94,17 @@ func newMarkdown(pcfg converter.ProviderConfig) goldmark.Markdown { rendererOptions = append(rendererOptions, html.WithUnsafe()) } + tocRendererOptions := make([]renderer.Option, len(rendererOptions)) + if rendererOptions != nil { + copy(tocRendererOptions, rendererOptions) + } + tocRendererOptions = append(tocRendererOptions, + renderer.WithNodeRenderers(util.Prioritized(extension.NewStrikethroughHTMLRenderer(), 500)), + renderer.WithNodeRenderers(util.Prioritized(emoji.NewHTMLRenderer(), 200))) var ( extensions = []goldmark.Extender{ newLinks(cfg), - newTocExtension(rendererOptions), + newTocExtension(tocRendererOptions), } parserOptions []parser.Option ) diff --git a/markup/goldmark/toc.go b/markup/goldmark/toc.go index bc209adf2..b0f7e703f 100644 --- a/markup/goldmark/toc.go +++ b/markup/goldmark/toc.go @@ -16,6 +16,10 @@ package goldmark import ( "bytes" + strikethroughAst "github.com/yuin/goldmark/extension/ast" + + emojiAst "github.com/yuin/goldmark-emoji/ast" + "github.com/gohugoio/hugo/markup/tableofcontents" "github.com/yuin/goldmark" @@ -86,7 +90,9 @@ func (t *tocTransformer) Transform(n *ast.Document, reader text.Reader, pc parse ast.KindCodeSpan, ast.KindLink, ast.KindImage, - ast.KindEmphasis: + ast.KindEmphasis, + strikethroughAst.KindStrikethrough, + emojiAst.KindEmoji: err := t.r.Render(&headingText, reader.Source(), n) if err != nil { return s, err diff --git a/markup/goldmark/toc_integration_test.go b/markup/goldmark/toc_integration_test.go index f58f91f1c..3b48dac6c 100644 --- a/markup/goldmark/toc_integration_test.go +++ b/markup/goldmark/toc_integration_test.go @@ -253,14 +253,12 @@ title: p7 (emoji) `) // strikethrough - // TODO failing test: Issue #8087 - // b.AssertFileContent("public/p6/index.html", ` - // <li><a href="#ome-deleted-text">Some <del>deleted</del> text</a></li> - // `) + b.AssertFileContent("public/p6/index.html", ` +<li><a href="#some-deleted-text">Some <del>deleted</del> text</a></li> +`) // emoji - // TODO failing test: Issue #12022 - // b.AssertFileContent("public/p7/index.html", ` - // <li><a href="#a-snake-emoji">A 🐍 emoji</a></li> - // `) + b.AssertFileContent("public/p7/index.html", ` +<li><a href="#a-snake-emoji">A 🐍 emoji</a></li> +`) } |