From 0a0b6d51ba3734478821942972db8a0a4a62c88e Mon Sep 17 00:00:00 2001 From: Ashley Bartlett Date: Tue, 27 Sep 2022 14:24:54 +1000 Subject: [PATCH 1/2] Add support for hyphens in participant names --- .../sequence/parser/sequenceDiagram.jison | 2 +- src/diagrams/sequence/sequenceDiagram.spec.js | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/diagrams/sequence/parser/sequenceDiagram.jison b/src/diagrams/sequence/parser/sequenceDiagram.jison index 616b3f8000..d5ba18b63b 100644 --- a/src/diagrams/sequence/parser/sequenceDiagram.jison +++ b/src/diagrams/sequence/parser/sequenceDiagram.jison @@ -37,7 +37,7 @@ [0-9]+(?=[ \n]+) return 'NUM'; "participant" { this.begin('ID'); return 'participant'; } "actor" { this.begin('ID'); return 'participant_actor'; } -[^\->:\n,;]+?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } +[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } "as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; } (?:) { this.popState(); this.popState(); return 'NEWLINE'; } "loop" { this.begin('LINE'); return 'loop'; } diff --git a/src/diagrams/sequence/sequenceDiagram.spec.js b/src/diagrams/sequence/sequenceDiagram.spec.js index 5b3d9b05d9..af1abd20cd 100644 --- a/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/src/diagrams/sequence/sequenceDiagram.spec.js @@ -257,6 +257,28 @@ Bob-->Alice-in-Wonderland:I am good thanks!`; expect(messages[0].from).toBe('Alice-in-Wonderland'); expect(messages[1].from).toBe('Bob'); }); + + it('should handle dashes in participant names', function () { + const str = ` +sequenceDiagram +participant Alice-in-Wonderland +participant Bob +Alice-in-Wonderland->Bob:Hello Bob, how are - you? +Bob-->Alice-in-Wonderland:I am good thanks!`; + + mermaidAPI.parse(str); + const actors = diagram.db.getActors(); + expect(Object.keys(actors)).toEqual(['Alice-in-Wonderland', 'Bob']); + expect(actors['Alice-in-Wonderland'].description).toBe('Alice-in-Wonderland'); + expect(actors.Bob.description).toBe('Bob'); + + const messages = diagram.db.getMessages(); + + expect(messages.length).toBe(2); + expect(messages[0].from).toBe('Alice-in-Wonderland'); + expect(messages[1].from).toBe('Bob'); + }); + it('should alias participants', function () { const str = ` sequenceDiagram From 7da6c0e86764bf187d3efa8d61846bd2c0548b14 Mon Sep 17 00:00:00 2001 From: Ashley Bartlett Date: Tue, 27 Sep 2022 14:25:19 +1000 Subject: [PATCH 2/2] Fix testing bug --- src/diagrams/sequence/sequenceDiagram.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diagrams/sequence/sequenceDiagram.spec.js b/src/diagrams/sequence/sequenceDiagram.spec.js index af1abd20cd..14d076337e 100644 --- a/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/src/diagrams/sequence/sequenceDiagram.spec.js @@ -249,7 +249,7 @@ Bob-->Alice-in-Wonderland:I am good thanks!`; mermaidAPI.parse(str); const actors = diagram.db.getActors(); expect(actors['Alice-in-Wonderland'].description).toBe('Alice-in-Wonderland'); - actors.Bob.description = 'Bob'; + expect(actors.Bob.description).toBe('Bob'); const messages = diagram.db.getMessages();