blob: bb96c265a75e91adbf20b9d12d15525e90c8cd0e [file] [log] [blame]
library graphlib.layout.add_border_segments;
import "../graph.dart" show Graph;
import "util.dart" as util;
addBorderSegments(Graph g) {
dfs(v) {
final children = g.children(v);
Map node = g.node(v);
if (children.length != 0) {
children.forEach(dfs);
}
if (node.containsKey("minRank")) {
node["borderLeft"] = [];
node["borderRight"] = [];
for (var rank = node["minRank"], maxRank = node["maxRank"] + 1;
rank < maxRank;
++rank) {
_addBorderNode(g, "borderLeft", "_bl", v, node, rank);
_addBorderNode(g, "borderRight", "_br", v, node, rank);
}
}
}
g.children().forEach(dfs);
}
_addBorderNode(Graph g, String prop, String prefix, sg, Map sgNode, rank) {
var label = { "width": 0, "height": 0, "rank": rank },
prev = sgNode[prop][rank - 1],
curr = util.addDummyNode(g, "border", label, prefix);
sgNode[prop][rank] = curr;
g.setParent(curr, sg);
if (prev) {
g.setEdge(prev, curr, { "weight": 1 });
}
}