Adding (source code) Highlight template helper

This commit is contained in:
spf13 2013-12-05 09:43:49 -05:00
parent fa29e94edb
commit db29f57cc4

View file

@ -4,6 +4,7 @@ import (
"errors" "errors"
"github.com/eknkc/amber" "github.com/eknkc/amber"
"github.com/spf13/hugo/helpers" "github.com/spf13/hugo/helpers"
"html"
"html/template" "html/template"
"io" "io"
"io/ioutil" "io/ioutil"
@ -109,6 +110,23 @@ func ReturnWhenSet(a interface{}, index int) interface{} {
return "" return ""
} }
func Highlight(in interface{}, lang string) template.HTML {
var str string
av := reflect.ValueOf(in)
switch av.Kind() {
case reflect.String:
str = av.String()
}
if strings.HasPrefix(strings.TrimSpace(str), "<pre><code>") {
str = str[strings.Index(str, "<pre><code>")+11:]
}
if strings.HasSuffix(strings.TrimSpace(str), "</code></pre>") {
str = str[:strings.LastIndex(str, "</code></pre>")]
}
return template.HTML(helpers.Highlight(html.UnescapeString(str), lang))
}
func SafeHtml(text string) template.HTML { func SafeHtml(text string) template.HTML {
return template.HTML(text) return template.HTML(text)
} }
@ -145,6 +163,7 @@ func NewTemplate() Template {
"echoParam": ReturnWhenSet, "echoParam": ReturnWhenSet,
"safeHtml": SafeHtml, "safeHtml": SafeHtml,
"first": First, "first": First,
"highlight": Highlight,
} }
templates.Funcs(funcMap) templates.Funcs(funcMap)