diff --git a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison index 348c31fad8..136654a7f2 100644 --- a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison +++ b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison @@ -18,7 +18,7 @@ \#[^\n]* /* skip comments */ "timeline" return 'timeline'; -"title"\s[^#\n;]+ return 'title'; +"title"\s[^#\n]+ return 'title'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } @@ -26,11 +26,11 @@ accDescr\s*":"\s* { this.begin("ac accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; -"section"\s[^#:\n;]+ return 'section'; +"section"\s[^#:\n]+ return 'section'; // event starting with "==>" keyword -":"\s[^#:\n;]+ return 'event'; -[^#:\n;]+ return 'period'; +":"\s[^#:\n]+ return 'event'; +[^#:\n]+ return 'period'; <> return 'EOF'; diff --git a/packages/mermaid/src/diagrams/timeline/timeline.spec.js b/packages/mermaid/src/diagrams/timeline/timeline.spec.js index 69b9df1bad..186713ce1e 100644 --- a/packages/mermaid/src/diagrams/timeline/timeline.spec.js +++ b/packages/mermaid/src/diagrams/timeline/timeline.spec.js @@ -98,5 +98,30 @@ describe('when parsing a timeline ', function () { } }); }); + + it('TL-6 should handle a section, and task and its multi line events with semicolons', function () { + let str = `timeline + section ;a;bc-123; + ;ta;sk1;: ;ev;ent1; + ;tas;k2;: ;eve;nt2;: ;event;3; + : ;eve;nt4: ;even;t5; + `; + timeline.parse(str); + expect(timelineDB.getSections()[0]).to.deep.equal(';a;bc-123;'); + timelineDB.getTasks().forEach((t) => { + switch (t.task.trim()) { + case ';ta;sk1;': + expect(t.events).to.deep.equal([';ev;ent1;']); + break; + + case ';tas;k2;': + expect(t.events).to.deep.equal([';eve;nt2;', ';event;3;', ';eve;nt4', ';even;t5;']); + break; + + default: + break; + } + }); + }); }); });