diff options
Diffstat (limited to 'markup/goldmark/render_link.go')
-rw-r--r-- | markup/goldmark/render_link.go | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/markup/goldmark/render_link.go b/markup/goldmark/render_link.go index 17ba5bada..cefb786a6 100644 --- a/markup/goldmark/render_link.go +++ b/markup/goldmark/render_link.go @@ -43,6 +43,7 @@ type linkContext struct { destination string title string text string + plainText string } func (ctx linkContext) Destination() string { @@ -61,6 +62,10 @@ func (ctx linkContext) Text() string { return ctx.text } +func (ctx linkContext) PlainText() string { + return ctx.plainText +} + func (ctx linkContext) Title() string { return ctx.title } @@ -146,13 +151,16 @@ func (r *linkRenderer) renderImage(w util.BufWriter, source []byte, node ast.Nod return ast.WalkContinue, nil } + text := string(n.Text(source)) + err := h.ImageRenderer.Render( w, linkContext{ page: ctx.DocumentContext().Document, destination: string(n.Destination), title: string(n.Title), - text: string(n.Text(source)), + text: text, + plainText: text, }, ) @@ -166,7 +174,7 @@ func (r *linkRenderer) renderLink(w util.BufWriter, source []byte, node ast.Node n := node.(*ast.Link) var h *hooks.Render - ctx, ok := w.(renderContextData) + ctx, ok := w.(*renderContext) if ok { h = ctx.RenderContext().RenderHooks ok = h != nil && h.LinkRenderer != nil @@ -176,24 +184,29 @@ func (r *linkRenderer) renderLink(w util.BufWriter, source []byte, node ast.Node return r.renderDefaultLink(w, source, node, entering) } - if !entering { + if entering { + // Store the current pos so we can capture the rendered text. + ctx.pos = ctx.Buffer.Len() return ast.WalkContinue, nil } + text := ctx.Buffer.Bytes()[ctx.pos:] + ctx.Buffer.Truncate(ctx.pos) + err := h.LinkRenderer.Render( w, linkContext{ page: ctx.DocumentContext().Document, destination: string(n.Destination), title: string(n.Title), - text: string(n.Text(source)), + text: string(text), + plainText: string(n.Text(source)), }, ) ctx.AddIdentity(h.LinkRenderer.GetIdentity()) - // Do not render the inner text. - return ast.WalkSkipChildren, err + return ast.WalkContinue, err } |