Mermaid Exporter

For any details about the Mermaid language, see mermaid

class anytree.exporter.mermaidexporter.MermaidExporter(node, graph='graph', name='TD', options=None, indent=0, nodenamefunc=None, nodefunc=None, edgefunc=None, filter_=None, stop=None, maxlevel=None)[source]

Mermaid Exporter.

Parameters:

node (Node) – start node.

Keyword Arguments:
  • graph – Mermaid graph type.

  • name – Mermaid graph name.

  • options – list of options added to the graph.

  • indent (int) – number of spaces for indent.

  • nodenamefunc – Function to extract node name from node object. The function shall accept one node object as argument and return the name of it. Returns a unique identifier by default.

  • nodefunc – Function to decorate a node with attributes. The function shall accept one node object as argument and return the attributes. Returns [{node.name}] and creates therefore a rectangular node by default.

  • edgefunc – Function to decorate a edge with attributes. The function shall accept two node objects as argument. The first the node and the second the child and return edge. Returns --> by default.

  • filter – Function to filter nodes to include in export. The function shall accept one node object as argument and return True if it should be included, or False if it should not be included.

  • stop – stop iteration at node if stop function returns True for node.

  • maxlevel (int) – Limit export to this number of levels.

>>> from anytree import Node
>>> root = Node("root")
>>> s0 = Node("sub0", parent=root, edge=2)
>>> s0b = Node("sub0B", parent=s0, foo=4, edge=109)
>>> s0a = Node("sub0A", parent=s0, edge="")
>>> s1 = Node("sub1", parent=root, edge="")
>>> s1a = Node("sub1A", parent=s1, edge=7)
>>> s1b = Node("sub1B", parent=s1, edge=8)
>>> s1c = Node("sub1C", parent=s1, edge=22)
>>> s1ca = Node("sub1Ca", parent=s1c, edge=42)

A top-down graph:

>>> from anytree.exporter import MermaidExporter
>>> for line in MermaidExporter(root):
...     print(line)
graph TD
N0["root"]
N1["sub0"]
N2["sub0B"]
N3["sub0A"]
N4["sub1"]
N5["sub1A"]
N6["sub1B"]
N7["sub1C"]
N8["sub1Ca"]
N0-->N1
N0-->N4
N1-->N2
N1-->N3
N4-->N5
N4-->N6
N4-->N7
N7-->N8

A customized graph with round boxes and named arrows:

>>> def nodefunc(node):
...     return '("%s")' % (node.name)
>>> def edgefunc(node, child):
...     return f"--{child.edge}-->"
>>> options = [
...     "%% just an example comment",
...     "%% could be an option too",
... ]
>>> for line in MermaidExporter(root, options=options, nodefunc=nodefunc, edgefunc=edgefunc):
...     print(line)
graph TD
%% just an example comment
%% could be an option too
N0("root")
N1("sub0")
N2("sub0B")
N3("sub0A")
N4("sub1")
N5("sub1A")
N6("sub1B")
N7("sub1C")
N8("sub1Ca")
N0--2-->N1
N0---->N4
N1--109-->N2
N1---->N3
N4--7-->N5
N4--8-->N6
N4--22-->N7
N7--42-->N8
to_file(filename)[source]

Write graph to filename.

>>> from anytree import Node
>>> root = Node("root")
>>> s0 = Node("sub0", parent=root)
>>> s0b = Node("sub0B", parent=s0)
>>> s0a = Node("sub0A", parent=s0)
>>> s1 = Node("sub1", parent=root)
>>> s1a = Node("sub1A", parent=s1)
>>> s1b = Node("sub1B", parent=s1)
>>> s1c = Node("sub1C", parent=s1)
>>> s1ca = Node("sub1Ca", parent=s1c)
>>> from anytree.exporter import MermaidExporter
>>> MermaidExporter(root).to_file("tree.md")
static esc(value)[source]

Escape Strings.