diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-12-19 17:43:07 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-12-19 19:02:03 +0100 |
commit | a67d95fe1a033ca4934957b5a98b12ecc8a9edbd (patch) | |
tree | 093f017a698e74adfc3acdd68c3feb1c2d146adc | |
parent | ad6504e6b504277bbc7b60d093cdccd4f3baaa4f (diff) |
Preserve HTML Text for image render hooks
Fixes #6639
-rw-r--r-- | hugolib/content_render_hooks_test.go | 18 | ||||
-rw-r--r-- | markup/goldmark/render_link.go | 15 |
2 files changed, 27 insertions, 6 deletions
diff --git a/hugolib/content_render_hooks_test.go b/hugolib/content_render_hooks_test.go index deccbff48..d206013ba 100644 --- a/hugolib/content_render_hooks_test.go +++ b/hugolib/content_render_hooks_test.go @@ -217,6 +217,16 @@ P3: <p>P3. xml-link: https://www.example.org|</p> func TestRenderLinkWithMarkupInText(t *testing.T) { b := newTestSitesBuilder(t) + b.WithConfigFile("toml", ` + +baseURL="https://example.org" + +[markup] + [markup.goldmark] + [markup.goldmark.renderer] + unsafe = true + +`) b.WithTemplates("index.html", ` {{ $p := site.GetPage "p1.md" }} @@ -224,6 +234,7 @@ P1: {{ $p.Content }} `, "_default/_markup/render-link.html", `html-link: {{ .Destination | safeURL }}|Text: {{ .Text | safeHTML }}|Plain: {{ .PlainText | safeHTML }}`, + "_default/_markup/render-image.html", `html-image: {{ .Destination | safeURL }}|Text: {{ .Text | safeHTML }}|Plain: {{ .PlainText | safeHTML }}`, ) b.WithContent("p1.md", `--- @@ -233,6 +244,11 @@ title: "p1" START: [**should be bold**](https://gohugo.io)END Some regular **markup**. + +Image: + +![Hello<br> Goodbye](image.jpg)END + `) b.Build(BuildCfg{}) @@ -240,6 +256,7 @@ Some regular **markup**. b.AssertFileContent("public/index.html", ` P1: <p>START: html-link: https://gohugo.io|Text: <strong>should be bold</strong>|Plain: should be boldEND</p> <p>Some regular <strong>markup</strong>.</p> +<p>html-image: image.jpg|Text: Hello<br> Goodbye|Plain: Hello GoodbyeEND</p> `) } @@ -256,6 +273,7 @@ RSTART:{{ "**Bold Markdown**" | $p.RenderString }}:REND RSTART:{{ "**Bold Block Markdown**" | $p.RenderString $optBlock }}:REND RSTART:{{ "/italic org mode/" | $p.RenderString $optOrg }}:REND + `) b.WithContent("p1.md", `--- diff --git a/markup/goldmark/render_link.go b/markup/goldmark/render_link.go index cefb786a6..c0269bedf 100644 --- a/markup/goldmark/render_link.go +++ b/markup/goldmark/render_link.go @@ -137,7 +137,7 @@ func (r *linkRenderer) renderImage(w util.BufWriter, source []byte, node ast.Nod n := node.(*ast.Image) var h *hooks.Render - ctx, ok := w.(renderContextData) + ctx, ok := w.(*renderContext) if ok { h = ctx.RenderContext().RenderHooks ok = h != nil && h.ImageRenderer != nil @@ -147,11 +147,14 @@ func (r *linkRenderer) renderImage(w util.BufWriter, source []byte, node ast.Nod return r.renderDefaultImage(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 := string(n.Text(source)) + text := ctx.Buffer.Bytes()[ctx.pos:] + ctx.Buffer.Truncate(ctx.pos) err := h.ImageRenderer.Render( w, @@ -159,14 +162,14 @@ func (r *linkRenderer) renderImage(w util.BufWriter, source []byte, node ast.Nod page: ctx.DocumentContext().Document, destination: string(n.Destination), title: string(n.Title), - text: text, - plainText: text, + text: string(text), + plainText: string(n.Text(source)), }, ) ctx.AddIdentity(h.ImageRenderer.GetIdentity()) - return ast.WalkSkipChildren, err + return ast.WalkContinue, err } |