tm-grammars 0.0.0

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