From be5ace1588e54c2b0081d7c8ad57795b67307cde Mon Sep 17 00:00:00 2001 From: spf13 Date: Tue, 15 Oct 2013 09:15:52 -0400 Subject: [PATCH] Wordcount restored. fixed #92 --- hugolib/page.go | 15 +++++++++++---- hugolib/page_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/hugolib/page.go b/hugolib/page.go index 6734dcccd..8e05ba8f9 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -38,7 +38,7 @@ type Page struct { Images []string Content template.HTML Summary template.HTML - RawMarkdown string // TODO should be []byte + plain string // TODO should be []byte Params map[string]interface{} contentType string Draft bool @@ -77,6 +77,13 @@ 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 (p Page) Plain() string { + if len(p.plain) == 0 { + p.plain = StripHTML(StripShortcodes(string(p.Content))) + } + return p.plain +} + func getSummaryString(content []byte, fmt string) []byte { if bytes.Contains(content, summaryDivider) { // If user defines split: @@ -85,8 +92,8 @@ func getSummaryString(content []byte, fmt string) []byte { } else { // If hugo defines split: // render, strip html, then split - plainContent := StripHTML(StripShortcodes(string(renderBytes(content, fmt)))) - return []byte(TruncateWordsToWholeSentence(plainContent, summaryLength)) + plain := StripHTML(StripShortcodes(string(renderBytes(content, fmt)))) + return []byte(TruncateWordsToWholeSentence(plain, summaryLength)) } } @@ -217,7 +224,7 @@ func ReadFrom(buf io.Reader, name string) (page *Page, err error) { } func (p *Page) analyzePage() { - p.WordCount = TotalWords(p.RawMarkdown) + p.WordCount = TotalWords(p.Plain()) p.FuzzyWordCount = int((p.WordCount+100)/100) * 100 } diff --git a/hugolib/page_test.go b/hugolib/page_test.go index 4832cc4f3..b0b844c8d 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -126,6 +126,18 @@ title: Simple Summary Same Line Some more text +` + + SIMPLE_PAGE_WITH_LONG_CONTENT = `--- +title: Simple +--- +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ` ) @@ -252,6 +264,21 @@ func TestPageWithDate(t *testing.T) { checkPageDate(t, p, d) } +func TestWordCount(t *testing.T) { + p, err := ReadFrom(strings.NewReader(SIMPLE_PAGE_WITH_LONG_CONTENT), "simple") + if err != nil { + t.Fatalf("Unable to create a page with frontmatter and body content: %s", err) + } + + if p.WordCount != 483 { + t.Fatalf("incorrect word count. expected %v, got %v", 483, p.WordCount) + } + + if p.FuzzyWordCount != 500 { + t.Fatalf("incorrect word count. expected %v, got %v", 500, p.WordCount) + } +} + func TestCreatePage(t *testing.T) { var tests = []struct { r string