From 5f4b7ae36909fbd4d59afde8a86940069f775dfb Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Sat, 30 Apr 2022 15:00:50 +0200 Subject: [PATCH] Updated er diagrams with the new syntax --- src/diagrams/er/parser/erDiagram.jison | 20 +++++++++++++------- src/diagrams/er/parser/erDiagram.spec.js | 23 +++++++++++++++++++++-- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/diagrams/er/parser/erDiagram.jison b/src/diagrams/er/parser/erDiagram.jison index 7461cb064..2c65073ff 100644 --- a/src/diagrams/er/parser/erDiagram.jison +++ b/src/diagrams/er/parser/erDiagram.jison @@ -2,14 +2,18 @@ %options case-insensitive %x open_directive type_directive arg_directive block -%x title -%x accDescription +%x acc_title +%x acc_descr +%x acc_descr_multiline %% -title { this.begin("title");return 'title'; } -(?!\n|;|#)*[^\n]* { this.popState(); return "title_value"; } -accDescription { this.begin("accDescription");return 'accDescription'; } -<accDescription>(?!\n|;|#)*[^\n]* { this.popState(); return "description_value"; } +accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } +<acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } +accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } +<acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } +accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} +<acc_descr_multiline>[\}] { this.popState(); } +<acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; \%\%\{ { this.begin('open_directive'); return 'open_directive'; } <open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } <type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; } @@ -91,7 +95,9 @@ statement | entityName BLOCK_START BLOCK_STOP { yy.addEntity($1); } | entityName { yy.addEntity($1); } | title title_value { $$=$2.trim();yy.setTitle($$); } - | accDescription description_value { $$=$2.trim();yy.setAccDescription($$); } + | acc_title acc_title_value { $$=$2.trim();yy.setTitle($$); } + | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } + | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } ; entityName diff --git a/src/diagrams/er/parser/erDiagram.spec.js b/src/diagrams/er/parser/erDiagram.spec.js index edfec58d6..84c64d1ce 100644 --- a/src/diagrams/er/parser/erDiagram.spec.js +++ b/src/diagrams/er/parser/erDiagram.spec.js @@ -181,12 +181,31 @@ describe('when parsing ER diagram it...', function () { expect(Object.keys(erDb.getEntities()).length).toBe(1); }); - it('should allow for a title and acc description', function () { + it('should allow for a accessibility title and description (accDescr)', function () { const teacherRole = 'is teacher of'; const line1 = `TEACHER }o--o{ STUDENT : "${teacherRole}"`; erDiagram.parser.parse( - `erDiagram\ntitle graph title\n accDescription this graph is about stuff\n${line1}` + `erDiagram + accTitle: graph title + accDescr: this graph is about stuff + ${line1}` + ); + expect(erDb.getTitle()).toBe('graph title'); + expect(erDb.getAccDescription()).toBe('this graph is about stuff'); + }); + + it('should allow for a accessibility title and multi line description (accDescr)', function () { + const teacherRole = 'is teacher of'; + const line1 = `TEACHER }o--o{ STUDENT : "${teacherRole}"`; + + erDiagram.parser.parse( + `erDiagram + accTitle: graph title + accDescr { + this graph is about stuff + }\n + ${line1}` ); expect(erDb.getTitle()).toBe('graph title'); expect(erDb.getAccDescription()).toBe('this graph is about stuff');