Skip to content

Commit

Permalink
Fix render hook's PlainText with typographer extension enabled
Browse files Browse the repository at this point in the history
Fixes #13286
Fixes #13292
  • Loading branch information
bep committed Jan 22, 2025
1 parent 9885e70 commit 6aa72ac
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
33 changes: 33 additions & 0 deletions markup/goldmark/goldmark_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,39 @@ a <!-- b --> c
)
}

// Issue 13286
func TestImageAltApostrophesWithTypographer(t *testing.T) {
t.Parallel()

files := `
-- hugo.toml --
[markup.goldmark.extensions.typographer]
disable = false
[markup.goldmark.renderHooks.image]
enableDefault = true
-- content/p1.md --
---
title: "p1"
---
## Image
![A's is > than B's](some-image.png)
-- layouts/_default/single.html --
{{ .Content }}
`

b := hugolib.Test(t, files)

b.AssertFileContentExact("public/p1/index.html",
// Note that this markup is slightly different than the one produced by the default Goldmark renderer,
// see issue 13292.
"alt=\"A’s is &gt; than B’s\">",
)
}

// Issue #7332
// Issue #11587
func TestGoldmarkEmojiExtension(t *testing.T) {
Expand Down
7 changes: 6 additions & 1 deletion markup/goldmark/internal/render/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/gohugoio/hugo/markup/converter"
"github.com/gohugoio/hugo/markup/converter/hooks"
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/util"
)

type BufWriter struct {
Expand Down Expand Up @@ -264,6 +265,8 @@ func (c *hookBase) PositionerSourceTarget() []byte {
}

// TextPlain returns a plain text representation of the given node.
// This will resolve any lefover HTML entities. This will typically be
// entities inserted by e.g. the typographer extension.
// Goldmark's Node.Text was deprecated in 1.7.8.
func TextPlain(n ast.Node, source []byte) string {
buf := bp.GetBuffer()
Expand All @@ -272,7 +275,7 @@ func TextPlain(n ast.Node, source []byte) string {
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
textPlainTo(c, source, buf)
}
return buf.String()
return string(util.ResolveEntityNames(buf.Bytes()))
}

func textPlainTo(c ast.Node, source []byte, buf *bytes.Buffer) {
Expand All @@ -283,6 +286,8 @@ func textPlainTo(c ast.Node, source []byte, buf *bytes.Buffer) {
case *ast.RawHTML:
s := strings.TrimSpace(tpl.StripHTML(string(c.Segments.Value(source))))
buf.WriteString(s)
case *ast.String:
buf.Write(c.Value)
case *ast.Text:
buf.Write(c.Segment.Value(source))
default:
Expand Down

0 comments on commit 6aa72ac

Please sign in to comment.