diff options
author | Sven Dowideit <SvenDowideit@home.org.au> | 2015-09-09 10:03:38 +1000 |
---|---|---|
committer | Steve Francia <steve.francia@gmail.com> | 2016-01-01 15:23:11 -0500 |
commit | 0f6b334b6715253b030c4e783b88e911b6e53e56 (patch) | |
tree | f1b4bdfdc25f28531d84819a21407e1695096964 /helpers/content_renderer.go | |
parent | b78f13b0414fd5006237c0e7cdaa0f8cc8034bff (diff) |
Source file based relative linking
ala GitHub repository markdown for both md files and non-md files
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
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 { |