URI: 
       Fix render hook's PlainText with typographer extension enabled - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 6aa72acaf95723bef83051c4fceb1f326a9a5fab
   DIR parent 9885e7020d75bb69f5ce67a766571bd0c4b119f5
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Tue, 21 Jan 2025 10:57:06 +0100
       
       Fix render hook's PlainText with typographer extension enabled
       
       Fixes #13286
       Fixes #13292
       
       Diffstat:
         M markup/goldmark/goldmark_integrati… |      33 +++++++++++++++++++++++++++++++
         M markup/goldmark/internal/render/co… |       7 ++++++-
       
       2 files changed, 39 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/markup/goldmark/goldmark_integration_test.go b/markup/goldmark/goldmark_integration_test.go
       @@ -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) {
   DIR diff --git a/markup/goldmark/internal/render/context.go b/markup/goldmark/internal/render/context.go
       @@ -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 {
       @@ -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()
       @@ -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) {
       @@ -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: