@import ../template.nml %% # Graphs from graphviz #+LAYOUT_BEGIN Centered [graph][width=50%] digraph { bgcolor=transparent; graph[fontcolor=darkgray]; node[fontcolor=darkgray]; edge[fontcolor=darkgray, color=gray90]; filelist [shape=box, color=orange, label="File List"]; doclist [shape=box, color=orange, label="Document List"]; iscached [shape=diamond, color=red, label="Cached?"]; parse [shape=box, color=white, label=Parse]; compile [shape=box,color=white, label=Compile]; cache [shape=box, color=orange, label=Cache]; filelist -> iscached; iscached -> cache[dir=both]; iscached -> doclist[label="Yes"]; iscached -> parse[label="No"]; parse -> compile; compile -> cache[label=""]; compile -> doclist[label=""]; buildnav [color=white, label="Build Navigation"]; doclist -> buildnav; output [color=white, label="Output"]; buildnav -> output; } [/graph] #+LAYOUT_END Graphs blocks are delimited by `` [graph]...[/graph]`` # Properties * ``layout`` The layout engine, defaults to `dot` see [Graphviz's documentation](https://graphviz.org/docs/layouts/), allowed values: *- `[dot](https://graphviz.org/docs/layouts/dot/)` *- `[neato](https://graphviz.org/docs/layouts/neato/)` *- `[fdp](https://graphviz.org/docs/layouts/fdp/)` *- `[sfdp](https://graphviz.org/docs/layouts/sfdp/)` *- `[circo](https://graphviz.org/docs/layouts/circo/)` *- `[twopi](https://graphviz.org/docs/layouts/twopi/)` *- `[osage](https://graphviz.org/docs/layouts/osage/)` *- `[patchwork](https://graphviz.org/docs/layouts/patchwork/)` * ``width`` The resulting svg's width property, defaults to `100%` # Examples #+LAYOUT_BEGIN[style=flex:0.33] Split [graph] digraph UML_Class_diagram { bgcolor=transparent; graph[fontcolor=darkgray]; node[fontcolor=darkgray]; edge[fontcolor=darkgray, color=gray90]; graph [ label="UML Class diagram demo" labelloc="t" fontname="Helvetica,Arial,sans-serif" ] node [ fontname="Helvetica,Arial,sans-serif" shape=record style=filled fillcolor=gray95 ] edge [fontname="Helvetica,Arial,sans-serif"] edge [arrowhead=vee style=dashed] Client -> Interface1 [label=dependency] Client -> Interface2 edge [dir=back arrowtail=empty style=""] Interface1 -> Class1 [xlabel=inheritance] Interface2 -> Class1 [dir=none] Interface2 [label="" xlabel="Simple\ninterface" shape=circle] Interface1[label = <{«interface» I/O | + property
...
|+ method
...
}>] Class1[label = <{I/O class | + property
...
|+ method
...
}>] edge [dir=back arrowtail=empty style=dashed] Class1 -> System_1 [label=implementation] System_1 [ shape=plain label=<
System
+ property
- Subsystem 1
- Subsystem 2
- Subsystem 3
...
+ method
...
> ] edge [dir=back arrowtail=diamond] System_1:ss1 -> Subsystem_1 [xlabel="composition"] Subsystem_1 [ shape=plain label=<
Subsystem 1
+ property
- resource
...
+ method
...
> ] Subsystem_2 [ shape=plain label=<
Subsystem 2
+ property
- resource
...
+ method
...
> ] Subsystem_3 [ shape=plain label=<
Subsystem 3
+ property
- resource
...
+ method
...
> ] System_1:ss2 -> Subsystem_2; System_1:ss3 -> Subsystem_3; edge [xdir=back arrowtail=odiamond] Subsystem_1:r1 -> "Shared resource" [label=aggregation] Subsystem_2:r1 -> "Shared resource" Subsystem_3:r1 -> "Shared resource" "Shared resource" [ label = <{ Shared resource | + property
...
| + method
...
}> ] } [/graph] #+LAYOUT_NEXT[style=flex:0.66] Generated by the following code: `` [graph] digraph UML_Class_diagram { bgcolor=transparent; graph[fontcolor=darkgray]; node[fontcolor=darkgray]; edge[fontcolor=darkgray, color=gray90]; graph [ label="UML Class diagram demo" labelloc="t" fontname="Helvetica,Arial,sans-serif" ] node [ fontname="Helvetica,Arial,sans-serif" shape=record style=filled fillcolor=gray95 ] edge [fontname="Helvetica,Arial,sans-serif"] edge [arrowhead=vee style=dashed] Client -> Interface1 [label=dependency] Client -> Interface2 edge [dir=back arrowtail=empty style=""] Interface1 -> Class1 [xlabel=inheritance] Interface2 -> Class1 [dir=none] Interface2 [label="" xlabel="Simple\ninterface" shape=circle] Interface1[label = <{«interface» I/O | + property
...
|+ method
...
}>] Class1[label = <{I/O class | + property
...
|+ method
...
}>] edge [dir=back arrowtail=empty style=dashed] Class1 -> System_1 [label=implementation] System_1 [ shape=plain label=<
System
+ property
- Subsystem 1
- Subsystem 2
- Subsystem 3
...
+ method
...
> ] edge [dir=back arrowtail=diamond] System_1:ss1 -> Subsystem_1 [xlabel="composition"] Subsystem_1 [ shape=plain label=<
Subsystem 1
+ property
- resource
...
+ method
...
> ] Subsystem_2 [ shape=plain label=<
Subsystem 2
+ property
- resource
...
+ method
...
> ] Subsystem_3 [ shape=plain label=<
Subsystem 3
+ property
- resource
...
+ method
...
> ] System_1:ss2 -> Subsystem_2; System_1:ss3 -> Subsystem_3; edge [xdir=back arrowtail=odiamond] Subsystem_1:r1 -> "Shared resource" [label=aggregation] Subsystem_2:r1 -> "Shared resource" Subsystem_3:r1 -> "Shared resource" "Shared resource" [ label = <{ Shared resource | + property
...
| + method
...
}> ] } [/graph] `` #+LAYOUT_END # Graphiz cache Rendered Graphviz graphs that have been rendered to **svg** are stored in the cache database, under table ``cached_dot``. Unless you modify the graph or it's properties, it won't be rendered again, instead it will be sourced from the database.