hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 7a2c10ae60f096dacee4b44e0c8ae0a1b66ae033
parent e1c328df2590164becc150de842f69292abe557a
Author: Julien Midedji <Julien.Midedji@gmail.com>
Date:   Mon,  3 May 2021 09:10:06 +0200

tpl: Fix countwords to handle special chars

Fixes #8479
Diffstat:
Mtpl/strings/strings.go | 10++++++++++
Mtpl/strings/strings_test.go | 3+++
2 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/tpl/strings/strings.go b/tpl/strings/strings.go
@@ -17,6 +17,7 @@ package strings
 import (
 	"errors"
 	"html/template"
+	"regexp"
 	"strings"
 	"unicode/utf8"
 
@@ -75,6 +76,15 @@ func (ns *Namespace) CountWords(s interface{}) (int, error) {
 		return 0, _errors.Wrap(err, "Failed to convert content to string")
 	}
 
+	isCJKLanguage, err := regexp.MatchString(`\p{Han}|\p{Hangul}|\p{Hiragana}|\p{Katakana}`, ss)
+	if err != nil {
+		return 0, _errors.Wrap(err, "Failed to match regex pattern against string")
+	}
+
+	if !isCJKLanguage {
+		return len(strings.Fields(helpers.StripHTML((ss)))), nil
+	}
+
 	counter := 0
 	for _, word := range strings.Fields(helpers.StripHTML(ss)) {
 		runeCount := utf8.RuneCountInString(word)
diff --git a/tpl/strings/strings_test.go b/tpl/strings/strings_test.go
@@ -210,6 +210,9 @@ func TestCountWords(t *testing.T) {
 		{"Do Be Do Be Do", 5},
 		{"旁边", 2},
 		{`<div class="test">旁边</div>`, 2},
+		{"Here's to you...", 3},
+		{"Here’s to you...", 3},
+		{"Here’s to you…", 3},
 		// errors
 		{tstNoStringer{}, false},
 	} {