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'; }
-(?!\n|;|#)*[^\n]* { this.popState(); return "description_value"; }
+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'; }
+(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; }
+accDescr\s*"{"\s* { this.begin("acc_descr_multiline");}
+[\}] { this.popState(); }
+[^\}]* return "acc_descr_multiline_value";
\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return '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');