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,1476 @@
1
+ {
2
+ "displayName": "BIRD2 Configuration",
3
+ "fileTypes": [
4
+ "conf",
5
+ "bird",
6
+ "bird2",
7
+ "bird3",
8
+ "bird.conf",
9
+ "bird2.conf",
10
+ "bird3.conf"
11
+ ],
12
+ "foldingStartMarker": "\\{\\s*$",
13
+ "foldingStopMarker": "^\\s*}",
14
+ "name": "bird2",
15
+ "patterns": [
16
+ {
17
+ "include": "#comments"
18
+ },
19
+ {
20
+ "include": "#strings"
21
+ },
22
+ {
23
+ "include": "#ip-addresses"
24
+ },
25
+ {
26
+ "include": "#prefixes"
27
+ },
28
+ {
29
+ "include": "#vpn-rd"
30
+ },
31
+ {
32
+ "include": "#bytestrings"
33
+ },
34
+ {
35
+ "include": "#bgp-paths"
36
+ },
37
+ {
38
+ "include": "#print-statements"
39
+ },
40
+ {
41
+ "include": "#template-definitions"
42
+ },
43
+ {
44
+ "include": "#filter-definitions"
45
+ },
46
+ {
47
+ "include": "#function-definitions"
48
+ },
49
+ {
50
+ "include": "#protocol-definitions"
51
+ },
52
+ {
53
+ "include": "#next-hop-statements"
54
+ },
55
+ {
56
+ "include": "#neighbor-statements"
57
+ },
58
+ {
59
+ "include": "#import-export-statements"
60
+ },
61
+ {
62
+ "include": "#variable-declarations"
63
+ },
64
+ {
65
+ "include": "#method-calls"
66
+ },
67
+ {
68
+ "include": "#function-calls"
69
+ },
70
+ {
71
+ "include": "#method-properties"
72
+ },
73
+ {
74
+ "include": "#route-attributes"
75
+ },
76
+ {
77
+ "include": "#data-types"
78
+ },
79
+ {
80
+ "include": "#constants"
81
+ },
82
+ {
83
+ "include": "#protocol-phrases"
84
+ },
85
+ {
86
+ "include": "#structural-keywords"
87
+ },
88
+ {
89
+ "include": "#functional-keywords"
90
+ },
91
+ {
92
+ "include": "#semantic-modifiers"
93
+ },
94
+ {
95
+ "include": "#builtin-functions"
96
+ },
97
+ {
98
+ "include": "#filter-names"
99
+ },
100
+ {
101
+ "include": "#user-variables"
102
+ },
103
+ {
104
+ "include": "#operators"
105
+ },
106
+ {
107
+ "include": "#numbers"
108
+ },
109
+ {
110
+ "include": "#symbols"
111
+ },
112
+ {
113
+ "include": "#blocks"
114
+ }
115
+ ],
116
+ "repository": {
117
+ "bgp-paths": {
118
+ "patterns": [
119
+ {
120
+ "begin": "\\[=",
121
+ "beginCaptures": {
122
+ "0": {
123
+ "name": "punctuation.definition.bgp-path.begin.bird"
124
+ }
125
+ },
126
+ "end": "=]",
127
+ "endCaptures": {
128
+ "0": {
129
+ "name": "punctuation.definition.bgp-path.end.bird"
130
+ }
131
+ },
132
+ "name": "meta.bgp-path.bird",
133
+ "patterns": [
134
+ {
135
+ "match": "[*+?]",
136
+ "name": "keyword.operator.wildcard.bird"
137
+ },
138
+ {
139
+ "match": "\\b[0-9]+\\b",
140
+ "name": "constant.numeric.asn.bird"
141
+ },
142
+ {
143
+ "include": "#operators"
144
+ },
145
+ {
146
+ "include": "#symbols"
147
+ }
148
+ ]
149
+ }
150
+ ]
151
+ },
152
+ "blocks": {
153
+ "patterns": [
154
+ {
155
+ "begin": "\\{",
156
+ "beginCaptures": {
157
+ "0": {
158
+ "name": "punctuation.definition.block.begin.bird"
159
+ }
160
+ },
161
+ "end": "}",
162
+ "endCaptures": {
163
+ "0": {
164
+ "name": "punctuation.definition.block.end.bird"
165
+ }
166
+ },
167
+ "name": "meta.block.bird",
168
+ "patterns": [
169
+ {
170
+ "include": "$self"
171
+ }
172
+ ]
173
+ },
174
+ {
175
+ "begin": "\\[",
176
+ "beginCaptures": {
177
+ "0": {
178
+ "name": "punctuation.definition.set.begin.bird"
179
+ }
180
+ },
181
+ "end": "]",
182
+ "endCaptures": {
183
+ "0": {
184
+ "name": "punctuation.definition.set.end.bird"
185
+ }
186
+ },
187
+ "name": "meta.set.bird",
188
+ "patterns": [
189
+ {
190
+ "include": "$self"
191
+ }
192
+ ]
193
+ },
194
+ {
195
+ "begin": "\\(",
196
+ "beginCaptures": {
197
+ "0": {
198
+ "name": "punctuation.definition.tuple.begin.bird"
199
+ }
200
+ },
201
+ "end": "\\)",
202
+ "endCaptures": {
203
+ "0": {
204
+ "name": "punctuation.definition.tuple.end.bird"
205
+ }
206
+ },
207
+ "name": "meta.tuple.bird",
208
+ "patterns": [
209
+ {
210
+ "include": "$self"
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "match": ";",
216
+ "name": "punctuation.terminator.statement.bird"
217
+ },
218
+ {
219
+ "match": ",",
220
+ "name": "punctuation.separator.bird"
221
+ }
222
+ ]
223
+ },
224
+ "builtin-functions": {
225
+ "patterns": [
226
+ {
227
+ "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",
228
+ "name": "support.function.builtin.bird"
229
+ }
230
+ ]
231
+ },
232
+ "bytestrings": {
233
+ "patterns": [
234
+ {
235
+ "match": "\\bhex:\\h{2}(?:[-.:\\s]*\\h{2})*\\b",
236
+ "name": "constant.numeric.bytestring.bird"
237
+ },
238
+ {
239
+ "match": "\\b(?:\\h{2}[-.:\\s]*){15,}\\h{2}\\b",
240
+ "name": "constant.numeric.bytestring.bird"
241
+ },
242
+ {
243
+ "match": "\\b\\h{32,}\\b",
244
+ "name": "constant.numeric.bytestring.bird"
245
+ }
246
+ ]
247
+ },
248
+ "comments": {
249
+ "patterns": [
250
+ {
251
+ "begin": "#",
252
+ "beginCaptures": {
253
+ "0": {
254
+ "name": "punctuation.definition.comment.bird"
255
+ }
256
+ },
257
+ "end": "$",
258
+ "name": "comment.line.number-sign.bird"
259
+ },
260
+ {
261
+ "begin": "/\\*",
262
+ "beginCaptures": {
263
+ "0": {
264
+ "name": "punctuation.definition.comment.begin.bird"
265
+ }
266
+ },
267
+ "end": "\\*/",
268
+ "endCaptures": {
269
+ "0": {
270
+ "name": "punctuation.definition.comment.end.bird"
271
+ }
272
+ },
273
+ "name": "comment.block.bird"
274
+ }
275
+ ]
276
+ },
277
+ "constants": {
278
+ "patterns": [
279
+ {
280
+ "match": "\\b(?:on|off|yes|no|true|false)\\b",
281
+ "name": "constant.language.boolean.bird"
282
+ },
283
+ {
284
+ "match": "\\b(?:empty|unknown|generic|rt|ro|one|ten)\\b",
285
+ "name": "constant.language.special.bird"
286
+ },
287
+ {
288
+ "match": "\\bSCOPE_(?:HOST|LINK|SITE|ORGANIZATION|UNIVERSE|UNDEFINED)\\b",
289
+ "name": "constant.language.scope.bird"
290
+ },
291
+ {
292
+ "match": "\\bRTS_(?:STATIC|INHERIT|DEVICE|STATIC_DEVICE|REDIRECT|RIP|OSPF|OSPF_IA|OSPF_EXT1|OSPF_EXT2|BGP|PIPE|BABEL|RPKI|L3VPN|AGGREGATED|BRIDGE|EVPN)\\b",
293
+ "name": "constant.language.source.bird"
294
+ },
295
+ {
296
+ "match": "\\bRTD_(?:UNICAST|ROUTER|DEVICE|MULTIPATH|BLACKHOLE|UNREACHABLE|PROHIBIT)\\b",
297
+ "name": "constant.language.dest.bird"
298
+ },
299
+ {
300
+ "match": "\\bROA_(?:UNKNOWN|INVALID|VALID)\\b",
301
+ "name": "constant.language.roa.bird"
302
+ },
303
+ {
304
+ "match": "\\bASPA_(?:UNKNOWN|INVALID|VALID)\\b",
305
+ "name": "constant.language.aspa.bird"
306
+ },
307
+ {
308
+ "match": "\\bORIGIN_(?:IGP|EGP|INCOMPLETE)\\b",
309
+ "name": "constant.language.bgp-origin.bird"
310
+ },
311
+ {
312
+ "match": "\\bRA_PREF_(?:LOW|MEDIUM|HIGH)\\b",
313
+ "name": "constant.language.ra-preference.bird"
314
+ },
315
+ {
316
+ "match": "\\bAF_IPV[46]\\b",
317
+ "name": "constant.language.address-family.bird"
318
+ },
319
+ {
320
+ "match": "\\bKBR_SRC_(?:BIRD|LOCAL|STATIC|DYNAMIC)\\b",
321
+ "name": "constant.language.bridge-source.bird"
322
+ },
323
+ {
324
+ "match": "\\bNET_(?:IP4|IP6|IP6_SADR|VPN4|VPN6|ROA4|ROA6|FLOW4|FLOW6|MPLS|ETH|ASPA|EVPN|EVPN_EAD|EVPN_MAC|EVPN_IMET|EVPN_ES|NEIGHBOR)\\b",
325
+ "name": "constant.language.net-type.bird"
326
+ },
327
+ {
328
+ "match": "\\bMPLS_POLICY_(?:NONE|STATIC|PREFIX|AGGREGATE|VRF)\\b",
329
+ "name": "constant.language.mpls.bird"
330
+ }
331
+ ]
332
+ },
333
+ "data-types": {
334
+ "patterns": [
335
+ {
336
+ "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",
337
+ "name": "storage.type.bird"
338
+ }
339
+ ]
340
+ },
341
+ "filter-definitions": {
342
+ "patterns": [
343
+ {
344
+ "begin": "\\b(filter)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s*\\{",
345
+ "beginCaptures": {
346
+ "1": {
347
+ "name": "keyword.control.filter.bird"
348
+ },
349
+ "2": {
350
+ "name": "entity.name.function.filter.bird"
351
+ }
352
+ },
353
+ "end": "}",
354
+ "endCaptures": {
355
+ "0": {
356
+ "name": "punctuation.definition.block.end.bird"
357
+ }
358
+ },
359
+ "name": "meta.filter-definition.bird",
360
+ "patterns": [
361
+ {
362
+ "include": "$self"
363
+ }
364
+ ]
365
+ }
366
+ ]
367
+ },
368
+ "filter-names": {
369
+ "patterns": [
370
+ {
371
+ "match": "\\b[A-Z_a-z][0-9A-Z_a-z]*_filter\\b",
372
+ "name": "entity.name.function.filter.bird"
373
+ }
374
+ ]
375
+ },
376
+ "function-calls": {
377
+ "patterns": [
378
+ {
379
+ "begin": "\\b([A-Z_a-z][0-9A-Z_a-z]*)\\s*\\(",
380
+ "beginCaptures": {
381
+ "1": {
382
+ "name": "entity.name.function.call.bird"
383
+ }
384
+ },
385
+ "end": "\\)",
386
+ "name": "meta.function-call.bird",
387
+ "patterns": [
388
+ {
389
+ "include": "$self"
390
+ }
391
+ ]
392
+ }
393
+ ]
394
+ },
395
+ "function-definitions": {
396
+ "patterns": [
397
+ {
398
+ "begin": "\\b(function)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')(?=\\s*\\()",
399
+ "beginCaptures": {
400
+ "1": {
401
+ "name": "keyword.control.function.bird"
402
+ },
403
+ "2": {
404
+ "name": "entity.name.function.user-defined.bird"
405
+ }
406
+ },
407
+ "end": "}",
408
+ "endCaptures": {
409
+ "0": {
410
+ "name": "punctuation.definition.block.end.bird"
411
+ }
412
+ },
413
+ "name": "meta.function-definition.bird",
414
+ "patterns": [
415
+ {
416
+ "begin": "\\(",
417
+ "beginCaptures": {
418
+ "0": {
419
+ "name": "punctuation.definition.parameters.begin.bird"
420
+ }
421
+ },
422
+ "end": "\\)",
423
+ "endCaptures": {
424
+ "0": {
425
+ "name": "punctuation.definition.parameters.end.bird"
426
+ }
427
+ },
428
+ "name": "meta.function-parameters.bird",
429
+ "patterns": [
430
+ {
431
+ "include": "#data-types"
432
+ },
433
+ {
434
+ "include": "#symbols"
435
+ }
436
+ ]
437
+ },
438
+ {
439
+ "begin": "->",
440
+ "beginCaptures": {
441
+ "0": {
442
+ "name": "keyword.operator.return-type.bird"
443
+ }
444
+ },
445
+ "end": "(?=\\{)",
446
+ "name": "meta.function-return-type.bird",
447
+ "patterns": [
448
+ {
449
+ "include": "#data-types"
450
+ }
451
+ ]
452
+ },
453
+ {
454
+ "include": "$self"
455
+ }
456
+ ]
457
+ }
458
+ ]
459
+ },
460
+ "functional-keywords": {
461
+ "patterns": [
462
+ {
463
+ "match": "\\b(?:static|rip|ospf|bgp|babel|rpki|bfd|bmp|device|direct|kernel|pipe|perf|mrt|aggregator|l3vpn|radv|bridge|evpn)\\b",
464
+ "name": "keyword.control.protocol-type.bird"
465
+ },
466
+ {
467
+ "match": "\\b(?:graceful|restart|preference|disabled|hold|keepalive|connect|retry|start|delay|error|wait|forget|scan|randomize|router|id)\\b",
468
+ "name": "keyword.control.routing.bird"
469
+ },
470
+ {
471
+ "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",
472
+ "name": "keyword.other.interface.bird"
473
+ },
474
+ {
475
+ "match": "\\bpreferred\\b",
476
+ "name": "keyword.other.device.bird"
477
+ },
478
+ {
479
+ "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)|(?:refresh|retry|expire|transport|ssh|tcp|user|address|version|ignore|private|public|key))\\b",
480
+ "name": "keyword.other.rpki.bird"
481
+ },
482
+ {
483
+ "match": "\\b(?:cmac\\s+aes128|authentication|none|mac|permissive|ao|password|keys??|secret|deprecated|preferred|generate|accept|from|to|algorithm|hmac|cmac|aes128|sha1|sha224|sha256|sha384|sha512|blake2s128|blake2s256|blake2b256|blake2b512)\\b",
484
+ "name": "keyword.other.auth.bird"
485
+ },
486
+ {
487
+ "match": "\\btime\\b",
488
+ "name": "keyword.other.time.bird"
489
+ },
490
+ {
491
+ "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?|group|cork|threshold|settle|digest|fixed|ping|wakeup|scheduling|sockets|allocator|timers|mrtdump|timeformat|preexport|noexport|exported|stats|count|rpki|reload)\\b",
492
+ "name": "keyword.other.config.bird"
493
+ },
494
+ {
495
+ "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",
496
+ "name": "keyword.other.flowspec.bird"
497
+ },
498
+ {
499
+ "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",
500
+ "name": "keyword.other.address.bird"
501
+ },
502
+ {
503
+ "match": "\\b(?:all|none)\\b",
504
+ "name": "keyword.other.quick-declaration.bird"
505
+ }
506
+ ]
507
+ },
508
+ "import-export-statements": {
509
+ "patterns": [
510
+ {
511
+ "captures": {
512
+ "1": {
513
+ "name": "keyword.control.import-export.bird"
514
+ },
515
+ "2": {
516
+ "name": "keyword.control.filter.bird"
517
+ },
518
+ "3": {
519
+ "name": "entity.name.function.filter.bird"
520
+ }
521
+ },
522
+ "match": "\\b(import)\\s+(filter)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\b",
523
+ "name": "meta.import-statement.bird"
524
+ },
525
+ {
526
+ "begin": "\\b(import)\\s+(filter)\\s*\\{",
527
+ "beginCaptures": {
528
+ "1": {
529
+ "name": "keyword.control.import-export.bird"
530
+ },
531
+ "2": {
532
+ "name": "keyword.control.filter.bird"
533
+ }
534
+ },
535
+ "end": "}",
536
+ "endCaptures": {
537
+ "0": {
538
+ "name": "punctuation.definition.block.end.bird"
539
+ }
540
+ },
541
+ "name": "meta.import-filter-inline.bird",
542
+ "patterns": [
543
+ {
544
+ "include": "$self"
545
+ }
546
+ ]
547
+ },
548
+ {
549
+ "begin": "\\b(export)\\s+(where)\\b",
550
+ "beginCaptures": {
551
+ "1": {
552
+ "name": "keyword.control.import-export.bird"
553
+ },
554
+ "2": {
555
+ "name": "keyword.control.where.bird"
556
+ }
557
+ },
558
+ "end": ";",
559
+ "endCaptures": {
560
+ "0": {
561
+ "name": "punctuation.terminator.statement.bird"
562
+ }
563
+ },
564
+ "name": "meta.export-where-clause.bird",
565
+ "patterns": [
566
+ {
567
+ "include": "$self"
568
+ }
569
+ ]
570
+ },
571
+ {
572
+ "begin": "\\b(export\\s+in)\\b",
573
+ "beginCaptures": {
574
+ "1": {
575
+ "name": "keyword.control.import-export.bird"
576
+ }
577
+ },
578
+ "end": ";",
579
+ "endCaptures": {
580
+ "0": {
581
+ "name": "punctuation.terminator.statement.bird"
582
+ }
583
+ },
584
+ "name": "meta.export-prefilter-clause.bird",
585
+ "patterns": [
586
+ {
587
+ "include": "$self"
588
+ }
589
+ ]
590
+ },
591
+ {
592
+ "captures": {
593
+ "1": {
594
+ "name": "keyword.control.import-export.bird"
595
+ },
596
+ "2": {
597
+ "name": "keyword.control.filter.bird"
598
+ },
599
+ "3": {
600
+ "name": "entity.name.function.filter.bird"
601
+ }
602
+ },
603
+ "match": "\\b(export)\\s+(filter)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\b",
604
+ "name": "meta.export-statement.bird"
605
+ }
606
+ ]
607
+ },
608
+ "ip-addresses": {
609
+ "patterns": [
610
+ {
611
+ "match": "\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?:/[0-9]{1,2})?\\b",
612
+ "name": "constant.numeric.ip.ipv4.bird"
613
+ },
614
+ {
615
+ "match": "\\b(?:\\h{0,4}:){2,7}\\h{0,4}(?:/[0-9]{1,3})?\\b",
616
+ "name": "constant.numeric.ip.ipv6.bird"
617
+ },
618
+ {
619
+ "match": "::(?:\\h{0,4}:){0,6}\\h{0,4}(?:/[0-9]{1,3})?\\b",
620
+ "name": "constant.numeric.ip.ipv6.bird"
621
+ },
622
+ {
623
+ "match": "\\b(?:\\h{0,4}:){1,6}::(?:\\h{0,4}:){0,5}\\h{0,4}(?:/[0-9]{1,3})?\\b",
624
+ "name": "constant.numeric.ip.ipv6.bird"
625
+ }
626
+ ]
627
+ },
628
+ "method-calls": {
629
+ "patterns": [
630
+ {
631
+ "begin": "\\.\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\s*\\(",
632
+ "beginCaptures": {
633
+ "1": {
634
+ "name": "entity.name.function.method.bird"
635
+ }
636
+ },
637
+ "end": "\\)",
638
+ "name": "meta.method-call.bird",
639
+ "patterns": [
640
+ {
641
+ "include": "$self"
642
+ }
643
+ ]
644
+ },
645
+ {
646
+ "captures": {
647
+ "1": {
648
+ "name": "variable.other.property.bird"
649
+ }
650
+ },
651
+ "match": "\\.\\s*([A-Z_a-z][0-9A-Z_a-z]*)",
652
+ "name": "meta.method-access.bird"
653
+ }
654
+ ]
655
+ },
656
+ "method-properties": {
657
+ "patterns": [
658
+ {
659
+ "match": "(?<=\\.)\\s*(?:first|last|last_nonaggregated|len|asn|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*\\()",
660
+ "name": "support.variable.property.bird"
661
+ }
662
+ ]
663
+ },
664
+ "neighbor-statements": {
665
+ "patterns": [
666
+ {
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
+ "match": "\\b(local)\\s+([.:\\h]+|[A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')(?:\\s+(port)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
688
+ "name": "meta.local-as-statement.bird"
689
+ },
690
+ {
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
+ "match": "\\b(local)\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
703
+ "name": "meta.local-as-template-statement.bird"
704
+ },
705
+ {
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
+ "match": "\\b(neighbor)\\s+([.:\\h]+)\\s*(%\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?(?:\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\s+(port)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
736
+ "name": "meta.neighbor-port-statement.bird"
737
+ },
738
+ {
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
+ "match": "\\b(neighbor)\\s+('[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\b)[A-Z_a-z][0-9A-Z_a-z]*)\\s*(%\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?(?:\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\s+(port)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
769
+ "name": "meta.neighbor-port-symbolic-statement.bird"
770
+ },
771
+ {
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
+ "match": "\\b(neighbor)\\s+([.:\\h]+)\\s*(%\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
796
+ "name": "meta.neighbor-statement.bird"
797
+ },
798
+ {
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
+ "match": "\\b(neighbor)\\s+('[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\b)[A-Z_a-z][0-9A-Z_a-z]*)\\s*(%\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
823
+ "name": "meta.neighbor-symbolic-statement.bird"
824
+ },
825
+ {
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
+ "match": "\\b(neighbor)\\s+(as)\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\b",
838
+ "name": "meta.neighbor-template-statement.bird"
839
+ },
840
+ {
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
+ "match": "\\b(neighbor)\\s+([.:\\h]+|(?:'[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\b)[A-Z_a-z][0-9A-Z_a-z]*))\\s+((?:in|ex)ternal)\\b",
853
+ "name": "meta.neighbor-role-statement.bird"
854
+ },
855
+ {
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
+ "match": "\\b(neighbor)\\s+([.:\\h]+|(?:'[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\b)[A-Z_a-z][0-9A-Z_a-z]*))\\s+(onlink)\\b",
868
+ "name": "meta.neighbor-onlink-statement.bird"
869
+ },
870
+ {
871
+ "captures": {
872
+ "1": {
873
+ "name": "keyword.control.source.bird"
874
+ },
875
+ "2": {
876
+ "name": "constant.numeric.ip-address.bird"
877
+ }
878
+ },
879
+ "match": "\\b(source address)\\s+([.:\\h]+)\\b",
880
+ "name": "meta.source-address-statement.bird"
881
+ }
882
+ ]
883
+ },
884
+ "next-hop-statements": {
885
+ "patterns": [
886
+ {
887
+ "captures": {
888
+ "1": {
889
+ "name": "keyword.control.routing.bird"
890
+ },
891
+ "2": {
892
+ "name": "keyword.other.ip-version.bird"
893
+ },
894
+ "3": {
895
+ "name": "constant.numeric.ip-address.bird"
896
+ }
897
+ },
898
+ "match": "\\b(next hop)\\s+(ipv4)\\s+([.0-9]+)\\b",
899
+ "name": "meta.next-hop-ipv4.bird"
900
+ },
901
+ {
902
+ "captures": {
903
+ "1": {
904
+ "name": "keyword.control.routing.bird"
905
+ },
906
+ "2": {
907
+ "name": "keyword.other.ip-version.bird"
908
+ },
909
+ "3": {
910
+ "name": "constant.numeric.ip-address.bird"
911
+ }
912
+ },
913
+ "match": "\\b(next hop)\\s+(ipv6)\\s+([:\\h]+)\\b",
914
+ "name": "meta.next-hop-ipv6.bird"
915
+ },
916
+ {
917
+ "captures": {
918
+ "1": {
919
+ "name": "keyword.control.routing.bird"
920
+ },
921
+ "2": {
922
+ "name": "keyword.other.semantic-modifier.bird"
923
+ }
924
+ },
925
+ "match": "\\b(next hop)\\s+(self)\\b",
926
+ "name": "meta.next-hop-simple.bird"
927
+ },
928
+ {
929
+ "captures": {
930
+ "1": {
931
+ "name": "keyword.control.routing.bird"
932
+ },
933
+ "2": {
934
+ "name": "keyword.other.semantic-modifier.bird"
935
+ }
936
+ },
937
+ "match": "\\b(next hop prefer)\\s+(global|local|native|ipv6)\\b",
938
+ "name": "meta.next-hop-prefer-statement.bird"
939
+ },
940
+ {
941
+ "captures": {
942
+ "1": {
943
+ "name": "keyword.control.routing.bird"
944
+ },
945
+ "2": {
946
+ "name": "keyword.other.semantic-modifier.bird"
947
+ }
948
+ },
949
+ "match": "\\b(next hop keep)(?:\\s+([ei]bgp))?\\b",
950
+ "name": "meta.next-hop-keep-statement.bird"
951
+ },
952
+ {
953
+ "captures": {
954
+ "1": {
955
+ "name": "keyword.control.routing.bird"
956
+ },
957
+ "2": {
958
+ "name": "keyword.other.semantic-modifier.bird"
959
+ }
960
+ },
961
+ "match": "\\b(extended next hop)\\s+(o(?:n|ff))\\b",
962
+ "name": "meta.extended-next-hop-statement.bird"
963
+ },
964
+ {
965
+ "captures": {
966
+ "1": {
967
+ "name": "keyword.control.routing.bird"
968
+ },
969
+ "2": {
970
+ "name": "keyword.other.semantic-modifier.bird"
971
+ }
972
+ },
973
+ "match": "\\b(require extended next hop)\\s+(yes|no|on|off|true|false)\\b",
974
+ "name": "meta.require-extended-next-hop-statement.bird"
975
+ }
976
+ ]
977
+ },
978
+ "numbers": {
979
+ "patterns": [
980
+ {
981
+ "match": "\\b0x\\h+\\b",
982
+ "name": "constant.numeric.hex.bird"
983
+ },
984
+ {
985
+ "match": "\\b[0-9]+\\b",
986
+ "name": "constant.numeric.decimal.bird"
987
+ },
988
+ {
989
+ "captures": {
990
+ "1": {
991
+ "name": "keyword.other.unit.bird"
992
+ }
993
+ },
994
+ "match": "\\b[0-9]+\\s*([mu]??s)\\b",
995
+ "name": "constant.numeric.time.bird"
996
+ }
997
+ ]
998
+ },
999
+ "operators": {
1000
+ "patterns": [
1001
+ {
1002
+ "match": "==|!=|<=|>=|!~|[<=>~]",
1003
+ "name": "keyword.operator.comparison.bird"
1004
+ },
1005
+ {
1006
+ "match": "&&|\\|\\||!|->",
1007
+ "name": "keyword.operator.logical.bird"
1008
+ },
1009
+ {
1010
+ "match": "(?<!&)&(?!&)|(?<!\\|)\\|(?!\\|)",
1011
+ "name": "keyword.operator.bitwise.bird"
1012
+ },
1013
+ {
1014
+ "match": "\\+\\+",
1015
+ "name": "keyword.operator.concat.bird"
1016
+ },
1017
+ {
1018
+ "match": "[-%*+/]",
1019
+ "name": "keyword.operator.arithmetic.bird"
1020
+ },
1021
+ {
1022
+ "match": "\\.\\.",
1023
+ "name": "keyword.operator.range.bird"
1024
+ },
1025
+ {
1026
+ "match": "\\.",
1027
+ "name": "keyword.operator.accessor.bird"
1028
+ }
1029
+ ]
1030
+ },
1031
+ "prefixes": {
1032
+ "patterns": [
1033
+ {
1034
+ "match": "(?<![0-:A-Z_a-z])(?:(?:[0-9]{1,3}\\.){3}[0-9]{1,3}|(?:\\h{0,4}:){1,7}\\h{0,4})/[0-9]{1,3}(?:[-+]|\\{[0-9]+,[0-9]+})?(?![0-9A-Z_a-z])",
1035
+ "name": "constant.numeric.prefix.bird"
1036
+ }
1037
+ ]
1038
+ },
1039
+ "print-statements": {
1040
+ "patterns": [
1041
+ {
1042
+ "begin": "\\b(printn??)\\b",
1043
+ "beginCaptures": {
1044
+ "1": {
1045
+ "name": "keyword.other.print.bird"
1046
+ }
1047
+ },
1048
+ "end": ";",
1049
+ "endCaptures": {
1050
+ "0": {
1051
+ "name": "punctuation.terminator.statement.bird"
1052
+ }
1053
+ },
1054
+ "name": "meta.print-statement.bird",
1055
+ "patterns": [
1056
+ {
1057
+ "include": "$self"
1058
+ }
1059
+ ]
1060
+ }
1061
+ ]
1062
+ },
1063
+ "protocol-definitions": {
1064
+ "patterns": [
1065
+ {
1066
+ "begin": "\\b(protocol)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s+(from)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s*\\{",
1067
+ "beginCaptures": {
1068
+ "1": {
1069
+ "name": "keyword.control.protocol.bird"
1070
+ },
1071
+ "2": {
1072
+ "name": "entity.name.type.protocol.bird"
1073
+ },
1074
+ "3": {
1075
+ "name": "entity.name.function.protocol.bird"
1076
+ },
1077
+ "4": {
1078
+ "name": "keyword.control.template-reference.bird"
1079
+ },
1080
+ "5": {
1081
+ "name": "entity.name.function.template.bird"
1082
+ }
1083
+ },
1084
+ "end": "}",
1085
+ "endCaptures": {
1086
+ "0": {
1087
+ "name": "punctuation.definition.block.end.bird"
1088
+ }
1089
+ },
1090
+ "name": "meta.protocol-definition-with-template.bird",
1091
+ "patterns": [
1092
+ {
1093
+ "include": "$self"
1094
+ }
1095
+ ]
1096
+ },
1097
+ {
1098
+ "begin": "\\b(protocol)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s*\\{",
1099
+ "beginCaptures": {
1100
+ "1": {
1101
+ "name": "keyword.control.protocol.bird"
1102
+ },
1103
+ "2": {
1104
+ "name": "entity.name.type.protocol.bird"
1105
+ },
1106
+ "3": {
1107
+ "name": "entity.name.function.protocol.bird"
1108
+ }
1109
+ },
1110
+ "end": "}",
1111
+ "endCaptures": {
1112
+ "0": {
1113
+ "name": "punctuation.definition.block.end.bird"
1114
+ }
1115
+ },
1116
+ "name": "meta.protocol-definition-with-name.bird",
1117
+ "patterns": [
1118
+ {
1119
+ "include": "$self"
1120
+ }
1121
+ ]
1122
+ },
1123
+ {
1124
+ "begin": "\\b(protocol)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\s*\\{",
1125
+ "beginCaptures": {
1126
+ "1": {
1127
+ "name": "keyword.control.protocol.bird"
1128
+ },
1129
+ "2": {
1130
+ "name": "entity.name.type.protocol.bird"
1131
+ }
1132
+ },
1133
+ "end": "}",
1134
+ "endCaptures": {
1135
+ "0": {
1136
+ "name": "punctuation.definition.block.end.bird"
1137
+ }
1138
+ },
1139
+ "name": "meta.protocol-definition-anonymous.bird",
1140
+ "patterns": [
1141
+ {
1142
+ "include": "$self"
1143
+ }
1144
+ ]
1145
+ }
1146
+ ]
1147
+ },
1148
+ "protocol-phrases": {
1149
+ "patterns": [
1150
+ {
1151
+ "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",
1152
+ "name": "keyword.other.bfd.phrase.bird"
1153
+ },
1154
+ {
1155
+ "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",
1156
+ "name": "keyword.other.babel.phrase.bird"
1157
+ },
1158
+ {
1159
+ "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",
1160
+ "name": "keyword.other.bgp.phrase.bird"
1161
+ },
1162
+ {
1163
+ "match": "\\b(?:local\\s+role|require\\s+roles)\\b",
1164
+ "name": "keyword.other.bgp-role.phrase.bird"
1165
+ },
1166
+ {
1167
+ "match": "\\b(?:provider|customer|rs_server|rs_client)\\b",
1168
+ "name": "constant.language.bgp-role.bird"
1169
+ },
1170
+ {
1171
+ "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",
1172
+ "name": "keyword.other.mpls.phrase.bird"
1173
+ },
1174
+ {
1175
+ "match": "\\b(?:recursive\\s+mpls|show\\s+static|igp\\s+table|check\\s+link)\\b",
1176
+ "name": "keyword.other.static.phrase.bird"
1177
+ },
1178
+ {
1179
+ "match": "\\b(?:generate\\s+from|generate\\s+to|accept\\s+from|accept\\s+to)\\b",
1180
+ "name": "keyword.other.auth-window.phrase.bird"
1181
+ },
1182
+ {
1183
+ "match": "\\b(?:import\\s+|export\\s+)limit\\b",
1184
+ "name": "keyword.other.channel-limit.phrase.bird"
1185
+ },
1186
+ {
1187
+ "match": "\\btx(?:\\s+class|\\s+dscp|\\s+priority)\\b",
1188
+ "name": "keyword.other.socket.phrase.bird"
1189
+ },
1190
+ {
1191
+ "match": "\\b(?:rx\\s+buffer|tx\\s+length|check\\s+link)\\b",
1192
+ "name": "keyword.other.interface.phrase.bird"
1193
+ },
1194
+ {
1195
+ "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",
1196
+ "name": "keyword.other.diagnostics.phrase.bird"
1197
+ },
1198
+ {
1199
+ "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",
1200
+ "name": "keyword.other.table.phrase.bird"
1201
+ },
1202
+ {
1203
+ "match": "\\b(?:peer\\s+table|aggregate\\s+on|merge\\s+by)\\b",
1204
+ "name": "keyword.other.aggregator.phrase.bird"
1205
+ },
1206
+ {
1207
+ "match": "\\b(?:merge\\s+paths\\s+limit|merge\\s+paths|kernel\\s+table|netlink\\s+rx\\s+buffer)\\b",
1208
+ "name": "keyword.other.kernel.phrase.bird"
1209
+ },
1210
+ {
1211
+ "match": "\\b(?:route\\s+distinguisher|import\\s+target|export\\s+target|route\\s+target)\\b",
1212
+ "name": "keyword.other.l3vpn.phrase.bird"
1213
+ },
1214
+ {
1215
+ "match": "\\b(?:encapsulation\\s+vxlan|vlan\\s+filtering|vlan\\s+range|vni|vid|bridge\\s+device|kbr\\s+source)\\b",
1216
+ "name": "keyword.other.evpn-bridge.phrase.bird"
1217
+ },
1218
+ {
1219
+ "match": "\\b(?:tunnel\\s+device|router\\s+address|evpn\\s+(?:ead|mac|imet|es)|tag)\\b",
1220
+ "name": "keyword.other.evpn.phrase.bird"
1221
+ },
1222
+ {
1223
+ "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",
1224
+ "name": "keyword.other.bmp.phrase.bird"
1225
+ },
1226
+ {
1227
+ "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",
1228
+ "name": "keyword.other.radv.phrase.bird"
1229
+ },
1230
+ {
1231
+ "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",
1232
+ "name": "keyword.other.rip.phrase.bird"
1233
+ },
1234
+ {
1235
+ "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",
1236
+ "name": "keyword.other.ospf.phrase.bird"
1237
+ },
1238
+ {
1239
+ "match": "\\b(?:aspa\\s+providers|transit\\s+providers|route\\s+aspa)\\b",
1240
+ "name": "keyword.other.aspa.phrase.bird"
1241
+ },
1242
+ {
1243
+ "match": "\\b(?:next\\s+header|icmp\\s+type|icmp\\s+code|tcp\\s+flags)\\b",
1244
+ "name": "keyword.other.flowspec.phrase.bird"
1245
+ },
1246
+ {
1247
+ "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",
1248
+ "name": "keyword.other.threading.phrase.bird"
1249
+ },
1250
+ {
1251
+ "match": "\\b(?:always\\s+add\\s+path|filename)\\b",
1252
+ "name": "keyword.other.mrt.phrase.bird"
1253
+ },
1254
+ {
1255
+ "match": "\\b(?:mode\\s+import|mode\\s+export|exp\\s+from|exp\\s+to|threshold\\s+min|threshold\\s+max|repeat)\\b",
1256
+ "name": "keyword.other.perf.phrase.bird"
1257
+ },
1258
+ {
1259
+ "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",
1260
+ "name": "keyword.other.operations.phrase.bird"
1261
+ },
1262
+ {
1263
+ "match": "\\bshow(?:\\s+status|\\s+protocols\\s+all|\\s+protocols|\\s+interfaces\\s+summary|\\s+interfaces|\\s+symbols\\s+table|\\s+symbols\\s+filter|\\s+symbols\\s+function|\\s+symbols\\s+protocol|\\s+symbols\\s+template|\\s+symbols|\\s+route\\s+for|\\s+route\\s+in|\\s+route\\s+table|\\s+route\\s+filter|\\s+route\\s+where|\\s+route\\s+all|\\s+route\\s+primary|\\s+route\\s+filtered|\\s+route\\s+import|\\s+route\\s+export|\\s+route\\s+exported|\\s+route\\s+preexport|\\s+route\\s+noexport|\\s+route\\s+protocol|\\s+route\\s+stats|\\s+route\\s+count|\\s+bfd\\s+sessions\\s+address|\\s+bfd\\s+sessions\\s+direct|\\s+bfd\\s+sessions\\s+multihop|\\s+bfd\\s+sessions\\s+interface|\\s+bfd\\s+sessions\\s+dev|\\s+bfd\\s+sessions\\s+all|\\s+bfd\\s+sessions\\s+ipv4|\\s+bfd\\s+sessions\\s+ipv6|\\s+bfd\\s+sessions|\\s+mpls\\s+ranges|\\s+memory|\\s+route)\\b",
1264
+ "name": "keyword.other.cli-show.phrase.bird"
1265
+ },
1266
+ {
1267
+ "match": "\\breload(?:\\s+filters\\s+in|\\s+filters\\s+out|\\s+filters|\\s+bgp\\s+in|\\s+bgp\\s+out|\\s+bgp|\\s+in|\\s+out)\\b",
1268
+ "name": "keyword.other.cli-reload.phrase.bird"
1269
+ },
1270
+ {
1271
+ "match": "\\bpartial\\b",
1272
+ "name": "keyword.other.cli-reload-modifier.bird"
1273
+ },
1274
+ {
1275
+ "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",
1276
+ "name": "keyword.other.cli-dump.phrase.bird"
1277
+ },
1278
+ {
1279
+ "match": "\\b(?:configure|down|graceful\\s+restart|timeformat\\s+(?:short|long|ms|us))\\b",
1280
+ "name": "keyword.other.cli-control.phrase.bird"
1281
+ }
1282
+ ]
1283
+ },
1284
+ "route-attributes": {
1285
+ "patterns": [
1286
+ {
1287
+ "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\\h{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",
1288
+ "name": "support.variable.route-attribute.bird"
1289
+ },
1290
+ {
1291
+ "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",
1292
+ "name": "support.variable.runtime.bird"
1293
+ }
1294
+ ]
1295
+ },
1296
+ "semantic-modifiers": {
1297
+ "patterns": [
1298
+ {
1299
+ "match": "\\b(?:self|on|off|remote|extended|native|ipv6|internal|external)\\b",
1300
+ "name": "keyword.other.semantic-modifier.bird"
1301
+ }
1302
+ ]
1303
+ },
1304
+ "strings": {
1305
+ "patterns": [
1306
+ {
1307
+ "begin": "\"",
1308
+ "beginCaptures": {
1309
+ "0": {
1310
+ "name": "punctuation.definition.string.begin.bird"
1311
+ }
1312
+ },
1313
+ "end": "\"",
1314
+ "endCaptures": {
1315
+ "0": {
1316
+ "name": "punctuation.definition.string.end.bird"
1317
+ }
1318
+ },
1319
+ "name": "string.quoted.double.bird",
1320
+ "patterns": [
1321
+ {
1322
+ "match": "\\\\.",
1323
+ "name": "constant.character.escape.bird"
1324
+ }
1325
+ ]
1326
+ },
1327
+ {
1328
+ "match": "'[-.0-:A-Z_a-z]+'",
1329
+ "name": "entity.name.symbol.quoted.bird"
1330
+ }
1331
+ ]
1332
+ },
1333
+ "structural-keywords": {
1334
+ "patterns": [
1335
+ {
1336
+ "match": "\\b(?:if|then|else|case|for|do|while|break|continue|return|in)\\b",
1337
+ "name": "keyword.control.bird"
1338
+ },
1339
+ {
1340
+ "match": "\\belse\\s*:",
1341
+ "name": "keyword.control.case.else.bird"
1342
+ },
1343
+ {
1344
+ "match": "\\b(?:accept|reject|error)\\b",
1345
+ "name": "keyword.control.flow.bird"
1346
+ },
1347
+ {
1348
+ "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",
1349
+ "name": "keyword.control.structure.bird"
1350
+ }
1351
+ ]
1352
+ },
1353
+ "symbols": {
1354
+ "patterns": [
1355
+ {
1356
+ "match": "\\b[A-Z_a-z][0-9A-Z_a-z]*\\b",
1357
+ "name": "variable.other.bird"
1358
+ }
1359
+ ]
1360
+ },
1361
+ "template-definitions": {
1362
+ "patterns": [
1363
+ {
1364
+ "begin": "\\b(template)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s+(from)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s*\\{",
1365
+ "beginCaptures": {
1366
+ "1": {
1367
+ "name": "keyword.control.template.bird"
1368
+ },
1369
+ "2": {
1370
+ "name": "entity.name.type.protocol.bird"
1371
+ },
1372
+ "3": {
1373
+ "name": "entity.name.function.template.bird"
1374
+ },
1375
+ "4": {
1376
+ "name": "keyword.control.template-reference.bird"
1377
+ },
1378
+ "5": {
1379
+ "name": "entity.name.function.template.bird"
1380
+ }
1381
+ },
1382
+ "end": "}",
1383
+ "endCaptures": {
1384
+ "0": {
1385
+ "name": "punctuation.definition.block.end.bird"
1386
+ }
1387
+ },
1388
+ "name": "meta.template-definition-with-from.bird",
1389
+ "patterns": [
1390
+ {
1391
+ "include": "$self"
1392
+ }
1393
+ ]
1394
+ },
1395
+ {
1396
+ "begin": "\\b(template)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\s*\\{",
1397
+ "beginCaptures": {
1398
+ "1": {
1399
+ "name": "keyword.control.template.bird"
1400
+ },
1401
+ "2": {
1402
+ "name": "entity.name.type.protocol.bird"
1403
+ },
1404
+ "3": {
1405
+ "name": "entity.name.function.template.bird"
1406
+ }
1407
+ },
1408
+ "end": "}",
1409
+ "endCaptures": {
1410
+ "0": {
1411
+ "name": "punctuation.definition.block.end.bird"
1412
+ }
1413
+ },
1414
+ "name": "meta.template-definition-with-name.bird",
1415
+ "patterns": [
1416
+ {
1417
+ "include": "$self"
1418
+ }
1419
+ ]
1420
+ },
1421
+ {
1422
+ "begin": "\\b(template)\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\s*\\{",
1423
+ "beginCaptures": {
1424
+ "1": {
1425
+ "name": "keyword.control.template.bird"
1426
+ },
1427
+ "2": {
1428
+ "name": "entity.name.type.protocol.bird"
1429
+ }
1430
+ },
1431
+ "end": "}",
1432
+ "endCaptures": {
1433
+ "0": {
1434
+ "name": "punctuation.definition.block.end.bird"
1435
+ }
1436
+ },
1437
+ "name": "meta.template-definition-anonymous.bird",
1438
+ "patterns": [
1439
+ {
1440
+ "include": "$self"
1441
+ }
1442
+ ]
1443
+ }
1444
+ ]
1445
+ },
1446
+ "user-variables": {
1447
+ "patterns": [
1448
+ {
1449
+ "match": "\\b[A-Z][0-9A-Z_a-z]*\\b",
1450
+ "name": "variable.other.user-defined.bird"
1451
+ }
1452
+ ]
1453
+ },
1454
+ "variable-declarations": {
1455
+ "patterns": [
1456
+ {
1457
+ "captures": {
1458
+ "1": {
1459
+ "name": "storage.type.bird"
1460
+ },
1461
+ "2": {
1462
+ "name": "variable.other.declaration.bird"
1463
+ }
1464
+ },
1465
+ "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-Z_a-z][0-9A-Z_a-z]*)(?:\\s*=|;)",
1466
+ "name": "meta.variable-declaration.bird"
1467
+ }
1468
+ ]
1469
+ },
1470
+ "vpn-rd": {
1471
+ "match": "\\b(?:[0-9]+:[0-9]+|[012]:[0-9]+:[0-9]+|(?:[0-9]{1,3}\\.){3}[0-9]{1,3}:[0-9]+)\\b",
1472
+ "name": "constant.numeric.vpn-rd.bird"
1473
+ }
1474
+ },
1475
+ "scopeName": "source.bird2"
1476
+ }