monoprint-linux-x64-gnu 0.0.0-stage → 0.1.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 (68) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +2 -2
  3. package/THIRD_PARTY_NOTICES.md +24 -0
  4. package/assets/editor/sources.json +584 -0
  5. package/assets/fonts/commit-mono-OFL.txt +92 -0
  6. package/assets/fonts/fallback/NOTICE.txt +43 -0
  7. package/assets/fonts/fallback/manifest.json +170 -0
  8. package/assets/fonts/fallback/noto-cjk-OFL.txt +92 -0
  9. package/assets/fonts/fallback/noto-emoji-OFL.txt +92 -0
  10. package/assets/fonts/fallback/noto-fonts-OFL.txt +94 -0
  11. package/assets/fonts/fira-code-OFL.txt +93 -0
  12. package/assets/fonts/geist-mono-OFL.txt +93 -0
  13. package/assets/fonts/google-sans-code-OFL.txt +93 -0
  14. package/assets/fonts/ibm-plex-mono-OFL.txt +93 -0
  15. package/assets/fonts/inter-OFL.txt +93 -0
  16. package/assets/fonts/jetbrains-mono-OFL.txt +93 -0
  17. package/assets/fonts/manifest.json +92 -0
  18. package/assets/fonts/roboto-mono-OFL.txt +93 -0
  19. package/assets/fonts/source-code-pro-OFL.txt +93 -0
  20. package/assets/fonts/space-mono-OFL.txt +93 -0
  21. package/assets/grammar-provenance.json +101 -0
  22. package/docs/font-fallback.md +126 -0
  23. package/docs/grammar-licenses.md +48 -0
  24. package/licenses/editor-themes-NOTICE.txt +487 -0
  25. package/licenses/editor-themes-provenance.json +449 -0
  26. package/licenses/giallo-EUPL-1.2.txt +287 -0
  27. package/licenses/grammar-license-evidence.json +1112 -0
  28. package/licenses/grammar-policy.json +3206 -0
  29. package/licenses/grammar-sources/README.md +8 -0
  30. package/licenses/grammar-sources/bird2.json +1476 -0
  31. package/licenses/grammar-sources/bird2.upstream.json +1480 -0
  32. package/licenses/grammar-sources/hcl.json +757 -0
  33. package/licenses/grammar-sources/hcl.upstream.json +791 -0
  34. package/licenses/grammar-sources/terraform.json +781 -0
  35. package/licenses/grammar-sources/terraform.upstream.json +816 -0
  36. package/licenses/grammars-LICENSE.txt +22 -0
  37. package/licenses/grammars-NOTICE.txt +8139 -0
  38. package/licenses/legacy-frames-MIT.txt +21 -0
  39. package/licenses/legacy-frames-provenance.json +12 -0
  40. package/licenses/node/MPL-2.0.txt +373 -0
  41. package/licenses/node/napi-LICENSE.txt +43 -0
  42. package/licenses/node/upstream.json +45 -0
  43. package/licenses/pierre-highlights-LICENSE.txt +189 -0
  44. package/licenses/pierre-highlights-NOTICE.md +7 -0
  45. package/licenses/rust-dependencies.json +2141 -0
  46. package/licenses/rust-dependency-notices.txt +31994 -0
  47. package/licenses/sources/README.md +3 -0
  48. package/licenses/sources/cssparser-0.37.0.crate +0 -0
  49. package/licenses/sources/cssparser-macros-0.7.1.crate +0 -0
  50. package/licenses/sources/dtoa-short-0.3.5.crate +0 -0
  51. package/licenses/sources/giallo-0.5.2.crate +0 -0
  52. package/licenses/sources/selectors-0.40.0.crate +0 -0
  53. package/licenses/upstream/bitcode_derive-LICENSE-MIT.txt +9 -0
  54. package/licenses/upstream/manifest.json +64 -0
  55. package/licenses/upstream/taffy-LICENSE.md.txt +25 -0
  56. package/licenses/upstream/takumi-LICENSE-APACHE.txt +202 -0
  57. package/licenses/upstream/takumi-LICENSE-MIT.txt +21 -0
  58. package/licenses/upstream/takumi-core-LICENSE-APACHE.txt +202 -0
  59. package/licenses/upstream/takumi-core-LICENSE-MIT.txt +21 -0
  60. package/licenses/upstream/wuff-LICENSE.txt +20 -0
  61. package/monoprint.linux-x64-gnu.node +4 -0
  62. package/package.json +28 -4
  63. package/vendor/takumi-raster/LICENSE-APACHE +202 -0
  64. package/vendor/takumi-raster/LICENSE-MIT +21 -0
  65. package/vendor/takumi-raster/PATCHES.md +73 -0
  66. package/vendor/takumi-svg/LICENSE-APACHE +202 -0
  67. package/vendor/takumi-svg/LICENSE-MIT +21 -0
  68. package/vendor/takumi-svg/PATCHES.md +26 -0
