shithub: hugo

Download patch

ref: 8d695ec592fecd8bfba2a89ef33a444d71ce0996
parent: 751d4906efcc854c9c1fe3ac0dea6f0c183f7a40
author: Bjørn Erik Pedersen <[email protected]>
date: Tue Sep 22 18:31:02 EDT 2015

Add singularize template func

See #1438

--- a/docs/content/meta/release-notes.md
+++ b/docs/content/meta/release-notes.md
@@ -14,7 +14,7 @@
 * 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 new `pluralize` and `singularize` template funcs.  
 	* 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)
--- a/docs/content/templates/functions.md
+++ b/docs/content/templates/functions.md
@@ -433,6 +433,11 @@
 Note: "ZgotmplZ" is a special value that indicates that unsafe content reached a
 CSS or URL context.
 
+### singularize
+Singularize the given word with a set of common English pluralization rules.
+
+e.g. `{{ "cats" | singularize }}` → "cat"
+
 ### slicestr
 
 Slicing in `slicestr` is done by specifying a half-open range with two indices, `start` and `end`.
--- a/tpl/template_funcs.go
+++ b/tpl/template_funcs.go
@@ -1379,6 +1379,13 @@
 			}
 			return inflect.Pluralize(word), nil
 		},
+		"singularize": func(in interface{}) (string, error) {
+			word, err := cast.ToStringE(in)
+			if err != nil {
+				return "", err
+			}
+			return inflect.Singularize(word), nil
+		},
 	}
 
 }