From 134e7d1d3d1ca901a274c56ef720c9c48be56b77 Mon Sep 17 00:00:00 2001 From: Jonas Zeiger Date: Wed, 6 Dec 2023 00:29:03 +0100 Subject: [PATCH] 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 --- markup/goldmark/convert.go | 16 +++++++++++++--- markup/goldmark/toc.go | 8 +++++++- 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", ` - //
  • Some deleted text
  • - // `) + b.AssertFileContent("public/p6/index.html", ` +
  • Some deleted text
  • +`) // emoji - // TODO failing test: Issue #12022 - // b.AssertFileContent("public/p7/index.html", ` - //
  • A 🐍 emoji
  • - // `) + b.AssertFileContent("public/p7/index.html", ` +
  • A 🐍 emoji
  • +`) }