shithub: hugo

Download patch

ref: 266f583a8cf08c8c7788cf3ba7328e19bf406dc3
parent: dcfcbac58997f3a329fed636d8fbc5aede42ffcf
author: spf13 <[email protected]>
date: Fri Oct 4 08:28:28 EDT 2013

Restoring former snippet behavior & adding test to ensure future behavior

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -76,15 +76,30 @@
 func (p Pages) Sort()             { sort.Sort(p) }
 func (p Pages) Limit(n int) Pages { return p[0:n] }
 
-func getSummaryString(content []byte) ([]byte, bool) {
+func getSummaryString(content []byte, fmt string) []byte {
 	if bytes.Contains(content, summaryDivider) {
-		return bytes.Split(content, summaryDivider)[0], false
+		// If user defines split:
+		// Split then render
+		return renderBytes(bytes.Split(content, summaryDivider)[0], fmt)
 	} else {
-		plainContent := StripHTML(StripShortcodes(string(content)))
-		return []byte(TruncateWordsToWholeSentence(plainContent, summaryLength)), true
+		// If hugo defines split:
+		// render, strip html, then split
+		plainContent := StripHTML(StripShortcodes(string(renderBytes(content, fmt))))
+		return []byte(TruncateWordsToWholeSentence(plainContent, summaryLength))
 	}
 }
 
+func renderBytes(content []byte, fmt string) []byte {
+	switch fmt {
+	default:
+		return blackfriday.MarkdownCommon(content)
+	case "markdown":
+		return blackfriday.MarkdownCommon(content)
+	case "rst":
+		return []byte(getRstContent(content))
+	}
+}
+
 // TODO abstract further to support loading from more
 // than just files on disk. Should load reader (file, []byte)
 func newPage(filename string) *Page {
@@ -424,12 +439,8 @@
 	b.ReadFrom(lines)
 	content := b.Bytes()
 	page.Content = template.HTML(string(blackfriday.MarkdownCommon(RemoveSummaryDivider(content))))
-	summary, plain := getSummaryString(content)
-	if plain {
-		page.Summary = template.HTML(string(summary))
-	} else {
-		page.Summary = template.HTML(string(blackfriday.MarkdownCommon(summary)))
-	}
+	summary := getSummaryString(content, "markdown")
+	page.Summary = template.HTML(string(summary))
 }
 
 func (page *Page) convertRestructuredText(lines io.Reader) {
@@ -437,12 +448,8 @@
 	b.ReadFrom(lines)
 	content := b.Bytes()
 	page.Content = template.HTML(getRstContent(content))
-	summary, plain := getSummaryString(content)
-	if plain {
-		page.Summary = template.HTML(string(summary))
-	} else {
-		page.Summary = template.HTML(getRstContent(summary))
-	}
+	summary := getSummaryString(content, "rst")
+	page.Summary = template.HTML(string(summary))
 }
 
 func (p *Page) TargetPath() (outfile string) {
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -111,7 +111,15 @@
 <!--more-->
 Some more text
 `
+	SIMPLE_PAGE_WITH_SHORTCODE_IN_SUMMARY = `---
+title: Simple
+---
+Summary Next Line. {{% img src="/not/real" %}}.
+More text here.
 
+Some more text
+`
+
 	SIMPLE_PAGE_WITH_SUMMARY_DELIMITER_SAME_LINE = `---
 title: Simple
 ---
@@ -206,7 +214,18 @@
 	checkPageSummary(t, p, "<p>Summary Next Line</p>\n")
 	checkPageType(t, p, "page")
 	checkPageLayout(t, p, "page/single.html")
+}
 
+func TestPageWithShortCodeInSummary(t *testing.T) {
+	p, err := ReadFrom(strings.NewReader(SIMPLE_PAGE_WITH_SHORTCODE_IN_SUMMARY), "simple.md")
+	if err != nil {
+		t.Fatalf("Unable to create a page with frontmatter and body content: %s", err)
+	}
+	checkPageTitle(t, p, "Simple")
+	checkPageContent(t, p, "<p>Summary Next Line. {{% img src=&ldquo;/not/real&rdquo; %}}.\nMore text here.</p>\n\n<p>Some more text</p>\n")
+	checkPageSummary(t, p, "Summary Next Line. . More text here. Some more text")
+	checkPageType(t, p, "page")
+	checkPageLayout(t, p, "page/single.html")
 }
 
 func TestPageWithMoreTag(t *testing.T) {