PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.27.1
Code Block Pro – Beautiful Syntax Highlighting v1.27.1
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.27.1, at build/shiki/languages/vhdl.tmLanguage.json

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