dig
Version:
Graph algorithms
42 lines (38 loc) • 1.13 kB
JavaScript
var dig_dot_read = dig.dot.read = function(dot) {
var parseTree = dig_dot_parser.parse(dot);
var graph = parseTree.type === "digraph" ? new dig.DiGraph() : new dig.UGraph();
function handleStmt(stmt) {
switch (stmt.type) {
case "node":
var id = stmt.id;
graph.addNode(id, stmt.attrs);
break;
case "edge":
var prev;
dig_util_forEach(stmt.elems, function(elem) {
handleStmt(elem);
switch(elem.type) {
case "node":
if (prev) {
graph.addEdge(prev, elem.id, stmt.attrs);
}
prev = elem.id;
break;
default:
// We don't currently support subgraphs incident on an edge
throw new Error("Unsupported type incident on edge: " + elem.type);
}
});
break;
case "attr":
// Ignore attrs
break;
default:
throw new Error("Unsupported statement type: " + stmt.type);
}
}
dig_util_forEach(parseTree.stmts, function(stmt) {
handleStmt(stmt);
});
return graph;
}