Fix render hook's PlainText with typographer extension enabled
Fixes #13286 Fixes #13292
This commit is contained in:
parent
9885e7020d
commit
6aa72acaf9
2 changed files with 39 additions and 1 deletions
|
@ -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
|
||||
|
||||

|
||||
|
||||
|
||||
-- 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 > than B’s\">",
|
||||
)
|
||||
}
|
||||
|
||||
// Issue #7332
|
||||
// Issue #11587
|
||||
func TestGoldmarkEmojiExtension(t *testing.T) {
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue