@@ -12,6 +12,7 @@ Decisions (start)-><d1>
12
12
Decisions w/Label (start)-><d1>logged in->(Show Dashboard), <d1>not logged in->(Show Login Page)
13
13
Parallel (Action1)->|a|,(Action 2)->|a|
14
14
Note (Action1)-(note: A note message here)
15
+ Object Node [Object]
15
16
Comment // Comments
16
17
*/
17
18
@@ -20,35 +21,54 @@ module.exports = function(specLines, options)
20
21
function parseYumlExpr ( specLine )
21
22
{
22
23
var exprs = [ ] ;
23
- var parts = this . splitYumlExpr ( specLine , "(<|" ) ;
24
+ var parts = this . splitYumlExpr ( specLine , "[(<|" ) ;
25
+
26
+
27
+ // yUML syntax allows any character in decision labels.
28
+ // The following variable serves as flag to avoid parsing
29
+ // brackets characters inside labels.
30
+ var isDecisionLabel = false ;
31
+ var decisionLabelBuffer = "" ;
24
32
25
33
for ( var i = 0 ; i < parts . length ; i ++ )
26
34
{
27
35
var part = parts [ i ] . trim ( ) ;
28
36
if ( part . length == 0 )
29
37
continue ;
30
38
31
- if ( part . match ( / ^ \( .* \) $ / ) ) // activity
39
+ if ( part . match ( / - > $ / ) ) // arrow
40
+ {
41
+ isDecisionLabel = false ;
42
+ decisionLabelBuffer = "" ;
43
+
44
+ part = decisionLabelBuffer + part . substr ( 0 , part . length - 2 ) . trim ( ) ;
45
+ exprs . push ( [ "edge" , "none" , "vee" , part , "solid" ] ) ;
46
+ }
47
+ else if ( isDecisionLabel )
48
+ {
49
+ // decision label parts
50
+ decisionLabelBuffer += part ;
51
+ }
52
+ else if ( part . match ( / ^ \( .* \) $ / ) ) // activity
32
53
{
33
54
part = part . substr ( 1 , part . length - 2 ) ;
34
55
var ret = extractBgAndNote ( part , true ) ;
35
- exprs . push ( [ ret . isNote ? "note" : "record" , ret . part , ret . bg , ret . fontcolor ] ) ;
56
+ exprs . push ( [ ret . isNote ? "note" : "record" , ret . part , 'rounded' , ret . bg , ret . fontcolor ] ) ;
36
57
}
37
58
else if ( part . match ( / ^ < .* > $ / ) ) // decision
38
59
{
39
60
part = part . substr ( 1 , part . length - 2 ) ;
40
61
exprs . push ( [ "diamond" , part ] ) ;
41
62
}
63
+ else if ( / ^ \[ .* \] $ / . test ( part ) ) // object node
64
+ {
65
+ exprs . push ( [ "record" , part . substr ( 1 , part . length - 2 ) . trim ( ) ] ) ;
66
+ }
42
67
else if ( part . match ( / ^ \| .* \| $ / ) ) // bar
43
68
{
44
69
part = part . substr ( 1 , part . length - 2 ) ;
45
70
exprs . push ( [ "mrecord" , part ] ) ;
46
71
}
47
- else if ( part . match ( / - > $ / ) ) // arrow
48
- {
49
- part = part . substr ( 0 , part . length - 2 ) . trim ( ) ;
50
- exprs . push ( [ "edge" , "none" , "vee" , part , "solid" ] ) ;
51
- }
52
72
else if ( part == '-' ) // connector for notes
53
73
{
54
74
exprs . push ( [ "edge" , "none" , "none" , "" , "solid" ] ) ;
@@ -100,16 +120,16 @@ module.exports = function(specLines, options)
100
120
fontsize : 10 ,
101
121
margin : "0.20,0.05" ,
102
122
label : escape_label ( label ) ,
103
- style : "rounded"
123
+ style : elem [ k ] [ 2 ]
104
124
}
105
125
106
- if ( elem [ k ] [ 2 ] ) {
126
+ if ( elem [ k ] [ 3 ] ) {
107
127
node . style += ",filled" ;
108
- node . fillcolor = elem [ k ] [ 2 ] ;
128
+ node . fillcolor = elem [ k ] [ 3 ] ;
109
129
}
110
130
111
- if ( elem [ k ] [ 3 ] )
112
- node . fontcolor = elem [ k ] [ 3 ] ;
131
+ if ( elem [ k ] [ 4 ] )
132
+ node . fontcolor = elem [ k ] [ 4 ] ;
113
133
}
114
134
115
135
elements . push ( [ uid , node ] ) ;
0 commit comments