summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorAustin Ziegler <austin@zieglers.ca>2014-09-29 10:02:45 -0400
committerspf13 <steve.francia@gmail.com>2014-10-07 16:44:28 -0400
commit603b24a16344b1da485043e8a60b0505ad18cee6 (patch)
tree3e55df6f3a1fe09159c09b30606df540134e153c /hugolib
parente68e7ef96fb7a83319f6d828799524f85c75c5eb (diff)
Make each generated page’s footnotes unique.
If content pages are fully rendered in a list page, footnotes that use the same reference (`[^fn]`) will have duplicated anchors. This change builds on #526 to put the page filename (`Page.File.Name`) as part of the anchor for a footnote. This would fix discussion [116](http://discuss.gohugo.io/t/footnote-references-are-duplicated-on-list-pages/116).
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/page.go38
-rw-r--r--hugolib/shortcode.go2
2 files changed, 21 insertions, 19 deletions
diff --git a/hugolib/page.go b/hugolib/page.go
index 4f2c6c483..165d3992a 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -119,30 +119,30 @@ func bytesToHTML(b []byte) template.HTML {
}
func (p *Page) renderBytes(content []byte) []byte {
- return renderBytes(content, p.guessMarkupType())
+ return renderBytes(content, p.guessMarkupType(), p.File.Name)
}
func (p *Page) renderContent(content []byte) []byte {
- return renderBytesWithTOC(content, p.guessMarkupType())
+ return renderBytesWithTOC(content, p.guessMarkupType(), p.File.Name)
}
-func renderBytesWithTOC(content []byte, pagefmt string) []byte {
+func renderBytesWithTOC(content []byte, pagefmt string, footnoteref string) []byte {
switch pagefmt {
default:
- return markdownRenderWithTOC(content)
+ return markdownRenderWithTOC(content, footnoteref)
case "markdown":
- return markdownRenderWithTOC(content)
+ return markdownRenderWithTOC(content, footnoteref)
case "rst":
return []byte(getRstContent(content))
}
}
-func renderBytes(content []byte, pagefmt string) []byte {
+func renderBytes(content []byte, pagefmt string, footnoteref string) []byte {
switch pagefmt {
default:
- return markdownRender(content)
+ return markdownRender(content, footnoteref)
case "markdown":
- return markdownRender(content)
+ return markdownRender(content, footnoteref)
case "rst":
return []byte(getRstContent(content))
}
@@ -671,23 +671,24 @@ func (page *Page) Convert() error {
return nil
}
-func getHtmlRenderer(withTOC bool) blackfriday.Renderer {
+func getHtmlRenderer(defaultFlags int, footnoteref string) blackfriday.Renderer {
renderParameters := blackfriday.HtmlRendererParameters{
FootnoteAnchorPrefix: viper.GetString("FootnoteAnchorPrefix"),
FootnoteReturnLinkContents: viper.GetString("FootnoteReturnLinkContents"),
}
- htmlFlags := 0
+ if len(footnoteref) != 0 {
+ renderParameters.FootnoteAnchorPrefix = footnoteref + ":" +
+ renderParameters.FootnoteAnchorPrefix
+ }
+
+ htmlFlags := defaultFlags
htmlFlags |= blackfriday.HTML_USE_XHTML
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
htmlFlags |= blackfriday.HTML_FOOTNOTE_RETURN_LINKS
- if withTOC {
- htmlFlags |= blackfriday.HTML_TOC
- }
-
return blackfriday.HtmlRendererWithParameters(htmlFlags, "", "", renderParameters)
}
@@ -699,13 +700,14 @@ func getMarkdownExtensions() int {
blackfriday.EXTENSION_HEADER_IDS
}
-func markdownRender(content []byte) []byte {
- return blackfriday.Markdown(content, getHtmlRenderer(false),
+func markdownRender(content []byte, footnoteref string) []byte {
+ return blackfriday.Markdown(content, getHtmlRenderer(0, footnoteref),
getMarkdownExtensions())
}
-func markdownRenderWithTOC(content []byte) []byte {
- return blackfriday.Markdown(content, getHtmlRenderer(true),
+func markdownRenderWithTOC(content []byte, footnoteref string) []byte {
+ return blackfriday.Markdown(content,
+ getHtmlRenderer(blackfriday.HTML_TOC, footnoteref),
getMarkdownExtensions())
}
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go
index 823426738..9f7a335a0 100644
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -93,7 +93,7 @@ func ShortcodesHandle(stringToParse string, p *Page, t Template) string {
var data = &ShortcodeWithPage{Params: params, Page: p}
if endStart > 0 {
s := stringToParse[leadEnd+3 : leadEnd+endStart]
- data.Inner = template.HTML(renderBytes([]byte(CleanP(ShortcodesHandle(s, p, t))), p.guessMarkupType()))
+ data.Inner = template.HTML(renderBytes([]byte(CleanP(ShortcodesHandle(s, p, t))), p.guessMarkupType(), p.File.Name))
remainder := CleanP(stringToParse[leadEnd+endEnd:])
return CleanP(stringToParse[:leadStart]) +