From 08fdca9d9365eaf1e496a12e2af5e18617bd0e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 17 Feb 2022 13:04:00 +0100 Subject: Add Markdown diagrams and render hooks for code blocks You can now create custom hook templates for code blocks, either one for all (`render-codeblock.html`) or for a given code language (e.g. `render-codeblock-go.html`). We also used this new hook to add support for diagrams in Hugo: * Goat (Go ASCII Tool) is built-in and enabled by default; just create a fenced code block with the language `goat` and start draw your Ascii diagrams. * Another popular alternative for diagrams in Markdown, Mermaid (supported by GitHub), can also be implemented with a simple template. See the Hugo documentation for more information. Updates #7765 Closes #9538 Fixes #9553 Fixes #8520 Fixes #6702 Fixes #9558 --- hugolib/site.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'hugolib/site.go') diff --git a/hugolib/site.go b/hugolib/site.go index 02380a6e7..57821ee93 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -30,6 +30,7 @@ import ( "strings" "time" + "github.com/gohugoio/hugo/common/hugio" "github.com/gohugoio/hugo/common/types" "github.com/gohugoio/hugo/modules" "golang.org/x/text/unicode/norm" @@ -54,12 +55,11 @@ import ( "github.com/gohugoio/hugo/common/maps" - "github.com/pkg/errors" - "github.com/gohugoio/hugo/common/text" "github.com/gohugoio/hugo/common/hugo" "github.com/gohugoio/hugo/publisher" + "github.com/pkg/errors" _errors "github.com/pkg/errors" "github.com/gohugoio/hugo/langs" @@ -1773,19 +1773,23 @@ var infoOnMissingLayout = map[string]bool{ "404": true, } -// hookRenderer is the canonical implementation of all hooks.ITEMRenderer, +// hookRendererTemplate is the canonical implementation of all hooks.ITEMRenderer, // where ITEM is the thing being hooked. -type hookRenderer struct { +type hookRendererTemplate struct { templateHandler tpl.TemplateHandler identity.SearchProvider templ tpl.Template } -func (hr hookRenderer) RenderLink(w io.Writer, ctx hooks.LinkContext) error { +func (hr hookRendererTemplate) RenderLink(w io.Writer, ctx hooks.LinkContext) error { + return hr.templateHandler.Execute(hr.templ, w, ctx) +} + +func (hr hookRendererTemplate) RenderHeading(w io.Writer, ctx hooks.HeadingContext) error { return hr.templateHandler.Execute(hr.templ, w, ctx) } -func (hr hookRenderer) RenderHeading(w io.Writer, ctx hooks.HeadingContext) error { +func (hr hookRendererTemplate) RenderCodeblock(w hugio.FlexiWriter, ctx hooks.CodeblockContext) error { return hr.templateHandler.Execute(hr.templ, w, ctx) } -- cgit v1.2.3