Fix shortcode handling in ToC
authorbep <bjorn.erik.pedersen@gmail.com>
Sun, 29 Mar 2015 20:27:14 +0000 (22:27 +0200)
committerbep <bjorn.erik.pedersen@gmail.com>
Sun, 29 Mar 2015 20:27:21 +0000 (22:27 +0200)
Fixes #1010

hugolib/handler_page.go
hugolib/shortcode.go

index ed254dcdd628856a14fac6a4b7bbc598235b2f61..31415f78b79f8f5031ee4af69cbf535a1df6aae6 100644 (file)
@@ -60,13 +60,14 @@ func (h markdownHandler) PageConvert(p *Page, t tpl.Template) HandledResult {
        tmpContent, tmpTableOfContents := helpers.ExtractTOC(p.renderContent(helpers.RemoveSummaryDivider(p.rawContent)))
 
        if len(p.contentShortCodes) > 0 {
-               tmpContentWithTokensReplaced, err := replaceShortcodeTokens(tmpContent, shortcodePlaceholderPrefix, true, p.contentShortCodes)
-
+               replaced, err := replaceShortcodeTokensInsources(shortcodePlaceholderPrefix, true, p.contentShortCodes,
+                       tmpContent, tmpTableOfContents)
                if err != nil {
-                       jww.FATAL.Printf("Fail to replace short code tokens in %s:\n%s", p.BaseFileName(), err.Error())
+                       jww.FATAL.Printf("Fail to replace shortcode tokens in %s:\n%s", p.BaseFileName(), err.Error())
                        return HandledResult{err: err}
                }
-               tmpContent = tmpContentWithTokensReplaced
+               tmpContent = replaced[0]
+               tmpTableOfContents = replaced[1]
        }
 
        p.Content = helpers.BytesToHTML(tmpContent)
@@ -99,14 +100,14 @@ func (h asciidocHandler) PageConvert(p *Page, t tpl.Template) HandledResult {
        tmpContent, tmpTableOfContents := helpers.ExtractTOC(p.renderContent(helpers.RemoveSummaryDivider(p.rawContent)))
 
        if len(p.contentShortCodes) > 0 {
-               tmpContentWithTokensReplaced, err := replaceShortcodeTokens(tmpContent, shortcodePlaceholderPrefix, true, p.contentShortCodes)
-
+               replaced, err := replaceShortcodeTokensInsources(shortcodePlaceholderPrefix, true, p.contentShortCodes,
+                       tmpContent, tmpTableOfContents)
                if err != nil {
-                       jww.FATAL.Printf("Fail to replace short code tokens in %s:\n%s", p.BaseFileName(), err.Error())
+                       jww.FATAL.Printf("Fail to replace shortcode tokens in %s:\n%s", p.BaseFileName(), err.Error())
                        return HandledResult{err: err}
-               } else {
-                       tmpContent = tmpContentWithTokensReplaced
                }
+               tmpContent = replaced[0]
+               tmpTableOfContents = replaced[1]
        }
 
        p.Content = helpers.BytesToHTML(tmpContent)
@@ -127,13 +128,14 @@ func (h rstHandler) PageConvert(p *Page, t tpl.Template) HandledResult {
        tmpContent, tmpTableOfContents := helpers.ExtractTOC(p.renderContent(helpers.RemoveSummaryDivider(p.rawContent)))
 
        if len(p.contentShortCodes) > 0 {
-               tmpContentWithTokensReplaced, err := replaceShortcodeTokens(tmpContent, shortcodePlaceholderPrefix, true, p.contentShortCodes)
-
+               replaced, err := replaceShortcodeTokensInsources(shortcodePlaceholderPrefix, true, p.contentShortCodes,
+                       tmpContent, tmpTableOfContents)
                if err != nil {
-                       jww.FATAL.Printf("Fail to replace short code tokens in %s:\n%s", p.BaseFileName(), err.Error())
+                       jww.FATAL.Printf("Fail to replace shortcode tokens in %s:\n%s", p.BaseFileName(), err.Error())
                        return HandledResult{err: err}
                }
-               tmpContent = tmpContentWithTokensReplaced
+               tmpContent = replaced[0]
+               tmpTableOfContents = replaced[1]
        }
 
        p.Content = helpers.BytesToHTML(tmpContent)
index f1db1dc19a2025ee74e950cbcdadc95884be4e8d..c4eec974dde877c433e178a2456013f22d8c00f6 100644 (file)
@@ -434,6 +434,20 @@ Loop:
 
 }
 
+// replaceShortcodeTokensInsources calls replaceShortcodeTokens for every source given.
+func replaceShortcodeTokensInsources(prefix string, wrapped bool, replacements map[string]string, sources ...[]byte) (b [][]byte, err error) {
+       result := make([][]byte, len(sources))
+       for i, s := range sources {
+               b, err := replaceShortcodeTokens(s, prefix, wrapped, replacements)
+
+               if err != nil {
+                       return nil, err
+               }
+               result[i] = b
+       }
+       return result, nil
+}
+
 // Replace prefixed shortcode tokens (HUGOSHORTCODE-1, HUGOSHORTCODE-2) with the real content.
 // wrapped = true means that the token has been wrapped in {@{@/@}@}
 func replaceShortcodeTokens(source []byte, prefix string, wrapped bool, replacements map[string]string) (b []byte, err error) {