From 751d4906efcc854c9c1fe3ac0dea6f0c183f7a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 22 Sep 2015 22:24:24 +0200 Subject: [PATCH] Add pluralize template func Fixes #1438 --- docs/content/meta/release-notes.md | 1 + docs/content/templates/functions.md | 6 +++++- tpl/template_funcs.go | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/content/meta/release-notes.md b/docs/content/meta/release-notes.md index 0faa16176..1670c9812 100644 --- a/docs/content/meta/release-notes.md +++ b/docs/content/meta/release-notes.md @@ -14,6 +14,7 @@ weight: 10 * We now use a custom-built `LazyFileReader` for reading file contents, which means we don't read media files in `/content` into memory anymore -- and file reading is now performed in parallel on multicore PCs. [1181](https://github.com/spf13/hugo/issues/1181) * Hugo is now built with `Go 1.5` which, among many other improvements, have fixed the last known data race in Hugo. [917] (https://github.com/spf13/hugo/issues/917) * Lots of fixes and improvements in the template funcs: + * The new `pluralize` template func. * The `sort` template func now accepts field/key chaining arguments and pointer values. [1330](https://github.com/spf13/hugo/issues/1330) * Several fixes for `slicestr` and `substr`, most importantly, they now have full `utf-8`-support. [1190](https://github.com/spf13/hugo/issues/1190) [1333](https://github.com/spf13/hugo/issues/1333) [1347](https://github.com/spf13/hugo/issues/1347) * The new `last` template function allows the user to select the last `N` items of a slice. [1148](https://github.com/spf13/hugo/issues/1148) diff --git a/docs/content/templates/functions.md b/docs/content/templates/functions.md index 5fe31aaa9..ac9622269 100644 --- a/docs/content/templates/functions.md +++ b/docs/content/templates/functions.md @@ -1,4 +1,4 @@ ---- +g--- aliases: - /layout/functions/ date: 2013-07-01 @@ -366,6 +366,10 @@ Runs the string through the Markdown processesor. The result will be declared as e.g. `{{ .Title | markdownify }}` +### pluralize +Pluralize the given word with a set of common English pluralization rules. + +e.g. `{{ "cat" | pluralize }}` → "cats" ### replace Replaces all occurrences of the search string with the replacement string. diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go index e8e2e6d86..fc9b80eed 100644 --- a/tpl/template_funcs.go +++ b/tpl/template_funcs.go @@ -14,6 +14,7 @@ package tpl import ( + "bitbucket.org/pkg/inflect" "bytes" "errors" "fmt" @@ -1371,6 +1372,13 @@ func init() { "readDir": ReadDir, "seq": helpers.Seq, "getenv": func(varName string) string { return os.Getenv(varName) }, + "pluralize": func(in interface{}) (string, error) { + word, err := cast.ToStringE(in) + if err != nil { + return "", err + } + return inflect.Pluralize(word), nil + }, } }