/
source.mermaid.js
289 lines (288 loc) · 9.68 KB
/
source.mermaid.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/Alhadis/language-mermaid>
// and licensed `isc`.
// See <https://github.com/wooorm/starry-night> for more info.
/** @type {import('../lib/index.js').Grammar} */
const grammar = {
dependencies: [
'source.mermaid.c4c-diagram',
'source.mermaid.class-diagram',
'source.mermaid.er-diagram',
'source.mermaid.flowchart',
'source.mermaid.gantt',
'source.mermaid.gitgraph',
'source.mermaid.mindmap',
'source.mermaid.pie-chart',
'source.mermaid.requirement-diagram',
'source.mermaid.sequence-diagram',
'source.mermaid.state-diagram',
'source.mermaid.user-journey'
],
extensions: ['.mmd', '.mermaid'],
names: ['mermaid', 'mermaid-example'],
patterns: [{include: '#main'}],
repository: {
a11y: {
begin: '(?:\\G|^|(?<=\\s|;|%%))acc(Title|Descr)(?:(?=\\s*[:{])|[ \\t]*$)',
beginCaptures: {0: {name: 'variable.assignment.accessibility.mermaid'}},
end: '(?!\\G)',
name: 'meta.a11y-option.${1:/downcase}.mermaid',
patterns: [
{include: '#a11y-innards'},
{
applyEndPatternLast: true,
begin: '\\G$',
end: '(?!\\G)',
patterns: [
{begin: '\\G', end: '(?=\\S)'},
{
begin: '(?=:|{)',
end: '(?!\\G)',
patterns: [{include: '#a11y-innards'}]
}
]
}
]
},
'a11y-innards': {
patterns: [
{
begin: '\\G\\s*(:)[ \\t]*',
beginCaptures: {
1: {name: 'keyword.operator.assignment.key-value.colon'}
},
contentName: 'string.unquoted.directive-value.single-line.mermaid',
end: '[ \\t]*$'
},
{
begin: '\\G\\s*({)[ \\t]*',
beginCaptures: {
1: {
name: 'punctuation.definition.string.curly.bracket.begin.mermaid'
}
},
contentName:
'string.quoted.other.curly.brackets.directive-value.multi-line.mermaid',
end: '[ \\t]*(})',
endCaptures: {
1: {name: 'punctuation.definition.string.curly.bracket.end.mermaid'}
}
}
]
},
br: {
captures: {0: {patterns: [{include: 'text.html.basic'}]}},
match: '(?i)<br\\s*/?>',
name: 'text.embedded.html.basic'
},
brace: {
patterns: [
{
captures: {0: {name: 'sublimelinter.gutter-mark'}},
match: '{',
name: 'punctuation.definition.class.block.begin.mermaid'
},
{
captures: {0: {name: 'sublimelinter.gutter-mark'}},
match: '}',
name: 'punctuation.definition.class.block.end.mermaid'
}
]
},
'c4c-diagram': {
begin:
'^[ \\t]*(C4(Component|Container|Context|Deployment|Dynamic))(?=$|\\s|;)',
beginCaptures: {1: {name: 'keyword.control.c4c-diagram.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.c4c-diagram.c4-${2:/downcase}.mermaid',
patterns: [{include: 'source.mermaid.c4c-diagram'}]
},
'class-diagram': {
begin: '^[ \\t]*(classDiagram(?:-v2)?)(?=$|\\s|;)',
beginCaptures: {1: {name: 'keyword.control.class-diagram.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.class-diagram.mermaid',
patterns: [{include: 'source.mermaid.class-diagram'}]
},
colon: {
captures: {0: {name: 'punctuation.separator.message.key-value.mermaid'}},
match: ':',
name: 'keyword.operator.assignment.mermaid'
},
comma: {
captures: {0: {name: 'sublimelinter.gutter-mark.mermaid'}},
match: ',',
name: 'punctuation.delimiter.comma.mermaid'
},
comment: {
begin: '(?:\\G|^|(?<=\\s|;|%%))(%%)',
beginCaptures: {1: {name: 'punctuation.definition.comment.mermaid'}},
end: '$',
name: 'comment.line.percentage.mermaid'
},
direction: {
captures: {
1: {name: 'storage.type.direction.mermaid'},
2: {name: 'constant.language.orientation.diagram.mermaid'}
},
match:
'(?:\\G|^|(?<=\\s|;|%%))(direction)(?:\\s+(BT|LR|RL|TB|TD))?(?=$|\\s|;)',
name: 'meta.direction.statement.mermaid'
},
directive: {
begin: '%%(?={)',
beginCaptures: {
0: {name: 'punctuation.definition.directive.begin.mermaid'}
},
contentName: 'source.embedded.js',
end: '%%$',
endCaptures: {0: {name: 'punctuation.definition.directive.end.mermaid'}},
name: 'meta.directive.mermaid',
patterns: [{include: 'source.js'}]
},
entity: {
patterns: [
{
captures: {
1: {name: 'punctuation.definition.entity.begin.mermaid'},
2: {name: 'punctuation.definition.entity.end.mermaid'}
},
match: '(#)\\d+(;)',
name: 'constant.character.entity.codepoint.mermaid'
},
{
captures: {
1: {name: 'punctuation.definition.entity.begin.mermaid'},
2: {name: 'punctuation.definition.entity.end.mermaid'}
},
match: '(#)[a-zA-Z0-9]+(;)',
name: 'constant.character.entity.named.mermaid'
}
]
},
'er-diagram': {
begin: '^[ \\t]*(erDiagram)(?=$|\\s|;)',
beginCaptures: {1: {name: 'keyword.control.er-diagram.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.er-diagram.mermaid',
patterns: [{include: 'source.mermaid.er-diagram'}]
},
flowchart: {
begin: '^[ \\t]*(flowchart(?:-v2)?|graph)(?!-)\\b',
beginCaptures: {1: {name: 'keyword.control.flowchart.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.flowchart.mermaid',
patterns: [
{
captures: {
1: {name: 'constant.language.orientation.flowchart.mermaid'}
},
match: '\\G\\s+(BT|LR|RL|TB|TD)(?=$|\\s)'
},
{include: 'source.mermaid.flowchart'}
]
},
gantt: {
begin: '(?i)^[ \\t]*(gantt)(?=$|\\s)',
beginCaptures: {1: {name: 'keyword.control.gantt-chart.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.gantt-chart.mermaid',
patterns: [{include: 'source.mermaid.gantt'}]
},
gitgraph: {
begin: '(?i)^[ \\t]*(gitGraph)(?:\\s+(LR|BT))?(?:\\s*(:))?(?=$|\\s)',
beginCaptures: {
1: {name: 'keyword.control.gitgraph.begin.mermaid'},
2: {name: 'constant.language.orientation.flowchart.mermaid'},
3: {patterns: [{include: 'source.mermaid#colon'}]}
},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.gitgraph.mermaid',
patterns: [{include: 'source.mermaid.gitgraph'}]
},
'inline-css': {
patterns: [
{
captures: {
0: {patterns: [{include: 'source.css#rule-list-innards'}]}
},
match: '(?=\\S)(?:[^,;\\r\\n%]|(?<!%)%(?!%))++',
name: 'source.embedded.css'
},
{include: '#comma'}
]
},
main: {
patterns: [
{include: '#directive'},
{include: '#comment'},
{include: '#flowchart'},
{include: '#sequence-diagram'},
{include: '#class-diagram'},
{include: '#state-diagram'},
{include: '#er-diagram'},
{include: '#user-journey'},
{include: '#gantt'},
{include: '#pie-chart'},
{include: '#requirement-diagram'},
{include: '#gitgraph'},
{include: '#c4c-diagram'},
{include: '#mindmap'}
]
},
mindmap: {
begin: '(?i)^[ \\t]*(mindmap)(?=$|\\s)',
beginCaptures: {1: {name: 'keyword.control.mindmap.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.mindmap.mermaid',
patterns: [{include: 'source.mermaid.mindmap'}]
},
'pie-chart': {
begin: '(?i)^[ \\t]*(pie)(?=$|\\s)',
beginCaptures: {1: {name: 'keyword.control.pie-chart.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.pie-chart.mermaid',
patterns: [{include: 'source.mermaid.pie-chart'}]
},
'requirement-diagram': {
begin: '(?i)^[ \\t]*(requirementDiagram)(?=$|\\s)',
beginCaptures: {
1: {name: 'keyword.control.requirement-diagram.begin.mermaid'}
},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.requirement-diagram.mermaid',
patterns: [{include: 'source.mermaid.requirement-diagram'}]
},
'sequence-diagram': {
begin: '(?i)^[ \\t]*(sequenceDiagram)(?=$|\\s|;)',
beginCaptures: {
1: {name: 'keyword.control.sequence-diagram.begin.mermaid'}
},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.sequence-diagram.mermaid',
patterns: [{include: 'source.mermaid.sequence-diagram'}]
},
'state-diagram': {
begin: '(?i)^[ \\t]*(stateDiagram(?:-v2)?)(?=$|\\s|;)',
beginCaptures: {1: {name: 'keyword.control.state-diagram.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.state-diagram.mermaid',
patterns: [{include: 'source.mermaid.state-diagram'}]
},
terminator: {
captures: {0: {name: 'sublimelinter.gutter-mark.mermaid'}},
match: ';',
name: 'punctuation.terminator.statement.mermaid'
},
'user-journey': {
begin: '(?i)^[ \\t]*(journey)(?=$|\\s)',
beginCaptures: {1: {name: 'keyword.control.user-journey.begin.mermaid'}},
end: '(?=A)B|(?=^[ \\t]*(?:`{3,}|~{3,})\\s*$)',
name: 'meta.user-journey.mermaid',
patterns: [{include: 'source.mermaid.user-journey'}]
}
},
scopeName: 'source.mermaid'
}
export default grammar