@@ -0,0 +1,1480 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
3
+ "displayName": "BIRD2 Configuration",
4
+ "name": "bird2",
5
+ "scopeName": "source.bird2",
6
+ "fileTypes": [
7
+ "conf",
8
+ "bird",
9
+ "bird2",
10
+ "bird3",
11
+ "bird.conf",
12
+ "bird2.conf",
13
+ "bird3.conf"
14
+ ],
15
+ "author": "BIRD Chinese Community (Alice39s) <dev-bird@xmsl.dev>",
16
+ "description": "BIRD 2 and BIRD 3 Configuration Language",
17
+ "version": "1.0.13-20260717",
18
+ "patterns": [
19
+ {
20
+ "include": "#comments"
21
+ },
22
+ {
23
+ "include": "#strings"
24
+ },
25
+ {
26
+ "include": "#ip-addresses"
27
+ },
28
+ {
29
+ "include": "#prefixes"
30
+ },
31
+ {
32
+ "include": "#vpn-rd"
33
+ },
34
+ {
35
+ "include": "#bytestrings"
36
+ },
37
+ {
38
+ "include": "#bgp-paths"
39
+ },
40
+ {
41
+ "include": "#print-statements"
42
+ },
43
+ {
44
+ "include": "#template-definitions"
45
+ },
46
+ {
47
+ "include": "#filter-definitions"
48
+ },
49
+ {
50
+ "include": "#function-definitions"
51
+ },
52
+ {
53
+ "include": "#protocol-definitions"
54
+ },
55
+ {
56
+ "include": "#next-hop-statements"
57
+ },
58
+ {
59
+ "include": "#neighbor-statements"
60
+ },
61
+ {
62
+ "include": "#import-export-statements"
63
+ },
64
+ {
65
+ "include": "#variable-declarations"
66
+ },
67
+ {
68
+ "include": "#method-calls"
69
+ },
70
+ {
71
+ "include": "#function-calls"
72
+ },
73
+ {
74
+ "include": "#method-properties"
75
+ },
76
+ {
77
+ "include": "#route-attributes"
78
+ },
79
+ {
80
+ "include": "#data-types"
81
+ },
82
+ {
83
+ "include": "#constants"
84
+ },
85
+ {
86
+ "include": "#protocol-phrases"
87
+ },
88
+ {
89
+ "include": "#structural-keywords"
90
+ },
91
+ {
92
+ "include": "#functional-keywords"
93
+ },
94
+ {
95
+ "include": "#semantic-modifiers"
96
+ },
97
+ {
98
+ "include": "#builtin-functions"
99
+ },
100
+ {
101
+ "include": "#filter-names"
102
+ },
103
+ {
104
+ "include": "#user-variables"
105
+ },
106
+ {
107
+ "include": "#operators"
108
+ },
109
+ {
110
+ "include": "#numbers"
111
+ },
112
+ {
113
+ "include": "#symbols"
114
+ },
115
+ {
116
+ "include": "#blocks"
117
+ }
118
+ ],
119
+ "repository": {
120
+ "comments": {
121
+ "patterns": [
122
+ {
123
+ "name": "comment.line.number-sign.bird",
124
+ "begin": "#",
125
+ "end": "$",
126
+ "beginCaptures": {
127
+ "0": {
128
+ "name": "punctuation.definition.comment.bird"
129
+ }
130
+ }
131
+ },
132
+ {
133
+ "name": "comment.block.bird",
134
+ "begin": "/\\*",
135
+ "end": "\\*/",
136
+ "beginCaptures": {
137
+ "0": {
138
+ "name": "punctuation.definition.comment.begin.bird"
139
+ }
140
+ },
141
+ "endCaptures": {
142
+ "0": {
143
+ "name": "punctuation.definition.comment.end.bird"
144
+ }
145
+ }
146
+ }
147
+ ]
148
+ },
149
+ "strings": {
150
+ "patterns": [
151
+ {
152
+ "name": "string.quoted.double.bird",
153
+ "begin": "\"",
154
+ "end": "\"",
155
+ "beginCaptures": {
156
+ "0": {
157
+ "name": "punctuation.definition.string.begin.bird"
158
+ }
159
+ },
160
+ "endCaptures": {
161
+ "0": {
162
+ "name": "punctuation.definition.string.end.bird"
163
+ }
164
+ },
165
+ "patterns": [
166
+ {
167
+ "name": "constant.character.escape.bird",
168
+ "match": "\\\\."
169
+ }
170
+ ]
171
+ },
172
+ {
173
+ "name": "entity.name.symbol.quoted.bird",
174
+ "match": "'[0-9A-Za-z_.:-]+'"
175
+ }
176
+ ]
177
+ },
178
+ "numbers": {
179
+ "patterns": [
180
+ {
181
+ "name": "constant.numeric.hex.bird",
182
+ "match": "\\b0x[0-9a-fA-F]+\\b"
183
+ },
184
+ {
185
+ "name": "constant.numeric.decimal.bird",
186
+ "match": "\\b[0-9]+\\b"
187
+ },
188
+ {
189
+ "name": "constant.numeric.time.bird",
190
+ "match": "\\b[0-9]+\\s*(s|ms|us)\\b",
191
+ "captures": {
192
+ "1": {
193
+ "name": "keyword.other.unit.bird"
194
+ }
195
+ }
196
+ }
197
+ ]
198
+ },
199
+ "ip-addresses": {
200
+ "patterns": [
201
+ {
202
+ "name": "constant.numeric.ip.ipv4.bird",
203
+ "match": "\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?:/[0-9]{1,2})?\\b"
204
+ },
205
+ {
206
+ "name": "constant.numeric.ip.ipv6.bird",
207
+ "match": "\\b(?:[0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}(?:/[0-9]{1,3})?\\b"
208
+ },
209
+ {
210
+ "name": "constant.numeric.ip.ipv6.bird",
211
+ "match": "::(?:[0-9a-fA-F]{0,4}:){0,6}[0-9a-fA-F]{0,4}(?:/[0-9]{1,3})?\\b"
212
+ },
213
+ {
214
+ "name": "constant.numeric.ip.ipv6.bird",
215
+ "match": "\\b(?:[0-9a-fA-F]{0,4}:){1,6}::(?:[0-9a-fA-F]{0,4}:){0,5}[0-9a-fA-F]{0,4}(?:/[0-9]{1,3})?\\b"
216
+ }
217
+ ]
218
+ },
219
+ "vpn-rd": {
220
+ "name": "constant.numeric.vpn-rd.bird",
221
+ "match": "\\b(?:[0-9]+:[0-9]+|[0-2]:[0-9]+:[0-9]+|(?:[0-9]{1,3}\\.){3}[0-9]{1,3}:[0-9]+)\\b"
222
+ },
223
+ "bytestrings": {
224
+ "patterns": [
225
+ {
226
+ "name": "constant.numeric.bytestring.bird",
227
+ "match": "\\bhex:[0-9a-fA-F]{2}(?:[:\\-\\s\\.]*[0-9a-fA-F]{2})*\\b"
228
+ },
229
+ {
230
+ "name": "constant.numeric.bytestring.bird",
231
+ "match": "\\b(?:[0-9a-fA-F]{2}[:\\-\\s\\.]*){15,}[0-9a-fA-F]{2}\\b"
232
+ },
233
+ {
234
+ "name": "constant.numeric.bytestring.bird",
235
+ "match": "\\b[0-9a-fA-F]{32,}\\b"
236
+ }
237
+ ]
238
+ },
239
+ "bgp-paths": {
240
+ "patterns": [
241
+ {
242
+ "name": "meta.bgp-path.bird",
243
+ "begin": "\\[=",
244
+ "end": "=\\]",
245
+ "beginCaptures": {
246
+ "0": {
247
+ "name": "punctuation.definition.bgp-path.begin.bird"
248
+ }
249
+ },
250
+ "endCaptures": {
251
+ "0": {
252
+ "name": "punctuation.definition.bgp-path.end.bird"
253
+ }
254
+ },
255
+ "patterns": [
256
+ {
257
+ "name": "keyword.operator.wildcard.bird",
258
+ "match": "[*?+]"
259
+ },
260
+ {
261
+ "name": "constant.numeric.asn.bird",
262
+ "match": "\\b[0-9]+\\b"
263
+ },
264
+ {
265
+ "include": "#operators"
266
+ },
267
+ {
268
+ "include": "#symbols"
269
+ }
270
+ ]
271
+ }
272
+ ]
273
+ },
274
+ "prefixes": {
275
+ "patterns": [
276
+ {
277
+ "name": "constant.numeric.prefix.bird",
278
+ "match": "(?<![0-9A-Za-z_:])(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}|(?:[0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4})/[0-9]{1,3}(?:[+\\-]|\\{[0-9]+,[0-9]+\\})?(?![0-9A-Za-z_])"
279
+ }
280
+ ]
281
+ },
282
+ "filter-definitions": {
283
+ "patterns": [
284
+ {
285
+ "name": "meta.filter-definition.bird",
286
+ "begin": "\\b(filter)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s*\\{",
287
+ "end": "\\}",
288
+ "beginCaptures": {
289
+ "1": {
290
+ "name": "keyword.control.filter.bird"
291
+ },
292
+ "2": {
293
+ "name": "entity.name.function.filter.bird"
294
+ }
295
+ },
296
+ "endCaptures": {
297
+ "0": {
298
+ "name": "punctuation.definition.block.end.bird"
299
+ }
300
+ },
301
+ "patterns": [
302
+ {
303
+ "include": "$self"
304
+ }
305
+ ]
306
+ }
307
+ ]
308
+ },
309
+ "function-definitions": {
310
+ "patterns": [
311
+ {
312
+ "name": "meta.function-definition.bird",
313
+ "begin": "\\b(function)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))(?=\\s*\\()",
314
+ "end": "\\}",
315
+ "beginCaptures": {
316
+ "1": {
317
+ "name": "keyword.control.function.bird"
318
+ },
319
+ "2": {
320
+ "name": "entity.name.function.user-defined.bird"
321
+ }
322
+ },
323
+ "endCaptures": {
324
+ "0": {
325
+ "name": "punctuation.definition.block.end.bird"
326
+ }
327
+ },
328
+ "patterns": [
329
+ {
330
+ "name": "meta.function-parameters.bird",
331
+ "begin": "\\(",
332
+ "end": "\\)",
333
+ "beginCaptures": {
334
+ "0": {
335
+ "name": "punctuation.definition.parameters.begin.bird"
336
+ }
337
+ },
338
+ "endCaptures": {
339
+ "0": {
340
+ "name": "punctuation.definition.parameters.end.bird"
341
+ }
342
+ },
343
+ "patterns": [
344
+ {
345
+ "include": "#data-types"
346
+ },
347
+ {
348
+ "include": "#symbols"
349
+ }
350
+ ]
351
+ },
352
+ {
353
+ "name": "meta.function-return-type.bird",
354
+ "begin": "->",
355
+ "end": "(?=\\{)",
356
+ "beginCaptures": {
357
+ "0": {
358
+ "name": "keyword.operator.return-type.bird"
359
+ }
360
+ },
361
+ "patterns": [
362
+ {
363
+ "include": "#data-types"
364
+ }
365
+ ]
366
+ },
367
+ {
368
+ "include": "$self"
369
+ }
370
+ ]
371
+ }
372
+ ]
373
+ },
374
+ "template-definitions": {
375
+ "patterns": [
376
+ {
377
+ "name": "meta.template-definition-with-from.bird",
378
+ "begin": "\\b(template)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s+(from)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s*\\{",
379
+ "end": "\\}",
380
+ "beginCaptures": {
381
+ "1": {
382
+ "name": "keyword.control.template.bird"
383
+ },
384
+ "2": {
385
+ "name": "entity.name.type.protocol.bird"
386
+ },
387
+ "3": {
388
+ "name": "entity.name.function.template.bird"
389
+ },
390
+ "4": {
391
+ "name": "keyword.control.template-reference.bird"
392
+ },
393
+ "5": {
394
+ "name": "entity.name.function.template.bird"
395
+ }
396
+ },
397
+ "endCaptures": {
398
+ "0": {
399
+ "name": "punctuation.definition.block.end.bird"
400
+ }
401
+ },
402
+ "patterns": [
403
+ {
404
+ "include": "$self"
405
+ }
406
+ ]
407
+ },
408
+ {
409
+ "name": "meta.template-definition-with-name.bird",
410
+ "begin": "\\b(template)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s*\\{",
411
+ "end": "\\}",
412
+ "beginCaptures": {
413
+ "1": {
414
+ "name": "keyword.control.template.bird"
415
+ },
416
+ "2": {
417
+ "name": "entity.name.type.protocol.bird"
418
+ },
419
+ "3": {
420
+ "name": "entity.name.function.template.bird"
421
+ }
422
+ },
423
+ "endCaptures": {
424
+ "0": {
425
+ "name": "punctuation.definition.block.end.bird"
426
+ }
427
+ },
428
+ "patterns": [
429
+ {
430
+ "include": "$self"
431
+ }
432
+ ]
433
+ },
434
+ {
435
+ "name": "meta.template-definition-anonymous.bird",
436
+ "begin": "\\b(template)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\{",
437
+ "end": "\\}",
438
+ "beginCaptures": {
439
+ "1": {
440
+ "name": "keyword.control.template.bird"
441
+ },
442
+ "2": {
443
+ "name": "entity.name.type.protocol.bird"
444
+ }
445
+ },
446
+ "endCaptures": {
447
+ "0": {
448
+ "name": "punctuation.definition.block.end.bird"
449
+ }
450
+ },
451
+ "patterns": [
452
+ {
453
+ "include": "$self"
454
+ }
455
+ ]
456
+ }
457
+ ]
458
+ },
459
+ "protocol-definitions": {
460
+ "patterns": [
461
+ {
462
+ "name": "meta.protocol-definition-with-template.bird",
463
+ "begin": "\\b(protocol)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s+(from)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s*\\{",
464
+ "end": "\\}",
465
+ "beginCaptures": {
466
+ "1": {
467
+ "name": "keyword.control.protocol.bird"
468
+ },
469
+ "2": {
470
+ "name": "entity.name.type.protocol.bird"
471
+ },
472
+ "3": {
473
+ "name": "entity.name.function.protocol.bird"
474
+ },
475
+ "4": {
476
+ "name": "keyword.control.template-reference.bird"
477
+ },
478
+ "5": {
479
+ "name": "entity.name.function.template.bird"
480
+ }
481
+ },
482
+ "endCaptures": {
483
+ "0": {
484
+ "name": "punctuation.definition.block.end.bird"
485
+ }
486
+ },
487
+ "patterns": [
488
+ {
489
+ "include": "$self"
490
+ }
491
+ ]
492
+ },
493
+ {
494
+ "name": "meta.protocol-definition-with-name.bird",
495
+ "begin": "\\b(protocol)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\s*\\{",
496
+ "end": "\\}",
497
+ "beginCaptures": {
498
+ "1": {
499
+ "name": "keyword.control.protocol.bird"
500
+ },
501
+ "2": {
502
+ "name": "entity.name.type.protocol.bird"
503
+ },
504
+ "3": {
505
+ "name": "entity.name.function.protocol.bird"
506
+ }
507
+ },
508
+ "endCaptures": {
509
+ "0": {
510
+ "name": "punctuation.definition.block.end.bird"
511
+ }
512
+ },
513
+ "patterns": [
514
+ {
515
+ "include": "$self"
516
+ }
517
+ ]
518
+ },
519
+ {
520
+ "name": "meta.protocol-definition-anonymous.bird",
521
+ "begin": "\\b(protocol)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\{",
522
+ "end": "\\}",
523
+ "beginCaptures": {
524
+ "1": {
525
+ "name": "keyword.control.protocol.bird"
526
+ },
527
+ "2": {
528
+ "name": "entity.name.type.protocol.bird"
529
+ }
530
+ },
531
+ "endCaptures": {
532
+ "0": {
533
+ "name": "punctuation.definition.block.end.bird"
534
+ }
535
+ },
536
+ "patterns": [
537
+ {
538
+ "include": "$self"
539
+ }
540
+ ]
541
+ }
542
+ ]
543
+ },
544
+ "print-statements": {
545
+ "patterns": [
546
+ {
547
+ "name": "meta.print-statement.bird",
548
+ "begin": "\\b(print|printn)\\b",
549
+ "end": ";",
550
+ "beginCaptures": {
551
+ "1": {
552
+ "name": "keyword.other.print.bird"
553
+ }
554
+ },
555
+ "endCaptures": {
556
+ "0": {
557
+ "name": "punctuation.terminator.statement.bird"
558
+ }
559
+ },
560
+ "patterns": [
561
+ {
562
+ "include": "$self"
563
+ }
564
+ ]
565
+ }
566
+ ]
567
+ },
568
+ "next-hop-statements": {
569
+ "patterns": [
570
+ {
571
+ "name": "meta.next-hop-ipv4.bird",
572
+ "match": "\\b(next hop)\\s+(ipv4)\\s+([0-9\\.]+)\\b",
573
+ "captures": {
574
+ "1": {
575
+ "name": "keyword.control.routing.bird"
576
+ },
577
+ "2": {
578
+ "name": "keyword.other.ip-version.bird"
579
+ },
580
+ "3": {
581
+ "name": "constant.numeric.ip-address.bird"
582
+ }
583
+ }
584
+ },
585
+ {
586
+ "name": "meta.next-hop-ipv6.bird",
587
+ "match": "\\b(next hop)\\s+(ipv6)\\s+([0-9a-fA-F:]+)\\b",
588
+ "captures": {
589
+ "1": {
590
+ "name": "keyword.control.routing.bird"
591
+ },
592
+ "2": {
593
+ "name": "keyword.other.ip-version.bird"
594
+ },
595
+ "3": {
596
+ "name": "constant.numeric.ip-address.bird"
597
+ }
598
+ }
599
+ },
600
+ {
601
+ "name": "meta.next-hop-simple.bird",
602
+ "match": "\\b(next hop)\\s+(self)\\b",
603
+ "captures": {
604
+ "1": {
605
+ "name": "keyword.control.routing.bird"
606
+ },
607
+ "2": {
608
+ "name": "keyword.other.semantic-modifier.bird"
609
+ }
610
+ }
611
+ },
612
+ {
613
+ "name": "meta.next-hop-prefer-statement.bird",
614
+ "match": "\\b(next hop prefer)\\s+(global|local|native|ipv6)\\b",
615
+ "captures": {
616
+ "1": {
617
+ "name": "keyword.control.routing.bird"
618
+ },
619
+ "2": {
620
+ "name": "keyword.other.semantic-modifier.bird"
621
+ }
622
+ }
623
+ },
624
+ {
625
+ "name": "meta.next-hop-keep-statement.bird",
626
+ "match": "\\b(next hop keep)(?:\\s+(ibgp|ebgp))?\\b",
627
+ "captures": {
628
+ "1": {
629
+ "name": "keyword.control.routing.bird"
630
+ },
631
+ "2": {
632
+ "name": "keyword.other.semantic-modifier.bird"
633
+ }
634
+ }
635
+ },
636
+ {
637
+ "name": "meta.extended-next-hop-statement.bird",
638
+ "match": "\\b(extended next hop)\\s+(on|off)\\b",
639
+ "captures": {
640
+ "1": {
641
+ "name": "keyword.control.routing.bird"
642
+ },
643
+ "2": {
644
+ "name": "keyword.other.semantic-modifier.bird"
645
+ }
646
+ }
647
+ },
648
+ {
649
+ "name": "meta.require-extended-next-hop-statement.bird",
650
+ "match": "\\b(require extended next hop)\\s+(yes|no|on|off|true|false)\\b",
651
+ "captures": {
652
+ "1": {
653
+ "name": "keyword.control.routing.bird"
654
+ },
655
+ "2": {
656
+ "name": "keyword.other.semantic-modifier.bird"
657
+ }
658
+ }
659
+ }
660
+ ]
661
+ },
662
+ "neighbor-statements": {
663
+ "patterns": [
664
+ {
665
+ "name": "meta.local-as-statement.bird",
666
+ "match": "\\b(local)\\s+((?:[0-9a-fA-F:.]+|[A-Za-z_][A-Za-z0-9_]*|'[0-9A-Za-z_.:-]+'))(?:\\s+(port)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*)))?\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
667
+ "captures": {
668
+ "1": {
669
+ "name": "keyword.control.local.bird"
670
+ },
671
+ "2": {
672
+ "name": "entity.name.symbol.local-address.bird"
673
+ },
674
+ "3": {
675
+ "name": "keyword.control.port.bird"
676
+ },
677
+ "4": {
678
+ "name": "constant.numeric.port.bird"
679
+ },
680
+ "5": {
681
+ "name": "keyword.control.as.bird"
682
+ },
683
+ "6": {
684
+ "name": "constant.numeric.asn.bird"
685
+ }
686
+ }
687
+ },
688
+ {
689
+ "name": "meta.local-as-template-statement.bird",
690
+ "match": "\\b(local)\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
691
+ "captures": {
692
+ "1": {
693
+ "name": "keyword.control.local.bird"
694
+ },
695
+ "2": {
696
+ "name": "keyword.control.as.bird"
697
+ },
698
+ "3": {
699
+ "name": "constant.numeric.asn.bird"
700
+ }
701
+ }
702
+ },
703
+ {
704
+ "name": "meta.neighbor-port-statement.bird",
705
+ "match": "\\b(neighbor)\\s+([0-9a-fA-F:.]+)\\s*(%\\s*(?:'([0-9A-Za-z_.:-]+)'|([A-Za-z0-9_.:-]+)))?(?:\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*)))?\\s+(port)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
706
+ "captures": {
707
+ "1": {
708
+ "name": "keyword.control.neighbor.bird"
709
+ },
710
+ "2": {
711
+ "name": "constant.numeric.ip-address.bird"
712
+ },
713
+ "3": {
714
+ "name": "meta.interface-reference.bird"
715
+ },
716
+ "4": {
717
+ "name": "string.quoted.single.interface.bird"
718
+ },
719
+ "5": {
720
+ "name": "variable.other.interface.bird"
721
+ },
722
+ "6": {
723
+ "name": "keyword.control.as.bird"
724
+ },
725
+ "7": {
726
+ "name": "constant.numeric.asn.bird"
727
+ },
728
+ "8": {
729
+ "name": "keyword.control.port.bird"
730
+ },
731
+ "9": {
732
+ "name": "constant.numeric.port.bird"
733
+ }
734
+ }
735
+ },
736
+ {
737
+ "name": "meta.neighbor-port-symbolic-statement.bird",
738
+ "match": "\\b(neighbor)\\s+((?:'[0-9A-Za-z_.:-]+'|(?!as\\b|range\\b)[A-Za-z_][A-Za-z0-9_]*))\\s*(%\\s*(?:'([0-9A-Za-z_.:-]+)'|([A-Za-z0-9_.:-]+)))?(?:\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*)))?\\s+(port)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
739
+ "captures": {
740
+ "1": {
741
+ "name": "keyword.control.neighbor.bird"
742
+ },
743
+ "2": {
744
+ "name": "entity.name.symbol.neighbor-address.bird"
745
+ },
746
+ "3": {
747
+ "name": "meta.interface-reference.bird"
748
+ },
749
+ "4": {
750
+ "name": "string.quoted.single.interface.bird"
751
+ },
752
+ "5": {
753
+ "name": "variable.other.interface.bird"
754
+ },
755
+ "6": {
756
+ "name": "keyword.control.as.bird"
757
+ },
758
+ "7": {
759
+ "name": "constant.numeric.asn.bird"
760
+ },
761
+ "8": {
762
+ "name": "keyword.control.port.bird"
763
+ },
764
+ "9": {
765
+ "name": "constant.numeric.port.bird"
766
+ }
767
+ }
768
+ },
769
+ {
770
+ "name": "meta.neighbor-statement.bird",
771
+ "match": "\\b(neighbor)\\s+([0-9a-fA-F:.]+)\\s*(%\\s*(?:'([0-9A-Za-z_.:-]+)'|([A-Za-z0-9_.:-]+)))?\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
772
+ "captures": {
773
+ "1": {
774
+ "name": "keyword.control.neighbor.bird"
775
+ },
776
+ "2": {
777
+ "name": "constant.numeric.ip-address.bird"
778
+ },
779
+ "3": {
780
+ "name": "meta.interface-reference.bird"
781
+ },
782
+ "4": {
783
+ "name": "string.quoted.single.interface.bird"
784
+ },
785
+ "5": {
786
+ "name": "variable.other.interface.bird"
787
+ },
788
+ "6": {
789
+ "name": "keyword.control.as.bird"
790
+ },
791
+ "7": {
792
+ "name": "constant.numeric.asn.bird"
793
+ }
794
+ }
795
+ },
796
+ {
797
+ "name": "meta.neighbor-symbolic-statement.bird",
798
+ "match": "\\b(neighbor)\\s+((?:'[0-9A-Za-z_.:-]+'|(?!as\\b|range\\b)[A-Za-z_][A-Za-z0-9_]*))\\s*(%\\s*(?:'([0-9A-Za-z_.:-]+)'|([A-Za-z0-9_.:-]+)))?\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
799
+ "captures": {
800
+ "1": {
801
+ "name": "keyword.control.neighbor.bird"
802
+ },
803
+ "2": {
804
+ "name": "entity.name.symbol.neighbor-address.bird"
805
+ },
806
+ "3": {
807
+ "name": "meta.interface-reference.bird"
808
+ },
809
+ "4": {
810
+ "name": "string.quoted.single.interface.bird"
811
+ },
812
+ "5": {
813
+ "name": "variable.other.interface.bird"
814
+ },
815
+ "6": {
816
+ "name": "keyword.control.as.bird"
817
+ },
818
+ "7": {
819
+ "name": "constant.numeric.asn.bird"
820
+ }
821
+ }
822
+ },
823
+ {
824
+ "name": "meta.neighbor-template-statement.bird",
825
+ "match": "\\b(neighbor)\\s+(as)\\s+((?:[0-9]+|[A-Za-z_][A-Za-z0-9_]*))\\b",
826
+ "captures": {
827
+ "1": {
828
+ "name": "keyword.control.neighbor.bird"
829
+ },
830
+ "2": {
831
+ "name": "keyword.control.as.bird"
832
+ },
833
+ "3": {
834
+ "name": "constant.numeric.asn.bird"
835
+ }
836
+ }
837
+ },
838
+ {
839
+ "name": "meta.neighbor-role-statement.bird",
840
+ "match": "\\b(neighbor)\\s+([0-9a-fA-F:.]+|(?:'[0-9A-Za-z_.:-]+'|(?!as\\b|range\\b)[A-Za-z_][A-Za-z0-9_]*))\\s+(internal|external)\\b",
841
+ "captures": {
842
+ "1": {
843
+ "name": "keyword.control.neighbor.bird"
844
+ },
845
+ "2": {
846
+ "name": "entity.name.symbol.neighbor-address.bird"
847
+ },
848
+ "3": {
849
+ "name": "keyword.other.semantic-modifier.bird"
850
+ }
851
+ }
852
+ },
853
+ {
854
+ "name": "meta.neighbor-onlink-statement.bird",
855
+ "match": "\\b(neighbor)\\s+([0-9a-fA-F:.]+|(?:'[0-9A-Za-z_.:-]+'|(?!as\\b|range\\b)[A-Za-z_][A-Za-z0-9_]*))\\s+(onlink)\\b",
856
+ "captures": {
857
+ "1": {
858
+ "name": "keyword.control.neighbor.bird"
859
+ },
860
+ "2": {
861
+ "name": "entity.name.symbol.neighbor-address.bird"
862
+ },
863
+ "3": {
864
+ "name": "keyword.other.semantic-modifier.bird"
865
+ }
866
+ }
867
+ },
868
+ {
869
+ "name": "meta.source-address-statement.bird",
870
+ "match": "\\b(source address)\\s+([0-9a-fA-F:.]+)\\b",
871
+ "captures": {
872
+ "1": {
873
+ "name": "keyword.control.source.bird"
874
+ },
875
+ "2": {
876
+ "name": "constant.numeric.ip-address.bird"
877
+ }
878
+ }
879
+ }
880
+ ]
881
+ },
882
+ "import-export-statements": {
883
+ "patterns": [
884
+ {
885
+ "name": "meta.import-statement.bird",
886
+ "match": "\\b(import)\\s+(filter)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\b",
887
+ "captures": {
888
+ "1": {
889
+ "name": "keyword.control.import-export.bird"
890
+ },
891
+ "2": {
892
+ "name": "keyword.control.filter.bird"
893
+ },
894
+ "3": {
895
+ "name": "entity.name.function.filter.bird"
896
+ }
897
+ }
898
+ },
899
+ {
900
+ "name": "meta.import-filter-inline.bird",
901
+ "begin": "\\b(import)\\s+(filter)\\s*\\{",
902
+ "end": "\\}",
903
+ "beginCaptures": {
904
+ "1": {
905
+ "name": "keyword.control.import-export.bird"
906
+ },
907
+ "2": {
908
+ "name": "keyword.control.filter.bird"
909
+ }
910
+ },
911
+ "endCaptures": {
912
+ "0": {
913
+ "name": "punctuation.definition.block.end.bird"
914
+ }
915
+ },
916
+ "patterns": [
917
+ {
918
+ "include": "$self"
919
+ }
920
+ ]
921
+ },
922
+ {
923
+ "name": "meta.export-where-clause.bird",
924
+ "begin": "\\b(export)\\s+(where)\\b",
925
+ "end": ";",
926
+ "beginCaptures": {
927
+ "1": {
928
+ "name": "keyword.control.import-export.bird"
929
+ },
930
+ "2": {
931
+ "name": "keyword.control.where.bird"
932
+ }
933
+ },
934
+ "endCaptures": {
935
+ "0": {
936
+ "name": "punctuation.terminator.statement.bird"
937
+ }
938
+ },
939
+ "patterns": [
940
+ {
941
+ "include": "$self"
942
+ }
943
+ ]
944
+ },
945
+ {
946
+ "name": "meta.export-prefilter-clause.bird",
947
+ "begin": "\\b(export\\s+in)\\b",
948
+ "end": ";",
949
+ "beginCaptures": {
950
+ "1": {
951
+ "name": "keyword.control.import-export.bird"
952
+ }
953
+ },
954
+ "endCaptures": {
955
+ "0": {
956
+ "name": "punctuation.terminator.statement.bird"
957
+ }
958
+ },
959
+ "patterns": [
960
+ {
961
+ "include": "$self"
962
+ }
963
+ ]
964
+ },
965
+ {
966
+ "name": "meta.export-statement.bird",
967
+ "match": "\\b(export)\\s+(filter)\\s+((?:[a-zA-Z_][a-zA-Z0-9_]*|'[0-9A-Za-z_.:-]+'))\\b",
968
+ "captures": {
969
+ "1": {
970
+ "name": "keyword.control.import-export.bird"
971
+ },
972
+ "2": {
973
+ "name": "keyword.control.filter.bird"
974
+ },
975
+ "3": {
976
+ "name": "entity.name.function.filter.bird"
977
+ }
978
+ }
979
+ }
980
+ ]
981
+ },
982
+ "structural-keywords": {
983
+ "patterns": [
984
+ {
985
+ "name": "keyword.control.bird",
986
+ "match": "\\b(?:if|then|else|case|for|do|while|break|continue|return|in)\\b"
987
+ },
988
+ {
989
+ "name": "keyword.control.case.else.bird",
990
+ "match": "\\belse\\s*:"
991
+ },
992
+ {
993
+ "name": "keyword.control.flow.bird",
994
+ "match": "\\b(?:accept|reject|error)\\b"
995
+ },
996
+ {
997
+ "name": "keyword.control.structure.bird",
998
+ "match": "\\b(?:protocol|table|define|include|attribute|eval|ipv6\\s+sadr|ipv4\\s+mpls|ipv6\\s+mpls|vpn4\\s+mpls|vpn6\\s+mpls|ipv4|ipv6|local|as|from|where|cost|limit|action)\\b"
999
+ }
1000
+ ]
1001
+ },
1002
+ "protocol-phrases": {
1003
+ "patterns": [
1004
+ {
1005
+ "name": "keyword.other.bfd.phrase.bird",
1006
+ "match": "\\b(?:strict\\s+bind|zero\\s+udp6\\s+checksum\\s+rx|idle\\s+tx\\s+interval|min\\s+rx\\s+interval|min\\s+tx\\s+interval|accept\\s+ipv4|accept\\s+multihop|authentication\\s+meticulous\\s+keyed\\s+sha1|keyed\\s+md5|keyed\\s+sha1|meticulous\\s+keyed\\s+md5|meticulous\\s+keyed\\s+sha1|express\\s+thread\\s+group|multiplier|keyed|meticulous)\\b"
1007
+ },
1008
+ {
1009
+ "name": "keyword.other.babel.phrase.bird",
1010
+ "match": "\\b(?:hello\\s+interval|update\\s+interval|send\\s+timestamps|rtt\\s+(?:cost|min|max|decay)|next\\s+hop\\s+prefer\\s+ipv6|next\\s+hop\\s+prefer|next\\s+hop\\s+ipv4|next\\s+hop\\s+ipv6|authentication\\s+mac\\s+permissive|authentication\\s+mac|randomize\\s+router\\s+id|show\\s+babel\\s+interfaces|show\\s+babel\\s+neighbors|show\\s+babel\\s+entries|show\\s+babel\\s+routes|prefer|native)\\b"
1011
+ },
1012
+ {
1013
+ "name": "keyword.other.bgp.phrase.bird",
1014
+ "match": "\\b(?:ipv4\\s+multicast|ipv4\\s+mpls|ipv6\\s+multicast|ipv6\\s+mpls|vpn4\\s+multicast|vpn4\\s+mpls|vpn6\\s+multicast|vpn6\\s+mpls|rr\\s+cluster\\s+id|confederation\\s+member|hold\\s+time|min\\s+hold\\s+time|startup\\s+hold\\s+time|path\\s+metric|prefer\\s+older|connect\\s+delay\\s+time|connect\\s+retry\\s+time|keepalive\\s+time|min\\s+keepalive\\s+time|send\\s+hold\\s+time|error\\s+forget\\s+time|error\\s+wait\\s+time|min\\s+graceful\\s+restart\\s+time|max\\s+graceful\\s+restart\\s+time|long\\s+lived\\s+graceful\\s+restart\\s+aware|min\\s+long\\s+lived\\s+stale\\s+time|max\\s+long\\s+lived\\s+stale\\s+time|disable\\s+rx|send\\s+id|recv\\s+id|next\\s+hop\\s+self|next\\s+hop\\s+address|next\\s+hop\\s+ibgp|next\\s+hop\\s+ebgp|next\\s+hop\\s+prefer\\s+global|next\\s+hop\\s+prefer\\s+local|next\\s+hop\\s+keep|link\\s+local\\s+next\\s+hop\\s+format|import\\s+table|export\\s+table|base\\s+table|igp\\s+table|add\\s+paths\\s+rx|add\\s+paths\\s+tx|add\\s+paths|require\\s+add\\s+paths|gateway\\s+direct|aigp\\s+originate|long\\s+lived\\s+graceful\\s+restart|long\\s+lived\\s+stale\\s+time|dynamic\\s+name(?:\\s+digits)?|free\\s+bind|ttl\\s+security|multihop\\s+password|authentication\\s+ao|tx\\s+size\\s+warning|rr\\s+client|rs\\s+client|advertise\\s+hostname|interpret\\s+communities|deterministic\\s+med|default\\s+bgp_local_pref|default\\s+bgp_med|med\\s+metric|igp\\s+metric|missing\\s+lladdr|gateway\\s+address|forwarding\\s+addressed|gateway\\s+recursive|allow\\s+local\\s+as|allow\\s+bogus\\s+as|allow\\s+bgp_local_pref|allow\\s+bgp_med|allow\\s+as\\s+sets|enable\\s+route\\s+refresh|enable\\s+enhanced\\s+route\\s+refresh|require\\s+route\\s+refresh|require\\s+enhanced\\s+route\\s+refresh|enable\\s+as4|require\\s+as4|enable\\s+extended\\s+messages|require\\s+extended\\s+messages|require\\s+hostname|require\\s+graceful\\s+restart|require\\s+long\\s+lived\\s+graceful\\s+restart|require\\s+extended\\s+next\\s+hop|disable\\s+after\\s+error|disable\\s+after\\s+cease|prefix\\s+limit\\s+hit|administrative\\s+shutdown|peer\\s+deconfigured|administrative\\s+reset|connection\\s+rejected|configuration\\s+change|connection\\s+collision|out\\s+of\\s+resources|enforce\\s+first\\s+as|neighbor\\s+range|interface\\s+range|originate\\s+community|full\\s+route\\s+table|link\\s+local\\s+next\\s+hop\\s+format\\s+(?:native|single|double)|mandatory|secondary|validate|capabilities|primary|aigp|setkey|drop|single|double)\\b"
1015
+ },
1016
+ {
1017
+ "name": "keyword.other.bgp-role.phrase.bird",
1018
+ "match": "\\b(?:local\\s+role|require\\s+roles)\\b"
1019
+ },
1020
+ {
1021
+ "name": "constant.language.bgp-role.bird",
1022
+ "match": "\\b(?:provider|customer|rs_server|rs_client)\\b"
1023
+ },
1024
+ {
1025
+ "name": "keyword.other.mpls.phrase.bird",
1026
+ "match": "\\b(?:mpls\\s+domain|label\\s+range\\s+static|label\\s+range\\s+dynamic|label\\s+range|label\\s+policy|static\\s+label|dynamic\\s+label)\\b"
1027
+ },
1028
+ {
1029
+ "name": "keyword.other.static.phrase.bird",
1030
+ "match": "\\b(?:recursive\\s+mpls|show\\s+static|igp\\s+table|check\\s+link)\\b"
1031
+ },
1032
+ {
1033
+ "name": "keyword.other.auth-window.phrase.bird",
1034
+ "match": "\\b(?:generate\\s+from|generate\\s+to|accept\\s+from|accept\\s+to)\\b"
1035
+ },
1036
+ {
1037
+ "name": "keyword.other.channel-limit.phrase.bird",
1038
+ "match": "\\b(?:import\\s+limit|export\\s+limit)\\b"
1039
+ },
1040
+ {
1041
+ "name": "keyword.other.socket.phrase.bird",
1042
+ "match": "\\b(?:tx\\s+class|tx\\s+dscp|tx\\s+priority)\\b"
1043
+ },
1044
+ {
1045
+ "name": "keyword.other.interface.phrase.bird",
1046
+ "match": "\\b(?:rx\\s+buffer|tx\\s+length|check\\s+link)\\b"
1047
+ },
1048
+ {
1049
+ "name": "keyword.other.diagnostics.phrase.bird",
1050
+ "match": "\\b(?:debug\\s+latency\\s+limit|debug\\s+latency|debug\\s+show\\s+route|debug\\s+protocols|debug\\s+channels|debug\\s+tables|debug\\s+commands|debug\\s+all|debug\\s+(?:events|filters|interfaces|off|packets|routes|states)|watchdog\\s+warning|watchdog\\s+timeout|states|routes|filters|interfaces|events|packets|messages)\\b"
1051
+ },
1052
+ {
1053
+ "name": "keyword.other.table.phrase.bird",
1054
+ "match": "\\b(?:min\\s+settle\\s+time|max\\s+settle\\s+time|gc\\s+threshold|gc\\s+period|export\\s+settle\\s+time|sorted|trie|roa)\\b"
1055
+ },
1056
+ {
1057
+ "name": "keyword.other.aggregator.phrase.bird",
1058
+ "match": "\\b(?:peer\\s+table|aggregate\\s+on|merge\\s+by)\\b"
1059
+ },
1060
+ {
1061
+ "name": "keyword.other.kernel.phrase.bird",
1062
+ "match": "\\b(?:merge\\s+paths\\s+limit|merge\\s+paths|kernel\\s+table|netlink\\s+rx\\s+buffer)\\b"
1063
+ },
1064
+ {
1065
+ "name": "keyword.other.l3vpn.phrase.bird",
1066
+ "match": "\\b(?:route\\s+distinguisher|import\\s+target|export\\s+target|route\\s+target)\\b"
1067
+ },
1068
+ {
1069
+ "name": "keyword.other.evpn-bridge.phrase.bird",
1070
+ "match": "\\b(?:encapsulation\\s+vxlan|vlan\\s+filtering|vlan\\s+range|vni|vid|bridge\\s+device|kbr\\s+source)\\b"
1071
+ },
1072
+ {
1073
+ "name": "keyword.other.evpn.phrase.bird",
1074
+ "match": "\\b(?:tunnel\\s+device|router\\s+address|evpn\\s+(?:ead|mac|imet|es)|tag)\\b"
1075
+ },
1076
+ {
1077
+ "name": "keyword.other.bmp.phrase.bird",
1078
+ "match": "\\b(?:monitoring\\s+rib\\s+in\\s+pre_policy|monitoring\\s+rib\\s+in\\s+post_policy|system\\s+description|system\\s+name|tx\\s+buffer\\s+limit|station\\s+address|station)\\b"
1079
+ },
1080
+ {
1081
+ "name": "keyword.other.radv.phrase.bird",
1082
+ "match": "\\b(?:solicited\\s+ra\\s+unicast|router\\s+discovery|min\\s+ra\\s+interval|max\\s+ra\\s+interval|min\\s+delay|link\\s+mtu|default\\s+lifetime|route\\s+lifetime|default\\s+preference|route\\s+preference|prefix\\s+linger\\s+time|route\\s+linger\\s+time|current\\s+hop\\s+limit|propagate\\s+routes|other\\s+config|reachable\\s+time|retrans\\s+timer|valid\\s+lifetime|preferred\\s+lifetime|lifetime\\s+mult|pd\\s+preferred|rdnss\\s+local|dnssl\\s+local|custom\\s+option\\s+type|custom\\s+option\\s+local|managed|trigger|sensitive|autonomous|skip|low|medium|high|rdnss|dnssl|domain|lifetime|value|ns)\\b"
1083
+ },
1084
+ {
1085
+ "name": "keyword.other.rip.phrase.bird",
1086
+ "match": "\\b(?:rip\\s+ng|mode\\s+multicast|mode\\s+broadcast|version\\s+only|check\\s+zero|update\\s+time|timeout\\s+time|garbage\\s+time|retransmit\\s+time|split\\s+horizon|poison\\s+reverse|demand\\s+circuit|ecmp\\s+limit|ecmp\\s+weight|infinity|show\\s+rip\\s+interfaces|show\\s+rip\\s+neighbors|ttl\\s+security\\s+tx\\s+only|authentication\\s+plaintext|authentication\\s+cryptographic)\\b"
1087
+ },
1088
+ {
1089
+ "name": "keyword.other.ospf.phrase.bird",
1090
+ "match": "\\b(?:link\\s+lsa\\s+suppression|stub\\s+router|graceful\\s+restart\\s+aware|graceful\\s+restart\\s+time|ecmp\\s+limit|merge\\s+external|rfc5838|vpn\\s+pe|instance\\s+id|default\\s+nssa|default\\s+cost2?|stub\\s+cost|summary|networks|stubnet|hidden|translator\\s+stability|virtual\\s+link|transmit\\s+delay|dead\\s+count|poll|type\\s+bcast|type\\s+nbma|type\\s+pointopoint|type\\s+ptp|type\\s+ptmp|type\\s+pointomultipoint|eligible|real\\s+broadcast|ptp\\s+netmask|ptp\\s+address|strict\\s+nonbroadcast|rx\\s+buffer\\s+normal|rx\\s+buffer\\s+large|authentication\\s+simple|show\\s+ospf\\s+interface|show\\s+ospf\\s+neighbors|show\\s+ospf\\s+topology\\s+all|show\\s+ospf\\s+topology|show\\s+ospf\\s+state\\s+all|show\\s+ospf\\s+state|show\\s+ospf\\s+lsadb\\s+global|show\\s+ospf\\s+lsadb\\s+area|show\\s+ospf\\s+lsadb\\s+link|show\\s+ospf\\s+lsadb\\s+type|show\\s+ospf\\s+lsadb\\s+lsid|show\\s+ospf\\s+lsadb\\s+self|show\\s+ospf\\s+lsadb\\s+router|show\\s+ospf\\s+lsadb|show\\s+ospf|ospf\\s+v2|ospf\\s+v3|instance|tag|v2|v3)\\b"
1091
+ },
1092
+ {
1093
+ "name": "keyword.other.aspa.phrase.bird",
1094
+ "match": "\\b(?:aspa\\s+providers|transit\\s+providers|route\\s+aspa)\\b"
1095
+ },
1096
+ {
1097
+ "name": "keyword.other.flowspec.phrase.bird",
1098
+ "match": "\\b(?:next\\s+header|icmp\\s+type|icmp\\s+code|tcp\\s+flags)\\b"
1099
+ },
1100
+ {
1101
+ "name": "keyword.other.threading.phrase.bird",
1102
+ "match": "\\b(?:thread\\s+group|show\\s+threads\\s+all|show\\s+threads|cork\\s+threshold|route\\s+refresh\\s+export\\s+settle\\s+time|digest\\s+settle\\s+time|filter\\s+stacks|max\\s+generation)\\b"
1103
+ },
1104
+ {
1105
+ "name": "keyword.other.mrt.phrase.bird",
1106
+ "match": "\\b(?:always\\s+add\\s+path|filename)\\b"
1107
+ },
1108
+ {
1109
+ "name": "keyword.other.perf.phrase.bird",
1110
+ "match": "\\b(?:mode\\s+import|mode\\s+export|exp\\s+from|exp\\s+to|threshold\\s+min|threshold\\s+max|repeat)\\b"
1111
+ },
1112
+ {
1113
+ "name": "keyword.other.operations.phrase.bird",
1114
+ "match": "\\b(?:router\\s+id\\s+from|graceful\\s+restart\\s+wait|vrf\\s+default|receive\\s+limit|import\\s+keep\\s+filtered|export\\s+in|rpki\\s+reload|mrtdump\\s+protocols)\\b"
1115
+ },
1116
+ {
1117
+ "name": "keyword.other.cli-show.phrase.bird",
1118
+ "match": "\\b(?:show\\s+status|show\\s+protocols\\s+all|show\\s+protocols|show\\s+interfaces\\s+summary|show\\s+interfaces|show\\s+symbols\\s+table|show\\s+symbols\\s+filter|show\\s+symbols\\s+function|show\\s+symbols\\s+protocol|show\\s+symbols\\s+template|show\\s+symbols|show\\s+route\\s+for|show\\s+route\\s+in|show\\s+route\\s+table|show\\s+route\\s+filter|show\\s+route\\s+where|show\\s+route\\s+all|show\\s+route\\s+primary|show\\s+route\\s+filtered|show\\s+route\\s+import|show\\s+route\\s+export|show\\s+route\\s+exported|show\\s+route\\s+preexport|show\\s+route\\s+noexport|show\\s+route\\s+protocol|show\\s+route\\s+stats|show\\s+route\\s+count|show\\s+bfd\\s+sessions\\s+address|show\\s+bfd\\s+sessions\\s+direct|show\\s+bfd\\s+sessions\\s+multihop|show\\s+bfd\\s+sessions\\s+interface|show\\s+bfd\\s+sessions\\s+dev|show\\s+bfd\\s+sessions\\s+all|show\\s+bfd\\s+sessions\\s+ipv4|show\\s+bfd\\s+sessions\\s+ipv6|show\\s+bfd\\s+sessions|show\\s+mpls\\s+ranges|show\\s+memory|show\\s+route)\\b"
1119
+ },
1120
+ {
1121
+ "name": "keyword.other.cli-reload.phrase.bird",
1122
+ "match": "\\b(?:reload\\s+filters\\s+in|reload\\s+filters\\s+out|reload\\s+filters|reload\\s+bgp\\s+in|reload\\s+bgp\\s+out|reload\\s+bgp|reload\\s+in|reload\\s+out)\\b"
1123
+ },
1124
+ {
1125
+ "name": "keyword.other.cli-reload-modifier.bird",
1126
+ "match": "\\bpartial\\b"
1127
+ },
1128
+ {
1129
+ "name": "keyword.other.cli-dump.phrase.bird",
1130
+ "match": "\\b(?:dump\\s+tables|dump\\s+attribute\\s+stats|dump\\s+ao\\s+keys|dump\\s+filter\\s+all|dump\\s+resources|dump\\s+sockets|dump\\s+events|dump\\s+interfaces|dump\\s+neighbors|dump\\s+attributes|dump\\s+routes|dump\\s+protocols|mrt\\s+dump\\s+table|mrt\\s+dump\\s+where|mrt\\s+dump\\s+to|mrt\\s+dump\\s+filter|mrt\\s+dump|timeformat\\s+route|timeformat\\s+protocol|timeformat\\s+base|timeformat\\s+log|timeformat\\s+iso|configure\\s+soft\\s+timeout|configure\\s+soft|configure\\s+timeout|configure\\s+confirm|configure\\s+undo|configure\\s+status|configure\\s+check|restrict|echo|enable|disable|restart|debug|mrtdump|quit|exit|help)\\b"
1131
+ },
1132
+ {
1133
+ "name": "keyword.other.cli-control.phrase.bird",
1134
+ "match": "\\b(?:configure|down|graceful\\s+restart|timeformat\\s+(?:short|long|ms|us))\\b"
1135
+ }
1136
+ ]
1137
+ },
1138
+ "functional-keywords": {
1139
+ "patterns": [
1140
+ {
1141
+ "name": "keyword.control.protocol-type.bird",
1142
+ "match": "\\b(?:static|rip|ospf|bgp|babel|rpki|bfd|bmp|device|direct|kernel|pipe|perf|mrt|aggregator|l3vpn|radv|bridge|evpn)\\b"
1143
+ },
1144
+ {
1145
+ "name": "keyword.control.routing.bird",
1146
+ "match": "\\b(?:graceful|restart|preference|disabled|hold|keepalive|connect|retry|start|delay|error|wait|forget|scan|randomize|router|id)\\b"
1147
+ },
1148
+ {
1149
+ "name": "keyword.other.interface.bird",
1150
+ "match": "\\b(?:interface|type|wired|wireless|tunnel|rxcost|limit|hello|update|interval|port|tx|class|dscp|priority|rx|buffer|length|check|link|rtt|cost|min|max|decay|send|timestamps)\\b"
1151
+ },
1152
+ {
1153
+ "name": "keyword.other.device.bird",
1154
+ "match": "\\b(?:preferred)\\b"
1155
+ },
1156
+ {
1157
+ "name": "keyword.other.rpki.bird",
1158
+ "match": "\\b(?:refresh\\s+keep|retry\\s+keep|expire\\s+keep|transport\\s+tcp|transport\\s+ssh|authentication\\s+none|authentication\\s+md5|local\\s+address|ignore\\s+max\\s+length|min\\s+version|max\\s+version|bird\\s+private\\s+key|remote\\s+public\\s+key)\\b|\\b(?:refresh|retry|expire|transport|ssh|tcp|user|address|version|ignore|private|public|key)\\b"
1159
+ },
1160
+ {
1161
+ "name": "keyword.other.auth.bird",
1162
+ "match": "\\b(?:cmac\\s+aes128|authentication|none|mac|permissive|ao|password|key|keys|secret|deprecated|preferred|generate|accept|from|to|algorithm|hmac|cmac|aes128|sha1|sha224|sha256|sha384|sha512|blake2s128|blake2s256|blake2b256|blake2b512)\\b"
1163
+ },
1164
+ {
1165
+ "name": "keyword.other.time.bird",
1166
+ "match": "\\b(?:time)\\b"
1167
+ },
1168
+ {
1169
+ "name": "keyword.other.config.bird",
1170
+ "match": "\\b(?:hostname|description|debug|log|syslog|stderr|udp|cli|bird|protocols|tables|channels|timeouts|passwords|bfd|confederation|cluster|stub|dead|neighbors|area|md5|multihop|passive|rfc1583compat|tick|ls|retransmit|transmit|ack|state|database|summary|external|nssa|translator|always|candidate|never|role|stability|election|action|warn|warning|auth|bug|fatal|info|trace|block|disable|keep|filtered|receive|modify|add|delete|withdraw|unreachable|blackhole|prohibit|unreach|igp_metric|localpref|med|origin|community|large_community|ext_community|as_path|prepend|weight|gateway|scope|onlink|recursive|multipath|igp|channel|sadr|src|learn|persist|via|ng|threads|thread|group|cork|threshold|settle|digest|fixed|ping|wakeup|scheduling|sockets|allocator|timers|mrtdump|timeformat|preexport|noexport|exported|stats|count|rpki|reload)\\b"
1171
+ },
1172
+ {
1173
+ "name": "keyword.other.flowspec.bird",
1174
+ "match": "\\b(?:flow4|flow6|dst|src|proto|header|dport|sport|icmp|code|tcp|flags|dscp|dont_fragment|is_fragment|first_fragment|last_fragment|fragment|label|offset)\\b"
1175
+ },
1176
+ {
1177
+ "name": "keyword.other.address.bird",
1178
+ "match": "\\b(?:ipv4-mpls|ipv6-mpls|ipv6-sadr|vpn4-mc|vpn4-mpls|vpn6-mc|vpn6-mpls|ipv4_mc|ipv6_mc|vpn4|vpn6|mpls|aspa|roa4|roa6|eth|evpn|neighbor|pri|sec)\\b"
1179
+ },
1180
+ {
1181
+ "name": "keyword.other.quick-declaration.bird",
1182
+ "match": "\\b(?:all|none)\\b"
1183
+ }
1184
+ ]
1185
+ },
1186
+ "semantic-modifiers": {
1187
+ "patterns": [
1188
+ {
1189
+ "name": "keyword.other.semantic-modifier.bird",
1190
+ "match": "\\b(?:self|on|off|remote|extended|native|ipv6|internal|external)\\b"
1191
+ }
1192
+ ]
1193
+ },
1194
+ "filter-names": {
1195
+ "patterns": [
1196
+ {
1197
+ "name": "entity.name.function.filter.bird",
1198
+ "match": "\\b[a-zA-Z_][a-zA-Z0-9_]*_filter\\b"
1199
+ }
1200
+ ]
1201
+ },
1202
+ "user-variables": {
1203
+ "patterns": [
1204
+ {
1205
+ "name": "variable.other.user-defined.bird",
1206
+ "match": "\\b[A-Z][a-zA-Z0-9_]*\\b"
1207
+ }
1208
+ ]
1209
+ },
1210
+ "builtin-functions": {
1211
+ "patterns": [
1212
+ {
1213
+ "name": "support.function.builtin.bird",
1214
+ "match": "\\b(?:defined|unset|roa_check|aspa_check|aspa_check_downstream|aspa_check_upstream|from_hex|format|append|prepend|add|delete|empty|reset|bt_assert|bt_check_assign|bt_test_suite|bt_test_same)\\b"
1215
+ }
1216
+ ]
1217
+ },
1218
+ "method-properties": {
1219
+ "patterns": [
1220
+ {
1221
+ "name": "support.variable.property.bird",
1222
+ "match": "(?<=\\.)\\s*(?:first|last|last_nonaggregated|len|asn|data|data1|data2|is_v4|ip|src|dst|rd|maxlen|type|mask|min|max|mac|vlan_id|evpn_type|evpn_tag|evpn_esi|router_ip)\\b(?!\\s*\\()"
1223
+ }
1224
+ ]
1225
+ },
1226
+ "route-attributes": {
1227
+ "patterns": [
1228
+ {
1229
+ "name": "support.variable.route-attribute.bird",
1230
+ "match": "\\b(?:net|scope|preference|from|gw|proto|source|dest|ifname|ifindex|weight|gw_mpls|gw_mpls_stack|onlink|igp_metric|local_metric|nexthop|hostentry|flowspec_valid|aspa_providers|roa_aggregated|mpls_label|mpls_policy|mpls_class|bgp_path|bgp_origin|bgp_next_hop|bgp_med|bgp_local_pref|bgp_community|bgp_ext_community|bgp_large_community|bgp_originator_id|bgp_cluster_list|bgp_atomic_aggr|bgp_aggregator|bgp_aigp|bgp_pmsi_tunnel|bgp_otc|bgp_mpls_label_stack|bgp_mp_reach_nlri|bgp_mp_unreach_nlri|bgp_as4_path|bgp_as4_aggregator|bgp_unknown_0x[0-9a-fA-F]{2}|ospf_metric1|ospf_metric2|ospf_tag|ospf_router_id|rip_metric|rip_tag|rip_from|babel_metric|babel_router_id|babel_seqno|radv_preference|radv_lifetime|ra_preference|ra_lifetime|krt_source|krt_metric|krt_prefsrc|krt_realm|krt_scope|krt_mtu|krt_window|krt_rtt|krt_rttvar|krt_ssthresh|krt_sstresh|krt_cwnd|krt_advmss|krt_reordering|krt_hoplimit|krt_initcwnd|krt_rto_min|krt_initrwnd|krt_quickack|krt_congctl|krt_fastopen_no_cookie|krt_lock_mtu|krt_lock_window|krt_lock_rtt|krt_lock_rttvar|krt_lock_ssthresh|krt_lock_sstresh|krt_lock_cwnd|krt_lock_advmss|krt_lock_reordering|krt_lock_hoplimit|krt_lock_initcwnd|krt_lock_rto_min|krt_lock_initrwnd|krt_lock_quickack|krt_lock_congctl|krt_lock_fastopen_no_cookie|krt_feature_allfrag|krt_feature_ecn|kbr_source|iface_type|iface_bridge_vlan_filtering|iface_vxlan_id|iface_vxlan_learning|iface_vxlan_ip_addr|mypath|mylclist)\\b"
1231
+ },
1232
+ {
1233
+ "name": "support.variable.runtime.bird",
1234
+ "match": "\\b(?:proto_name|proto_protocol_name|proto_protocol_type|proto_main_table_id|proto_state|proto_last_modified|proto_info|proto_proto_id|ea_proto_channel_list|proto_channel_id|channel_in_keep|rtable|proto_bgp_rem_id|proto_bgp_rem_as|proto_bgp_loc_as|proto_bgp_rem_ip|bgp_afi|bgp_peer_type|bgp_extended_next_hop|bgp_add_path_rx|bgp_in_conn_local_open_msg|bgp_in_conn_remote_open_msg|bgp_out_conn_local_open_msg|bgp_out_conn_remote_open_msg|bgp_in_conn_state|bgp_out_conn_state|bgp_in_conn_sk|bgp_out_conn_sk|bgp_state_startup|bgp_close_bmp|bgp_as4_session|bgp_as4_in_conn|bgp_as4_out_conn)\\b"
1235
+ }
1236
+ ]
1237
+ },
1238
+ "data-types": {
1239
+ "patterns": [
1240
+ {
1241
+ "name": "storage.type.bird",
1242
+ "match": "\\b(?:(?:int|pair|quad|ip|prefix|mac|ec|lc|rd|enum)\\s+set|int|bool|ip|prefix|mac|rd|pair|quad|ec|lc|string|bytestring|bgpmask|bgppath|clist|eclist|lclist|set|enum|route)\\b"
1243
+ }
1244
+ ]
1245
+ },
1246
+ "operators": {
1247
+ "patterns": [
1248
+ {
1249
+ "name": "keyword.operator.comparison.bird",
1250
+ "match": "(?:==|!=|<=|>=|!~|=|~|<|>)"
1251
+ },
1252
+ {
1253
+ "name": "keyword.operator.logical.bird",
1254
+ "match": "(?:&&|\\|\\||!|->)"
1255
+ },
1256
+ {
1257
+ "name": "keyword.operator.bitwise.bird",
1258
+ "match": "(?<![&])&(?![&])|(?<![|])\\|(?![|])"
1259
+ },
1260
+ {
1261
+ "name": "keyword.operator.concat.bird",
1262
+ "match": "(?:\\+\\+)"
1263
+ },
1264
+ {
1265
+ "name": "keyword.operator.arithmetic.bird",
1266
+ "match": "(?:\\+|\\-|\\*|/|%)"
1267
+ },
1268
+ {
1269
+ "name": "keyword.operator.range.bird",
1270
+ "match": "\\.\\."
1271
+ },
1272
+ {
1273
+ "name": "keyword.operator.accessor.bird",
1274
+ "match": "\\."
1275
+ }
1276
+ ]
1277
+ },
1278
+ "constants": {
1279
+ "patterns": [
1280
+ {
1281
+ "name": "constant.language.boolean.bird",
1282
+ "match": "\\b(?:on|off|yes|no|true|false)\\b"
1283
+ },
1284
+ {
1285
+ "name": "constant.language.special.bird",
1286
+ "match": "\\b(?:empty|unknown|generic|rt|ro|one|ten)\\b"
1287
+ },
1288
+ {
1289
+ "name": "constant.language.scope.bird",
1290
+ "match": "\\b(?:SCOPE_HOST|SCOPE_LINK|SCOPE_SITE|SCOPE_ORGANIZATION|SCOPE_UNIVERSE|SCOPE_UNDEFINED)\\b"
1291
+ },
1292
+ {
1293
+ "name": "constant.language.source.bird",
1294
+ "match": "\\b(?:RTS_STATIC|RTS_INHERIT|RTS_DEVICE|RTS_STATIC_DEVICE|RTS_REDIRECT|RTS_RIP|RTS_OSPF|RTS_OSPF_IA|RTS_OSPF_EXT1|RTS_OSPF_EXT2|RTS_BGP|RTS_PIPE|RTS_BABEL|RTS_RPKI|RTS_L3VPN|RTS_AGGREGATED|RTS_BRIDGE|RTS_EVPN)\\b"
1295
+ },
1296
+ {
1297
+ "name": "constant.language.dest.bird",
1298
+ "match": "\\b(?:RTD_UNICAST|RTD_ROUTER|RTD_DEVICE|RTD_MULTIPATH|RTD_BLACKHOLE|RTD_UNREACHABLE|RTD_PROHIBIT)\\b"
1299
+ },
1300
+ {
1301
+ "name": "constant.language.roa.bird",
1302
+ "match": "\\b(?:ROA_UNKNOWN|ROA_INVALID|ROA_VALID)\\b"
1303
+ },
1304
+ {
1305
+ "name": "constant.language.aspa.bird",
1306
+ "match": "\\b(?:ASPA_UNKNOWN|ASPA_INVALID|ASPA_VALID)\\b"
1307
+ },
1308
+ {
1309
+ "name": "constant.language.bgp-origin.bird",
1310
+ "match": "\\b(?:ORIGIN_IGP|ORIGIN_EGP|ORIGIN_INCOMPLETE)\\b"
1311
+ },
1312
+ {
1313
+ "name": "constant.language.ra-preference.bird",
1314
+ "match": "\\b(?:RA_PREF_LOW|RA_PREF_MEDIUM|RA_PREF_HIGH)\\b"
1315
+ },
1316
+ {
1317
+ "name": "constant.language.address-family.bird",
1318
+ "match": "\\b(?:AF_IPV4|AF_IPV6)\\b"
1319
+ },
1320
+ {
1321
+ "name": "constant.language.bridge-source.bird",
1322
+ "match": "\\b(?:KBR_SRC_BIRD|KBR_SRC_LOCAL|KBR_SRC_STATIC|KBR_SRC_DYNAMIC)\\b"
1323
+ },
1324
+ {
1325
+ "name": "constant.language.net-type.bird",
1326
+ "match": "\\b(?:NET_IP4|NET_IP6|NET_IP6_SADR|NET_VPN4|NET_VPN6|NET_ROA4|NET_ROA6|NET_FLOW4|NET_FLOW6|NET_MPLS|NET_ETH|NET_ASPA|NET_EVPN|NET_EVPN_EAD|NET_EVPN_MAC|NET_EVPN_IMET|NET_EVPN_ES|NET_NEIGHBOR)\\b"
1327
+ },
1328
+ {
1329
+ "name": "constant.language.mpls.bird",
1330
+ "match": "\\b(?:MPLS_POLICY_NONE|MPLS_POLICY_STATIC|MPLS_POLICY_PREFIX|MPLS_POLICY_AGGREGATE|MPLS_POLICY_VRF)\\b"
1331
+ }
1332
+ ]
1333
+ },
1334
+ "function-calls": {
1335
+ "patterns": [
1336
+ {
1337
+ "name": "meta.function-call.bird",
1338
+ "begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(",
1339
+ "end": "\\)",
1340
+ "beginCaptures": {
1341
+ "1": {
1342
+ "name": "entity.name.function.call.bird"
1343
+ }
1344
+ },
1345
+ "patterns": [
1346
+ {
1347
+ "include": "$self"
1348
+ }
1349
+ ]
1350
+ }
1351
+ ]
1352
+ },
1353
+ "method-calls": {
1354
+ "patterns": [
1355
+ {
1356
+ "name": "meta.method-call.bird",
1357
+ "begin": "\\.\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(",
1358
+ "end": "\\)",
1359
+ "beginCaptures": {
1360
+ "1": {
1361
+ "name": "entity.name.function.method.bird"
1362
+ }
1363
+ },
1364
+ "patterns": [
1365
+ {
1366
+ "include": "$self"
1367
+ }
1368
+ ]
1369
+ },
1370
+ {
1371
+ "name": "meta.method-access.bird",
1372
+ "match": "\\.\\s*([a-zA-Z_][a-zA-Z0-9_]*)",
1373
+ "captures": {
1374
+ "1": {
1375
+ "name": "variable.other.property.bird"
1376
+ }
1377
+ }
1378
+ }
1379
+ ]
1380
+ },
1381
+ "variable-declarations": {
1382
+ "patterns": [
1383
+ {
1384
+ "name": "meta.variable-declaration.bird",
1385
+ "match": "\\b((?:(?:int|pair|quad|ip|prefix|mac|ec|lc|rd|enum)\\s+set)|int|bool|ip|prefix|mac|rd|pair|quad|ec|lc|string|bytestring|bgpmask|bgppath|clist|eclist|lclist|set|enum|route)\\s+([a-zA-Z_][a-zA-Z0-9_]*)(?:\\s*=|;)",
1386
+ "captures": {
1387
+ "1": {
1388
+ "name": "storage.type.bird"
1389
+ },
1390
+ "2": {
1391
+ "name": "variable.other.declaration.bird"
1392
+ }
1393
+ }
1394
+ }
1395
+ ]
1396
+ },
1397
+ "symbols": {
1398
+ "patterns": [
1399
+ {
1400
+ "name": "variable.other.bird",
1401
+ "match": "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b"
1402
+ }
1403
+ ]
1404
+ },
1405
+ "blocks": {
1406
+ "patterns": [
1407
+ {
1408
+ "name": "meta.block.bird",
1409
+ "begin": "\\{",
1410
+ "end": "\\}",
1411
+ "beginCaptures": {
1412
+ "0": {
1413
+ "name": "punctuation.definition.block.begin.bird"
1414
+ }
1415
+ },
1416
+ "endCaptures": {
1417
+ "0": {
1418
+ "name": "punctuation.definition.block.end.bird"
1419
+ }
1420
+ },
1421
+ "patterns": [
1422
+ {
1423
+ "include": "$self"
1424
+ }
1425
+ ]
1426
+ },
1427
+ {
1428
+ "name": "meta.set.bird",
1429
+ "begin": "\\[",
1430
+ "end": "\\]",
1431
+ "beginCaptures": {
1432
+ "0": {
1433
+ "name": "punctuation.definition.set.begin.bird"
1434
+ }
1435
+ },
1436
+ "endCaptures": {
1437
+ "0": {
1438
+ "name": "punctuation.definition.set.end.bird"
1439
+ }
1440
+ },
1441
+ "patterns": [
1442
+ {
1443
+ "include": "$self"
1444
+ }
1445
+ ]
1446
+ },
1447
+ {
1448
+ "name": "meta.tuple.bird",
1449
+ "begin": "\\(",
1450
+ "end": "\\)",
1451
+ "beginCaptures": {
1452
+ "0": {
1453
+ "name": "punctuation.definition.tuple.begin.bird"
1454
+ }
1455
+ },
1456
+ "endCaptures": {
1457
+ "0": {
1458
+ "name": "punctuation.definition.tuple.end.bird"
1459
+ }
1460
+ },
1461
+ "patterns": [
1462
+ {
1463
+ "include": "$self"
1464
+ }
1465
+ ]
1466
+ },
1467
+ {
1468
+ "name": "punctuation.terminator.statement.bird",
1469
+ "match": ";"
1470
+ },
1471
+ {
1472
+ "name": "punctuation.separator.bird",
1473
+ "match": ","
1474
+ }
1475
+ ]
1476
+ }
1477
+ },
1478
+ "foldingStartMarker": "\\{\\s*$",
1479
+ "foldingStopMarker": "^\\s*\\}"
1480
+ }