mermaid-ast 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # mermaid-ast
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/mermaid-ast)](https://www.npmjs.com/package/mermaid-ast)
3
4
  [![Built with Slate](https://img.shields.io/badge/Built%20with-Slate-blue)](https://randomlabs.ai)
4
5
 
5
6
  Parse and render Mermaid diagrams to/from AST (Abstract Syntax Tree).
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Class Diagram AST Types
3
+ */
4
+ export type ClassDirection = "TB" | "BT" | "LR" | "RL";
5
+ export type RelationType = "aggregation" | "extension" | "composition" | "dependency" | "lollipop" | "none";
6
+ export type LineType = "solid" | "dotted";
7
+ export interface ClassRelation {
8
+ id1: string;
9
+ id2: string;
10
+ relation: {
11
+ type1: RelationType;
12
+ type2: RelationType;
13
+ lineType: LineType;
14
+ };
15
+ relationTitle1?: string;
16
+ relationTitle2?: string;
17
+ title?: string;
18
+ }
19
+ export interface ClassMember {
20
+ text: string;
21
+ visibility?: "+" | "-" | "#" | "~";
22
+ type?: "method" | "attribute";
23
+ }
24
+ export interface ClassDefinition {
25
+ id: string;
26
+ label?: string;
27
+ members: ClassMember[];
28
+ annotations: string[];
29
+ cssClasses: string[];
30
+ styles: string[];
31
+ link?: string;
32
+ linkTarget?: string;
33
+ tooltip?: string;
34
+ callback?: string;
35
+ callbackArgs?: string;
36
+ }
37
+ export interface ClassNote {
38
+ text: string;
39
+ forClass?: string;
40
+ }
41
+ export interface Namespace {
42
+ name: string;
43
+ classes: string[];
44
+ }
45
+ export interface ClassDefStyle {
46
+ name: string;
47
+ styles: string[];
48
+ }
49
+ export interface ClassDiagramAST {
50
+ type: "classDiagram";
51
+ direction: ClassDirection;
52
+ classes: Map<string, ClassDefinition>;
53
+ relations: ClassRelation[];
54
+ namespaces: Map<string, Namespace>;
55
+ notes: ClassNote[];
56
+ classDefs: Map<string, ClassDefStyle>;
57
+ accTitle?: string;
58
+ accDescription?: string;
59
+ }
60
+ /**
61
+ * Create an empty ClassDiagramAST
62
+ */
63
+ export declare function createClassDiagramAST(): ClassDiagramAST;
64
+ //# sourceMappingURL=class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/types/class.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvD,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,WAAW,GACX,aAAa,GACb,YAAY,GACZ,UAAU,GACV,MAAM,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE;QACR,KAAK,EAAE,YAAY,CAAC;QACpB,KAAK,EAAE,YAAY,CAAC;QACpB,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACnC,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACtC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAUvD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Class Diagram AST Types
3
+ */
4
+ /**
5
+ * Create an empty ClassDiagramAST
6
+ */
7
+ export function createClassDiagramAST() {
8
+ return {
9
+ type: "classDiagram",
10
+ direction: "TB",
11
+ classes: new Map(),
12
+ relations: [],
13
+ namespaces: new Map(),
14
+ notes: [],
15
+ classDefs: new Map(),
16
+ };
17
+ }
@@ -0,0 +1 @@
1
+ mermaid@11.12.2
@@ -0,0 +1,429 @@
1
+ /** mermaid
2
+ * https://mermaidjs.github.io/
3
+ * (c) 2015 Knut Sveidqvist
4
+ * MIT license.
5
+ */
6
+
7
+ /* lexical grammar */
8
+ %lex
9
+ %x string
10
+ %x bqstring
11
+ %x generic
12
+ %x struct
13
+ %x href
14
+ %x callback_name
15
+ %x callback_args
16
+ %x acc_title
17
+ %x acc_descr
18
+ %x acc_descr_multiline
19
+ %x class
20
+ %x class-body
21
+ %x namespace
22
+ %x namespace-body
23
+ %%
24
+ .*direction\s+TB[^\n]* return 'direction_tb';
25
+ .*direction\s+BT[^\n]* return 'direction_bt';
26
+ .*direction\s+RL[^\n]* return 'direction_rl';
27
+ .*direction\s+LR[^\n]* return 'direction_lr';
28
+ \%\%(?!\{)*[^\n]*(\r?\n?)+ /* skip comments */
29
+ \%\%[^\n]*(\r?\n)* /* skip comments */
30
+ accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; }
31
+ <acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; }
32
+ accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; }
33
+ <acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; }
34
+ accDescr\s*"{"\s* { this.begin("acc_descr_multiline");}
35
+ <acc_descr_multiline>[\}] { this.popState(); }
36
+ <acc_descr_multiline>[^\}]* return "acc_descr_multiline_value";
37
+
38
+ \s*(\r?\n)+ return 'NEWLINE';
39
+ \s+ /* skip whitespace */
40
+
41
+ "classDiagram-v2" return 'CLASS_DIAGRAM';
42
+ "classDiagram" return 'CLASS_DIAGRAM';
43
+ "[*]" return 'EDGE_STATE';
44
+
45
+ /*
46
+ ---interactivity command---
47
+ 'call' adds a callback to the specified node. 'call' can only be specified when
48
+ the line was introduced with 'click'.
49
+ 'call <callback_name>(<callback_args>)' attaches the function 'callback_name' with the specified
50
+ arguments to the node that was specified by 'click'.
51
+ Function arguments are optional: 'call <callback_name>()' simply executes 'callback_name' without any arguments.
52
+ */
53
+ <INITIAL>"call"[\s]+ this.begin("callback_name");
54
+ <callback_name>\([\s]*\) this.popState();
55
+ <callback_name>\( this.popState(); this.begin("callback_args");
56
+ <callback_name>[^(]* return 'CALLBACK_NAME';
57
+ <callback_args>\) this.popState();
58
+ <callback_args>[^)]* return 'CALLBACK_ARGS';
59
+
60
+ <string>["] this.popState();
61
+ <string>[^"]* return "STR";
62
+ <*>["] this.begin("string");
63
+ "style" return 'STYLE';
64
+ "classDef" return 'CLASSDEF';
65
+
66
+ <INITIAL,namespace>"namespace" { this.begin('namespace'); return 'NAMESPACE'; }
67
+ <namespace>\s*(\r?\n)+ { this.popState(); return 'NEWLINE'; }
68
+ <namespace>\s+ /* skip whitespace */
69
+ <namespace>[{] { this.begin("namespace-body"); return 'STRUCT_START';}
70
+ <namespace-body>[}] { this.popState(); return 'STRUCT_STOP'; }
71
+ <namespace-body><<EOF>> return "EOF_IN_STRUCT";
72
+ <namespace-body>\s*(\r?\n)+ return 'NEWLINE';
73
+ <namespace-body>\s+ /* skip whitespace */
74
+ <namespace-body>"[*]" return 'EDGE_STATE';
75
+
76
+ <INITIAL,namespace-body>"class" { this.begin('class'); return 'CLASS';}
77
+ <class>\s*(\r?\n)+ { this.popState(); return 'NEWLINE'; }
78
+ <class>\s+ /* skip whitespace */
79
+ <class>[}] { this.popState(); this.popState(); return 'STRUCT_STOP';}
80
+ <class>[{] { this.begin("class-body"); return 'STRUCT_START';}
81
+ <class-body>[}] { this.popState(); return 'STRUCT_STOP'; }
82
+ <class-body><<EOF>> return "EOF_IN_STRUCT";
83
+ <class-body>"[*]" { return 'EDGE_STATE';}
84
+ <class-body>[{] return "OPEN_IN_STRUCT";
85
+ <class-body>[\n] /* nothing */
86
+ <class-body>[^{}\n]* { return "MEMBER";}
87
+
88
+ <*>"cssClass" return 'CSSCLASS';
89
+ <*>"callback" return 'CALLBACK';
90
+ <*>"link" return 'LINK';
91
+ <*>"click" return 'CLICK';
92
+ <*>"note for" return 'NOTE_FOR';
93
+ <*>"note" return 'NOTE';
94
+ <*>"<<" return 'ANNOTATION_START';
95
+ <*>">>" return 'ANNOTATION_END';
96
+
97
+ /*
98
+ ---interactivity command---
99
+ 'href' adds a link to the specified node. 'href' can only be specified when the
100
+ line was introduced with 'click'.
101
+ 'href "<link>"' attaches the specified link to the node that was specified by 'click'.
102
+ */
103
+ <*>"href" return 'HREF';
104
+
105
+ <generic>[~] this.popState();
106
+ <generic>[^~]* return "GENERICTYPE";
107
+ <*>"~" this.begin("generic");
108
+
109
+ <bqstring>[`] this.popState();
110
+ <bqstring>[^`]+ return "BQUOTE_STR";
111
+ <*>[`] this.begin("bqstring");
112
+
113
+ <*>"_self" return 'LINK_TARGET';
114
+ <*>"_blank" return 'LINK_TARGET';
115
+ <*>"_parent" return 'LINK_TARGET';
116
+ <*>"_top" return 'LINK_TARGET';
117
+
118
+ <*>\s*\<\| return 'EXTENSION';
119
+ <*>\s*\|\> return 'EXTENSION';
120
+ <*>\s*\> return 'DEPENDENCY';
121
+ <*>\s*\< return 'DEPENDENCY';
122
+ <*>\s*\* return 'COMPOSITION';
123
+ <*>\s*o return 'AGGREGATION';
124
+ <*>\s*\(\) return 'LOLLIPOP';
125
+ <*>\-\- return 'LINE';
126
+ <*>\.\. return 'DOTTED_LINE';
127
+ <*>":"{1}[^:\n;]+ return 'LABEL';
128
+ <*>":"{3} return 'STYLE_SEPARATOR';
129
+ <*>\- return 'MINUS';
130
+ <*>"." return 'DOT';
131
+ <*>\+ return 'PLUS';
132
+ ":" return 'COLON';
133
+ "," return 'COMMA';
134
+ \# return 'BRKT';
135
+ "#" return 'BRKT';
136
+ <*>\% return 'PCT';
137
+ <*>"=" return 'EQUALS';
138
+ <*>\= return 'EQUALS';
139
+ <*>\w+ return 'ALPHA';
140
+ <*>"[" return 'SQS';
141
+ <*>"]" return 'SQE';
142
+ <*>[!"#$%&'*+,-.`?\\/] return 'PUNCTUATION';
143
+ <*>[0-9]+ return 'NUM';
144
+ <*>[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|
145
+ [\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|
146
+ [\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|
147
+ [\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|
148
+ [\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|
149
+ [\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|
150
+ [\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|
151
+ [\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|
152
+ [\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|
153
+ [\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|
154
+ [\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|
155
+ [\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|
156
+ [\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|
157
+ [\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|
158
+ [\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|
159
+ [\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|
160
+ [\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|
161
+ [\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|
162
+ [\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|
163
+ [\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|
164
+ [\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|
165
+ [\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|
166
+ [\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|
167
+ [\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|
168
+ [\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|
169
+ [\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|
170
+ [\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|
171
+ [\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|
172
+ [\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|
173
+ [\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|
174
+ [\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|
175
+ [\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|
176
+ [\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|
177
+ [\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|
178
+ [\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|
179
+ [\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|
180
+ [\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|
181
+ [\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|
182
+ [\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|
183
+ [\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|
184
+ [\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|
185
+ [\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|
186
+ [\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|
187
+ [\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|
188
+ [\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|
189
+ [\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|
190
+ [\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|
191
+ [\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|
192
+ [\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|
193
+ [\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|
194
+ [\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|
195
+ [\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|
196
+ [\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|
197
+ [\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|
198
+ [\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|
199
+ [\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|
200
+ [\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|
201
+ [\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|
202
+ [\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|
203
+ [\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|
204
+ [\uFFD2-\uFFD7\uFFDA-\uFFDC]
205
+ return 'UNICODE_TEXT';
206
+ <*>\s return 'SPACE';
207
+ \s return 'SPACE';
208
+ <*><<EOF>> return 'EOF';
209
+
210
+ /lex
211
+
212
+ /* operator associations and precedence */
213
+
214
+ %left '^'
215
+
216
+ %start start
217
+
218
+ %% /* language grammar */
219
+
220
+ start
221
+ : mermaidDoc
222
+ | statements
223
+ ;
224
+
225
+ mermaidDoc
226
+ : graphConfig
227
+ ;
228
+
229
+ graphConfig
230
+ : CLASS_DIAGRAM NEWLINE statements EOF
231
+ ;
232
+
233
+ statements
234
+ : statement
235
+ | statement NEWLINE
236
+ | statement NEWLINE statements
237
+ ;
238
+
239
+ classLabel
240
+ : SQS STR SQE { $$=$2; }
241
+ ;
242
+
243
+ namespaceName
244
+ : alphaNumToken { $$=$1; }
245
+ | classLiteralName { $$=$1; }
246
+ | alphaNumToken DOT namespaceName { $$=$1+'.'+$3; }
247
+ | alphaNumToken namespaceName { $$=$1+$2; }
248
+ ;
249
+
250
+ className
251
+ : alphaNumToken { $$=$1; }
252
+ | alphaNumToken DOT className { $$=$1+'.'+$3; }
253
+ | classLiteralName { $$=$1; }
254
+ | alphaNumToken className { $$=$1+$2; }
255
+ | alphaNumToken GENERICTYPE { $$=$1+'~'+$2+'~'; }
256
+ | classLiteralName GENERICTYPE { $$=$1+'~'+$2+'~'; }
257
+ ;
258
+
259
+ statement
260
+ : relationStatement { yy.addRelation($1); }
261
+ | relationStatement LABEL { $1.title = yy.cleanupLabel($2); yy.addRelation($1); }
262
+ | namespaceStatement
263
+ | classStatement
264
+ | memberStatement
265
+ | annotationStatement
266
+ | clickStatement
267
+ | styleStatement
268
+ | cssClassStatement
269
+ | noteStatement
270
+ | classDefStatement
271
+ | direction
272
+ | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); }
273
+ | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); }
274
+ | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); }
275
+ ;
276
+
277
+ namespaceStatement
278
+ : namespaceIdentifier STRUCT_START classStatements STRUCT_STOP { yy.addClassesToNamespace($1, $3); }
279
+ | namespaceIdentifier STRUCT_START NEWLINE classStatements STRUCT_STOP { yy.addClassesToNamespace($1, $4); }
280
+ ;
281
+
282
+ namespaceIdentifier
283
+ : NAMESPACE namespaceName { $$=$2; yy.addNamespace($2); }
284
+ ;
285
+
286
+ classStatements
287
+ : classStatement {$$=[$1]}
288
+ | classStatement NEWLINE {$$=[$1]}
289
+ | classStatement NEWLINE classStatements {$3.unshift($1); $$=$3}
290
+ ;
291
+
292
+ classStatement
293
+ : classIdentifier
294
+ | classIdentifier STYLE_SEPARATOR alphaNumToken {yy.setCssClass($1, $3);}
295
+ | classIdentifier STRUCT_START members STRUCT_STOP {yy.addMembers($1,$3);}
296
+ | classIdentifier STRUCT_START STRUCT_STOP {}
297
+ | classIdentifier STYLE_SEPARATOR alphaNumToken STRUCT_START members STRUCT_STOP {yy.setCssClass($1, $3);yy.addMembers($1,$5);}
298
+ ;
299
+
300
+ classIdentifier
301
+ : CLASS className {$$=$2; yy.addClass($2);}
302
+ | CLASS className classLabel {$$=$2; yy.addClass($2);yy.setClassLabel($2, $3);}
303
+ ;
304
+
305
+
306
+ emptyBody
307
+ :
308
+ | SPACE emptyBody
309
+ | NEWLINE emptyBody
310
+ ;
311
+
312
+ annotationStatement
313
+ : ANNOTATION_START alphaNumToken ANNOTATION_END className { yy.addAnnotation($4,$2); }
314
+ ;
315
+
316
+ members
317
+ : MEMBER { $$ = [$1]; }
318
+ | MEMBER members { $2.push($1);$$=$2;}
319
+ ;
320
+
321
+ memberStatement
322
+ : className {/*console.log('Rel found',$1);*/}
323
+ | className LABEL {yy.addMember($1,yy.cleanupLabel($2));}
324
+ | MEMBER {/*console.warn('Member',$1);*/}
325
+ | SEPARATOR {/*console.log('sep found',$1);*/}
326
+ ;
327
+
328
+ relationStatement
329
+ : className relation className { $$ = {'id1':$1,'id2':$3, relation:$2, relationTitle1:'none', relationTitle2:'none'}; }
330
+ | className STR relation className { $$ = {id1:$1, id2:$4, relation:$3, relationTitle1:$2, relationTitle2:'none'}}
331
+ | className relation STR className { $$ = {id1:$1, id2:$4, relation:$2, relationTitle1:'none', relationTitle2:$3}; }
332
+ | className STR relation STR className { $$ = {id1:$1, id2:$5, relation:$3, relationTitle1:$2, relationTitle2:$4} }
333
+ ;
334
+
335
+ noteStatement
336
+ : NOTE_FOR className noteText { yy.addNote($3, $2); }
337
+ | NOTE noteText { yy.addNote($2); }
338
+ ;
339
+
340
+ classDefStatement
341
+ : CLASSDEF classList stylesOpt {$$ = $CLASSDEF;yy.defineClass($classList,$stylesOpt);}
342
+ ;
343
+
344
+ classList
345
+ : ALPHA { $$ = [$ALPHA]; }
346
+ | classList COMMA ALPHA = { $$ = $classList.concat([$ALPHA]); }
347
+ ;
348
+
349
+ direction
350
+ : direction_tb
351
+ { yy.setDirection('TB');}
352
+ | direction_bt
353
+ { yy.setDirection('BT');}
354
+ | direction_rl
355
+ { yy.setDirection('RL');}
356
+ | direction_lr
357
+ { yy.setDirection('LR');}
358
+ ;
359
+
360
+ relation
361
+ : relationType lineType relationType { $$={type1:$1,type2:$3,lineType:$2}; }
362
+ | lineType relationType { $$={type1:'none',type2:$2,lineType:$1}; }
363
+ | relationType lineType { $$={type1:$1,type2:'none',lineType:$2}; }
364
+ | lineType { $$={type1:'none',type2:'none',lineType:$1}; }
365
+ ;
366
+
367
+ relationType
368
+ : AGGREGATION { $$=yy.relationType.AGGREGATION;}
369
+ | EXTENSION { $$=yy.relationType.EXTENSION;}
370
+ | COMPOSITION { $$=yy.relationType.COMPOSITION;}
371
+ | DEPENDENCY { $$=yy.relationType.DEPENDENCY;}
372
+ | LOLLIPOP { $$=yy.relationType.LOLLIPOP;}
373
+ ;
374
+
375
+ lineType
376
+ : LINE {$$=yy.lineType.LINE;}
377
+ | DOTTED_LINE {$$=yy.lineType.DOTTED_LINE;}
378
+ ;
379
+
380
+ clickStatement
381
+ : CALLBACK className STR {$$ = $1;yy.setClickEvent($2, $3);}
382
+ | CALLBACK className STR STR {$$ = $1;yy.setClickEvent($2, $3);yy.setTooltip($2, $4);}
383
+ | LINK className STR {$$ = $1;yy.setLink($2, $3);}
384
+ | LINK className STR LINK_TARGET {$$ = $1;yy.setLink($2, $3,$4);}
385
+ | LINK className STR STR {$$ = $1;yy.setLink($2, $3);yy.setTooltip($2, $4);}
386
+ | LINK className STR STR LINK_TARGET {$$ = $1;yy.setLink($2, $3, $5);yy.setTooltip($2, $4);}
387
+ | CLICK className CALLBACK_NAME {$$ = $1;yy.setClickEvent($2, $3);}
388
+ | CLICK className CALLBACK_NAME STR {$$ = $1;yy.setClickEvent($2, $3);yy.setTooltip($2, $4);}
389
+ | CLICK className CALLBACK_NAME CALLBACK_ARGS {$$ = $1;yy.setClickEvent($2, $3, $4);}
390
+ | CLICK className CALLBACK_NAME CALLBACK_ARGS STR {$$ = $1;yy.setClickEvent($2, $3, $4);yy.setTooltip($2, $5);}
391
+ | CLICK className HREF STR {$$ = $1;yy.setLink($2, $4);}
392
+ | CLICK className HREF STR LINK_TARGET {$$ = $1;yy.setLink($2, $4, $5);}
393
+ | CLICK className HREF STR STR {$$ = $1;yy.setLink($2, $4);yy.setTooltip($2, $5);}
394
+ | CLICK className HREF STR STR LINK_TARGET {$$ = $1;yy.setLink($2, $4, $6);yy.setTooltip($2, $5);}
395
+ ;
396
+
397
+ styleStatement
398
+ :STYLE ALPHA stylesOpt {$$ = $STYLE;yy.setCssStyle($2,$stylesOpt);}
399
+ ;
400
+
401
+ cssClassStatement
402
+ : CSSCLASS STR ALPHA {yy.setCssClass($2, $3);}
403
+ ;
404
+
405
+ stylesOpt
406
+ : style {$$ = [$style]}
407
+ | stylesOpt COMMA style {$stylesOpt.push($style);$$ = $stylesOpt;}
408
+ ;
409
+
410
+ style
411
+ : styleComponent
412
+ | style styleComponent {$$ = $style + $styleComponent;}
413
+ ;
414
+
415
+ styleComponent: ALPHA | NUM | COLON | UNIT | SPACE | BRKT | STYLE | PCT | LABEL;
416
+
417
+ commentToken : textToken | graphCodeTokens ;
418
+
419
+ textToken : textNoTagsToken | TAGSTART | TAGEND | '==' | '--' | PCT | DEFAULT;
420
+
421
+ textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ;
422
+
423
+ alphaNumToken : UNICODE_TEXT | NUM | ALPHA | MINUS;
424
+
425
+ classLiteralName : BQUOTE_STR;
426
+
427
+ noteText : STR;
428
+
429
+ %%