I really like keeping things simple. And I also like generating figures from code using Graphviz. And since there was no Graphviz plugin for pelican I wrote my own one.
Using liquid tags I wanted to get my graphviz code rendered and automatically included as a base64 encoded image in my HTML code. I’ve created a pull request but you can find a fork at dorneanu-pelican.
Basically the tags works as follows:
|
|
program could be dot, neato, twopi, circo etc. The DOT CODE is simply sent to the binary utility and the output (PNG data) is saved into the document.
This is some minimal example:
|
|
which will be rendered to:
Graphviz code
dot { digraph graphname { a -> b -> c; b -> d; e -> f; } }
You could then use neato instead of dot:
|
|
…which will be rendered to:
Graphviz code
neato { digraph graphname { a -> b -> c; b -> d; e -> f; } }
Some other examples:
- dot
- digraph
Graphviz code
dot {
digraph g {
node [fontname=Verdana,fontsize=12]
node [style=filled]
node [fillcolor="#EEEEEE"]
node [color="#EEEEEE"]
edge [color="#31CEF0"]
node [shape = record,height=.1];
node0[label = " | G| "];
node1[label = " | E| "];
node2[label = " | B| "];
node3[label = " | F| "];
node4[label = " | R| "];
node5[label = " | H| "];
node6[label = " | Y| "];
node7[label = " | A| "];
node8[label = " | C| "];
"node0":f2 -> "node4":f1;
"node0":f0 -> "node1":f1;
"node1":f0 -> "node2":f1;
"node1":f2 -> "node3":f1;
"node2":f2 -> "node8":f1;
"node2":f0 -> "node7":f1;
"node4":f2 -> "node6":f1;
"node4":f0 -> "node5":f1;
}
}

- dot
- subgraphs
Graphviz code
dot {
digraph G {
node [fontname=Verdana,fontsize=12]
node [style=filled]
node [fillcolor="#EEEEEE"]
node [color="#EEEEEE"]
edge [color="#31CEF0"]
subgraph cluster_0 {
label = "hello world";
a -> b;
a -> c;
color = hot_pink;
}
subgraph cluster_1 {
label = "MSDOT";
style= "dashed";
color=purple;
x -> y;
x -> z;
y -> z;
y -> q;
}
top -> a;
top -> y;
y -> b;
}
}

- neato
Graphviz code
neato {
graph G
{
node [color=Red]
r01
r02
r03
r04
r05
r06
r07
r08
r09
r10
r11
node [color=Blue]
p01
p02
p03
p04
p05
p06
p07
p08
p09
p10
p11
p12
p13
r01 -- r02
r01 -- p01
r01 -- p02
r02 -- p01
r02 -- p02
p01 -- p02
r03 -- p03
r04 -- r05
r04 -- p04
r04 -- p05
r04 -- p06
r05 -- p04
r05 -- p06
p04 -- p05
p04 -- p06
r06 -- r07
r06 -- r08
r06 -- r09
r06 -- p07
r06 -- p08
r06 -- p09
r06 -- p10
r06 -- p11
r07 -- r08
r07 -- r09
r07 -- p07
r07 -- p08
r07 -- p09
r07 -- p10
r07 -- p11
r08 -- r09
r08 -- p07
r08 -- p08
r08 -- p09
r08 -- p10
r08 -- p11
r09 -- p07
r09 -- p08
r09 -- p09
r09 -- p10
r09 -- p11
p07 -- p08
p07 -- p09
p07 -- p10
p07 -- p11
p08 -- p09
p08 -- p10
p08 -- p11
p09 -- p10
p09 -- p11
p10 -- p11
r10 -- r11
r10 -- p12
r10 -- p13
r11 -- p12
r11 -- p13
p12 -- p13
}
}

Graphviz code
neato {
graph ER {
node [shape=box]; course; institute; student;
node [shape=ellipse]; {node [label="name"] name0; name1; name2;}
code; grade; number;
node [shape=diamond,style=filled,color=lightgrey]; "C-I"; "S-C"; "S-I";
name0 -- course;
code -- course;
course -- "C-I" [label="n",len=1.00];
"C-I" -- institute [label="1",len=1.00];
institute -- name1;
institute -- "S-I" [label="1",len=1.00];
"S-I" -- student [label="n",len=1.00];
student -- grade;
student -- name2;
student -- number;
student -- "S-C" [label="m",len=1.00];
"S-C" -- course [label="n",len=1.00];
label = "\n\nEntity Relation Diagram\ndrawn by NEATO";
fontsize=20;
}
}

- twopi
Graphviz code
twopi {
digraph G
{
center = v21;
center -> v11;
center -> v12;
center -> v13;
v11 -> v21;
v11 -> v22;
v11 -> v23;
v21 -> v22;
v22 -> v23;
v23 -> v21;
v21 -> v31;
v21 -> v32;
v21 -> v33;
v32 -> v41;
v32 -> v42;
v33 -> v43;
}
}

- circo
Graphviz code
circo {
digraph g1 {
node [shape = doublecircle]; N4 N6;
node [shape = circle];
edge[label="{1,0}"];
N0 -> N1 -> N2 -> N3 -> N4 -> N5 -> N6 -> N0;
}
}

- misc
Graphviz code
dot {
digraph G {
node [fontname=Verdana,fontsize=12]
node [style=filled]
node [fillcolor="#EEEEEE"]
node [color="#EEEEEE"]
edge [color="#31CEF0"]
main -> parse -> execute
main -> init
main -> cleanup
execute -> make_string
execute -> printf
init -> make_string
main -> printf
execute -> compare
}
}
