Allow end as a substring of vertex id

Jison adds \b (word boundary) to literal string patterns by default.
It does so, because it doesn't follow traditional match-longest
approach, but does match-first instead. Without including word
boundaries, it'd be hard to distinguish between a keyword and
identifier.

The pattern for `end` keyword is not a simple string literal - it
swallows trailing whitespace, so we have to add \b manually.

This partially fixes #184 - at least now `end` behaves the same as other
keywords: it can be used as a prefix and infix, but not as a suffix.

To solve this issue completely, ALPHA pattern would have to match
multiple letters, which is a much bigger change.
This commit is contained in:
Tomasz Szczęśniak-Szlagowski 2015-10-15 00:31:18 +01:00
parent ed65e6df3b
commit b87764ed94
10 changed files with 42 additions and 22 deletions

10
dist/mermaid.js vendored
View File

@ -32062,9 +32062,15 @@ exports.addVertices = function (vert, g) {
verticeText = vertice.text;
}
var labelTypeStr = '';
if(conf.htmlLabels) {
labelTypeStr = 'html';
verticeText = verticeText.replace(/fa:fa[\w\-]+/g,function(s,t,u){
return '<i class="fa '+ s.substring(3)+'">&nbsp';
});
} else {
verticeText = verticeText.replace(/<br>/g, "\n");
labelTypeStr = 'text';
@ -38091,10 +38097,6 @@ exports.encodeEntities = function(text){
});
//txt = txt.replace(/fa:fa[\w\-]+/g,function(s,t,u){
// return 'fa:¢';
//});
return txt;
};

2
dist/mermaid.min.js vendored

File diff suppressed because one or more lines are too long

10
dist/mermaid.slim.js vendored
View File

@ -22846,9 +22846,15 @@ exports.addVertices = function (vert, g) {
verticeText = vertice.text;
}
var labelTypeStr = '';
if(conf.htmlLabels) {
labelTypeStr = 'html';
verticeText = verticeText.replace(/fa:fa[\w\-]+/g,function(s,t,u){
return '<i class="fa '+ s.substring(3)+'">&nbsp';
});
} else {
verticeText = verticeText.replace(/<br>/g, "\n");
labelTypeStr = 'text';
@ -28875,10 +28881,6 @@ exports.encodeEntities = function(text){
});
//txt = txt.replace(/fa:fa[\w\-]+/g,function(s,t,u){
// return 'fa:¢';
//});
return txt;
};

File diff suppressed because one or more lines are too long

10
dist/mermaidAPI.js vendored
View File

@ -31729,9 +31729,15 @@ exports.addVertices = function (vert, g) {
verticeText = vertice.text;
}
var labelTypeStr = '';
if(conf.htmlLabels) {
labelTypeStr = 'html';
verticeText = verticeText.replace(/fa:fa[\w\-]+/g,function(s,t,u){
return '<i class="fa '+ s.substring(3)+'">&nbsp';
});
} else {
verticeText = verticeText.replace(/<br>/g, "\n");
labelTypeStr = 'text';
@ -37376,10 +37382,6 @@ exports.encodeEntities = function(text){
});
//txt = txt.replace(/fa:fa[\w\-]+/g,function(s,t,u){
// return 'fa:¢';
//});
return txt;
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,7 +21,7 @@
"click" return 'CLICK';
"graph" return 'GRAPH';
"subgraph" return 'subgraph';
"end"\s* return 'end';
"end"\b\s* return 'end';
"LR" return 'DIR';
"RL" return 'DIR';
"TB" return 'DIR';

File diff suppressed because one or more lines are too long

View File

@ -308,6 +308,18 @@ describe('when parsing ',function(){
expect(edges[0].text).toBe('');
});
it('should handle node names with "end" substring',function(){
var res = flow.parser.parse('graph TD\nendpoint --> sender');
var vert = flow.parser.yy.getVertices();
var edges = flow.parser.yy.getEdges();
expect(vert['endpoint'].id).toBe('endpoint');
expect(vert['sender'].id).toBe('sender');
expect(edges[0].start).toBe('endpoint');
expect(edges[0].end).toBe('sender');
});
it('should handle open ended edges',function(){
var res = flow.parser.parse('graph TD;A---B;');