mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-13 20:24:00 +02:00
markup/goldmark: Fix mangling of headers/links in render hooks
```bash name old time/op new time/op delta SiteWithRenderHooks-10 11.9ms ± 1% 11.9ms ± 1% ~ (p=0.486 n=4+4) name old alloc/op new alloc/op delta SiteWithRenderHooks-10 11.2MB ± 0% 11.3MB ± 0% +0.16% (p=0.029 n=4+4) name old allocs/op new allocs/op delta SiteWithRenderHooks-10 145k ± 0% 145k ± 0% +0.14% (p=0.029 n=4+4) ``` Fixes #9504
This commit is contained in:
@@ -144,16 +144,13 @@ func (r *hookedRenderer) renderAttributesForNode(w util.BufWriter, node ast.Node
|
||||
renderAttributes(w, false, node.Attributes()...)
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
// Attributes with special meaning that does not make sense to render in HTML.
|
||||
attributeExcludes = map[string]bool{
|
||||
"hl_lines": true,
|
||||
"hl_style": true,
|
||||
"linenos": true,
|
||||
"linenostart": true,
|
||||
}
|
||||
)
|
||||
// Attributes with special meaning that does not make sense to render in HTML.
|
||||
var attributeExcludes = map[string]bool{
|
||||
"hl_lines": true,
|
||||
"hl_style": true,
|
||||
"linenos": true,
|
||||
"linenostart": true,
|
||||
}
|
||||
|
||||
func renderAttributes(w util.BufWriter, skipClass bool, attributes ...ast.Attribute) {
|
||||
for _, attr := range attributes {
|
||||
@@ -197,12 +194,13 @@ func (r *hookedRenderer) renderImage(w util.BufWriter, source []byte, node ast.N
|
||||
|
||||
if entering {
|
||||
// Store the current pos so we can capture the rendered text.
|
||||
ctx.pos = ctx.Buffer.Len()
|
||||
ctx.pushPos(ctx.Buffer.Len())
|
||||
return ast.WalkContinue, nil
|
||||
}
|
||||
|
||||
text := ctx.Buffer.Bytes()[ctx.pos:]
|
||||
ctx.Buffer.Truncate(ctx.pos)
|
||||
pos := ctx.popPos()
|
||||
text := ctx.Buffer.Bytes()[pos:]
|
||||
ctx.Buffer.Truncate(pos)
|
||||
|
||||
err := h.ImageRenderer.RenderLink(
|
||||
w,
|
||||
@@ -263,12 +261,13 @@ func (r *hookedRenderer) renderLink(w util.BufWriter, source []byte, node ast.No
|
||||
|
||||
if entering {
|
||||
// Store the current pos so we can capture the rendered text.
|
||||
ctx.pos = ctx.Buffer.Len()
|
||||
ctx.pushPos(ctx.Buffer.Len())
|
||||
return ast.WalkContinue, nil
|
||||
}
|
||||
|
||||
text := ctx.Buffer.Bytes()[ctx.pos:]
|
||||
ctx.Buffer.Truncate(ctx.pos)
|
||||
pos := ctx.popPos()
|
||||
text := ctx.Buffer.Bytes()[pos:]
|
||||
ctx.Buffer.Truncate(pos)
|
||||
|
||||
err := h.LinkRenderer.RenderLink(
|
||||
w,
|
||||
@@ -395,12 +394,13 @@ func (r *hookedRenderer) renderHeading(w util.BufWriter, source []byte, node ast
|
||||
|
||||
if entering {
|
||||
// Store the current pos so we can capture the rendered text.
|
||||
ctx.pos = ctx.Buffer.Len()
|
||||
ctx.pushPos(ctx.Buffer.Len())
|
||||
return ast.WalkContinue, nil
|
||||
}
|
||||
|
||||
text := ctx.Buffer.Bytes()[ctx.pos:]
|
||||
ctx.Buffer.Truncate(ctx.pos)
|
||||
pos := ctx.popPos()
|
||||
text := ctx.Buffer.Bytes()[pos:]
|
||||
ctx.Buffer.Truncate(pos)
|
||||
// All ast.Heading nodes are guaranteed to have an attribute called "id"
|
||||
// that is an array of bytes that encode a valid string.
|
||||
anchori, _ := n.AttributeString("id")
|
||||
@@ -440,8 +440,7 @@ func (r *hookedRenderer) renderHeadingDefault(w util.BufWriter, source []byte, n
|
||||
return ast.WalkContinue, nil
|
||||
}
|
||||
|
||||
type links struct {
|
||||
}
|
||||
type links struct{}
|
||||
|
||||
// Extend implements goldmark.Extender.
|
||||
func (e *links) Extend(m goldmark.Markdown) {
|
||||
|
Reference in New Issue
Block a user