Better text handling for flowcharts

This commit is contained in:
knsv
2014-11-25 18:58:47 +01:00
parent d18103a0ec
commit 2317ea5117
14 changed files with 548 additions and 250 deletions

View File

@@ -57,7 +57,7 @@ var addVertices = function (vert, g) {
// Create the node in the graph based on defined form
if (vertice.type === 'round') {
g.setNode(vertice.id, {label: verticeText, rx: 5, ry: 5, style: style, id:vertice.id});
g.setNode(vertice.id, {labelType: "html",label: verticeText, rx: 5, ry: 5, style: style, id:vertice.id});
} else {
if (vertice.type === 'diamond') {
g.setNode(vertice.id, {shape: "question", label: verticeText, rx: 0, ry: 0, style: style, id:vertice.id});
@@ -249,7 +249,7 @@ var init = function () {
* @returns {string}
*/
exports.version = function(){
return '0.2.3';
return '0.2.4';
}
var equals = function (val, variable){

View File

@@ -15,12 +15,8 @@
"BT" return 'DIR';
"TD" return 'DIR';
"BR" return 'DIR';
\#[a-f0-9]+ return 'HEX';
[0-9]+ return 'NUM';
[0-9] return 'NUM';
\# return 'BRKT';
"px" return 'UNIT';
"pt" return 'UNIT';
"dot" return 'UNIT';
":" return 'COLON';
";" return 'SEMI';
"," return 'COMMA';
@@ -36,7 +32,7 @@
\- return 'MINUS';
\+ return 'PLUS';
\= return 'EQUALS';
[a-zåäöæøA-ZÅÄÖÆØ_]+ return 'ALPHA';
[a-zåäöæøA-ZÅÄÖÆØ_] return 'ALPHA';
"|" return 'PIPE';
"(" return 'PS';
")" return 'PE';
@@ -46,6 +42,7 @@
"}" return 'DIAMOND_STOP'
\s return 'SPACE';
\n return 'NEWLINE';
<<EOF>> return 'EOF';
/lex
@@ -70,7 +67,7 @@ graphConfig
;
statements
: statements spaceList statement
: statement spaceList statements
| statement
;
@@ -88,9 +85,9 @@ statement
;
verticeStatement:
| vertex link vertex
vertex link vertex
{ yy.addLink($1,$3,$2);$$ = 'oy'}
| vertex
| vertex
{$$ = 'yo';}
;
@@ -139,6 +136,8 @@ alphaNumToken
{$$ = $1;}
| TAGEND
{$$ = $1;}
| BRKT
{$$ = '<br>';}
;
link: linkStatement arrowText
@@ -163,12 +162,51 @@ arrowText:
;
// Characters and spaces
text: alphaNum SPACE text
{$$ = $1 + ' ' +$3;}
| alphaNum spaceList MINUS spaceList text
{$$ = $1 + ' - ' +$5;}
| alphaNum
{$$ = $1;}
//text: alphaNum SPACE text
// {$$ = $1 + ' ' +$3;}
// | alphaNum spaceList MINUS spaceList text
// {$$ = $1 + ' - ' +$5;}
// | alphaNum spaceList TAGSTART DIR TAGEND spaceList text
// {$$ = $1 + ' - ' +$5;}
// | alphaNum
// {$$ = $1;}
// ;
text: textToken
{$$=$1;}
| text textToken
{$$=$1+''+$2;}
;
textStatement: textToken
| textToken textStatement
;
textToken: ALPHA
{$$=$1;}
| NUM
{$$=$1;}
| COLON
{$$ = $1;}
| COMMA
{$$ = $1;}
| PLUS
{$$ = $1;}
| EQUALS
{$$ = $1;}
| MULT
{$$ = $1;}
| DOT
{$$ = $1;}
| TAGSTART
{$$ = $1;}
| TAGEND
{$$ = $1;}
| BRKT
{$$ = '<br>';}
| SPACE
{$$ = $1;}
| MINUS
{$$ = $1;}
;
classDefStatement:CLASSDEF SPACE alphaNum SPACE stylesOpt
@@ -215,5 +253,9 @@ styleComponent: ALPHA
{$$=$1}
| HEX
{$$=$1}
| BRKT
{$$=$1}
| DOT
{$$=$1}
;
%%

View File

@@ -72,12 +72,12 @@
}
*/
var parser = (function(){
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,7],$V1=[2,13],$V2=[1,21],$V3=[1,22],$V4=[1,23],$V5=[1,24],$V6=[1,25],$V7=[1,26],$V8=[1,27],$V9=[1,28],$Va=[1,29],$Vb=[1,30],$Vc=[1,15],$Vd=[1,16],$Ve=[1,17],$Vf=[1,14],$Vg=[6,9],$Vh=[11,30,31,32,33,34,35,36,37,38,39,40,48,50,51,52],$Vi=[2,7],$Vj=[11,43,44,45,46],$Vk=[9,11,21,23,24,25,26,27,43,44,45,46,47],$Vl=[9,11,21,23,24,25,26,27,31,32,33,34,35,36,37,38,39,40,43,44,45,46,47],$Vm=[9,11,21,23,24,25,26,27,30,31,32,33,34,35,36,37,38,39,40,43,44,45,46,47],$Vn=[31,32,33,34,35,36,37,38,39,40],$Vo=[31,32,33,34,35,36,37,38,39,40,47],$Vp=[23,25,27,47],$Vq=[1,93],$Vr=[1,90],$Vs=[1,88],$Vt=[1,91],$Vu=[1,89],$Vv=[1,94],$Vw=[1,92],$Vx=[1,101],$Vy=[11,34],$Vz=[9,11,30,31,32,33,34,53,56];
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,7],$V1=[1,21],$V2=[1,22],$V3=[1,23],$V4=[1,24],$V5=[1,25],$V6=[1,26],$V7=[1,27],$V8=[1,28],$V9=[1,29],$Va=[1,30],$Vb=[1,31],$Vc=[1,15],$Vd=[1,16],$Ve=[1,17],$Vf=[1,14],$Vg=[31,32,33,34,35,36,37,38,39,40,41,51,53,54,55],$Vh=[11,44,45,46,47],$Vi=[9,11,21,24,26,44,45,46,47],$Vj=[9,11,21,24,26,31,32,33,34,35,36,37,38,39,40,41,44,45,46,47],$Vk=[9,11,21,24,26,30,31,32,33,34,35,36,37,38,39,40,41,44,45,46,47],$Vl=[6,9],$Vm=[31,32,33,34,35,36,37,38,39,40,41],$Vn=[31,32,33,34,35,36,37,38,39,40,41,48],$Vo=[1,81],$Vp=[1,82],$Vq=[1,70],$Vr=[1,71],$Vs=[1,72],$Vt=[1,73],$Vu=[1,74],$Vv=[1,75],$Vw=[1,76],$Vx=[1,77],$Vy=[1,78],$Vz=[1,79],$VA=[1,80],$VB=[9,23,25,27,30,31,32,33,34,35,36,37,38,39,40,41,48],$VC=[1,106],$VD=[1,103],$VE=[1,101],$VF=[1,104],$VG=[1,102],$VH=[1,109],$VI=[1,108],$VJ=[1,107],$VK=[1,105],$VL=[1,114],$VM=[11,34],$VN=[9,11,30,31,32,33,34,38,41,56,59];
var parser = {trace: function trace() { },
yy: {},
symbols_: {"error":2,"expressions":3,"graphConfig":4,"statements":5,"EOF":6,"spaceList":7,"GRAPH":8,"SPACE":9,"DIR":10,"SEMI":11,"statement":12,"verticeStatement":13,"styleStatement":14,"classDefStatement":15,"classStatement":16,"clickStatement":17,"vertex":18,"link":19,"alphaNum":20,"SQS":21,"text":22,"SQE":23,"PS":24,"PE":25,"DIAMOND_START":26,"DIAMOND_STOP":27,"alphaNumStatement":28,"alphaNumToken":29,"MINUS":30,"ALPHA":31,"NUM":32,"COLON":33,"COMMA":34,"PLUS":35,"EQUALS":36,"MULT":37,"DOT":38,"TAGSTART":39,"TAGEND":40,"linkStatement":41,"arrowText":42,"ARROW_POINT":43,"ARROW_CIRCLE":44,"ARROW_CROSS":45,"ARROW_OPEN":46,"PIPE":47,"CLASSDEF":48,"stylesOpt":49,"CLASS":50,"CLICK":51,"STYLE":52,"HEX":53,"style":54,"styleComponent":55,"UNIT":56,"$accept":0,"$end":1},
terminals_: {2:"error",6:"EOF",8:"GRAPH",9:"SPACE",10:"DIR",11:"SEMI",21:"SQS",23:"SQE",24:"PS",25:"PE",26:"DIAMOND_START",27:"DIAMOND_STOP",30:"MINUS",31:"ALPHA",32:"NUM",33:"COLON",34:"COMMA",35:"PLUS",36:"EQUALS",37:"MULT",38:"DOT",39:"TAGSTART",40:"TAGEND",43:"ARROW_POINT",44:"ARROW_CIRCLE",45:"ARROW_CROSS",46:"ARROW_OPEN",47:"PIPE",48:"CLASSDEF",50:"CLASS",51:"CLICK",52:"STYLE",53:"HEX",56:"UNIT"},
productions_: [0,[3,3],[3,4],[4,4],[5,3],[5,1],[7,2],[7,1],[12,2],[12,2],[12,2],[12,2],[12,2],[13,0],[13,3],[13,1],[18,4],[18,4],[18,4],[18,1],[20,1],[20,2],[28,1],[28,3],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[19,2],[19,1],[41,1],[41,1],[41,1],[41,1],[42,3],[22,3],[22,5],[22,1],[15,5],[16,5],[17,5],[14,5],[14,5],[49,1],[49,3],[54,1],[54,2],[55,1],[55,1],[55,1],[55,1],[55,1],[55,1],[55,1]],
symbols_: {"error":2,"expressions":3,"graphConfig":4,"statements":5,"EOF":6,"spaceList":7,"GRAPH":8,"SPACE":9,"DIR":10,"SEMI":11,"statement":12,"verticeStatement":13,"styleStatement":14,"classDefStatement":15,"classStatement":16,"clickStatement":17,"vertex":18,"link":19,"alphaNum":20,"SQS":21,"text":22,"SQE":23,"PS":24,"PE":25,"DIAMOND_START":26,"DIAMOND_STOP":27,"alphaNumStatement":28,"alphaNumToken":29,"MINUS":30,"ALPHA":31,"NUM":32,"COLON":33,"COMMA":34,"PLUS":35,"EQUALS":36,"MULT":37,"DOT":38,"TAGSTART":39,"TAGEND":40,"BRKT":41,"linkStatement":42,"arrowText":43,"ARROW_POINT":44,"ARROW_CIRCLE":45,"ARROW_CROSS":46,"ARROW_OPEN":47,"PIPE":48,"textToken":49,"textStatement":50,"CLASSDEF":51,"stylesOpt":52,"CLASS":53,"CLICK":54,"STYLE":55,"HEX":56,"style":57,"styleComponent":58,"UNIT":59,"$accept":0,"$end":1},
terminals_: {2:"error",6:"EOF",8:"GRAPH",9:"SPACE",10:"DIR",11:"SEMI",21:"SQS",23:"SQE",24:"PS",25:"PE",26:"DIAMOND_START",27:"DIAMOND_STOP",30:"MINUS",31:"ALPHA",32:"NUM",33:"COLON",34:"COMMA",35:"PLUS",36:"EQUALS",37:"MULT",38:"DOT",39:"TAGSTART",40:"TAGEND",41:"BRKT",44:"ARROW_POINT",45:"ARROW_CIRCLE",46:"ARROW_CROSS",47:"ARROW_OPEN",48:"PIPE",51:"CLASSDEF",53:"CLASS",54:"CLICK",55:"STYLE",56:"HEX",59:"UNIT"},
productions_: [0,[3,3],[3,4],[4,4],[5,3],[5,1],[7,2],[7,1],[12,2],[12,2],[12,2],[12,2],[12,2],[13,3],[13,1],[18,4],[18,4],[18,4],[18,1],[20,1],[20,2],[28,1],[28,3],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[29,1],[19,2],[19,1],[42,1],[42,1],[42,1],[42,1],[43,3],[22,1],[22,2],[50,1],[50,2],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[49,1],[15,5],[16,5],[17,5],[14,5],[14,5],[52,1],[52,3],[57,1],[57,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1]],
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {
/* this == yyval */
@@ -89,36 +89,39 @@ break;
case 3:
yy.setDirection($$[$0-1]);this.$ = $$[$0-1];
break;
case 14:
case 13:
yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = 'oy'
break;
case 15:
case 14:
this.$ = 'yo';
break;
case 16:
case 15:
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');
break;
case 17:
case 16:
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');
break;
case 18:
case 17:
this.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');
break;
case 19:
case 18:
this.$ = $$[$0];yy.addVertex($$[$0]);
break;
case 20: case 22: case 24: case 25: case 51:
case 19: case 21: case 23: case 24: case 41: case 45: case 46: case 65:
this.$=$$[$0];
break;
case 21:
case 20: case 42:
this.$=$$[$0-1]+''+$$[$0];
break;
case 23:
case 22:
this.$=$$[$0-2]+'-'+$$[$0];
break;
case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 35: case 43:
case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 35: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 56: case 57:
this.$ = $$[$0];
break;
case 33: case 55:
this.$ = '<br>';
break;
case 34:
$$[$0-1].text = $$[$0];this.$ = $$[$0-1];
break;
@@ -137,43 +140,37 @@ break;
case 40:
this.$ = $$[$0-1];
break;
case 41:
this.$ = $$[$0-2] + ' ' +$$[$0];
break;
case 42:
this.$ = $$[$0-4] + ' - ' +$$[$0];
break;
case 44:
case 58:
this.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);
break;
case 45:
case 59:
this.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);
break;
case 46:
case 60:
this.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0]);
break;
case 47:
case 61:
this.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);
break;
case 48:
case 62:
this.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);
break;
case 49:
case 63:
this.$ = [$$[$0]]
break;
case 50:
case 64:
$$[$0-2].push($$[$0]);this.$ = $$[$0-2];
break;
case 52:
case 66:
this.$ = $$[$0-1] + $$[$0];
break;
case 53: case 54: case 55: case 56: case 57: case 58: case 59:
case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75:
this.$=$$[$0]
break;
}
},
table: [{3:1,4:2,8:[1,3]},{1:[3]},{5:4,7:5,9:$V0,11:$V1,12:6,13:8,14:9,15:10,16:11,17:12,18:13,20:18,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb,48:$Vc,50:$Vd,51:$Ve,52:$Vf},{9:[1,31]},{6:[1,32],7:33,9:$V0},{5:34,11:$V1,12:6,13:8,14:9,15:10,16:11,17:12,18:13,20:18,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb,48:$Vc,50:$Vd,51:$Ve,52:$Vf},o($Vg,[2,5]),o($Vh,$Vi,{7:35,9:$V0}),{11:[1,36]},{11:[1,37]},{11:[1,38]},{11:[1,39]},{11:[1,40]},{11:[2,15],19:41,41:42,43:[1,43],44:[1,44],45:[1,45],46:[1,46]},{9:[1,47]},{9:[1,48]},{9:[1,49]},{9:[1,50]},o($Vj,[2,19],{21:[1,51],24:[1,52],26:[1,53]}),o($Vk,[2,20],{28:19,29:20,20:54,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb}),o($Vl,[2,22],{30:[1,55]}),o($Vm,[2,24]),o($Vm,[2,25]),o($Vm,[2,26]),o($Vm,[2,27]),o($Vm,[2,28]),o($Vm,[2,29]),o($Vm,[2,30]),o($Vm,[2,31]),o($Vm,[2,32]),o($Vm,[2,33]),{10:[1,56]},{1:[2,1]},{11:$V1,12:57,13:8,14:9,15:10,16:11,17:12,18:13,20:18,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb,48:$Vc,50:$Vd,51:$Ve,52:$Vf},{6:[1,58],7:33,9:$V0},o($Vh,[2,6]),o($Vg,[2,8]),o($Vg,[2,9]),o($Vg,[2,10]),o($Vg,[2,11]),o($Vg,[2,12]),{18:59,20:18,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},o($Vn,[2,35],{42:60,47:[1,61]}),o($Vo,[2,36]),o($Vo,[2,37]),o($Vo,[2,38]),o($Vo,[2,39]),{20:62,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb,53:[1,63]},{20:64,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{20:65,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{20:66,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{20:68,22:67,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{20:68,22:69,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{20:68,22:70,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},o($Vk,[2,21]),{29:71,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{11:[1,72]},o($Vg,[2,4]),{1:[2,2]},{11:[2,14]},o($Vn,[2,34]),{20:68,22:73,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{9:[1,74]},{9:[1,75]},{9:[1,76]},{9:[1,77]},{9:[1,78]},{23:[1,79]},o($Vp,[2,43],{7:81,9:[1,80]}),{25:[1,82]},{27:[1,83]},o($Vl,[2,23]),o([9,11,31,32,33,34,35,36,37,38,39,40,48,50,51,52],[2,3]),{47:[1,84]},{9:$Vq,30:$Vr,31:$Vs,32:$Vt,33:$Vu,49:85,53:$Vv,54:86,55:87,56:$Vw},{9:$Vq,30:$Vr,31:$Vs,32:$Vt,33:$Vu,49:95,53:$Vv,54:86,55:87,56:$Vw},{9:$Vq,30:$Vr,31:$Vs,32:$Vt,33:$Vu,49:96,53:$Vv,54:86,55:87,56:$Vw},{20:97,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{20:98,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},o($Vj,[2,16]),{7:35,9:$V0,20:68,22:99,28:19,29:20,30:$Vi,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},{30:[1,100]},o($Vj,[2,17]),o($Vj,[2,18]),o($Vn,[2,40]),{11:[2,47],34:$Vx},o($Vy,[2,49],{55:102,9:$Vq,30:$Vr,31:$Vs,32:$Vt,33:$Vu,53:$Vv,56:$Vw}),o($Vz,[2,51]),o($Vz,[2,53]),o($Vz,[2,54]),o($Vz,[2,55]),o($Vz,[2,56]),o($Vz,[2,57]),o($Vz,[2,58]),o($Vz,[2,59]),{11:[2,48],34:$Vx},{11:[2,44],34:$Vx},{11:[2,45]},{11:[2,46]},o($Vp,[2,41]),{7:103,9:$V0},{9:$Vq,30:$Vr,31:$Vs,32:$Vt,33:$Vu,53:$Vv,54:104,55:87,56:$Vw},o($Vz,[2,52]),{20:68,22:105,28:19,29:20,31:$V2,32:$V3,33:$V4,34:$V5,35:$V6,36:$V7,37:$V8,38:$V9,39:$Va,40:$Vb},o($Vy,[2,50],{55:102,9:$Vq,30:$Vr,31:$Vs,32:$Vt,33:$Vu,53:$Vv,56:$Vw}),o($Vp,[2,42])],
defaultActions: {32:[2,1],58:[2,2],59:[2,14],97:[2,45],98:[2,46]},
table: [{3:1,4:2,8:[1,3]},{1:[3]},{5:4,7:5,9:$V0,12:6,13:8,14:9,15:10,16:11,17:12,18:13,20:18,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,51:$Vc,53:$Vd,54:$Ve,55:$Vf},{9:[1,32]},{6:[1,33]},{5:34,12:6,13:8,14:9,15:10,16:11,17:12,18:13,20:18,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,51:$Vc,53:$Vd,54:$Ve,55:$Vf},{6:[2,5],7:35,9:$V0},o($Vg,[2,7],{7:36,9:$V0}),{11:[1,37]},{11:[1,38]},{11:[1,39]},{11:[1,40]},{11:[1,41]},{11:[2,14],19:42,42:43,44:[1,44],45:[1,45],46:[1,46],47:[1,47]},{9:[1,48]},{9:[1,49]},{9:[1,50]},{9:[1,51]},o($Vh,[2,18],{21:[1,52],24:[1,53],26:[1,54]}),o($Vi,[2,19],{28:19,29:20,20:55,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb}),o($Vj,[2,21],{30:[1,56]}),o($Vk,[2,23]),o($Vk,[2,24]),o($Vk,[2,25]),o($Vk,[2,26]),o($Vk,[2,27]),o($Vk,[2,28]),o($Vk,[2,29]),o($Vk,[2,30]),o($Vk,[2,31]),o($Vk,[2,32]),o($Vk,[2,33]),{10:[1,57]},{1:[2,1]},{6:[1,58]},{5:59,12:6,13:8,14:9,15:10,16:11,17:12,18:13,20:18,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,51:$Vc,53:$Vd,54:$Ve,55:$Vf},o($Vg,[2,6]),o($Vl,[2,8]),o($Vl,[2,9]),o($Vl,[2,10]),o($Vl,[2,11]),o($Vl,[2,12]),{18:60,20:18,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},o($Vm,[2,35],{43:61,48:[1,62]}),o($Vn,[2,36]),o($Vn,[2,37]),o($Vn,[2,38]),o($Vn,[2,39]),{20:63,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,56:[1,64]},{20:65,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},{20:66,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},{20:67,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},{9:$Vo,22:68,30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:69},{9:$Vo,22:83,30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:69},{9:$Vo,22:84,30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:69},o($Vi,[2,20]),{29:85,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},{11:[1,86]},{1:[2,2]},{6:[2,4]},{11:[2,13]},o($Vm,[2,34]),{9:$Vo,22:87,30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:69},{9:[1,88]},{9:[1,89]},{9:[1,90]},{9:[1,91]},{9:[1,92]},{9:$Vo,23:[1,93],30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:94},o($VB,[2,41]),o($VB,[2,45]),o($VB,[2,46]),o($VB,[2,47]),o($VB,[2,48]),o($VB,[2,49]),o($VB,[2,50]),o($VB,[2,51]),o($VB,[2,52]),o($VB,[2,53]),o($VB,[2,54]),o($VB,[2,55]),o($VB,[2,56]),o($VB,[2,57]),{9:$Vo,25:[1,95],30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:94},{9:$Vo,27:[1,96],30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,49:94},o($Vj,[2,22]),o([9,31,32,33,34,35,36,37,38,39,40,41,51,53,54,55],[2,3]),{9:$Vo,30:$Vp,31:$Vq,32:$Vr,33:$Vs,34:$Vt,35:$Vu,36:$Vv,37:$Vw,38:$Vx,39:$Vy,40:$Vz,41:$VA,48:[1,97],49:94},{9:$VC,30:$VD,31:$VE,32:$VF,33:$VG,38:$VH,41:$VI,52:98,56:$VJ,57:99,58:100,59:$VK},{9:$VC,30:$VD,31:$VE,32:$VF,33:$VG,38:$VH,41:$VI,52:110,56:$VJ,57:99,58:100,59:$VK},{9:$VC,30:$VD,31:$VE,32:$VF,33:$VG,38:$VH,41:$VI,52:111,56:$VJ,57:99,58:100,59:$VK},{20:112,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},{20:113,28:19,29:20,31:$V1,32:$V2,33:$V3,34:$V4,35:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb},o($Vh,[2,15]),o($VB,[2,42]),o($Vh,[2,16]),o($Vh,[2,17]),o($Vm,[2,40]),{11:[2,61],34:$VL},o($VM,[2,63],{58:115,9:$VC,30:$VD,31:$VE,32:$VF,33:$VG,38:$VH,41:$VI,56:$VJ,59:$VK}),o($VN,[2,65]),o($VN,[2,67]),o($VN,[2,68]),o($VN,[2,69]),o($VN,[2,70]),o($VN,[2,71]),o($VN,[2,72]),o($VN,[2,73]),o($VN,[2,74]),o($VN,[2,75]),{11:[2,62],34:$VL},{11:[2,58],34:$VL},{11:[2,59]},{11:[2,60]},{9:$VC,30:$VD,31:$VE,32:$VF,33:$VG,38:$VH,41:$VI,56:$VJ,57:116,58:100,59:$VK},o($VN,[2,66]),o($VM,[2,64],{58:115,9:$VC,30:$VD,31:$VE,32:$VF,33:$VG,38:$VH,41:$VI,56:$VJ,59:$VK})],
defaultActions: {33:[2,1],58:[2,2],59:[2,4],60:[2,13],112:[2,59],113:[2,60]},
parseError: function parseError(str, hash) {
if (hash.recoverable) {
this.trace(str);
@@ -646,13 +643,13 @@ options: {},
performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
var YYSTATE=YY_START;
switch($avoiding_name_collisions) {
case 0:return 52;
case 0:return 55;
break;
case 1:return 48;
case 1:return 51;
break;
case 2:return 50;
case 2:return 53;
break;
case 3:return 51;
case 3:return 54;
break;
case 4:return 8;
break;
@@ -668,74 +665,66 @@ case 9:return 10;
break;
case 10:return 10;
break;
case 11:return 53;
case 11:return 32;
break;
case 12:return 32;
case 12:return 41;
break;
case 13:return 'BRKT';
case 13:return 33;
break;
case 14:return 56;
case 14:return 11;
break;
case 15:return 56;
case 15:return 34;
break;
case 16:return 56;
case 16:return 36;
break;
case 17:return 33;
case 17:return 37;
break;
case 18:return 11;
case 18:return 38;
break;
case 19:return 34;
case 19:return 39;
break;
case 20:return 36;
case 20:return 40;
break;
case 21:return 37;
case 21:return 46;
break;
case 22:return 38;
case 22:return 44;
break;
case 23:return 39;
case 23:return 45;
break;
case 24:return 40;
case 24:return 47;
break;
case 25:return 45;
case 25:return 30;
break;
case 26:return 43;
case 26:return 35;
break;
case 27:return 44;
case 27:return 36;
break;
case 28:return 46;
case 28:return 31;
break;
case 29:return 30;
case 29:return 48;
break;
case 30:return 35;
case 30:return 24;
break;
case 31:return 36;
case 31:return 25;
break;
case 32:return 31;
case 32:return 21;
break;
case 33:return 47;
case 33:return 23;
break;
case 34:return 24;
case 34:return 26
break;
case 35:return 25;
case 35:return 27
break;
case 36:return 21;
case 36:return 9;
break;
case 37:return 23;
case 37:return 'NEWLINE';
break;
case 38:return 26
break;
case 39:return 27
break;
case 40:return 9;
break;
case 41:return 'NEWLINE';
break;
case 42:return 6;
case 38:return 6;
break;
}
},
rules: [/^(?:style\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:#[a-f0-9]+)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?:px\b)/,/^(?:pt\b)/,/^(?:dot\b)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:<)/,/^(?:>)/,/^(?:--[x])/,/^(?:-->)/,/^(?:--[o])/,/^(?:---)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[a-zåäöæøA-ZÅÄÖÆØ_]+)/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/],
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"inclusive":true}}
rules: [/^(?:style\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:<)/,/^(?:>)/,/^(?:--[x])/,/^(?:-->)/,/^(?:--[o])/,/^(?:---)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[a-zåäöæøA-ZÅÄÖÆØ_])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/],
conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"inclusive":true}}
});
return lexer;
})();

View File

@@ -164,14 +164,14 @@ describe('when parsing ',function(){
expect(vert['C'].type).toBe('diamond');
expect(vert['C'].text).toBe('Chimpansen hoppar åäö-ÅÄÖ');
});
it('should handle text in vertices with åäö, minus and space',function(){
var res = flow.parser.parse('graph TD;A-->C{Chimpansen hoppar åäö - ÅÄÖ};');
it('should handle text in vertices with åäö, minus and space and br',function(){
var res = flow.parser.parse('graph TD;A-->C{Chimpansen hoppar åäö <br> - ÅÄÖ};');
var vert = flow.parser.yy.getVertices();
var edges = flow.parser.yy.getEdges();
expect(vert['C'].type).toBe('diamond');
expect(vert['C'].text).toBe('Chimpansen hoppar åäö - ÅÄÖ');
expect(vert['C'].text).toBe('Chimpansen hoppar åäö <br> - ÅÄÖ');
});
it('should handle a single node',function(){
@@ -184,6 +184,49 @@ describe('when parsing ',function(){
expect(edges.length).toBe(0);
expect(vert['A'].styles.length).toBe(0);
});
it('should handle a single square node',function(){
// Silly but syntactically correct
var res = flow.parser.parse('graph TD;a[A];');
var vert = flow.parser.yy.getVertices();
var edges = flow.parser.yy.getEdges();
expect(edges.length).toBe(0);
expect(vert['a'].styles.length).toBe(0);
expect(vert['a'].type).toBe('square');
});
it('should handle a single round square node',function(){
// Silly but syntactically correct
var res = flow.parser.parse('graph TD;a(A);');
var vert = flow.parser.yy.getVertices();
var edges = flow.parser.yy.getEdges();
expect(edges.length).toBe(0);
expect(vert['a'].styles.length).toBe(0);
expect(vert['a'].type).toBe('round');
});
it('should handle a single diamond node',function(){
// Silly but syntactically correct
var res = flow.parser.parse('graph TD;a{A};');
var vert = flow.parser.yy.getVertices();
var edges = flow.parser.yy.getEdges();
expect(edges.length).toBe(0);
expect(vert['a'].type).toBe('diamond');
});
it('should handle a single odd node',function(){
// Silly but syntactically correct
var res = flow.parser.parse('graph TD;a>A];');
var vert = flow.parser.yy.getVertices();
var edges = flow.parser.yy.getEdges();
expect(edges.length).toBe(0);
expect(vert['a'].type).toBe('diamond');
});
it('should handle a single node with alphanumerics starting on a char',function(){
// Silly but syntactically correct
var res = flow.parser.parse('graph TD;id1;');
@@ -348,6 +391,27 @@ describe('when parsing ',function(){
expect(classes['exClass'].styles[0]).toBe('background:#bbb');
expect(classes['exClass'].styles[1]).toBe('border:1px solid red');
});
it('should be possible to declare a class with a dot in the style',function(){
var res = flow.parser.parse('graph TD;classDef exClass background:#bbb,border:1.5px solid red;');
//var res = flow.parser.parse('graph TD;style T background: #bbb;');
var classes = flow.parser.yy.getClasses();
expect(classes['exClass'].styles.length).toBe(2);
expect(classes['exClass'].styles[0]).toBe('background:#bbb');
expect(classes['exClass'].styles[1]).toBe('border:1.5px solid red');
});
it('should be possible to declare a class with a space in the style',function(){
var res = flow.parser.parse('graph TD;classDef exClass background: #bbb,border:1.5px solid red;');
//var res = flow.parser.parse('graph TD;style T background : #bbb;');
var classes = flow.parser.yy.getClasses();
expect(classes['exClass'].styles.length).toBe(2);
expect(classes['exClass'].styles[0]).toBe('background: #bbb');
expect(classes['exClass'].styles[1]).toBe('border:1.5px solid red');
});
it('should be possible to apply a class to a vertex',function(){
var statement = '';

165
src/sequenceRenderer.js Normal file
View File

@@ -0,0 +1,165 @@
/**
* Created by knut on 14-11-23.
*/
var sq = require('./parser/sequence').parser;
sq.yy = require('./sequenceDb');
/**
* Draws a flowchart in the tag with id: id based on the graph definition in text.
* @param text
* @param id
*/
module.exports.draw = function (text, id) {
sq.yy.clear();
sq.parse(text);
var actors = sq.yy.getActors();
var actorKeys = sq.yy.getActorKeys();
var i;
//console.log('Len = ' + )
for(i=0;i<actorKeys.length;i++){
var key = actorKeys[i];
console.log('Doing key: '+key)
var startMargin = 50;
var margin = 50;
var width = 150;
var yStartMargin = 10;
console.log('x=: '+(startMargin + i*margin +i*150))
var cont = d3.select("#mermaidChart0");
var g = cont.append("g")
g.append("rect")
.attr("x", startMargin + i*margin +i*150)
.attr("y", yStartMargin)
.attr("fill", '#eaeaea')
.attr("stroke", '#666')
.attr("width", 150)
.attr("height", 65)
.attr("rx", 3)
.attr("ry", 3)
g.append("text") // text label for the x axis
.attr("x", startMargin + i*margin +i*150 + 75)
.attr("y", yStartMargin+37.5)
.style("text-anchor", "middle")
.text(actors[actorKeys[i]].description)
;
}
//
////var cont = d3.select(id);
//var cont = d3.select("#mermaidChart0");
//var g = cont.append("g")
// .attr("x", 150)
// .attr("y", 10);
//g.append("rect")
// .attr("fill", '#eaeaea')
// .attr("stroke", '#666')
// .attr("width", 150)
// .attr("height", 75)
// .attr("rx", 5)
// .attr("ry", 5)
//g.append("text") // text label for the x axis
// .style("text-anchor", "middle")
// .text("Date pok ")
// .attr("y", 10);
/*
graph.clear();
flow.parser.yy = graph;
// Parse the graph definition
flow.parser.parse(text);
// Fetch the default direction, use TD if none was found
var dir;
dir = graph.getDirection();
if(typeof dir === 'undefined'){
dir='TD';
}
// Create the input mermaid.graph
var g = new dagreD3.graphlib.Graph({multigraph:true})
.setGraph({
rankdir: dir,
marginx: 20,
marginy: 20
})
.setDefaultEdgeLabel(function () {
return {};
});
// Fetch the verices/nodes and edges/links from the parsed graph definition
var vert = graph.getVertices();
var edges = graph.getEdges();
var classes = graph.getClasses();
if(typeof classes.default === 'undefined'){
classes.default = {id:'default'};
classes.default.styles = ['fill:#eaeaea','stroke:#666','stroke-width:1.5px'];
}
addVertices(vert, g);
addEdges(edges, g);
// Create the renderer
var render = new dagreD3.render();
// Add custom shape for rhombus type of boc (decision)
render.shapes().question = function (parent, bbox, node) {
var w = bbox.width,
h = bbox.height * 3,
points = [
{x: w / 2, y: 0},
{x: w, y: -h / 2},
{x: w / 2, y: -h},
{x: 0, y: -h / 2}
];
shapeSvg = parent.insert("polygon", ":first-child")
.attr("points", points.map(function (d) {
return d.x + "," + d.y;
}).join(" "))
.style("fill", "#fff")
.style("stroke", "#333")
.attr("rx", 5)
.attr("ry", 5)
.attr("transform", "translate(" + (-w / 2) + "," + (h * 2 / 4) + ")");
node.intersect = function (point) {
return dagreD3.intersect.polygon(node, points, point);
};
return shapeSvg;
};
// Add our custom arrow - an empty arrowhead
render.arrows().none = function normal(parent, id, edge, type) {
var marker = parent.append("marker")
.attr("id", id)
.attr("viewBox", "0 0 10 10")
.attr("refX", 9)
.attr("refY", 5)
.attr("markerUnits", "strokeWidth")
.attr("markerWidth", 8)
.attr("markerHeight", 6)
.attr("orient", "auto");
var path = marker.append("path")
.attr("d", "M 0 0 L 0 0 L 0 0 z");
dagreD3.util.applyStyle(path, edge[type + "Style"]);
};
// Set up an SVG group so that we can translate the final graph.
var svg = d3.select("#" + id);
svgGroup = d3.select("#" + id + " g");
// Run the renderer. This is what draws the final graph.
render(d3.select("#" + id + " g"), g);
// Center the graph
var xCenterOffset = (svg.attr("width") - g.graph().width) / 2;
//svgGroup.attr("transform", "translate(" + xCenterOffset + ", 20)");
svg.attr("height", g.graph().height + 40);
*/
};

11
src/utils.js Normal file
View File

@@ -0,0 +1,11 @@
/**
* Created by knut on 14-11-23.
*/
module.exports.detectType = function(text){
if(text.match(/^\s*sequence/)){
return "sequence";
}
else{
return "graph";
}
}

49
src/utils.spec.js Normal file
View File

@@ -0,0 +1,49 @@
/**
* Created by knut on 14-11-23.
*/
describe('when detecting chart type ',function() {
var utils = require('./utils');
beforeEach(function () {
});
it('should handle a sequence defintion', function () {
str = 'sequence TB\nbfs1:queue';
var type = utils.detectType(str);
expect(type).toBe('sequence');
});
it('should handle a sequence defintion with leading spaces', function () {
str = ' sequence TB\nbfs1:queue';
var type = utils.detectType(str);
expect(type).toBe('sequence');
});
it('should handle a graph defintion', function () {
str = 'graph TB\nbfs1:queue';
var type = utils.detectType(str);
expect(type).toBe('graph');
});
it('should handle a graph defintion with leading spaces', function () {
str = ' graph TB\nbfs1:queue';
var type = utils.detectType(str);
expect(type).toBe('graph');
});
it('should handle a graph defintion with leading spaces and newline', function () {
str = ' \n graph TB\nbfs1:queue';
var type = utils.detectType(str);
expect(type).toBe('graph');
});
it('should handle a sequence defintion with leading spaces and newline', function () {
str = ' \n sequence TB\nbfs1:queue';
var type = utils.detectType(str);
expect(type).toBe('sequence');
});
});