Documentation ¶
Overview ¶
Package mermaid adds support for Mermaid diagrams to the Goldmark Markdown parser.
Index ¶
- Variables
- type Block
- type CLI
- type CLICompiler
- type ClientRenderer
- func (r *ClientRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer)
- func (r *ClientRenderer) Render(w util.BufWriter, src []byte, node ast.Node, entering bool) (ast.WalkStatus, error)
- func (r *ClientRenderer) RenderScript(w util.BufWriter, _ []byte, node ast.Node, entering bool) (ast.WalkStatus, error)
- type CompileRequest
- type CompileResponse
- type Compiler
- type Extender
- type RenderMode
- type ScriptBlock
- type ServerRenderer
- type Transformer
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var DefaultCLI = MMDC("")
DefaultCLI is a CLI implementation that invokes the "mmdc" CLI by searching $PATH for it.
var Kind = ast.NewNodeKind("MermaidBlock")
Kind is the node kind of a Mermaid Block node.
var ScriptKind = ast.NewNodeKind("MermaidScriptBlock")
ScriptKind is the node kind of a Mermaid ScriptBlock node.
Functions ¶
This section is empty.
Types ¶
type Block ¶
Block is a Mermaid block.
```mermaid graph TD; A-->B; A-->C; B-->D; C-->D; ```
Its raw contents are the plain text of the Mermaid diagram.
type CLI ¶
type CLI interface { // CommandContext builds an exec.Cmd to run the MermaidJS CLI // with the provided arguments. // // The list of arguments DOES NOT include 'mmdc'. CommandContext(context.Context, ...string) *exec.Cmd }
CLI provides access to the MermaidJS CLI. Use it with CLICompiler to override how the "mmdc" CLI is invoked.
type CLICompiler ¶ added in v0.5.0
type CLICompiler struct { // CLI is the MermaidJS CLI that we'll use // to compile Mermaid diagrams into images. // // If unset, uses DefaultCLI. CLI CLI // Theme for rendered diagrams. // // Values include "dark", "default", "forest", and "neutral". // See MermaidJS documentation for a full list. Theme string }
CLICompiler compiles Mermaid diagrams into images by shell-executing the "mmdc" command.
Plug it into ServerRenderer to use it.
func (*CLICompiler) Compile ¶ added in v0.5.0
func (d *CLICompiler) Compile(ctx context.Context, req *CompileRequest) (_ *CompileResponse, err error)
Compile compiles the provided Mermaid diagram into an SVG.
type ClientRenderer ¶
type ClientRenderer struct { // URL of Mermaid Javascript to be included in the page. // // Defaults to the latest version available on cdn.jsdelivr.net. MermaidURL string // ContainerTag is the name of the HTML tag to use for the container // that holds the Mermaid diagram. // The name must be without the angle brackets. // // Defaults to "pre". ContainerTag string }
ClientRenderer renders Mermaid diagrams as HTML, to be rendered into images client side.
It operates by installing a <script> tag into the document that renders the Mermaid diagrams client-side.
func (*ClientRenderer) RegisterFuncs ¶
func (r *ClientRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer)
RegisterFuncs registers the renderer for Mermaid blocks with the provided Goldmark Registerer.
func (*ClientRenderer) Render ¶
func (r *ClientRenderer) Render(w util.BufWriter, src []byte, node ast.Node, entering bool) (ast.WalkStatus, error)
Render renders mermaid.Block nodes.
func (*ClientRenderer) RenderScript ¶
func (r *ClientRenderer) RenderScript(w util.BufWriter, _ []byte, node ast.Node, entering bool) (ast.WalkStatus, error)
RenderScript renders mermaid.ScriptBlock nodes.
type CompileRequest ¶ added in v0.5.0
type CompileRequest struct { // Source is the raw Mermaid diagram source. Source string }
CompileRequest is a request to compile a Mermaid diagram.
type CompileResponse ¶ added in v0.5.0
type CompileResponse struct { // SVG holds the SVG diagram text // including the <svg>...</svg> tags. SVG string }
CompileResponse is a response from compiling a Mermaid diagram.
type Compiler ¶ added in v0.5.0
type Compiler interface {
Compile(context.Context, *CompileRequest) (*CompileResponse, error)
}
Compiler compiles Mermaid diagrams into images. It is used with ServerRenderer to render Mermaid diagrams server-side.
type Extender ¶
type Extender struct { // RenderMode specifies which renderer the Extender should install. // // Defaults to AutoRenderMode, picking renderers // based on the availability of the Mermaid CLI. RenderMode RenderMode // Compiler specifies how to compile Mermaid diagrams server-side. // // If specified, and render mode is not set to client-side, // this will be used to render diagrams. Compiler Compiler // CLI specifies how to invoke the Mermaid CLI // to compile Mermaid diagrams server-side. // // If specified, and render mode is not set to client-side, // this will be used to render diagrams. // // If both CLI and Compiler are specified, Compiler takes precedence. CLI CLI // URL of Mermaid Javascript to be included in the page // for client-side rendering. // // Ignored if NoScript is true or if we're rendering diagrams server-side. // // Defaults to the latest version available on cdn.jsdelivr.net. MermaidURL string // HTML tag to use for the container element for diagrams. // // Defaults to "pre" for client-side rendering, // and "div" for server-side rendering. ContainerTag string // If true, don't add a <script> including Mermaid to the end of the // page even if rendering diagrams client-side. // // Use this if the page you're including goldmark-mermaid in // already has a MermaidJS script included elsewhere. NoScript bool // Theme for mermaid diagrams. // // Ignored if we're rendering diagrams client-side. // // Values include "dark", "default", "forest", and "neutral". // See MermaidJS documentation for a full list. Theme string // contains filtered or unexported fields }
Extender adds support for Mermaid diagrams to a Goldmark Markdown parser.
Use it by installing it to the goldmark.Markdown object upon creation.
Example ¶
package main import ( "github.com/yuin/goldmark" "go.abhg.dev/goldmark/mermaid" ) func main() { goldmark.New( // ... goldmark.WithExtensions( &mermaid.Extender{ RenderMode: mermaid.RenderModeServer, }, // ... ), ) }
Output:
type RenderMode ¶
type RenderMode int
RenderMode specifies which renderer the Extender should use.
const ( // RenderModeAuto picks the renderer automatically. // // If a server-side compiler or CLI is specified, // or if the 'mmdc' CLI is available on $PATH, // this will generate diagrams server-side. // // Otherwise, it'll generate them client-side. RenderModeAuto RenderMode = iota // RenderModeClient renders Mermaid diagrams client-side // by adding <script> tags. RenderModeClient // RenderModeServer renders Mermaid diagrams server-side // using the Mermaid CLI. // // Fails rendering if the Mermaid CLI is absent. RenderModeServer )
func (RenderMode) String ¶
func (i RenderMode) String() string
type ScriptBlock ¶
ScriptBlock marks where the Mermaid Javascript will be included.
This is a placeholder and does not contain anything.
func (*ScriptBlock) Dump ¶
func (b *ScriptBlock) Dump(src []byte, level int)
Dump dumps the contents of this block to stdout.
func (*ScriptBlock) IsRaw ¶
func (*ScriptBlock) IsRaw() bool
IsRaw reports that this block should be rendered as-is.
func (*ScriptBlock) Kind ¶
func (*ScriptBlock) Kind() ast.NodeKind
Kind reports that this is a MermaidScriptBlock.
type ServerRenderer ¶
type ServerRenderer struct { // Compiler specifies how to compile Mermaid diagrams into images. // // If unspecified, this uses CLICompiler. Compiler Compiler // ContainerTag is the name of the HTML tag to use for the container // that holds the Mermaid diagram. // The name must be without the angle brackets. // // Defaults to "div". ContainerTag string }
ServerRenderer renders Mermaid diagrams into images server-side.
By default, it uses CLICompiler to compile Mermaid diagrams. You can specify a different compiler with Compiler. For long-running processes, you should use the compiler provided by the mermaidcdp package.
func (*ServerRenderer) RegisterFuncs ¶
func (r *ServerRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer)
RegisterFuncs registers the renderer for Mermaid blocks with the provided Goldmark Registerer.
type Transformer ¶
type Transformer struct { // Don't add a ScriptBlock to the end of the page // even if the page doesn't already have one. NoScript bool }
Transformer transforms a Goldmark Markdown AST with support for Mermaid diagrams. It makes the following transformations:
- replace mermaid code blocks with mermaid.Block nodes
- add a mermaid.ScriptBlock node if the document uses Mermaid and one does not already exist
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
exectest
Package exectest provides a means of mocking [os/exec.Cmd]s allowing injection of arbitrary behavior into an external executable from a test.
|
Package exectest provides a means of mocking [os/exec.Cmd]s allowing injection of arbitrary behavior into an external executable from a test. |
svgtest
Package svgtest includes helpers for validating SVGs in tests.
|
Package svgtest includes helpers for validating SVGs in tests. |
Package mermaidcdp implements a server-side compiler for Mermaid diagrams that uses a headless Chromium-based browser to render the diagrams.
|
Package mermaidcdp implements a server-side compiler for Mermaid diagrams that uses a headless Chromium-based browser to render the diagrams. |