UNPKG

inno-diagram

Version:

It was created to develop Inno Linc.

126 lines (102 loc) 3.29 kB
require('../utils/yuml2dot-utils.js')(); module.exports = function(specLines, options) { function composeDotExpr(specLines) { var obj = JSON.parse(specLines); var uids = {}; var nodes = []; var len = 0; var logicName = obj.logic.name; var logiclinks = obj.logic.link; var node = createnode(logicName, true); var uid = 'A' + (len++).toString(); uids[recordName(logicName)] = uid; nodes.push([uid, node]); if (obj.run.length > 0) { for(var i = 0; i < obj.run.length;i++) { var linkName = obj.run[i].name; var childnode = createnode(linkName, false); var uid = 'A' + (len++).toString(); uids[recordName(linkName)] = uid; nodes.push([uid, childnode]); } for (var i = 0; i < obj.run.length; i++) { if (obj.run[i].link.length > 0) { var links = obj.run[i].link; var modulename = obj.run[i].name; nodes = connectLink(nodes, uids, links, modulename); } } nodes = connectLink(nodes, uids, logiclinks, logicName); } var dot = " ranksep = " + 0.5 + "\r\n"; dot += " rankdir = " + options.dir + "\r\n"; dot += serializeDotElements(nodes); dot += '}\r\n'; return dot; } function connectLink(nodes, uids, linkobj, tailname) { for (var i = 0; i < linkobj.length; i++) { var linkName = linkobj[i].split(':'); var edge = createline(tailname, linkName[0]); var uid1 = uids[recordName(linkName[0])]; var uid2 = uids[recordName(tailname)]; nodes.push([uid1, uid2, edge]); } return nodes; } function createline(logic, link) { var edge = { shape: "edge", dir: "both", style: "dashed", arrowtail: logic, arrowhead: link, labeldistance: 1, fontsize: 10 } return edge; } function createnode(name, islogic) { var _shape = islogic ? "doublecircle" : "record"; var node = { shape: _shape, height: 0.5, fontsize: 10, margin: "0.20,0.05", label: escape_label(name), style: "rounded" } return node; } function addBarFacet(elements, name) { for (var i=0; i<elements.length; i++) { if (elements[i].length == 2 && elements[i][0] == name) { var node = elements[i][1]; var facetNum = 1; if (node.label.length > 0) { facetNum = node.label.split("|").length + 1; node.label += "|<f" + facetNum + ">"; } else node.label = "<f1>"; return "f" + facetNum; } } return null; } return composeDotExpr(specLines, options); }