UNPKG

dig

Version:

Graph algorithms

42 lines (38 loc) 1.13 kB
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; }