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:
Bjørn Erik Pedersen
2022-02-16 13:44:09 +01:00
parent 77c7059ff8
commit b2a827c52c
3 changed files with 69 additions and 24 deletions

View File

@@ -47,8 +47,7 @@ import (
// Provider is the package entry point.
var Provider converter.ProviderProvider = provide{}
type provide struct {
}
type provide struct{}
func (p provide) New(cfg converter.ProviderConfig) (converter.Provider, error) {
md := newMarkdown(cfg)
@@ -199,10 +198,21 @@ func (b *bufWriter) Flush() error {
type renderContext struct {
*bufWriter
pos int
positions []int
renderContextData
}
func (ctx *renderContext) pushPos(n int) {
ctx.positions = append(ctx.positions, n)
}
func (ctx *renderContext) popPos() int {
i := len(ctx.positions) - 1
p := ctx.positions[i]
ctx.positions = ctx.positions[:i]
return p
}
type renderContextData interface {
RenderContext() converter.RenderContext
DocumentContext() converter.DocumentContext