diff options
Diffstat (limited to 'helpers/content_renderer.go')
-rw-r--r-- | helpers/content_renderer.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/helpers/content_renderer.go b/helpers/content_renderer.go index 00997900d..81386e03b 100644 --- a/helpers/content_renderer.go +++ b/helpers/content_renderer.go @@ -19,12 +19,18 @@ import ( "github.com/miekg/mmark" "github.com/russross/blackfriday" + jww "github.com/spf13/jwalterweatherman" "github.com/spf13/viper" ) +type LinkResolverFunc func(ref string) (string, error) +type FileResolverFunc func(ref string) (string, error) + // Wraps a blackfriday.Renderer, typically a blackfriday.Html // Enabling Hugo to customise the rendering experience type HugoHtmlRenderer struct { + FileResolver FileResolverFunc + LinkResolver LinkResolverFunc blackfriday.Renderer } @@ -38,6 +44,33 @@ func (renderer *HugoHtmlRenderer) BlockCode(out *bytes.Buffer, text []byte, lang } } +func (renderer *HugoHtmlRenderer) Link(out *bytes.Buffer, link []byte, title []byte, content []byte) { + if renderer.LinkResolver == nil || bytes.HasPrefix(link, []byte("{@{@HUGOSHORTCODE")) { + // Use the blackfriday built in Link handler + renderer.Renderer.Link(out, link, title, content) + } else { + newLink, err := renderer.LinkResolver(string(link)) + if err != nil { + newLink = string(link) + jww.ERROR.Printf("LinkResolver: %s", err) + } + renderer.Renderer.Link(out, []byte(newLink), title, content) + } +} +func (renderer *HugoHtmlRenderer) Image(out *bytes.Buffer, link []byte, title []byte, alt []byte) { + if renderer.FileResolver == nil || bytes.HasPrefix(link, []byte("{@{@HUGOSHORTCODE")) { + // Use the blackfriday built in Image handler + renderer.Renderer.Image(out, link, title, alt) + } else { + newLink, err := renderer.FileResolver(string(link)) + if err != nil { + newLink = string(link) + jww.ERROR.Printf("FileResolver: %s", err) + } + renderer.Renderer.Image(out, []byte(newLink), title, alt) + } +} + // Wraps a mmark.Renderer, typically a mmark.html // Enabling Hugo to customise the rendering experience type HugoMmarkHtmlRenderer struct { |