Skip to content

Commit 0972d95

Browse files
Merge pull request #32 from aduh95/support-object-node
Support object node
2 parents 7bbd82b + 0bb76b0 commit 0972d95

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

src/diagrams/activity-diagram.js

+33-13
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Decisions (start)-><d1>
1212
Decisions w/Label (start)-><d1>logged in->(Show Dashboard), <d1>not logged in->(Show Login Page)
1313
Parallel (Action1)->|a|,(Action 2)->|a|
1414
Note (Action1)-(note: A note message here)
15+
Object Node [Object]
1516
Comment // Comments
1617
*/
1718

@@ -20,35 +21,54 @@ module.exports = function(specLines, options)
2021
function parseYumlExpr(specLine)
2122
{
2223
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 = "";
2432

2533
for (var i=0; i<parts.length; i++)
2634
{
2735
var part = parts[i].trim();
2836
if (part.length == 0)
2937
continue;
3038

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
3253
{
3354
part = part.substr(1, part.length-2);
3455
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]);
3657
}
3758
else if (part.match(/^<.*>$/)) // decision
3859
{
3960
part = part.substr(1, part.length-2);
4061
exprs.push(["diamond", part]);
4162
}
63+
else if (/^\[.*\]$/.test(part)) // object node
64+
{
65+
exprs.push(["record", part.substr(1, part.length - 2).trim()]);
66+
}
4267
else if (part.match(/^\|.*\|$/)) // bar
4368
{
4469
part = part.substr(1, part.length-2);
4570
exprs.push(["mrecord", part]);
4671
}
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-
}
5272
else if (part == '-') // connector for notes
5373
{
5474
exprs.push(["edge", "none", "none", "", "solid"]);
@@ -100,16 +120,16 @@ module.exports = function(specLines, options)
100120
fontsize: 10,
101121
margin: "0.20,0.05",
102122
label: escape_label(label),
103-
style: "rounded"
123+
style: elem[k][2]
104124
}
105125

106-
if (elem[k][2]) {
126+
if (elem[k][3]) {
107127
node.style += ",filled";
108-
node.fillcolor = elem[k][2];
128+
node.fillcolor = elem[k][3];
109129
}
110130

111-
if (elem[k][3])
112-
node.fontcolor = elem[k][3];
131+
if (elem[k][4])
132+
node.fontcolor = elem[k][4];
113133
}
114134

115135
elements.push([uid, node]);

0 commit comments

Comments
 (0)