graphviz

package module
v0.0.0-...-f2d6317 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 29, 2023 License: MIT Imports: 9 Imported by: 0

README

Graphviz for Goldmark

This is an extension for Goldmark that adds support for generating figures using Graphviz. It doesn't rely on cgo or an external binary, instead using the wazero WebAssembly runtime to embed Graphviz.

Usage

Register the extension:

goldmark.New(
	goldmark.WithExtensions(&graphviz.Extender{}),
).Convert(src, dst)

Fenced code blocks like below will now be rendered using Graphviz:

```graphviz
digraph D {

  A [shape=diamond]
  B [shape=box]
  C [shape=circle]

  A -> B [style=dashed, color=grey]
  A -> C [color="black:invis:black"]
  A -> D [penwidth=5, arrowhead=none]

}
```

Resulting in a figure like below:

Performance

Performance will be the same as for the underlying go-graphviz package. For a small Graphviz graph, go-graphviz takes about 51ms:

$ go test -test.bench .
goos: linux
goarch: amd64
pkg: github.com/rigtorp/go-graphviz
cpu: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
BenchmarkGraphviz-8           24          51285746 ns/op
PASS
ok      github.com/rigtorp/go-graphviz  3.057s

Acknowledgements

This extension is based on the goldmark-pikchr extension by Colin Henry and the goldmark-d2 extension by Furqan Software.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var KindBlock = ast.NewNodeKind("Block")

Functions

This section is empty.

Types

type Block

type Block struct {
	ast.BaseBlock
}

func (*Block) Dump

func (n *Block) Dump(source []byte, level int)

func (*Block) IsBlank

func (n *Block) IsBlank(source []byte) bool

func (*Block) Kind

func (n *Block) Kind() ast.NodeKind

type Extender

type Extender struct{}

func (*Extender) Extend

func (e *Extender) Extend(m goldmark.Markdown)

type Renderer

type Renderer struct{}

func (*Renderer) RegisterFuncs

func (r *Renderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer)

func (*Renderer) Render

func (r *Renderer) Render(w util.BufWriter, src []byte, node ast.Node, entering bool) (ast.WalkStatus, error)

type Transformer

type Transformer struct {
}

func (*Transformer) Transform

func (s *Transformer) Transform(doc *ast.Document, reader text.Reader, pctx parser.Context)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL