diff --git a/src/diagrams/class/classDb.js b/src/diagrams/class/classDb.js index 3c0097aed..6576f5a50 100644 --- a/src/diagrams/class/classDb.js +++ b/src/diagrams/class/classDb.js @@ -4,6 +4,13 @@ import * as configApi from '../../config'; import common from '../common/common'; import utils from '../../utils'; import mermaidAPI from '../../mermaidAPI'; +import { + setTitle, + getTitle, + getAccDescription, + setAccDescription, + clear as commonClear, +} from '../../commonDb'; const MERMAID_DOM_ID_PREFIX = 'classid-'; @@ -77,6 +84,7 @@ export const clear = function () { classes = {}; funs = []; funs.push(setupToolTips); + commonClear(); }; export const getClass = function (id) { @@ -134,6 +142,7 @@ export const addAnnotation = function (className, annotation) { * @public */ export const addMember = function (className, member) { + console.log(className, member); const validatedClassName = splitClassNameAndType(className).className; const theClass = classes[validatedClassName]; @@ -345,28 +354,6 @@ const setDirection = (dir) => { direction = dir; }; -let title = ''; - -export const setTitle = function (txt) { - let sanitizedText = sanitizeText(txt, configApi.getConfig()); - title = sanitizedText; -}; - -export const getTitle = function () { - return title; -}; - -let accDescription = ''; - -export const setAccDescription = function (txt) { - let sanitizedText = sanitizeText(txt, configApi.getConfig()); - accDescription = sanitizedText; -}; - -export const getAccDescription = function () { - return accDescription; -}; - export default { parseDirective, setTitle, diff --git a/src/diagrams/class/classDiagram.spec.js b/src/diagrams/class/classDiagram.spec.js index fdf347b67..b9ccfe991 100644 --- a/src/diagrams/class/classDiagram.spec.js +++ b/src/diagrams/class/classDiagram.spec.js @@ -543,20 +543,33 @@ foo() expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE); }); - it('should have a title and accDescription', function () { - const str = - 'classDiagram\n' + - 'class Car~T~\n' + - 'title My Title\n' + - 'accDescription My Description\n'; - 'Car : -List~Wheel~ wheels\n' + - 'Car : +setWheels(List~Wheel~ wheels)\n' + - 'Car : +getWheels() List~Wheel~'; + it('should handle accTitle and accDescr', function () { + const str = `classDiagram + accTitle: My Title + accDescr: My Description + + Class01 <|-- Class02 + `; parser.parse(str); expect(parser.yy.getTitle()).toBe('My Title'); expect(parser.yy.getAccDescription()).toBe('My Description'); }); + it('should handle accTitle and multiline accDescr', function () { + const str = `classDiagram + accTitle: My Title + accDescr { + This is mu multi + line description + } + + Class01 <|-- Class02 + `; + + parser.parse(str); + expect(parser.yy.getTitle()).toBe('My Title'); + expect(parser.yy.getAccDescription()).toBe('This is mu multi\nline description'); + }); it('should handle relation definitions AGGREGATION and dotted line', function () { const str = 'classDiagram\n' + 'Class01 o.. Class02'; diff --git a/src/diagrams/class/parser/classDiagram.jison b/src/diagrams/class/parser/classDiagram.jison index 8c59adcce..e298dd2f0 100644 --- a/src/diagrams/class/parser/classDiagram.jison +++ b/src/diagrams/class/parser/classDiagram.jison @@ -16,7 +16,9 @@ %x open_directive %x type_directive %x arg_directive - +%x acc_title +%x acc_descr +%x acc_descr_multiline %% \%\%\{ { this.begin('open_directive'); return 'open_directive'; } .*direction\s+TB[^\n]* return 'direction_tb'; @@ -29,8 +31,13 @@ ((?:(?!\}\%\%).|\n)*) return 'arg_directive'; \%\%(?!\{)*[^\n]*(\r?\n?)+ /* skip comments */ \%\%[^\n]*(\r?\n)* /* skip comments */ -"title"\s[^#\n;]+ return 'title'; -"accDescription"\s[^#\n;]+ return 'accDescription'; +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"; \s*(\r?\n)+ return 'NEWLINE'; \s+ /* skip whitespace */ @@ -256,9 +263,9 @@ statement | cssClassStatement | directive | direction - | title {yy.setTitle($1.substring(6));$$=$1.substring(6);} - | accDescription {yy.setAccDescription($1.substring(15));$$=$1.substring(15);} - + | acc_title acc_title_value { console.log('acc_title');$$=$2.trim();yy.setTitle($$); } + | acc_descr acc_descr_value { console.log('acc_descr');$$=$2.trim();yy.setAccDescription($$); } + | acc_descr_multiline_value { console.log('acc_descr_multiline_value');$$=$1.trim();yy.setAccDescription($$); } ; classStatement