PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.11.0
Code Block Pro – Beautiful Syntax Highlighting v1.11.0
1.27.1 1.27.2 1.27.3 1.27.4 1.27.5 1.27.6 1.27.7 1.28.0 1.3.0 1.4.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.8.0 1.9.0 1.9.1 1.9.2 1.9.3 trunk 1.1.0 1.10.0 1.11.0 1.11.1 All 63 releases
code-block-pro / build / shiki / languages / vhdl.tmLanguage.json

vhdl.tmLanguage.json in Code Block Pro – Beautiful Syntax Highlighting 1.11.0, at build/shiki/languages/vhdl.tmLanguage.json

1,437 lines 49.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 {
2 "fileTypes": ["vhd", "vhdl", "vho", "vht"],
3 "name": "vhdl",
4 "patterns": [
5 {
6 "include": "#block_processing"
7 },
8 {
9 "include": "#cleanup"
10 }
11 ],
12 "repository": {
13 "architecture_pattern": {
14 "patterns": [
15 {
16 "begin": "(?x)\n\n\t\t\t\t\t\t# The word architecture $1\n\t\t\t\t\t\t\\b((?i:architecture))\\s+\n\t\t\t\t\t\t\n\t\t\t\t\t\t# Followed up by a valid $3 or invalid identifier $4\n\t\t\t\t\t\t(([a-zA-z][a-zA-z0-9_]*)|(.+))(?=\\s)\\s+\n\n\t\t\t\t\t\t# The word of $5\n\t\t\t\t\t\t((?i:of))\\s+\n\n\t\t\t\t\t\t# Followed by a valid $7 or invalid identifier $8\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))(?=\\s*(?i:is))\\b\n\t\t\t\t\t",
17 "beginCaptures": {
18 "1": {
19 "name": "keyword.language.vhdl"
20 },
21 "3": {
22 "name": "entity.name.type.architecture.begin.vhdl"
23 },
24 "4": {
25 "name": "invalid.illegal.invalid.identifier.vhdl"
26 },
27 "5": {
28 "name": "keyword.language.vhdl"
29 },
30 "7": {
31 "name": "entity.name.type.entity.reference.vhdl"
32 },
33 "8": {
34 "name": "invalid.illegal.invalid.identifier.vhdl"
35 }
36 },
37 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\n\n\t\t\t\t\t\t# Optional word architecture $3\n\t\t\t\t\t\t(\\s+((?i:architecture)))?\n\n\t\t\t\t\t\t# Optional same identifier $6 or illegal identifier $7\n\t\t\t\t\t\t(\\s+((\\3)|(.+?)))?\n\n\t\t\t\t\t\t# This will cause the previous to capture until just before the ; or $\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
38 "endCaptures": {
39 "1": {
40 "name": "keyword.language.vhdl"
41 },
42 "3": {
43 "name": "keyword.language.vhdl"
44 },
45 "6": {
46 "name": "entity.name.type.architecture.end.vhdl"
47 },
48 "7": {
49 "name": "invalid.illegal.mismatched.identifier.vhdl"
50 }
51 },
52 "name": "support.block.architecture",
53 "patterns": [
54 {
55 "include": "#function_definition_pattern"
56 },
57 {
58 "include": "#procedure_definition_pattern"
59 },
60 {
61 "include": "#component_pattern"
62 },
63 {
64 "include": "#if_pattern"
65 },
66 {
67 "include": "#process_pattern"
68 },
69 {
70 "include": "#type_pattern"
71 },
72 {
73 "include": "#record_pattern"
74 },
75 {
76 "include": "#for_pattern"
77 },
78 {
79 "include": "#entity_instantiation_pattern"
80 },
81 {
82 "include": "#component_instantiation_pattern"
83 },
84 {
85 "include": "#cleanup"
86 }
87 ]
88 }
89 ]
90 },
91 "attribute_list": {
92 "patterns": [
93 {
94 "begin": "\\'\\(",
95 "beginCaptures": {
96 "0": {
97 "name": "punctuation.vhdl"
98 }
99 },
100 "end": "\\)",
101 "endCaptures": {
102 "0": {
103 "name": "punctuation.vhdl"
104 }
105 },
106 "patterns": [
107 {
108 "include": "#parenthetical_list"
109 },
110 {
111 "include": "#cleanup"
112 }
113 ]
114 }
115 ]
116 },
117 "block_processing": {
118 "patterns": [
119 {
120 "include": "#package_pattern"
121 },
122 {
123 "include": "#package_body_pattern"
124 },
125 {
126 "include": "#entity_pattern"
127 },
128 {
129 "include": "#architecture_pattern"
130 }
131 ]
132 },
133 "case_pattern": {
134 "patterns": [
135 {
136 "begin": "(?x)\n\t\t\t\t\t\t# Beginning of line ...\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# Optional identifier ... $3 or invalid identifier $4\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t ([a-zA-Z][a-zA-Z0-9_]*)\n\t\t\t\t\t\t\t\t|(.+?)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\\s*:\\s*\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# The word case $5\n\t\t\t\t\t\t\\b((?i:case))\\b\n\t\t\t\t\t",
137 "beginCaptures": {
138 "3": {
139 "name": "entity.name.tag.case.begin.vhdl"
140 },
141 "4": {
142 "name": "invalid.illegal.invalid.identifier.vhdl"
143 },
144 "5": {
145 "name": "keyword.language.vhdl"
146 }
147 },
148 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\\s*\n\n\t\t\t\t\t\t# The word case $4 or invalid word $5\n\t\t\t\t\t\t(\\s+(((?i:case))|(.*?)))\n\n\t\t\t\t\t\t# Optional identifier from before $8 or illegal $9\n\t\t\t\t\t\t(\\s+((\\2)|(.*?)))?\n\n\t\t\t\t\t\t# Ending with a semicolon\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
149 "endCaptures": {
150 "1": {
151 "name": "keyword.language.vhdl"
152 },
153 "4": {
154 "name": "keyword.language.vhdl"
155 },
156 "5": {
157 "name": "invalid.illegal.case.required.vhdl"
158 },
159 "8": {
160 "name": "entity.name.tag.case.end.vhdl"
161 },
162 "9": {
163 "name": "invalid.illegal.mismatched.identifier.vhdl"
164 }
165 },
166 "patterns": [
167 {
168 "include": "#control_patterns"
169 },
170 {
171 "include": "#cleanup"
172 }
173 ]
174 }
175 ]
176 },
177 "cleanup": {
178 "patterns": [
179 {
180 "include": "#comments"
181 },
182 {
183 "include": "#constants_numeric"
184 },
185 {
186 "include": "#strings"
187 },
188 {
189 "include": "#attribute_list"
190 },
191 {
192 "include": "#syntax_highlighting"
193 }
194 ]
195 },
196 "comments": {
197 "patterns": [
198 {
199 "match": "--.*$\\n?",
200 "name": "comment.line.double-dash.vhdl"
201 }
202 ]
203 },
204 "component_instantiation_pattern": {
205 "patterns": [
206 {
207 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line ...\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# Match a valid identifier $1\n\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\n\n\t\t\t\t\t\t# Colon! $2\n\t\t\t\t\t\t\\s*(:)\\s*\n\n\t\t\t\t\t\t# Another valid identifier $3\n\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\\b\n\n\t\t\t\t\t\t# Make sure we are just the other word, or the beginning of\n\t\t\t\t\t\t# a generic or port mapping\n\t\t\t\t\t\t(?=\\s*($|generic|port))\n\t\t\t\t\t",
208 "beginCaptures": {
209 "1": {
210 "name": "entity.name.section.component_instantiation.vhdl"
211 },
212 "2": {
213 "name": "punctuation.vhdl"
214 },
215 "3": {
216 "name": "entity.name.tag.component.reference.vhdl"
217 }
218 },
219 "end": ";",
220 "endCaptures": {
221 "0": {
222 "name": "punctuation.vhdl"
223 }
224 },
225 "patterns": [
226 {
227 "include": "#parenthetical_list"
228 },
229 {
230 "include": "#cleanup"
231 }
232 ]
233 }
234 ]
235 },
236 "component_pattern": {
237 "patterns": [
238 {
239 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line ...\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word component $1\n\t\t\t\t\t\t\\b((?i:component))\\s+\n\n\t\t\t\t\t\t# A valid identifier $3 or invalid identifier $4\n\t\t\t\t\t\t(([a-zA-Z_][a-zA-Z0-9_]*)\\s*|(.+?))(?=\\b(?i:is|port)\\b|$|--)\n\n\t\t\t\t\t\t# Optional word is $6\n\t\t\t\t\t\t(\\b((?i:is\\b)))?\n\t\t\t\t\t",
240 "beginCaptures": {
241 "1": {
242 "name": "keyword.language.vhdl"
243 },
244 "3": {
245 "name": "entity.name.type.component.begin.vhdl"
246 },
247 "4": {
248 "name": "invalid.illegal.invalid.identifier.vhdl"
249 },
250 "6": {
251 "name": "keyword.language.vhdl"
252 }
253 },
254 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\\s+\n\n\t\t\t\t\t\t# The word component $3 or illegal word $4\n\t\t\t\t\t\t(((?i:component\\b))|(.+?))(?=\\s*|;)\n\t\t\t\t\t\t\n\t\t\t\t\t\t# Optional identifier $7 or illegal mismatched $8\n\t\t\t\t\t\t(\\s+((\\3)|(.+?)))?(?=\\s*;)\n\t\t\t\t\t",
255 "endCaptures": {
256 "1": {
257 "name": "keyword.language.vhdl"
258 },
259 "3": {
260 "name": "keyword.language.vhdl"
261 },
262 "4": {
263 "name": "invalid.illegal.component.keyword.required.vhdl"
264 },
265 "7": {
266 "name": "entity.name.type.component.end.vhdl"
267 },
268 "8": {
269 "name": "invalid.illegal.mismatched.identifier.vhdl"
270 }
271 },
272 "patterns": [
273 {
274 "include": "#generic_list_pattern"
275 },
276 {
277 "include": "#port_list_pattern"
278 },
279 {
280 "include": "#comments"
281 }
282 ]
283 }
284 ]
285 },
286 "constants_numeric": {
287 "patterns": [
288 {
289 "match": "\\b([+\\-]?[\\d_]+\\.[\\d_]+([eE][+\\-]?[\\d_]+)?)\\b",
290 "name": "constant.numeric.floating_point.vhdl"
291 },
292 {
293 "match": "\\b\\d+#[\\h_]+#\\b",
294 "name": "constant.numeric.base_pound_number_pound.vhdl"
295 },
296 {
297 "match": "\\b[\\d_]+([eE][\\d_]+)?\\b",
298 "name": "constant.numeric.integer.vhdl"
299 },
300 {
301 "match": "[xX]\"[0-9a-fA-F_uUxXzZwWlLhH\\-]+\"",
302 "name": "constant.numeric.quoted.double.string.hex.vhdl"
303 },
304 {
305 "match": "[oO]\"[0-7_uUxXzZwWlLhH\\-]+\"",
306 "name": "constant.numeric.quoted.double.string.octal.vhdl"
307 },
308 {
309 "match": "[bB]?\"[01_uUxXzZwWlLhH\\-]+\"",
310 "name": "constant.numeric.quoted.double.string.binary.vhdl"
311 },
312 {
313 "captures": {
314 "1": {
315 "name": "invalid.illegal.quoted.double.string.vhdl"
316 }
317 },
318 "match": "([bBoOxX]\".+?\")",
319 "name": "constant.numeric.quoted.double.string.illegal.vhdl"
320 },
321 {
322 "match": "'[01uUxXzZwWlLhH\\-]'",
323 "name": "constant.numeric.quoted.single.std_logic"
324 }
325 ]
326 },
327 "control_patterns": {
328 "patterns": [
329 {
330 "include": "#case_pattern"
331 },
332 {
333 "include": "#if_pattern"
334 },
335 {
336 "include": "#for_pattern"
337 },
338 {
339 "include": "#while_pattern"
340 }
341 ]
342 },
343 "entity_instantiation_pattern": {
344 "patterns": [
345 {
346 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# Component identifier or illegal identifier $1\n\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\n\n\t\t\t\t\t\t# Colon! $2\n\t\t\t\t\t\t\\s*(:)\\s*\n\n\t\t\t\t\t\t# Optional word use $4\n\t\t\t\t\t\t(((?i:use))\\s+)?\n\n\t\t\t\t\t\t# Required word entity $5\n\t\t\t\t\t\t((?i:entity))\\s+\n\n\t\t\t\t\t\t# Optional library unit identifier $8 for invalid identifier $9 followed by a dot $10\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))\n\t\t\t\t\t\t\t(\\.)\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# Entity name reference $12 or illegal identifier $13\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))\n\n\t\t\t\t\t\t# Check to see if we are being followed by either open paren, end of line, or port or generic words\n\t\t\t\t\t\t(?=\\s*(\\(|$|(?i:port|generic)))\n\n\t\t\t\t\t\t# Optional architecture elaboration\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Open paren $16\n\t\t\t\t\t\t\t\\s*(\\()\\s*\n\n\t\t\t\t\t\t\t# Arch identifier $18 or invalid identifier $19\n\t\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))(?=\\s*\\))\n\n\t\t\t\t\t\t\t# Close paren $21\n\t\t\t\t\t\t\t\\s*(\\))\n\t\t\t\t\t\t)?\n\t\t\t\t\t",
347 "beginCaptures": {
348 "1": {
349 "name": "entity.name.section.entity_instantiation.vhdl"
350 },
351 "2": {
352 "name": "punctuation.vhdl"
353 },
354 "4": {
355 "name": "keyword.language.vhdl"
356 },
357 "5": {
358 "name": "keyword.language.vhdl"
359 },
360 "8": {
361 "name": "entity.name.tag.library.reference.vhdl"
362 },
363 "9": {
364 "name": "invalid.illegal.invalid.identifier.vhdl"
365 },
366 "10": {
367 "name": "punctuation.vhdl"
368 },
369 "12": {
370 "name": "entity.name.tag.entity.reference.vhdl"
371 },
372 "13": {
373 "name": "invalid.illegal.invalid.identifier.vhdl"
374 },
375 "16": {
376 "name": "punctuation.vhdl"
377 },
378 "18": {
379 "name": "entity.name.tag.architecture.reference.vhdl"
380 },
381 "19": {
382 "name": "invalid.illegal.invalid.identifier.vhdl"
383 },
384 "21": {
385 "name": "punctuation.vhdl"
386 }
387 },
388 "end": ";",
389 "endCaptures": {
390 "0": {
391 "name": "punctuation.vhdl"
392 }
393 },
394 "patterns": [
395 {
396 "include": "#parenthetical_list"
397 },
398 {
399 "include": "#cleanup"
400 }
401 ]
402 }
403 ]
404 },
405 "entity_pattern": {
406 "patterns": [
407 {
408 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line ...\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word entity $1\n\t\t\t\t\t\t((?i:entity\\b))\\s+\n\n\t\t\t\t\t\t# The identifier $3 or an invalid identifier $4\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z\\d_]*)|(.+?))(?=\\s)\n\t\t\t\t\t",
409 "beginCaptures": {
410 "1": {
411 "name": "keyword.language.vhdl"
412 },
413 "3": {
414 "name": "entity.name.type.entity.begin.vhdl"
415 },
416 "4": {
417 "name": "invalid.illegal.invalid.identifier.vhdl"
418 }
419 },
420 "end": "(?x)\n\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end\\b))\n\n\t\t\t\t\t\t# Optional word entity $3\n\t\t\t\t\t\t(\\s+((?i:entity)))?\n\n\t\t\t\t\t\t# Optional identifier match $6 or indentifier mismatch $7\n\t\t\t\t\t\t(\\s+((\\3)|(.+?)))?\n\t\t\t\t\t\t\n\t\t\t\t\t\t# Make sure there is a semicolon following\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
421 "endCaptures": {
422 "1": {
423 "name": "keyword.language.vhdl"
424 },
425 "3": {
426 "name": "keyword.language.vhdl"
427 },
428 "6": {
429 "name": "entity.name.type.entity.end.vhdl"
430 },
431 "7": {
432 "name": "invalid.illegal.mismatched.identifier.vhdl"
433 }
434 },
435 "patterns": [
436 {
437 "include": "#comments"
438 },
439 {
440 "include": "#generic_list_pattern"
441 },
442 {
443 "include": "#port_list_pattern"
444 },
445 {
446 "include": "#cleanup"
447 }
448 ]
449 }
450 ]
451 },
452 "for_pattern": {
453 "patterns": [
454 {
455 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Check for an identifier $2\n\t\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\n\n\t\t\t\t\t\t\t# Followed by a colon $3\n\t\t\t\t\t\t\t\\s*(:)\\s*\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# Make sure the next word is not wait\n\t\t\t\t\t\t(?!(?i:wait\\s*))\n\n\t\t\t\t\t\t# The for keyword $4\n\t\t\t\t\t\t\\b((?i:for))\\b\n\n\t\t\t\t\t\t# Make sure the next word is not all\n\t\t\t\t\t\t(?!\\s*(?i:all))\n\n\t\t\t\t\t",
456 "beginCaptures": {
457 "2": {
458 "name": "entity.name.tag.for.generate.begin.vhdl"
459 },
460 "3": {
461 "name": "punctuation.vhdl"
462 },
463 "4": {
464 "name": "keyword.language.vhdl"
465 }
466 },
467 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\\s+\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Followed by generate or loop $3\n\t\t\t\t\t\t\t ((?i:generate|loop))\n\n\t\t\t\t\t\t\t# But it really is required $4\n\t\t\t\t\t\t\t|(\\S+)\n\t\t\t\t\t\t)\\b\n\n\t\t\t\t\t\t# The matching identifier $7 or an invalid identifier $8\n\t\t\t\t\t\t(\\s+((\\2)|(.+?)))?\n\n\t\t\t\t\t\t# Only space and a semicolon left\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
468 "endCaptures": {
469 "1": {
470 "name": "keyword.language.vhdl"
471 },
472 "3": {
473 "name": "keyword.language.vhdl"
474 },
475 "4": {
476 "name": "invalid.illegal.loop.or.generate.required.vhdl"
477 },
478 "7": {
479 "name": "entity.name.tag.for.generate.end.vhdl"
480 },
481 "8": {
482 "name": "invalid.illegal.mismatched.identifier.vhdl"
483 }
484 },
485 "patterns": [
486 {
487 "include": "#control_patterns"
488 },
489 {
490 "include": "#entity_instantiation_pattern"
491 },
492 {
493 "include": "#component_pattern"
494 },
495 {
496 "include": "#component_instantiation_pattern"
497 },
498 {
499 "include": "#process_pattern"
500 },
501 {
502 "include": "#cleanup"
503 }
504 ]
505 }
506 ]
507 },
508 "function_definition_pattern": {
509 "patterns": [
510 {
511 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word function $1\n\t\t\t\t\t\t((?i:impure)?\\s*(?i:function))\\s+\n\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# A valid normal identifier $3\n\t\t\t\t\t\t\t ([a-zA-Z][a-zA-Z\\d_]*)\n\t\t\t\t\t\t\t# A valid string quoted identifier $4\n\t\t\t\t\t\t\t|(\"\\S+\")\n\t\t\t\t\t\t\t# A valid backslash escaped identifier $5\n\t\t\t\t\t\t\t|(\\\\.+\\\\)\n\t\t\t\t\t\t\t# An invalid identifier $5\n\t\t\t\t\t\t\t|(.+?)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t# Check to make sure we have a list or we return\n\t\t\t\t\t\t(?=\\s*\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t \\(\n\t\t\t\t\t\t\t\t|(?i:\\breturn\\b)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t",
512 "beginCaptures": {
513 "1": {
514 "name": "keyword.language.vhdl"
515 },
516 "3": {
517 "name": "entity.name.function.function.begin.vhdl"
518 },
519 "4": {
520 "name": "entity.name.function.function.begin.vhdl"
521 },
522 "5": {
523 "name": "entity.name.function.function.begin.vhdl"
524 },
525 "6": {
526 "name": "invalid.illegal.invalid.identifier.vhdl"
527 }
528 },
529 "end": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t((?i:end))\n\n\t\t\t\t\t\t# Optional word function $3\n\t\t\t\t\t\t(\\s+((?i:function)))?\n\n\t\t\t\t\t\t# Optional matched identifier $6 or mismatched identifier $7\n\t\t\t\t\t\t(\\s+((\\3|\\4|\\5)|(.+?)))?\n\n\t\t\t\t\t\t# Ending with whitespace and semicolon\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
530 "endCaptures": {
531 "1": {
532 "name": "keyword.language.vhdl"
533 },
534 "3": {
535 "name": "keyword.language.vhdl"
536 },
537 "6": {
538 "name": "entity.name.function.function.end.vhdl"
539 },
540 "7": {
541 "name": "invalid.illegal.mismatched.identifier.vhdl"
542 }
543 },
544 "patterns": [
545 {
546 "include": "#control_patterns"
547 },
548 {
549 "include": "#parenthetical_list"
550 },
551 {
552 "include": "#type_pattern"
553 },
554 {
555 "include": "#record_pattern"
556 },
557 {
558 "include": "#cleanup"
559 }
560 ]
561 }
562 ]
563 },
564 "function_prototype_pattern": {
565 "patterns": [
566 {
567 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word function $1\n\t\t\t\t\t\t((?i:impure)?\\s*(?i:function))\\s+\n\t\t\t\t\t\t\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# A valid normal identifier $3\n\t\t\t\t\t\t\t ([a-zA-Z][a-zA-Z\\d_]*)\n\t\t\t\t\t\t\t# A valid quoted identifier $4\n\t\t\t\t\t\t\t|(\"\\S+\")\n\t\t\t\t\t\t\t# A valid backslash escaped identifier $5\n\t\t\t\t\t\t\t|(\\\\.+\\\\)\n\t\t\t\t\t\t\t# An invalid identifier $6\n\t\t\t\t\t\t\t|(.+?)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t# Check to make sure we have a list or we return\n\t\t\t\t\t\t(?=\\s*\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t \\(\n\t\t\t\t\t\t\t\t|(?i:\\breturn\\b)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t",
568 "beginCaptures": {
569 "1": {
570 "name": "keyword.language.vhdl"
571 },
572 "3": {
573 "name": "entity.name.function.function.prototype.vhdl"
574 },
575 "4": {
576 "name": "entity.name.function.function.prototype.vhdl"
577 },
578 "5": {
579 "name": "entity.name.function.function.prototype.vhdl"
580 },
581 "6": {
582 "name": "invalid.illegal.function.name.vhdl"
583 }
584 },
585 "end": "(?<=;)",
586 "patterns": [
587 {
588 "begin": "\\b(?i:return)(?=\\s+[^;]+\\s*;)",
589 "beginCaptures": {
590 "0": {
591 "name": "keyword.language.vhdl"
592 }
593 },
594 "end": "\\;",
595 "endCaptures": {
596 "0": {
597 "name": "punctuation.terminator.function_prototype.vhdl"
598 }
599 },
600 "patterns": [
601 {
602 "include": "#parenthetical_list"
603 },
604 {
605 "include": "#cleanup"
606 }
607 ]
608 },
609 {
610 "include": "#parenthetical_list"
611 },
612 {
613 "include": "#cleanup"
614 }
615 ]
616 }
617 ]
618 },
619 "generic_list_pattern": {
620 "patterns": [
621 {
622 "begin": "\\b(?i:generic)\\b",
623 "beginCaptures": {
624 "0": {
625 "name": "keyword.language.vhdl"
626 }
627 },
628 "end": ";",
629 "endCaptures": {
630 "0": {
631 "name": "punctuation.vhdl"
632 }
633 },
634 "patterns": [
635 {
636 "include": "#parenthetical_list"
637 }
638 ]
639 }
640 ]
641 },
642 "if_pattern": {
643 "patterns": [
644 {
645 "begin": "(?x)\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Optional identifier $2\n\t\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\n\n\t\t\t\t\t\t\t# Followed by a colon $3\n\t\t\t\t\t\t\t\\s*(:)\\s*\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# Keyword if $4\n\t\t\t\t\t\t\\b((?i:if))\\b\n\t\t\t\t\t",
646 "beginCaptures": {
647 "2": {
648 "name": "entity.name.tag.if.generate.begin.vhdl"
649 },
650 "3": {
651 "name": "punctuation.vhdl"
652 },
653 "4": {
654 "name": "keyword.language.vhdl"
655 }
656 },
657 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\\s+\n\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t# Optional generate or if keyword $4\n\t\t\t\t\t\t\t\t ((?i:generate|if))\n\n\t\t\t\t\t\t\t\t# Keyword if or generate required $5\n\t\t\t\t\t\t\t\t|(\\S+)\n\t\t\t\t\t\t\t)\\b\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\\s+\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t# Optional matching identifier $8\n\t\t\t\t\t\t\t\t\t (\\2)\n\n\t\t\t\t\t\t\t\t\t# Mismatched identifier $9\n\t\t\t\t\t\t\t\t\t|(.+?)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# Followed by a semicolon\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
658 "endCaptures": {
659 "1": {
660 "name": "keyword.language.vhdl"
661 },
662 "4": {
663 "name": "keyword.language.vhdl"
664 },
665 "5": {
666 "name": "invalid.illegal.if.or.generate.required.vhdl"
667 },
668 "8": {
669 "name": "entity.name.tag.if.generate.end.vhdl"
670 },
671 "9": {
672 "name": "invalid.illegal.mismatched.identifier.vhdl"
673 }
674 },
675 "patterns": [
676 {
677 "include": "#control_patterns"
678 },
679 {
680 "include": "#process_pattern"
681 },
682 {
683 "include": "#entity_instantiation_pattern"
684 },
685 {
686 "include": "#component_pattern"
687 },
688 {
689 "include": "#component_instantiation_pattern"
690 },
691 {
692 "include": "#cleanup"
693 }
694 ]
695 }
696 ]
697 },
698 "keywords": {
699 "patterns": [
700 {
701 "match": "'(?i:active|ascending|base|delayed|driving|event|high|image|instance|instance_name|last|last_value|left|leftof|length|low|path|path_name|pos|pred|quiet|range|reverse|reverse_range|right|rightof|simple|simple_name|stable|succ|transaction|val|value)\\b",
702 "name": "keyword.attributes.vhdl"
703 },
704 {
705 "match": "\\b(?i:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|context|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|protected|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)\\b",
706 "name": "keyword.language.vhdl"
707 },
708 {
709 "match": "\\b(?i:std|ieee|work|standard|textio|std_logic_1164|std_logic_arith|std_logic_misc|std_logic_signed|std_logic_textio|std_logic_unsigned|numeric_bit|numeric_std|math_complex|math_real|vital_primitives|vital_timing)\\b",
710 "name": "standard.library.language.vhdl"
711 },
712 {
713 "match": "(\\+|\\-|<=|=|=>|:=|>=|>|<|/|\\||&|(\\*{1,2}))",
714 "name": "keyword.operator.vhdl"
715 }
716 ]
717 },
718 "package_body_pattern": {
719 "patterns": [
720 {
721 "begin": "(?x)\n\t\t\t\t\t\t# The word package $1\n\t\t\t\t\t\t\\b((?i:package))\\s+\n\n\t\t\t\t\t\t# ... but we want to be a package body $2\n\t\t\t\t\t\t((?i:body))\\s+\n\n\t\t\t\t\t\t# The valid identifier $4 or the invalid one $5\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z\\d_]*)|(.+?))\\s+\n\n\t\t\t\t\t\t# ... and we end it with an is $6\n\t\t\t\t\t\t((?i:is))\\b\n\t\t\t\t\t",
722 "beginCaptures": {
723 "1": {
724 "name": "keyword.language.vhdl"
725 },
726 "2": {
727 "name": "keyword.language.vhdl"
728 },
729 "4": {
730 "name": "entity.name.section.package_body.begin.vhdl"
731 },
732 "5": {
733 "name": "invalid.illegal.invalid.identifier.vhdl"
734 },
735 "6": {
736 "name": "keyword.language.vhdl"
737 }
738 },
739 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end\\b))\n\n\t\t\t\t\t\t# Optional word package $3 body $4\n\t\t\t\t\t\t(\\s+((?i:package))\\s+((?i:body)))?\n\n\t\t\t\t\t\t# Optional identifier $7 or mismatched identifier $8\n\t\t\t\t\t\t(\\s+((\\4)|(.+?)))?(?=\\s*;)",
740 "endCaptures": {
741 "1": {
742 "name": "keyword.language.vhdl"
743 },
744 "3": {
745 "name": "keyword.language.vhdl"
746 },
747 "4": {
748 "name": "keyword.language.vhdl"
749 },
750 "7": {
751 "name": "entity.name.section.package_body.end.vhdl"
752 },
753 "8": {
754 "name": "invalid.illegal.mismatched.identifier.vhdl"
755 }
756 },
757 "patterns": [
758 {
759 "include": "#protected_body_pattern"
760 },
761 {
762 "include": "#function_definition_pattern"
763 },
764 {
765 "include": "#procedure_definition_pattern"
766 },
767 {
768 "include": "#type_pattern"
769 },
770 {
771 "include": "#subtype_pattern"
772 },
773 {
774 "include": "#record_pattern"
775 },
776 {
777 "include": "#cleanup"
778 }
779 ]
780 }
781 ]
782 },
783 "package_pattern": {
784 "patterns": [
785 {
786 "begin": "(?x)\n\t\t\t\t\t\t# The word package $1\n\t\t\t\t\t\t\\b((?i:package))\\s+\n\n\t\t\t\t\t\t# ... but we do not want to be a package body\n\t\t\t\t\t\t(?!(?i:body))\n\n\t\t\t\t\t\t# The valid identifier $3 or the invalid one $4\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z\\d_]*)|(.+?))\\s+\n\n\t\t\t\t\t\t# ... and we end it with an is $5\n\t\t\t\t\t\t((?i:is))\\b\n\t\t\t\t\t",
787 "beginCaptures": {
788 "1": {
789 "name": "keyword.language.vhdl"
790 },
791 "3": {
792 "name": "entity.name.section.package.begin.vhdl"
793 },
794 "4": {
795 "name": "invalid.illegal.invalid.identifier.vhdl"
796 },
797 "5": {
798 "name": "keyword.language.vhdl"
799 }
800 },
801 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end\\b))\n\n\t\t\t\t\t\t# Optional word package $3\n\t\t\t\t\t\t(\\s+((?i:package)))?\n\n\t\t\t\t\t\t# Optional identifier $6 or mismatched identifier $7\n\t\t\t\t\t\t(\\s+((\\2)|(.+?)))?(?=\\s*;)",
802 "endCaptures": {
803 "1": {
804 "name": "keyword.language.vhdl"
805 },
806 "3": {
807 "name": "keyword.language.vhdl"
808 },
809 "6": {
810 "name": "entity.name.section.package.end.vhdl"
811 },
812 "7": {
813 "name": "invalid.illegal.mismatched.identifier.vhdl"
814 }
815 },
816 "patterns": [
817 {
818 "include": "#protected_pattern"
819 },
820 {
821 "include": "#function_prototype_pattern"
822 },
823 {
824 "include": "#procedure_prototype_pattern"
825 },
826 {
827 "include": "#type_pattern"
828 },
829 {
830 "include": "#subtype_pattern"
831 },
832 {
833 "include": "#record_pattern"
834 },
835 {
836 "include": "#component_pattern"
837 },
838 {
839 "include": "#cleanup"
840 }
841 ]
842 }
843 ]
844 },
845 "protected_body_pattern": {
846 "patterns": [
847 {
848 "begin": "(?x)\n\t\t\t\t\t\t\\b((?i:type))\\s+\n\n\t\t\t\t\t\t# The valid identifier $2 or the invalid one $3\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z\\d_]*)|(.+?))\\s+\n\n\t\t\t\t\t\t\\b((?i:is\\s+protected\\s+body))\\s+\n\t\t\t\t\t",
849 "beginCaptures": {
850 "1": {
851 "name": "keyword.language.vhdl"
852 },
853 "3": {
854 "name": "entity.name.section.protected_body.begin.vhdl"
855 },
856 "4": {
857 "name": "invalid.illegal.invalid.identifier.vhdl"
858 },
859 "5": {
860 "name": "keyword.language.vhdl"
861 }
862 },
863 "end": "(?x)\n\t\t\t\t\t\t\\b((?i:end\\s+protected\\s+body))\n\n\t\t\t\t\t\t# Optional identifier\n\t\t\t\t\t\t(\\s+((\\3)|(.+?)))?\n\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t\t",
864 "endCaptures": {
865 "1": {
866 "name": "keyword.language.vhdl"
867 },
868 "4": {
869 "name": "entity.name.section.protected_body.end.vhdl"
870 },
871 "5": {
872 "name": "invalid.illegal.mismatched.identifier.vhdl"
873 }
874 },
875 "patterns": [
876 {
877 "include": "#function_definition_pattern"
878 },
879 {
880 "include": "#procedure_definition_pattern"
881 },
882 {
883 "include": "#type_pattern"
884 },
885 {
886 "include": "#subtype_pattern"
887 },
888 {
889 "include": "#record_pattern"
890 },
891 {
892 "include": "#cleanup"
893 }
894 ]
895 }
896 ]
897 },
898 "protected_pattern": {
899 "patterns": [
900 {
901 "begin": "(?x)\n\t\t\t\t\t\t\\b((?i:type))\\s+\n\n\t\t\t\t\t\t# The valid identifier $2 or the invalid one $3\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z\\d_]*)|(.+?))\\s+\n\n\t\t\t\t\t\t\\b((?i:is\\s+protected))\\s+\n\n\t\t\t\t\t\t# Not body\n\t\t\t\t\t\t(?!(?i:body))\n\t\t\t\t\t",
902 "beginCaptures": {
903 "1": {
904 "name": "keyword.language.vhdls"
905 },
906 "3": {
907 "name": "entity.name.section.protected.begin.vhdl"
908 },
909 "4": {
910 "name": "invalid.illegal.invalid.identifier.vhdl"
911 },
912 "5": {
913 "name": "keyword.language.vhdl"
914 }
915 },
916 "end": "(?x)\n\t\t\t\t\t\t\\b((?i:end\\s+protected))\n\n\t\t\t\t\t\t# Optional identifier\n\t\t\t\t\t\t(\\s+((\\3)|(.+?)))?\n\n\t\t\t\t\t\t# Not body\n\t\t\t\t\t\t(?!(?i:body))\n\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
917 "endCaptures": {
918 "1": {
919 "name": "keyword.language.vhdl"
920 },
921 "4": {
922 "name": "entity.name.section.protected.end.vhdl"
923 },
924 "5": {
925 "name": "invalid.illegal.mismatched.identifier.vhdl"
926 }
927 },
928 "patterns": [
929 {
930 "include": "#function_prototype_pattern"
931 },
932 {
933 "include": "#procedure_prototype_pattern"
934 },
935 {
936 "include": "#type_pattern"
937 },
938 {
939 "include": "#subtype_pattern"
940 },
941 {
942 "include": "#record_pattern"
943 },
944 {
945 "include": "#component_pattern"
946 },
947 {
948 "include": "#cleanup"
949 }
950 ]
951 }
952 ]
953 },
954 "parenthetical_list": {
955 "patterns": [
956 {
957 "begin": "\\(",
958 "beginCaptures": {
959 "0": {
960 "name": "punctuation.vhdl"
961 }
962 },
963 "end": "(?<=\\))",
964 "patterns": [
965 {
966 "begin": "(?=['\"a-zA-Z0-9])",
967 "end": "(;|\\)|,)",
968 "endCaptures": {
969 "0": {
970 "name": "punctuation.vhdl"
971 }
972 },
973 "name": "source.vhdl",
974 "patterns": [
975 {
976 "include": "#comments"
977 },
978 {
979 "include": "#parenthetical_pair"
980 },
981 {
982 "include": "#cleanup"
983 }
984 ]
985 },
986 {
987 "match": "\\)",
988 "name": "invalid.illegal.unexpected.parenthesis.vhdl"
989 },
990 {
991 "include": "#cleanup"
992 }
993 ]
994 }
995 ]
996 },
997 "parenthetical_pair": {
998 "patterns": [
999 {
1000 "begin": "\\(",
1001 "beginCaptures": {
1002 "0": {
1003 "name": "punctuation.vhdl"
1004 }
1005 },
1006 "end": "\\)",
1007 "endCaptures": {
1008 "0": {
1009 "name": "punctuation.vhdl"
1010 }
1011 },
1012 "patterns": [
1013 {
1014 "include": "#parenthetical_pair"
1015 },
1016 {
1017 "include": "#cleanup"
1018 }
1019 ]
1020 }
1021 ]
1022 },
1023 "port_list_pattern": {
1024 "patterns": [
1025 {
1026 "begin": "\\b(?i:port)\\b",
1027 "beginCaptures": {
1028 "0": {
1029 "name": "keyword.language.vhdl"
1030 }
1031 },
1032 "end": "(?<=\\))\\s*;",
1033 "endCaptures": {
1034 "0": {
1035 "name": "punctuation.vhdl"
1036 }
1037 },
1038 "patterns": [
1039 {
1040 "include": "#parenthetical_list"
1041 }
1042 ]
1043 }
1044 ]
1045 },
1046 "procedure_definition_pattern": {
1047 "patterns": [
1048 {
1049 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word function $1\n\t\t\t\t\t\t((?i:procedure))\\s+\n\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# A valid normal identifier $3\n\t\t\t\t\t\t\t ([a-zA-Z][a-zA-Z\\d_]*)\n\t\t\t\t\t\t\t# A valid quoted identifier $4\n\t\t\t\t\t\t\t|(\"\\S+\")\n\t\t\t\t\t\t\t# An invalid identifier $5\n\t\t\t\t\t\t\t|(.+?)\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t# Check to make sure we have a list is\n\t\t\t\t\t\t(?=\\s*(\\(|(?i:is)))\n\t\t\t\t\t",
1050 "beginCaptures": {
1051 "1": {
1052 "name": "keyword.language.vhdl"
1053 },
1054 "3": {
1055 "name": "entity.name.function.procedure.begin.vhdl"
1056 },
1057 "4": {
1058 "name": "entity.name.function.procedure.begin.vhdl"
1059 },
1060 "5": {
1061 "name": "invalid.illegal.invalid.identifier.vhdl"
1062 }
1063 },
1064 "end": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t((?i:end))\n\n\t\t\t\t\t\t# Optional word function $3\n\t\t\t\t\t\t(\\s+((?i:procedure)))?\n\n\t\t\t\t\t\t# Optional matched identifier $6 or mismatched identifier $7\n\t\t\t\t\t\t(\\s+((\\3|\\4)|(.+?)))?\n\n\t\t\t\t\t\t# Ending with whitespace and semicolon\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
1065 "endCaptures": {
1066 "1": {
1067 "name": "keyword.language.vhdl"
1068 },
1069 "3": {
1070 "name": "keyword.language.vhdl"
1071 },
1072 "6": {
1073 "name": "entity.name.function.procedure.end.vhdl"
1074 },
1075 "7": {
1076 "name": "invalid.illegal.mismatched.identifier.vhdl"
1077 }
1078 },
1079 "patterns": [
1080 {
1081 "include": "#parenthetical_list"
1082 },
1083 {
1084 "include": "#control_patterns"
1085 },
1086 {
1087 "include": "#type_pattern"
1088 },
1089 {
1090 "include": "#record_pattern"
1091 },
1092 {
1093 "include": "#cleanup"
1094 }
1095 ]
1096 }
1097 ]
1098 },
1099 "procedure_prototype_pattern": {
1100 "patterns": [
1101 {
1102 "begin": "(?x)\n\t\t\t\t\t\t\\b((?i:procedure))\\s+\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))\n\t\t\t\t\t\t(?=\\s*(\\(|;))\n\t\t\t\t\t",
1103 "beginCaptures": {
1104 "1": {
1105 "name": "keyword.language.vhdl"
1106 },
1107 "3": {
1108 "name": "entity.name.function.procedure.begin.vhdl"
1109 },
1110 "4": {
1111 "name": "invalid.illegal.invalid.identifier.vhdl"
1112 }
1113 },
1114 "end": ";",
1115 "endCaptures": {
1116 "0": {
1117 "name": "punctual.vhdl"
1118 }
1119 },
1120 "patterns": [
1121 {
1122 "include": "#parenthetical_list"
1123 }
1124 ]
1125 }
1126 ]
1127 },
1128 "process_pattern": {
1129 "patterns": [
1130 {
1131 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Optional identifier $2\n\t\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\n\n\t\t\t\t\t\t\t# Colon $3\n\t\t\t\t\t\t\t\\s*(:)\\s*\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# The word process #4\n\t\t\t\t\t\t((?i:process\\b))\n\t\t\t\t\t",
1132 "beginCaptures": {
1133 "2": {
1134 "name": "entity.name.section.process.begin.vhdl"
1135 },
1136 "3": {
1137 "name": "punctuation.vhdl"
1138 },
1139 "4": {
1140 "name": "keyword.language.vhdl"
1141 }
1142 },
1143 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t((?i:end))\n\n\t\t\t\t\t\t# Optional word process $3\n\t\t\t\t\t\t(\\s+((?i:process)))\n\n\t\t\t\t\t\t# Optional identifier $6 or invalid identifier $7\n\t\t\t\t\t\t(\\s+((\\2)|(.+?)))?\n\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
1144 "endCaptures": {
1145 "1": {
1146 "name": "keyword.language.vhdl"
1147 },
1148 "3": {
1149 "name": "keyword.language.vhdl"
1150 },
1151 "6": {
1152 "name": "entity.name.section.process.end.vhdl"
1153 },
1154 "7": {
1155 "name": "invalid.illegal.invalid.identifier.vhdl"
1156 }
1157 },
1158 "patterns": [
1159 {
1160 "include": "#control_patterns"
1161 },
1162 {
1163 "include": "#cleanup"
1164 }
1165 ]
1166 }
1167 ]
1168 },
1169 "punctuation": {
1170 "patterns": [
1171 {
1172 "match": "(\\.|,|:|;|\\(|\\))",
1173 "name": "punctuation.vhdl"
1174 }
1175 ]
1176 },
1177 "record_pattern": {
1178 "patterns": [
1179 {
1180 "begin": "\\b(?i:record)\\b",
1181 "beginCaptures": {
1182 "0": {
1183 "name": "keyword.language.vhdl"
1184 }
1185 },
1186 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\n\n\t\t\t\t\t\t# The word record $2\n\t\t\t\t\t\t\\s+((?i:record))\n\n\t\t\t\t\t\t# Optional identifier $5 or invalid identifier $6\n\t\t\t\t\t\t(\\s+(([a-zA-Z][a-zA-Z\\d_]*)|(.*?)))?\n\n\t\t\t\t\t\t# Only whitespace and semicolons can be left\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
1187 "endCaptures": {
1188 "1": {
1189 "name": "keyword.language.vhdl"
1190 },
1191 "2": {
1192 "name": "keyword.language.vhdl"
1193 },
1194 "5": {
1195 "name": "entity.name.type.record.vhdl"
1196 },
1197 "6": {
1198 "name": "invalid.illegal.invalid.identifier.vhdl"
1199 }
1200 },
1201 "patterns": [
1202 {
1203 "include": "#cleanup"
1204 }
1205 ]
1206 },
1207 {
1208 "include": "#cleanup"
1209 }
1210 ]
1211 },
1212 "strings": {
1213 "patterns": [
1214 {
1215 "match": "'.'",
1216 "name": "string.quoted.single.vhdl"
1217 },
1218 {
1219 "begin": "\"",
1220 "end": "\"",
1221 "name": "string.quoted.double.vhdl",
1222 "patterns": [
1223 {
1224 "match": "\\\\.",
1225 "name": "constant.character.escape.vhdl"
1226 }
1227 ]
1228 },
1229 {
1230 "begin": "\\\\",
1231 "end": "\\\\",
1232 "name": "string.other.backslash.vhdl"
1233 }
1234 ]
1235 },
1236 "subtype_pattern": {
1237 "patterns": [
1238 {
1239 "begin": "(?x)\n\t\t\t\t\t\t# The word subtype $1\n\t\t\t\t\t\t\\b((?i:subtype))\\s+\n\n\t\t\t\t\t\t# Valid identifier $3 or invalid identifier $4\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))\\s+\n\n\t\t\t\t\t\t# The word is $5\n\t\t\t\t\t\t((?i:is))\\b\n\t\t\t\t\t",
1240 "beginCaptures": {
1241 "1": {
1242 "name": "keyword.language.vhdl"
1243 },
1244 "3": {
1245 "name": "entity.name.type.subtype.vhdl"
1246 },
1247 "4": {
1248 "name": "invalid.illegal.invalid.identifier.vhdl"
1249 },
1250 "5": {
1251 "name": "keyword.language.vhdl"
1252 }
1253 },
1254 "end": ";",
1255 "endCaptures": {
1256 "0": {
1257 "name": "punctuation.vhdl"
1258 }
1259 },
1260 "patterns": [
1261 {
1262 "include": "#cleanup"
1263 }
1264 ]
1265 }
1266 ]
1267 },
1268 "support_constants": {
1269 "patterns": [
1270 {
1271 "match": "\\b(?i:math_1_over_e|math_1_over_pi|math_1_over_sqrt_2|math_2_pi|math_3_pi_over_2|math_deg_to_rad|math_e|math_log10_of_e|math_log2_of_e|math_log_of_10|math_log_of_2|math_pi|math_pi_over_2|math_pi_over_3|math_pi_over_4|math_rad_to_deg|math_sqrt_2|math_sqrt_pi)\\b",
1272 "name": "support.constant.ieee.math_real.vhdl"
1273 },
1274 {
1275 "match": "\\b(?i:math_cbase_1|math_cbase_j|math_czero|positive_real|principal_value)\\b",
1276 "name": "support.constant.ieee.math_complex.vhdl"
1277 },
1278 {
1279 "match": "\\b(?i:true|false)\\b",
1280 "name": "support.constant.std.standard.vhdl"
1281 }
1282 ]
1283 },
1284 "support_functions": {
1285 "patterns": [
1286 {
1287 "match": "\\b(?i:finish|stop|resolution_limit)\\b",
1288 "name": "support.function.std.env.vhdl"
1289 },
1290 {
1291 "match": "\\b(?i:readline|read|writeline|write|endfile|endline)\\b",
1292 "name": "support.function.std.textio.vhdl"
1293 },
1294 {
1295 "match": "\\b(?i:rising_edge|falling_edge|to_bit|to_bitvector|to_stdulogic|to_stdlogicvector|to_stdulogicvector|is_x)\\b",
1296 "name": "support.function.ieee.std_logic_1164.vhdl"
1297 },
1298 {
1299 "match": "\\b(?i:shift_left|shift_right|rotate_left|rotate_right|resize|to_integer|to_unsigned|to_signed)\\b",
1300 "name": "support.function.ieee.numeric_std.vhdl"
1301 },
1302 {
1303 "match": "\\b(?i:arccos(h?)|arcsin(h?)|arctan|arctanh|cbrt|ceil|cos|cosh|exp|floor|log10|log2|log|realmax|realmin|round|sign|sin|sinh|sqrt|tan|tanh|trunc)\\b",
1304 "name": "support.function.ieee.math_real.vhdl"
1305 },
1306 {
1307 "match": "\\b(?i:arg|cmplx|complex_to_polar|conj|get_principal_value|polar_to_complex)\\b",
1308 "name": "support.function.ieee.math_complex.vhdl"
1309 }
1310 ]
1311 },
1312 "support_types": {
1313 "patterns": [
1314 {
1315 "match": "\\b(?i:boolean|bit|character|severity_level|integer|real|time|delay_length|now|natural|positive|string|bit_vector|file_open_kind|file_open_status|fs|ps|ns|us|ms|sec|min|hr|severity_level|note|warning|error|failure)\\b",
1316 "name": "support.type.std.standard.vhdl"
1317 },
1318 {
1319 "match": "\\b(?i:line|text|side|width|input|output)\\b",
1320 "name": "support.type.std.textio.vhdl"
1321 },
1322 {
1323 "match": "\\b(?i:std_logic|std_ulogic|std_logic_vector|std_ulogic_vector)\\b",
1324 "name": "support.type.ieee.std_logic_1164.vhdl"
1325 },
1326 {
1327 "match": "\\b(?i:signed|unsigned)\\b",
1328 "name": "support.type.ieee.numeric_std.vhdl"
1329 },
1330 {
1331 "match": "\\b(?i:complex|complex_polar)\\b",
1332 "name": "support.type.ieee.math_complex.vhdl"
1333 }
1334 ]
1335 },
1336 "syntax_highlighting": {
1337 "patterns": [
1338 {
1339 "include": "#keywords"
1340 },
1341 {
1342 "include": "#punctuation"
1343 },
1344 {
1345 "include": "#support_constants"
1346 },
1347 {
1348 "include": "#support_types"
1349 },
1350 {
1351 "include": "#support_functions"
1352 }
1353 ]
1354 },
1355 "type_pattern": {
1356 "patterns": [
1357 {
1358 "begin": "(?x)\n\t\t\t\t\t\t# The word type $1\n\t\t\t\t\t\t\\b((?i:type))\\s+\n\n\t\t\t\t\t\t# Valid identifier $3 or invalid identifier $4\n\t\t\t\t\t\t(([a-zA-Z][a-zA-Z0-9_]*)|(.+?))\n\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# A semicolon is coming up if we are incomplete\n\t\t\t\t\t\t\t (?=\\s*;)\n\n\t\t\t\t\t\t\t# Or the word is comes up $7\n\t\t\t\t\t\t\t|(\\s+((?i:is)))\n\t\t\t\t\t\t)\\b\n\t\t\t\t\t",
1359 "beginCaptures": {
1360 "1": {
1361 "name": "keyword.language.vhdl"
1362 },
1363 "3": {
1364 "name": "entity.name.type.type.vhdl"
1365 },
1366 "4": {
1367 "name": "invalid.illegal.invalid.identifier.vhdl"
1368 },
1369 "7": {
1370 "name": "keyword.language.vhdl"
1371 }
1372 },
1373 "end": ";",
1374 "endCaptures": {
1375 "0": {
1376 "name": "punctuation.vhdl"
1377 }
1378 },
1379 "patterns": [
1380 {
1381 "include": "#record_pattern"
1382 },
1383 {
1384 "include": "#cleanup"
1385 }
1386 ]
1387 }
1388 ]
1389 },
1390 "while_pattern": {
1391 "patterns": [
1392 {
1393 "begin": "(?x)\n\t\t\t\t\t\t# From the beginning of the line\n\t\t\t\t\t\t^\\s*\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Check for an identifier $2\n\t\t\t\t\t\t\t([a-zA-Z][a-zA-Z0-9_]*)\n\n\t\t\t\t\t\t\t# Followed by a colon $3\n\t\t\t\t\t\t\t\\s*(:)\\s*\n\t\t\t\t\t\t)?\n\n\t\t\t\t\t\t# The for keyword $4\n\t\t\t\t\t\t\\b((?i:while))\\b\n\t\t\t\t\t",
1394 "beginCaptures": {
1395 "2": {
1396 "name": ""
1397 },
1398 "3": {
1399 "name": "punctuation.vhdl"
1400 },
1401 "4": {
1402 "name": "keyword.language.vhdl"
1403 }
1404 },
1405 "end": "(?x)\n\t\t\t\t\t\t# The word end $1\n\t\t\t\t\t\t\\b((?i:end))\\s+\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t# Followed by keyword loop $3\n\t\t\t\t\t\t\t ((?i:loop))\n\n\t\t\t\t\t\t\t# But it really is required $4\n\t\t\t\t\t\t\t|(\\S+)\n\t\t\t\t\t\t)\\b\n\n\t\t\t\t\t\t# The matching identifier $7 or an invalid identifier $8\n\t\t\t\t\t\t(\\s+((\\2)|(.+?)))?\n\n\t\t\t\t\t\t# Only space and a semicolon left\n\t\t\t\t\t\t(?=\\s*;)\n\t\t\t\t\t",
1406 "endCaptures": {
1407 "1": {
1408 "name": "keyword.language.vhdl"
1409 },
1410 "3": {
1411 "name": "keyword.language.vhdl"
1412 },
1413 "4": {
1414 "name": "invalid.illegal.loop.keyword.required.vhdl"
1415 },
1416 "7": {
1417 "name": "entity.name.tag.while.loop.vhdl"
1418 },
1419 "8": {
1420 "name": "invalid.illegal.mismatched.identifier"
1421 }
1422 },
1423 "patterns": [
1424 {
1425 "include": "#control_patterns"
1426 },
1427 {
1428 "include": "#cleanup"
1429 }
1430 ]
1431 }
1432 ]
1433 }
1434 },
1435 "scopeName": "source.vhdl"
1436 }
1437