shithub: hugo

Download patch

ref: 0a7d1d0ddc213628fcde7c0e24991246836d9f16
parent: d18a8cbe15ad0d52fe8cd720906ef108a56d24bf
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Aug 7 19:34:04 EDT 2016

Fix some corner cases in revised summary handling

And clean up the test.

See #2309

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -246,6 +246,7 @@
 }
 
 func splitUserDefinedSummaryAndContent(markup string, c []byte) *summaryContent {
+	c = bytes.TrimSpace(c)
 	startDivider := bytes.Index(c, internalSummaryDivider)
 
 	if startDivider == -1 {
@@ -276,7 +277,6 @@
 	}
 
 	// Find the closest end/start markup string to the divider
-	//firstStart := bytes.Index(c[:startDivider], startMarkup)
 	fromIdx := bytes.LastIndex(c[:startDivider], startMarkup)
 	fromStart := startDivider - fromIdx - len(startMarkup)
 	fromEnd := bytes.Index(c[endDivider:], endMarkup)
@@ -283,13 +283,21 @@
 
 	if fromEnd != -1 && fromEnd <= fromStart {
 		endSummary = startDivider + fromEnd + len(endMarkup)
-	} else if fromStart != -1 {
+	} else if fromStart != -1 && fromEnd != -1 {
 		endSummary = startDivider - fromStart - len(startMarkup)
 	}
 
 	withoutDivider := bytes.TrimSpace(append(c[:startDivider], c[endDivider:]...))
-	contentWithoutSummary := bytes.TrimSpace(withoutDivider[endSummary:])
-	summary := bytes.TrimSpace(withoutDivider[:endSummary])
+
+	var (
+		contentWithoutSummary []byte
+		summary               []byte
+	)
+
+	if len(withoutDivider) > 0 {
+		contentWithoutSummary = bytes.TrimSpace(withoutDivider[endSummary:])
+		summary = bytes.TrimSpace(withoutDivider[:endSummary])
+	}
 
 	if addDiv {
 		// For the rst
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -655,6 +655,11 @@
 		{"markdown", "<p>a</p><p>b</p><p>cHUGOMORE42</p>", "<p>a</p><p>b</p><p>c</p>", "<p>a</p><p>b</p><p>c</p>", ""},
 		{"markdown", "<p>a</p><p>bHUGOMORE42</p><p>c</p>", "<p>a</p><p>b</p>", "<p>a</p><p>b</p><p>c</p>", "<p>c</p>"},
 		{"markdown", "<p>aHUGOMORE42</p><p>b</p><p>c</p>", "<p>a</p>", "<p>a</p><p>b</p><p>c</p>", "<p>b</p><p>c</p>"},
+		{"markdown", "  HUGOMORE42 ", "", "", ""},
+		{"markdown", "HUGOMORE42", "", "", ""},
+		{"markdown", "<p>HUGOMORE42", "<p>", "<p>", ""},
+		{"markdown", "HUGOMORE42<p>", "", "<p>", "<p>"},
+		{"markdown", "\n\n<p>HUGOMORE42</p>\n", "<p></p>", "<p></p>", ""},
 	} {
 
 		sc := splitUserDefinedSummaryAndContent(this.markup, []byte(this.content))
@@ -664,34 +669,6 @@
 		require.Equal(t, this.expectedContent, string(sc.content), fmt.Sprintf("[%d] Content markup %s", i, this.markup))
 		require.Equal(t, this.expectedContentWithoutSummary, string(sc.contentWithoutSummary), fmt.Sprintf("[%d] Content without summary, markup %s", i, this.markup))
 	}
-
-	if true {
-		return
-	}
-
-	ad := `<div class="paragraph"><p>sn</p></div>
-<div class="paragraph">
-<p>HUGOMORE42 
-Some more text</p>
-</div>
-`
-
-	md := `<p>Summary Same LineHUGOMORE42</p>
-
-<p>Some more text</p>`
-
-	sc := splitUserDefinedSummaryAndContent("markdown", []byte(md))
-
-	require.Equal(t, "adf", string(sc.summary))
-	require.Equal(t, "asdf", string(sc.content))
-
-	if true {
-		return
-	}
-	sc = splitUserDefinedSummaryAndContent("asciidoc", []byte(ad))
-	require.Equal(t, "<div class=\"paragraph\"><p>sn</p></div>", string(sc.summary))
-	require.Equal(t, "\n<div class=\"paragraph\">\n<p> \nSome more text</p>\n</div>\n", string(sc.summary))
-
 }
 
 func TestPageWithDelimiter(t *testing.T) {