Restoring former snippet behavior & adding test to ensure future behavior
authorspf13 <steve.francia@gmail.com>
Fri, 4 Oct 2013 16:28:28 +0000 (12:28 -0400)
committerspf13 <steve.francia@gmail.com>
Fri, 4 Oct 2013 16:28:28 +0000 (12:28 -0400)
hugolib/page.go
hugolib/page_test.go

index 7bb51ebb08c874f33ea9e2827ecf858c7c728f63..e9a7d6daf423191ad12e5a886a20d462d92ab443 100644 (file)
@@ -76,12 +76,27 @@ func (p Pages) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
 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))
        }
 }
 
@@ -424,12 +439,8 @@ func (page *Page) convertMarkdown(lines io.Reader) {
        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 @@ func (page *Page) convertRestructuredText(lines io.Reader) {
        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) {
index bf5e97352e85484c4fa0ee3a9f70d913a06f0de0..33da04e5de7cc34d7adcf04cdca105ef37c973c5 100644 (file)
@@ -109,6 +109,14 @@ title: Simple
 Summary Next Line
 
 <!--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
 `
 
@@ -206,7 +214,18 @@ func TestPageWithDelimiter(t *testing.T) {
        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) {