@more-markdown/tree-processor
Version:
Plugin for more-markdown to support rendering tree files.
87 lines (84 loc) • 1.79 kB
JavaScript
var parseTree;
parseTree = function(string, graph) {
var addName, addToGraph, brackets, c, count, countName, name, parrent, parrents, pos, prevChar, tempName;
brackets = 0;
count = 0;
parrents = [];
tempName = "";
name = "";
countName = "";
parrent = "";
addName = function() {
if (!tempName) {
return;
}
name = tempName;
tempName = "";
return countName = name + count++;
};
addToGraph = function(graph) {
var shape;
shape = "circle";
if (name === "#" || name === '') {
shape = "rect";
name = "";
}
graph.setNode(countName, {
label: name,
shape: shape
});
if (parrent) {
return graph.setEdge(parrent, countName, {
label: ""
});
}
};
prevChar = "";
pos = 0;
while (pos < string.length) {
c = string[pos++];
switch (c) {
case ' ':
if (tempName) {
addName();
addToGraph(graph);
}
break;
case '(':
brackets++;
if (string[pos] === ')') {
brackets--;
tempName = '#';
addName();
addToGraph(graph);
pos++;
} else {
addName();
addToGraph(graph);
parrent = countName;
parrents.push(parrent);
}
break;
case ')':
brackets--;
addName();
if (prevChar !== ')') {
addToGraph(graph);
}
parrents.pop();
parrent = parrents[parrents.length - 1];
break;
default:
if (c !== '\n') {
tempName += c;
}
}
if (c !== ' ') {
prevChar = c;
}
}
if (brackets > 0) {
return console.log("wrong number of brackets " + brackets);
}
};
module.exports = parseTree;