shithub: hugo

Download patch

ref: be1429fa88a5d872b568bf89cdc4ab4745a9f69b
parent: be6696c34b1ac262eccb90ab8785128cc4065444
author: bep <[email protected]>
date: Sun Mar 29 18:27:14 EDT 2015

Fix shortcode handling in ToC

Fixes #1010

--- a/hugolib/handler_page.go
+++ b/hugolib/handler_page.go
@@ -60,13 +60,14 @@
 	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 @@
 	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 @@
 	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)
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -434,6 +434,20 @@
 
 }
 
+// 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) {