summaryrefslogtreecommitdiffstats
path: root/helpers/content_renderer.go
diff options
context:
space:
mode:
authorSven Dowideit <SvenDowideit@home.org.au>2015-09-09 10:03:38 +1000
committerSteve Francia <steve.francia@gmail.com>2016-01-01 15:23:11 -0500
commit0f6b334b6715253b030c4e783b88e911b6e53e56 (patch)
treef1b4bdfdc25f28531d84819a21407e1695096964 /helpers/content_renderer.go
parentb78f13b0414fd5006237c0e7cdaa0f8cc8034bff (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.go33
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 {