Trimming whitespace after participant id

This commit is contained in:
IOrlandoni
2019-07-14 11:51:20 -04:00
parent e5bd0e6dc7
commit e93cc85e9b
3 changed files with 42 additions and 32 deletions

View File

@@ -27,7 +27,7 @@
<INITIAL,ID,ALIAS,LINE>\#[^\n]* /* skip comments */
\%%[^\n]* /* skip comments */
"participant" { this.begin('ID'); return 'participant'; }
<ID>[^\->:\n,;]+?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { this.begin('ALIAS'); return 'ACTOR'; }
<ID>[^\->:\n,;]+?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; }
<ALIAS>"as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; }
<ALIAS>(?:) { this.popState(); this.popState(); return 'NL'; }
"loop" { this.begin('LINE'); return 'loop'; }

View File

@@ -71,7 +71,7 @@
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
}
*/
var parser = (function(){
var sequenceDiagram = (function(){
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,23],$Vf=[1,24],$Vg=[1,4,5,10,15,16,18,20,21,22,23,25,27,28,29,40],$Vh=[1,32],$Vi=[4,5,10,15,16,18,20,21,22,23,25,29,40],$Vj=[4,5,10,15,16,18,20,21,22,23,25,28,29,40],$Vk=[4,5,10,15,16,18,20,21,22,23,25,27,29,40],$Vl=[38,39,40];
var parser = {trace: function trace () { },
yy: {},
@@ -252,18 +252,15 @@ parse: function parse(input) {
vstack.length = vstack.length - n;
lstack.length = lstack.length - n;
}
function lex() {
_token_stack:
var lex = function () {
var token;
token = tstack.pop() || lexer.lex() || EOF;
token = lexer.lex() || EOF;
if (typeof token !== 'number') {
if (token instanceof Array) {
tstack = token;
token = tstack.pop();
}
token = self.symbols_[token] || token;
}
return token;
}
};
var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
while (true) {
state = stack[stack.length - 1];
@@ -704,7 +701,7 @@ case 4:/* skip comments */
break;
case 5: this.begin('ID'); return 10;
break;
case 6: this.begin('ALIAS'); return 40;
case 6: yy_.yytext = yy_.yytext.trim(); this.begin('ALIAS'); return 40;
break;
case 7: this.popState(); this.popState(); this.begin('LINE'); return 12;
break;
@@ -787,9 +784,9 @@ return new Parser;
if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
exports.parser = parser;
exports.Parser = parser.Parser;
exports.parse = function () { return parser.parse.apply(parser, arguments); };
exports.parser = sequenceDiagram;
exports.Parser = sequenceDiagram.Parser;
exports.parse = function () { return sequenceDiagram.parse.apply(sequenceDiagram, arguments); };
exports.main = function commonjsMain (args) {
if (!args[1]) {
console.log('Usage: '+args[0]+' FILE');

View File

@@ -770,6 +770,19 @@ describe('when rendering a sequenceDiagram', function () {
expect(bounds.stopy).toBe(conf.height)
})
})
it('it should handle same actor with different whitespace properly', function () {
renderer.bounds.init()
const str = 'sequenceDiagram\n' +
'participant Alice\n' +
'participant Alice \n' +
'participant Alice \n'
parser.parse(str)
const actors = parser.yy.getActors()
expect(Object.keys(actors)).toEqual(['Alice'])
})
it('it should handle one actor and a centered note', function () {
renderer.bounds.init()
const str = 'sequenceDiagram\n' +