diff --git a/tpl/transform/transform.go b/tpl/transform/transform.go index dc7cc0342c0..48cfaffffe0 100644 --- a/tpl/transform/transform.go +++ b/tpl/transform/transform.go @@ -18,6 +18,7 @@ import ( "html" "html/template" + "github.com/alecthomas/chroma/lexers" "github.com/gohugoio/hugo/cache/namedmemcache" "github.com/gohugoio/hugo/common/herrors" "github.com/gohugoio/hugo/markup/converter/hooks" @@ -90,6 +91,11 @@ func (ns *Namespace) HighlightCodeBlock(ctx hooks.CodeblockContext, opts ...inte return hl.HighlightCodeBlock(ctx, optsv) } +// CanHighlight returns whether the given language is supported by the Chroma highlighter. +func (ns *Namespace) CanHighlight(lang string) bool { + return lexers.Get(lang) != nil +} + // HTMLEscape returns a copy of s with reserved HTML characters escaped. func (ns *Namespace) HTMLEscape(s interface{}) (string, error) { ss, err := cast.ToStringE(s) diff --git a/tpl/transform/transform_test.go b/tpl/transform/transform_test.go index 3ccf1a2700a..289674bf176 100644 --- a/tpl/transform/transform_test.go +++ b/tpl/transform/transform_test.go @@ -95,6 +95,16 @@ func TestHighlight(t *testing.T) { } } +func TestCanHighlight(t *testing.T) { + t.Parallel() + + c := qt.New(t) + ns := &transform.Namespace{} + + c.Assert(ns.CanHighlight("go"), qt.Equals, true) + c.Assert(ns.CanHighlight("foo"), qt.Equals, false) +} + func TestHTMLEscape(t *testing.T) { t.Parallel() b := hugolib.NewIntegrationTestBuilder(