diff --git a/docs/content/templates/functions.md b/docs/content/templates/functions.md index 4138ffde9..b0fa0d9ed 100644 --- a/docs/content/templates/functions.md +++ b/docs/content/templates/functions.md @@ -252,6 +252,11 @@ Convert all characters in string to titlecase. e.g. `{{title "BatMan"}}` → "Batman" +### chomp +Removes any trailing newline characters. Useful in a pipeline to remove newlines added by other processing (including `markdownify`). + +e.g., `{{chomp "

Blockhead

\n"` → `"

Blockhead

"` + ### highlight Take a string of code and a language, uses Pygments to return the syntax highlighted code in HTML. Used in the [highlight diff --git a/tpl/template.go b/tpl/template.go index 197703a73..ef0096cef 100644 --- a/tpl/template.go +++ b/tpl/template.go @@ -29,6 +29,7 @@ import ( "os" "path/filepath" "reflect" + "regexp" "sort" "strconv" "strings" @@ -37,6 +38,7 @@ import ( var localTemplates *template.Template var tmpl Template var funcMap template.FuncMap +var chompRegexp *regexp.Regexp type Template interface { ExecuteTemplate(wr io.Writer, name string, data interface{}) error @@ -667,6 +669,15 @@ func RelRef(page interface{}, ref string) template.HTML { return refPage(page, ref, "RelRef") } +func Chomp(text interface{}) (string, error) { + s, err := cast.ToStringE(text) + if err != nil { + return "", err + } + + return chompRegexp.ReplaceAllString(s, ""), nil +} + func SafeHtml(text string) template.HTML { return template.HTML(text) } @@ -1022,5 +1033,8 @@ func init() { "partial": Partial, "ref": Ref, "relref": RelRef, + "chomp": Chomp, } + + chompRegexp = regexp.MustCompile("[\r\n]+$") }