--- title: diagrams.Goat description: Returns an SVGDiagram object created from the given GoAT markup and options. categories: [] keywords: [] params: functions_and_methods: aliases: [] returnType: diagrams.SVGDiagram signatures: [diagrams.Goat MARKUP] --- Useful in a [code block render hook], the `diagrams.Goat` function returns an SVGDiagram object created from the given [GoAT] markup. ## Methods The SVGDiagram object has the following methods: Inner : (`template.HTML`) Returns the SVG child elements without a wrapping `svg` element, allowing you to create your own wrapper. Wrapped : (`template.HTML`) Returns the SVG child elements wrapped in an `svg` element. Width : (`int`) Returns the width of the rendered diagram, in pixels. Height : (`int`) Returns the height of the rendered diagram, in pixels. ## GoAT Diagrams Hugo natively supports GoAT diagrams with an [embedded code block render hook]. This Markdown: ````text ```goat .---. .-. .-. .-. .---. | A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | '---' '-' '+' '+' '---' ``` ```` Is rendered to: ```html
...
``` Which appears in your browser as: ```goat {class="mw6-ns"} .---. .-. .-. .-. .---. | A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | '---' '-' '+' '+' '---' ``` To customize rendering, override Hugo's [embedded code block render hook] for GoAT diagrams. ## Code block render hook By way of example, let's create a code block render hook to render GoAT diagrams as `figure` elements with an optional caption. ```go-html-template {file="layouts/_default/_markup/render-codeblock-goat.html"} {{ $caption := or .Attributes.caption "" }} {{ $class := or .Attributes.class "diagram" }} {{ $id := or .Attributes.id (printf "diagram-%d" (add 1 .Ordinal)) }}
{{ with diagrams.Goat (trim .Inner "\n\r") }} {{ .Inner }} {{ end }}
{{ $caption }}
``` This Markdown: ````text {file="content/example.md" } ```goat {class="foo" caption="Diagram 1: Example"} .---. .-. .-. .-. .---. | A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | '---' '-' '+' '+' '---' ``` ```` Is rendered to: ```html
...
Diagram 1: Example
``` Use CSS to style the SVG as needed: ```css svg.foo { font-family: "Segoe UI","Noto Sans",Helvetica,Arial,sans-serif } ``` [code block render hook]: /render-hooks/code-blocks/ [embedded code block render hook]: {{% eturl render-codeblock-goat %}} [GoAT]: https://github.com/bep/goat