From 6d69c26c8dc479b6a6088e9ec6dd80104787917f Mon Sep 17 00:00:00 2001 From: futzmonitor Date: Wed, 20 Mar 2024 14:32:03 -0400 Subject: [PATCH] Changes to timeline.jison 1. Updated the regex for title, section, and event elements to allow hashtags. 2. Period elements remain unchanged. Changes to timeline.spec.js 1. Added test coverage to ensure that the title, section, and event elements allow hashtags without error. --- .../src/diagrams/timeline/parser/timeline.jison | 6 +++--- .../src/diagrams/timeline/timeline.spec.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison index 348c31fad8..8bf4aea6e5 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,10 +26,10 @@ 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'; +":"\s[^:\n;]+ return 'event'; [^#:\n;]+ return 'period'; diff --git a/packages/mermaid/src/diagrams/timeline/timeline.spec.js b/packages/mermaid/src/diagrams/timeline/timeline.spec.js index 69b9df1bad..e13d15f077 100644 --- a/packages/mermaid/src/diagrams/timeline/timeline.spec.js +++ b/packages/mermaid/src/diagrams/timeline/timeline.spec.js @@ -1,5 +1,6 @@ import { parser as timeline } from './parser/timeline.jison'; import * as timelineDB from './timelineDb.js'; +import * as commonDb from '../common/commonDb.js'; import { setLogLevel } from '../../diagram-api/diagramAPI.js'; describe('when parsing a timeline ', function () { @@ -98,5 +99,20 @@ describe('when parsing a timeline ', function () { } }); }); + + it('TL-6 should handle a title, section, task, and events with hashtags', function () { + let str = `timeline + title #my#title# + section #a#bc-123# + task1: #ev#ent1# : #ev#ent2# : #ev#ent3# + `; + timeline.parse(str); + expect(commonDb.getDiagramTitle()).equal('#my#title#'); + expect(timelineDB.getSections()).to.deep.equal(['#a#bc-123#']); + expect(timelineDB.getTasks()[0].task).equal('task1'); + expect(timelineDB.getTasks()[0].events[0]).equal('#ev#ent1# '); + expect(timelineDB.getTasks()[0].events[1]).equal('#ev#ent2# '); + expect(timelineDB.getTasks()[0].events[2]).equal('#ev#ent3#'); + }); }); });