diff --git a/src/diagrams/class/classDiagram.spec.js b/src/diagrams/class/classDiagram.spec.js index ef2a98415..dd0d29452 100644 --- a/src/diagrams/class/classDiagram.spec.js +++ b/src/diagrams/class/classDiagram.spec.js @@ -242,69 +242,74 @@ describe('class diagram, ', function () { it('should handle comments at the start', function () { const str = - '%% Comment\n' + - 'classDiagram\n' + - 'class Class1 {\n' + - 'int : test\n' + - 'string : foo\n' + - 'test()\n' + - 'foo()\n' + - '}'; + `%% Comment + classDiagram + class Class1 { + int : test + string : foo + test() + foo() + }`; parser.parse(str); }); it('should handle comments at the end', function () { const str = - 'classDiagram\n' + - 'class Class1 {\n' + - 'int : test\n' + - 'string : foo\n' + - 'test()\n' + - 'foo()\n' + - '\n}' + - '%% Comment\n'; + `classDiagram +class Class1 { +int : test +string : foo +test() +foo() + +} +%% Comment +`; parser.parse(str); }); it('should handle comments at the end no trailing newline', function () { const str = - 'classDiagram\n' + - 'class Class1 {\n' + - 'int : test\n' + - 'string : foo\n' + - 'test()\n' + - 'foo()\n' + - '}\n' + - '%% Comment'; + `classDiagram +class Class1 { +int : test +string : foo +test() +foo() +} +%% Comment`; parser.parse(str); }); it('should handle a comment with multiple line feeds', function () { const str = - 'classDiagram\n\n\n' + - '%% Comment\n\n' + - 'class Class1 {\n' + - 'int : test\n' + - 'string : foo\n' + - 'test()\n' + - 'foo()\n' + - '}'; + `classDiagram + + +%% Comment + +class Class1 { +int : test +string : foo +test() +foo() +}`; parser.parse(str); }); it('should handle a comment with mermaid class diagram code in them', function () { const str = - 'classDiagram\n' + - '%% Comment Class01 <|-- Class02\n' + - 'class Class1 {\n' + - 'int : test\n' + - 'string : foo\n' + - 'test()\n' + - 'foo()\n' + - '}'; + `classDiagram +%% Comment Class01 <|-- Class02 +class Class1 { +int : test +string : foo +test() +foo() +}`; parser.parse(str); }); @@ -640,7 +645,7 @@ describe('class diagram, ', function () { expect(testClass.cssClasses.length).toBe(1); expect(testClass.cssClasses[0]).toBe('clickable'); }); - + it('should associate link with tooltip', function () { const str = 'classDiagram\n' + 'class Class1\n' + 'Class1 : someMethod()\n' + 'link Class1 "google.com" "A tooltip"'; parser.parse(str); diff --git a/src/diagrams/class/parser/classDiagram.jison b/src/diagrams/class/parser/classDiagram.jison index 6bc53956b..7c8d36a95 100644 --- a/src/diagrams/class/parser/classDiagram.jison +++ b/src/diagrams/class/parser/classDiagram.jison @@ -17,11 +17,11 @@ ":" { this.popState(); this.begin('arg_directive'); return ':'; } \}\%\% { this.popState(); this.popState(); return 'close_directive'; } ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; -\%%(?!\{)[^\n]* /* skip comments */ -[^\}]\%\%[^\n]* /* skip comments */ -\%\%[^\n]*\n* /* do nothing */ -\n+ return 'NEWLINE'; -\s+ /* skip whitespace */ +\%\%(?!\{)*[^\n]* /* skip comments */ +[^\}]\%\%*[^\n]* /* skip comments */ +\%\%*[^\n]*[\n]* /* do nothing */ +[\n]+ return 'NEWLINE'; +[\s]+ /* skip whitespace */ "classDiagram-v2" return 'CLASS_DIAGRAM'; "classDiagram" return 'CLASS_DIAGRAM'; [\{] { this.begin("struct"); /*console.log('Starting struct');*/return 'STRUCT_START';} @@ -146,11 +146,15 @@ mermaidDoc ; graphConfig - : CLASS_DIAGRAM NEWLINE statements EOF + : NEWLINE + | NEWLINE graphConfig + | graphConfig NEWLINE + | CLASS_DIAGRAM NEWLINE statements EOF ; statements : statement + | NEWLINE statement | statement NEWLINE | statement NEWLINE statements ;