«convert arrays to graphviz dot format» by julian.rohrhuber
on 09 Jun'15 18:31 inDisplays a tree from nested arrays for graphviz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
(
var labels = "", links = "", i = 0;
var doDict = { |x, func|
if(x.isKindOf(Dictionary)) {
x.keysValuesDo { |key, val| func.value(val, i, key) }
} {
x.do(func)
}
};
var addNode = { |i, j, key, label = ""|
labels = labels ++ "\n% [label=\"%\"]".format(i, label);
links = links ++ "\n% -> %".format(j, i);
if(key.notNil) { links = links ++ " [label=\"%\"; fontname=Courier]".format(key) };
};
f = { |coll|
var j = i, str;
doDict.(coll, { |x, k, key|
i = i + 1;
if(x.isCollection) {
addNode.(i, j, key, "");
f.(x);
} {
addNode.(i, j, key, x.cs);
}
});
str = "\n\ndigraph {\n" ++ labels ++ "\n" ++ links ++ "\n}";
};
)
f.([1, 2, 3, [2, 3, [1, 2, 3]]];);
f.([1, 2, 3, [2, (a: 3, b: [9, 2], c: { 2 + 3 }), [1, 2, 3]]];);
reception
comments