@excom/nucleus-quark-highlighter 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 (29) hide show
  1. package/.rush/temp/chunked-rush-logs/nucleus-quark-highlighter.apply-exports.chunks.jsonl +1 -0
  2. package/.rush/temp/chunked-rush-logs/nucleus-quark-highlighter.build_package-metas.chunks.jsonl +1 -0
  3. package/.rush/temp/operation/apply-exports/all.log +1 -0
  4. package/.rush/temp/operation/apply-exports/log-chunks.jsonl +1 -0
  5. package/.rush/temp/operation/apply-exports/state.json +3 -0
  6. package/.rush/temp/operation/build_package-metas/all.log +1 -0
  7. package/.rush/temp/operation/build_package-metas/log-chunks.jsonl +1 -0
  8. package/.rush/temp/operation/build_package-metas/state.json +3 -0
  9. package/.rush/temp/shrinkwrap-deps.json +31 -0
  10. package/.vscodeignore +10 -0
  11. package/LICENSE.md +1 -0
  12. package/icons/marketplace-icon.png +0 -0
  13. package/icons/marketplace-icon.svg +6 -0
  14. package/icons/quark-file.svg +3 -0
  15. package/package.json +127 -0
  16. package/quark.configuration.json +35 -0
  17. package/rush-logs/nucleus-quark-highlighter.apply-exports.cache.log +1 -0
  18. package/rush-logs/nucleus-quark-highlighter.apply-exports.log +1 -0
  19. package/rush-logs/nucleus-quark-highlighter.build_package-metas.cache.log +1 -0
  20. package/rush-logs/nucleus-quark-highlighter.build_package-metas.log +1 -0
  21. package/scripts/build-extension.mjs +24 -0
  22. package/scripts/package-vsix.mjs +53 -0
  23. package/shiki.mjs +35 -0
  24. package/src/extension.ts +107 -0
  25. package/support/docs/README.md +76 -0
  26. package/support/package-meta.json +44 -0
  27. package/syntaxes/html-custom-elements.tmLanguage.json +82 -0
  28. package/syntaxes/quark.tmLanguage.json +1454 -0
  29. package/tsconfig.json +8 -0
@@ -0,0 +1,1454 @@
1
+ {
2
+ "information_for_contributors": [
3
+ "This file has been converted from https://github.com/atom/language-sass/blob/master/grammars/scss.cson",
4
+ "If you want to provide a fix or improvement, please create a pull request against the original repository.",
5
+ "Once accepted there, we are happy to receive an update request."
6
+ ],
7
+ "version": "https://github.com/atom/language-sass/commit/f52ab12f7f9346cc2568129d8c4419bd3d506b47",
8
+ "name": "Quark",
9
+ "scopeName": "source.quark",
10
+ "patterns": [
11
+ {
12
+ "include": "#variable_setting"
13
+ },
14
+ {
15
+ "include": "#at_rule_on"
16
+ },
17
+ {
18
+ "include": "#at_rule_dispatch"
19
+ },
20
+ {
21
+ "include": "#at_rule_view_transition"
22
+ },
23
+ {
24
+ "include": "#at_rule_delay"
25
+ },
26
+ {
27
+ "include": "#at_rule_use"
28
+ },
29
+ {
30
+ "include": "#at_rule_scope"
31
+ },
32
+ {
33
+ "include": "#general"
34
+ },
35
+ {
36
+ "include": "#at_rule_warn"
37
+ },
38
+ {
39
+ "include": "#rules"
40
+ },
41
+ {
42
+ "include": "#property_list"
43
+ },
44
+ {
45
+ "include": "#at_rule_unknown"
46
+ },
47
+ {
48
+ "match": ";",
49
+ "name": "punctuation.terminator.rule.css"
50
+ }
51
+ ],
52
+ "repository": {
53
+ "custom-element-names": {
54
+ "match": "(?xi) (?<![\\w:-])\n(?:\n # HTML\n (?:[a-z0-9]+-[a-z0-9-]+)(?!:(?![a-zA-Z:-]))\n)\n(?=[+~>\\s,.\\#|){:\\[]|/\\*|$)",
55
+ "name": "entity.name.class.custom-element.quark"
56
+ },
57
+ "quark-object-accessor": {
58
+ "patterns": [
59
+ {
60
+ "match": "(?xi) (?<![\\w-])\n(?:\n # Standard CSS\n (?<=\\.)([a-z_-]+)\n)\n(?![\\w-])",
61
+ "name": "support.variable.object-accessor.quark"
62
+ }
63
+ ]
64
+ },
65
+ "quark-property-names": {
66
+ "patterns": [
67
+ {
68
+ "match": "(?xi) (?<![\\w-])\n(?:\n # Standard CSS\n (?<!\\.)([a-z]+)\n)\n(?![\\w-])",
69
+ "name": "support.variable.property-name.quark"
70
+ }
71
+ ]
72
+ },
73
+ "custom-attribute-name": {
74
+ "match": "[a-zA-Z0-9]+-[a-zA-Z0-9-]*",
75
+ "name": "variable.other.constant.attribute-name.custom-attribute.quark",
76
+ "patterns": [
77
+ {
78
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
79
+ "name": "constant.character.escape.scss"
80
+ }
81
+ ]
82
+ },
83
+ "attribute-name": {
84
+ "match": "[\\s\\S]*",
85
+ "name": "entity.other.attribute-name.attribute.scss",
86
+ "patterns": [
87
+ {
88
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
89
+ "name": "constant.character.escape.scss"
90
+ }
91
+ ]
92
+ },
93
+ "at_rule_use": {
94
+ "begin": "\\s*((@)use\\b)\\s*",
95
+ "captures": {
96
+ "1": {
97
+ "name": "keyword.control.at-rule.use.scss"
98
+ },
99
+ "2": {
100
+ "name": "punctuation.definition.keyword.scss"
101
+ }
102
+ },
103
+ "end": "\\s*(?=;)",
104
+ "name": "meta.at-rule.use.scss",
105
+ "patterns": [
106
+ {
107
+ "match": "\\bas\\b",
108
+ "name": "keyword.control.operator"
109
+ },
110
+ {
111
+ "match": "\\b[\\w-]+\\b",
112
+ "name": "variable.other.constant.quark"
113
+ },
114
+ {
115
+ "match": "\\*",
116
+ "name": "variable.language.expanded-namespace.scss"
117
+ },
118
+ {
119
+ "include": "#string_single"
120
+ },
121
+ {
122
+ "include": "#string_double"
123
+ },
124
+ {
125
+ "include": "#comment_block"
126
+ }
127
+ ]
128
+ },
129
+ "at_rule_warn": {
130
+ "begin": "\\s*((@)(warn|debug|error)\\b)\\s*",
131
+ "captures": {
132
+ "1": {
133
+ "name": "keyword.control.warn.scss"
134
+ },
135
+ "2": {
136
+ "name": "punctuation.definition.keyword.scss"
137
+ }
138
+ },
139
+ "end": "\\s*(?=;)",
140
+ "name": "meta.at-rule.warn.scss",
141
+ "patterns": [
142
+ {
143
+ "include": "#general"
144
+ },
145
+ {
146
+ "include": "#property_values"
147
+ }
148
+ ],
149
+ "comment": "`@warn \"…\";` / `@debug \"size\", attr(\"width\");` / `@error …;`: any expression, tokenized like a property value"
150
+ },
151
+ "comment_docblock": {
152
+ "name": "comment.block.documentation.scss",
153
+ "begin": "///",
154
+ "beginCaptures": {
155
+ "0": {
156
+ "name": "punctuation.definition.comment.scss"
157
+ }
158
+ },
159
+ "end": "(?=$)",
160
+ "patterns": [
161
+ {
162
+ "include": "source.sassdoc"
163
+ }
164
+ ]
165
+ },
166
+ "comment_block": {
167
+ "begin": "/\\*",
168
+ "beginCaptures": {
169
+ "0": {
170
+ "name": "punctuation.definition.comment.scss"
171
+ }
172
+ },
173
+ "end": "\\*/",
174
+ "endCaptures": {
175
+ "0": {
176
+ "name": "punctuation.definition.comment.scss"
177
+ }
178
+ },
179
+ "name": "comment.block.scss"
180
+ },
181
+ "quark_constant": {
182
+ "match": "(?<!\\.)(item|index|element|none)\\b",
183
+ "name": "support.constant.property-value.css"
184
+ },
185
+ "quark_if_function": {
186
+ "begin": "(?<![\\w.$-])(if)(\\()",
187
+ "beginCaptures": {
188
+ "1": {
189
+ "name": "keyword.control.conditional.if.quark"
190
+ },
191
+ "2": {
192
+ "name": "punctuation.section.function.scss"
193
+ }
194
+ },
195
+ "end": "(\\))",
196
+ "endCaptures": {
197
+ "1": {
198
+ "name": "punctuation.section.function.scss"
199
+ }
200
+ },
201
+ "patterns": [
202
+ {
203
+ "include": "#parameters"
204
+ }
205
+ ]
206
+ },
207
+ "constant_functions": {
208
+ "begin": "(?:([\\w-]+)(\\.))?([\\w-]+)(\\()",
209
+ "beginCaptures": {
210
+ "1": {
211
+ "name": "variable.other.constant.quark"
212
+ },
213
+ "2": {
214
+ "name": "punctuation.access.module.scss"
215
+ },
216
+ "3": {
217
+ "name": "support.function.misc.scss"
218
+ },
219
+ "4": {
220
+ "name": "punctuation.section.function.scss"
221
+ }
222
+ },
223
+ "end": "(\\))",
224
+ "endCaptures": {
225
+ "1": {
226
+ "name": "punctuation.section.function.scss"
227
+ }
228
+ },
229
+ "patterns": [
230
+ {
231
+ "include": "#parameters"
232
+ }
233
+ ]
234
+ },
235
+ "constant_mathematical_symbols": {
236
+ "match": "\\b(\\+|-|\\*|/)\\b",
237
+ "name": "support.constant.mathematical-symbols.scss"
238
+ },
239
+ "constant_sass_functions": {
240
+ "begin": "(?<!\\.)\\b([A-Za-z-]+)(\\(|\\b)",
241
+ "beginCaptures": {
242
+ "1": {
243
+ "name": "support.function.misc.scss"
244
+ },
245
+ "2": {
246
+ "name": "punctuation.section.function.scss"
247
+ }
248
+ },
249
+ "end": "(\\))|(?<=\\b)",
250
+ "endCaptures": {
251
+ "1": {
252
+ "name": "punctuation.section.function.scss"
253
+ }
254
+ },
255
+ "patterns": [
256
+ {
257
+ "include": "#parameters"
258
+ }
259
+ ]
260
+ },
261
+ "general": {
262
+ "patterns": [
263
+ {
264
+ "include": "#variables"
265
+ },
266
+ {
267
+ "include": "#comment_docblock"
268
+ },
269
+ {
270
+ "include": "#comment_block"
271
+ }
272
+ ]
273
+ },
274
+ "interpolation": {
275
+ "begin": "#{",
276
+ "beginCaptures": {
277
+ "0": {
278
+ "name": "punctuation.definition.interpolation.begin.bracket.curly.scss"
279
+ }
280
+ },
281
+ "end": "}",
282
+ "endCaptures": {
283
+ "0": {
284
+ "name": "punctuation.definition.interpolation.end.bracket.curly.scss"
285
+ }
286
+ },
287
+ "name": "variable.interpolation.scss",
288
+ "patterns": [
289
+ {
290
+ "include": "#variables"
291
+ },
292
+ {
293
+ "include": "#property_values"
294
+ }
295
+ ]
296
+ },
297
+ "conditional_operators": {
298
+ "patterns": [
299
+ {
300
+ "include": "#comparison_operators"
301
+ },
302
+ {
303
+ "include": "#logical_operators"
304
+ }
305
+ ]
306
+ },
307
+ "comparison_operators": {
308
+ "match": "==|!=|<=|>=|<|>",
309
+ "name": "keyword.operator.comparison.scss"
310
+ },
311
+ "logical_operators": {
312
+ "match": "\\b(not|or|and)\\b",
313
+ "name": "keyword.operator.logical.scss"
314
+ },
315
+ "map": {
316
+ "begin": "\\(",
317
+ "beginCaptures": {
318
+ "0": {
319
+ "name": "punctuation.definition.map.begin.bracket.round.scss"
320
+ }
321
+ },
322
+ "end": "\\)",
323
+ "endCaptures": {
324
+ "0": {
325
+ "name": "punctuation.definition.map.end.bracket.round.scss"
326
+ }
327
+ },
328
+ "name": "meta.definition.variable.map.scss",
329
+ "patterns": [
330
+ {
331
+ "include": "#comment_docblock"
332
+ },
333
+ {
334
+ "include": "#comment_block"
335
+ },
336
+ {
337
+ "match": "\\b([\\w-]+)\\s*(:)",
338
+ "captures": {
339
+ "1": {
340
+ "name": "support.type.map.key.scss"
341
+ },
342
+ "2": {
343
+ "name": "punctuation.separator.key-value.scss"
344
+ }
345
+ }
346
+ },
347
+ {
348
+ "match": ",",
349
+ "name": "punctuation.separator.delimiter.scss"
350
+ },
351
+ {
352
+ "include": "#map"
353
+ },
354
+ {
355
+ "include": "#variables"
356
+ },
357
+ {
358
+ "include": "#property_values"
359
+ }
360
+ ]
361
+ },
362
+ "operators": {
363
+ "match": "[-+*/](?!\\s*[-+*/])",
364
+ "name": "keyword.operator.css"
365
+ },
366
+ "parameters": {
367
+ "patterns": [
368
+ {
369
+ "include": "#general"
370
+ },
371
+ {
372
+ "begin": "\\(",
373
+ "beginCaptures": {
374
+ "0": {
375
+ "name": "punctuation.definition.begin.bracket.round.scss"
376
+ }
377
+ },
378
+ "end": "\\)",
379
+ "endCaptures": {
380
+ "0": {
381
+ "name": "punctuation.definition.end.bracket.round.scss"
382
+ }
383
+ },
384
+ "patterns": [
385
+ {
386
+ "include": "#parameters"
387
+ }
388
+ ]
389
+ },
390
+ {
391
+ "match": "\\belse\\b(?=\\s*:)",
392
+ "name": "keyword.control.else.quark"
393
+ },
394
+ {
395
+ "match": ":",
396
+ "name": "punctuation.separator.key-value.scss"
397
+ },
398
+ {
399
+ "match": ";",
400
+ "name": "punctuation.terminator.rule.scss"
401
+ },
402
+ {
403
+ "include": "#property_values"
404
+ },
405
+ {
406
+ "include": "#tag_parent_reference"
407
+ },
408
+ {
409
+ "match": ",",
410
+ "name": "punctuation.separator.delimiter.scss"
411
+ }
412
+ ]
413
+ },
414
+ "properties": {
415
+ "patterns": [
416
+ {
417
+ "begin": "(?<![-a-z])(?=[a-zA-Z0-9]+-[a-zA-Z0-9-]*)",
418
+ "end": "$|(?![-a-z])",
419
+ "name": "variable.other.constant.custom-element-property-name.quark",
420
+ "patterns": [
421
+ {
422
+ "include": "#quark-property-names"
423
+ }
424
+ ]
425
+ },
426
+ {
427
+ "begin": "(?<![-a-z])(?=[a-z])",
428
+ "end": "$|(?![a-z])",
429
+ "name": "support.variable.property-name.quark",
430
+ "patterns": [
431
+ {
432
+ "include": "#quark-property-names"
433
+ }
434
+ ]
435
+ },
436
+ {
437
+ "begin": "(:)\\s*(?!(\\s*{))",
438
+ "beginCaptures": {
439
+ "1": {
440
+ "name": "punctuation.separator.key-value.scss"
441
+ }
442
+ },
443
+ "end": "\\s*(;|(?=}|\\)))",
444
+ "endCaptures": {
445
+ "1": {
446
+ "name": "punctuation.terminator.rule.scss"
447
+ }
448
+ },
449
+ "contentName": "meta.property-value.scss",
450
+ "patterns": [
451
+ {
452
+ "include": "#general"
453
+ },
454
+ {
455
+ "include": "#property_values"
456
+ }
457
+ ]
458
+ }
459
+ ]
460
+ },
461
+ "property_list": {
462
+ "begin": "{",
463
+ "beginCaptures": {
464
+ "0": {
465
+ "name": "punctuation.section.property-list.begin.bracket.curly.scss"
466
+ }
467
+ },
468
+ "end": "}",
469
+ "endCaptures": {
470
+ "0": {
471
+ "name": "punctuation.section.property-list.end.bracket.curly.scss"
472
+ }
473
+ },
474
+ "name": "meta.property-list.scss",
475
+ "patterns": [
476
+ {
477
+ "include": "#at_rule_warn"
478
+ },
479
+ {
480
+ "include": "#rules"
481
+ },
482
+ {
483
+ "include": "#properties"
484
+ },
485
+ {
486
+ "include": "$self"
487
+ }
488
+ ]
489
+ },
490
+ "property_values": {
491
+ "patterns": [
492
+ {
493
+ "include": "#string_single"
494
+ },
495
+ {
496
+ "include": "#string_double"
497
+ },
498
+ {
499
+ "include": "#quark_constant"
500
+ },
501
+ {
502
+ "include": "#conditional_operators"
503
+ },
504
+ {
505
+ "include": "#quark_if_function"
506
+ },
507
+ {
508
+ "include": "#constant_functions"
509
+ },
510
+ {
511
+ "include": "#constant_sass_functions"
512
+ },
513
+ {
514
+ "include": "source.css#numeric-values"
515
+ },
516
+ {
517
+ "include": "#quark-object-accessor"
518
+ },
519
+ {
520
+ "include": "#constant_mathematical_symbols"
521
+ },
522
+ {
523
+ "include": "#operators"
524
+ },
525
+ {
526
+ "begin": "\\(",
527
+ "beginCaptures": {
528
+ "0": {
529
+ "name": "punctuation.definition.begin.bracket.round.scss"
530
+ }
531
+ },
532
+ "end": "\\)",
533
+ "endCaptures": {
534
+ "0": {
535
+ "name": "punctuation.definition.end.bracket.round.scss"
536
+ }
537
+ },
538
+ "patterns": [
539
+ {
540
+ "include": "#general"
541
+ },
542
+ {
543
+ "include": "#property_values"
544
+ }
545
+ ]
546
+ }
547
+ ]
548
+ },
549
+ "rules": {
550
+ "patterns": [
551
+ {
552
+ "include": "#general"
553
+ },
554
+ {
555
+ "include": "#at_rule_on"
556
+ },
557
+ {
558
+ "include": "#at_rule_dispatch"
559
+ },
560
+ {
561
+ "include": "#at_rule_view_transition"
562
+ },
563
+ {
564
+ "include": "#at_rule_delay"
565
+ },
566
+ {
567
+ "include": "#at_rule_scope"
568
+ },
569
+ {
570
+ "include": "#at_rule_unknown"
571
+ },
572
+ {
573
+ "include": "#selectors"
574
+ }
575
+ ]
576
+ },
577
+ "selector_attribute": {
578
+ "match": "(?xi)\n(\\[)\n\\s*\n(\n (?:\n [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+?\n)\n(?:\n \\s*([~|^$*]?=)\\s*\n (?:\n (\n (?:\n [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+\n )\n |\n ((\")(.*?)(\"))\n |\n ((')(.*?)('))\n )\n)?\n\\s*\n(\\])",
579
+ "name": "meta.attribute-selector.scss",
580
+ "captures": {
581
+ "1": {
582
+ "name": "punctuation.definition.attribute-selector.begin.bracket.square.scss"
583
+ },
584
+ "2": {
585
+ "patterns": [
586
+ {
587
+ "include": "#custom-attribute-name"
588
+ },
589
+ {
590
+ "include": "#attribute-name"
591
+ }
592
+ ]
593
+ },
594
+ "3": {
595
+ "name": "keyword.operator.scss"
596
+ },
597
+ "4": {
598
+ "name": "string.unquoted.attribute-value.scss",
599
+ "patterns": [
600
+ {
601
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
602
+ "name": "constant.character.escape.scss"
603
+ }
604
+ ]
605
+ },
606
+ "5": {
607
+ "name": "string.quoted.double.attribute-value.scss"
608
+ },
609
+ "6": {
610
+ "name": "punctuation.definition.string.begin.scss"
611
+ },
612
+ "7": {
613
+ "name": "string.quoted.double.scss",
614
+ "patterns": [
615
+ {
616
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
617
+ "name": "constant.character.escape.scss"
618
+ }
619
+ ]
620
+ },
621
+ "8": {
622
+ "name": "punctuation.definition.string.end.scss"
623
+ },
624
+ "9": {
625
+ "name": "string.quoted.single.attribute-value.scss"
626
+ },
627
+ "10": {
628
+ "name": "punctuation.definition.string.begin.scss"
629
+ },
630
+ "11": {
631
+ "name": "string.quoted.single.scss",
632
+ "patterns": [
633
+ {
634
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
635
+ "name": "constant.character.escape.scss"
636
+ }
637
+ ]
638
+ },
639
+ "12": {
640
+ "name": "punctuation.definition.string.end.scss"
641
+ },
642
+ "13": {
643
+ "name": "punctuation.definition.attribute-selector.end.bracket.square.scss"
644
+ }
645
+ }
646
+ },
647
+ "selector_class": {
648
+ "match": "(?x)\n(\\.) # Valid class-name\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+\n) # Followed by either:\n(?= $ # - End of the line\n | [\\s,\\#)\\[:{>+~|] # - Another selector\n | \\. # - Class selector\n | /\\* # - A block comment\n | ; # - A semicolon\n)",
649
+ "name": "entity.other.attribute-name.class.css",
650
+ "captures": {
651
+ "1": {
652
+ "name": "punctuation.definition.entity.css"
653
+ },
654
+ "2": {
655
+ "patterns": [
656
+ {
657
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
658
+ "name": "constant.character.escape.scss"
659
+ }
660
+ ]
661
+ }
662
+ }
663
+ },
664
+ "selector_id": {
665
+ "match": "(?x)\n(\\#) # Valid id-name\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+\n) # Followed by either:\n(?= $ # - End of the line\n | [\\s,\\#)\\[:{>+~|] # - Another selector\n | \\. # - Class selector\n | /\\* # - A block comment\n)",
666
+ "name": "entity.other.attribute-name.id.css",
667
+ "captures": {
668
+ "1": {
669
+ "name": "punctuation.definition.entity.css"
670
+ },
671
+ "2": {
672
+ "patterns": [
673
+ {
674
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
675
+ "name": "constant.character.escape.scss"
676
+ }
677
+ ]
678
+ }
679
+ }
680
+ },
681
+ "selector_placeholder": {
682
+ "comment": "`%placeholder` is not Quark",
683
+ "match": "%[-\\w]+(?=[\\s,{:\\[>+~|]|$)",
684
+ "name": "invalid.illegal.placeholder.quark"
685
+ },
686
+ "parent_selector_suffix": {
687
+ "match": "(?x)\n(?<=&)\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+\n) # Followed by either:\n(?= $ # - End of the line\n | [\\s,.\\#)\\[:{>+~|] # - Another selector\n | /\\* # - A block comment\n)",
688
+ "name": "entity.other.attribute-name.parent-selector-suffix.css",
689
+ "captures": {
690
+ "1": {
691
+ "name": "punctuation.definition.entity.css"
692
+ },
693
+ "2": {
694
+ "patterns": [
695
+ {
696
+ "match": "\\\\([0-9a-fA-F]{1,6}|.)",
697
+ "name": "constant.character.escape.scss"
698
+ }
699
+ ]
700
+ }
701
+ }
702
+ },
703
+ "selector_pseudo_class": {
704
+ "patterns": [
705
+ {
706
+ "begin": "((:)\\bnth-(?:child|last-child|of-type|last-of-type))(\\()",
707
+ "beginCaptures": {
708
+ "1": {
709
+ "name": "entity.other.attribute-name.pseudo-class.css"
710
+ },
711
+ "2": {
712
+ "name": "punctuation.definition.entity.css"
713
+ },
714
+ "3": {
715
+ "name": "punctuation.definition.pseudo-class.begin.bracket.round.css"
716
+ }
717
+ },
718
+ "end": "\\)",
719
+ "endCaptures": {
720
+ "0": {
721
+ "name": "punctuation.definition.pseudo-class.end.bracket.round.css"
722
+ }
723
+ },
724
+ "patterns": [
725
+ {
726
+ "match": "\\d+",
727
+ "name": "constant.numeric.css"
728
+ },
729
+ {
730
+ "match": "(?<=\\d)n\\b|\\b(n|even|odd)\\b",
731
+ "name": "constant.other.scss"
732
+ },
733
+ {
734
+ "match": "\\w+",
735
+ "name": "invalid.illegal.scss"
736
+ }
737
+ ]
738
+ },
739
+ {
740
+ "include": "source.css#pseudo-classes"
741
+ },
742
+ {
743
+ "include": "source.css#pseudo-elements"
744
+ },
745
+ {
746
+ "include": "#quark-functional-pseudo-classes"
747
+ }
748
+ ]
749
+ },
750
+ "quark-functional-pseudo-classes": {
751
+ "patterns": [
752
+ {
753
+ "begin": "(?i)((:)dir)(\\()",
754
+ "beginCaptures": {
755
+ "1": {
756
+ "name": "entity.other.attribute-name.pseudo-class.css"
757
+ },
758
+ "2": {
759
+ "name": "punctuation.definition.entity.css"
760
+ },
761
+ "3": {
762
+ "name": "punctuation.section.function.begin.bracket.round.css"
763
+ }
764
+ },
765
+ "end": "\\)",
766
+ "endCaptures": {
767
+ "0": {
768
+ "name": "punctuation.section.function.end.bracket.round.css"
769
+ }
770
+ },
771
+ "patterns": [
772
+ {
773
+ "include": "source.css#comment-block"
774
+ },
775
+ {
776
+ "include": "source.css#escapes"
777
+ },
778
+ {
779
+ "match": "(?i)(?<![\\w-])(ltr|rtl)(?![\\w-])",
780
+ "name": "support.constant.text-direction.css"
781
+ },
782
+ {
783
+ "include": "source.css#property-values"
784
+ }
785
+ ]
786
+ },
787
+ {
788
+ "begin": "(?i)((:)lang)(\\()",
789
+ "beginCaptures": {
790
+ "1": {
791
+ "name": "entity.other.attribute-name.pseudo-class.css"
792
+ },
793
+ "2": {
794
+ "name": "punctuation.definition.entity.css"
795
+ },
796
+ "3": {
797
+ "name": "punctuation.section.function.begin.bracket.round.css"
798
+ }
799
+ },
800
+ "end": "\\)",
801
+ "endCaptures": {
802
+ "0": {
803
+ "name": "punctuation.section.function.end.bracket.round.css"
804
+ }
805
+ },
806
+ "patterns": [
807
+ {
808
+ "match": "(?<=[(,\\s])[a-zA-Z]+(-[a-zA-Z0-9]*|\\\\(?:[0-9a-fA-F]{1,6}|.))*(?=[),\\s])",
809
+ "name": "support.constant.language-range.css"
810
+ },
811
+ {
812
+ "begin": "\"",
813
+ "beginCaptures": {
814
+ "0": {
815
+ "name": "punctuation.definition.string.begin.css"
816
+ }
817
+ },
818
+ "end": "\"",
819
+ "endCaptures": {
820
+ "0": {
821
+ "name": "punctuation.definition.string.end.css"
822
+ }
823
+ },
824
+ "name": "string.quoted.double.css",
825
+ "patterns": [
826
+ {
827
+ "include": "source.css#escapes"
828
+ },
829
+ {
830
+ "match": "(?<=[\"\\s])[a-zA-Z*]+(-[a-zA-Z0-9*]*)*(?=[\"\\s])",
831
+ "name": "support.constant.language-range.css"
832
+ }
833
+ ]
834
+ },
835
+ {
836
+ "begin": "'",
837
+ "beginCaptures": {
838
+ "0": {
839
+ "name": "punctuation.definition.string.begin.css"
840
+ }
841
+ },
842
+ "end": "'",
843
+ "endCaptures": {
844
+ "0": {
845
+ "name": "punctuation.definition.string.end.css"
846
+ }
847
+ },
848
+ "name": "string.quoted.single.css",
849
+ "patterns": [
850
+ {
851
+ "include": "source.css#escapes"
852
+ },
853
+ {
854
+ "match": "(?<=['\\s])[a-zA-Z*]+(-[a-zA-Z0-9*]*)*(?=['\\s])",
855
+ "name": "support.constant.language-range.css"
856
+ }
857
+ ]
858
+ },
859
+ {
860
+ "include": "source.css#commas"
861
+ }
862
+ ]
863
+ },
864
+ {
865
+ "begin": "(?i)((:)(?:not|has|matches|where|is))(\\()",
866
+ "beginCaptures": {
867
+ "1": {
868
+ "name": "entity.other.attribute-name.pseudo-class.css"
869
+ },
870
+ "2": {
871
+ "name": "punctuation.definition.entity.css"
872
+ },
873
+ "3": {
874
+ "name": "punctuation.section.function.begin.bracket.round.css"
875
+ }
876
+ },
877
+ "end": "\\)",
878
+ "endCaptures": {
879
+ "0": {
880
+ "name": "punctuation.section.function.end.bracket.round.css"
881
+ }
882
+ },
883
+ "patterns": [
884
+ {
885
+ "include": "#selector-innards"
886
+ }
887
+ ]
888
+ },
889
+ {
890
+ "begin": "(?i)((:)nth-(?:last-)?(?:child|of-type))(\\()",
891
+ "beginCaptures": {
892
+ "1": {
893
+ "name": "entity.other.attribute-name.pseudo-class.css"
894
+ },
895
+ "2": {
896
+ "name": "punctuation.definition.entity.css"
897
+ },
898
+ "3": {
899
+ "name": "punctuation.section.function.begin.bracket.round.css"
900
+ }
901
+ },
902
+ "end": "\\)",
903
+ "endCaptures": {
904
+ "0": {
905
+ "name": "punctuation.section.function.end.bracket.round.css"
906
+ }
907
+ },
908
+ "patterns": [
909
+ {
910
+ "match": "(?i)[+-]?(\\d+n?|n)(\\s*[+-]\\s*\\d+)?",
911
+ "name": "constant.numeric.css"
912
+ },
913
+ {
914
+ "match": "(?i)even|odd",
915
+ "name": "support.constant.parity.css"
916
+ }
917
+ ]
918
+ }
919
+ ]
920
+ },
921
+ "tag-names": {
922
+ "match": "(?xi) (?<![\\w:-])\n(?:\n # HTML\n a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|bgsound\n | big|blink|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command\n | content|data|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|element|em|embed|fieldset\n | figcaption|figure|font|footer|form|frame|frameset|h[1-6]|head|header|hgroup|hr|html|i\n | iframe|image|img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|main|map|mark\n | marquee|math|menu|menuitem|meta|meter|multicol|nav|nextid|nobr|noembed|noframes|noscript\n | object|ol|optgroup|option|output|p|param|picture|plaintext|pre|progress|q|rb|rp|rt|rtc\n | ruby|s|samp|script|section|select|shadow|slot|small|source|spacer|span|strike|strong\n | style|sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr\n | track|tt|u|ul|var|video|wbr|xmp\n\n # SVG\n | altGlyph|altGlyphDef|altGlyphItem|animate|animateColor|animateMotion|animateTransform\n | circle|clipPath|color-profile|cursor|defs|desc|discard|ellipse|feBlend|feColorMatrix\n | feComponentTransfer|feComposite|feConvolveMatrix|feDiffuseLighting|feDisplacementMap\n | feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur\n | feImage|feMerge|feMergeNode|feMorphology|feOffset|fePointLight|feSpecularLighting\n | feSpotLight|feTile|feTurbulence|filter|font-face|font-face-format|font-face-name\n | font-face-src|font-face-uri|foreignObject|g|glyph|glyphRef|hatch|hatchpath|hkern\n | line|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|metadata\n | missing-glyph|mpath|path|pattern|polygon|polyline|radialGradient|rect|set|solidcolor\n | stop|svg|switch|symbol|text|textPath|tref|tspan|use|view|vkern\n\n # MathML\n | annotation|annotation-xml|maction|maligngroup|malignmark|math|menclose|merror|mfenced\n | mfrac|mglyph|mi|mlabeledtr|mlongdiv|mmultiscripts|mn|mo|mover|mpadded|mphantom|mroot\n | mrow|ms|mscarries|mscarry|msgroup|msline|mspace|msqrt|msrow|mstack|mstyle|msub|msubsup\n | msup|mtable|mtd|mtext|mtr|munder|munderover|semantics\n)\n(?=[+~>\\s,.\\#|){:\\[]|/\\*|$)",
923
+ "name": "constant.other.option.element.css"
924
+ },
925
+ "selector-innards": {
926
+ "patterns": [
927
+ {
928
+ "include": "source.css#comment-block"
929
+ },
930
+ {
931
+ "include": "source.css#commas"
932
+ },
933
+ {
934
+ "include": "source.css#escapes"
935
+ },
936
+ {
937
+ "include": "source.css#combinators"
938
+ },
939
+ {
940
+ "captures": {
941
+ "1": {
942
+ "name": "entity.other.namespace-prefix.css"
943
+ },
944
+ "2": {
945
+ "name": "punctuation.separator.css"
946
+ }
947
+ },
948
+ "match": "(?x)\n(?:^|(?<=[\\s,(};])) # Follows whitespace, comma, semicolon, or bracket\n(?!\n [-\\w*]+\n \\|\n (?!\n [-\\[:.*\\#a-zA-Z_] # Make sure there's a selector to match\n | [^\\x00-\\x7F]\n )\n)\n(\n (?: [-a-zA-Z_] | [^\\x00-\\x7F] ) # First letter\n (?: [-a-zA-Z0-9_] | [^\\x00-\\x7F] # Remainder of identifier\n | \\\\(?:[0-9a-fA-F]{1,6}|.)\n )*\n |\n \\* # Universal namespace\n)?\n(\\|) # Namespace separator"
949
+ },
950
+ {
951
+ "include": "#custom-element-names"
952
+ },
953
+ {
954
+ "include": "#tag-names"
955
+ },
956
+ {
957
+ "match": "\\*",
958
+ "name": "entity.name.tag.wildcard.css"
959
+ },
960
+ {
961
+ "captures": {
962
+ "1": {
963
+ "name": "punctuation.definition.entity.css"
964
+ },
965
+ "2": {
966
+ "patterns": [
967
+ {
968
+ "include": "source.css#escapes"
969
+ }
970
+ ]
971
+ }
972
+ },
973
+ "match": "(?x) (?<![@\\w-])\n([.\\#])\n# Invalid identifier\n(\n (?:\n # Starts with ASCII digits, with possible hyphen preceding it\n -?[0-9]\n |\n # Consists of a hyphen only\n - # Terminated by either:\n (?= $ # - End-of-line\n | [\\s,.\\#)\\[:{>+~|] # - Followed by another selector\n | /\\* # - Followed by a block comment\n )\n |\n # Name contains unescaped ASCII symbol\n (?: # Check for acceptable preceding characters\n [-a-zA-Z_0-9]|[^\\x00-\\x7F] # - Valid selector character\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # - Escape sequence\n )*\n (?: # Invalid punctuation\n [!\"'%&(*;<?@^`|\\]}] # - NOTE: We exempt `)` from the list of checked\n | # symbols to avoid matching `:not(.invalid)`\n / (?!\\*) # - Avoid invalidating the start of a comment\n )+\n )\n # Mark remainder of selector invalid\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # - Otherwise valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # - Escape sequence\n )*\n)",
974
+ "name": "invalid.illegal.bad-identifier.css"
975
+ },
976
+ {
977
+ "captures": {
978
+ "1": {
979
+ "name": "punctuation.definition.entity.css"
980
+ },
981
+ "2": {
982
+ "patterns": [
983
+ {
984
+ "include": "source.css#escapes"
985
+ }
986
+ ]
987
+ }
988
+ },
989
+ "match": "(?x)\n(\\.) # Valid class-name\n(\n (?: [-a-zA-Z_0-9]|[^\\x00-\\x7F] # Valid identifier characters\n | \\\\(?:[0-9a-fA-F]{1,6}|.) # Escape sequence\n )+\n) # Followed by either:\n(?= $ # - End of the line\n | [\\s,.\\#)\\[:{>+~|] # - Another selector\n | /\\* # - A block comment\n)",
990
+ "name": "entity.other.attribute-name.class.css"
991
+ },
992
+ {
993
+ "captures": {
994
+ "1": {
995
+ "name": "punctuation.definition.entity.css"
996
+ },
997
+ "2": {
998
+ "patterns": [
999
+ {
1000
+ "include": "source.css#escapes"
1001
+ }
1002
+ ]
1003
+ }
1004
+ },
1005
+ "match": "(?x)\n(\\#)\n(\n -?\n (?![0-9])\n (?:[-a-zA-Z0-9_]|[^\\x00-\\x7F]|\\\\(?:[0-9a-fA-F]{1,6}|.))+\n)\n(?=$|[\\s,.\\#)\\[:{>+~|]|/\\*)",
1006
+ "name": "entity.other.attribute-name.id.css"
1007
+ },
1008
+ {
1009
+ "begin": "\\[",
1010
+ "beginCaptures": {
1011
+ "0": {
1012
+ "name": "punctuation.definition.entity.begin.bracket.square.css"
1013
+ }
1014
+ },
1015
+ "end": "\\]",
1016
+ "endCaptures": {
1017
+ "0": {
1018
+ "name": "punctuation.definition.entity.end.bracket.square.css"
1019
+ }
1020
+ },
1021
+ "name": "meta.attribute-selector.css",
1022
+ "patterns": [
1023
+ {
1024
+ "include": "source.css#comment-block"
1025
+ },
1026
+ {
1027
+ "include": "source.css#string"
1028
+ },
1029
+ {
1030
+ "captures": {
1031
+ "1": {
1032
+ "name": "storage.modifier.ignore-case.css"
1033
+ }
1034
+ },
1035
+ "match": "(?<=[\"'\\s]|^|\\*/)\\s*([iI])\\s*(?=[\\s\\]]|/\\*|$)"
1036
+ },
1037
+ {
1038
+ "captures": {
1039
+ "1": {
1040
+ "name": "string.unquoted.attribute-value.css",
1041
+ "patterns": [
1042
+ {
1043
+ "include": "source.css#escapes"
1044
+ }
1045
+ ]
1046
+ }
1047
+ },
1048
+ "match": "(?x)(?<==)\\s*((?!/\\*)(?:[^\\\\\"'\\s\\]]|\\\\.)+)"
1049
+ },
1050
+ {
1051
+ "include": "source.css#escapes"
1052
+ },
1053
+ {
1054
+ "match": "[~|^$*]?=",
1055
+ "name": "keyword.operator.pattern.css"
1056
+ },
1057
+ {
1058
+ "match": "\\|",
1059
+ "name": "punctuation.separator.css"
1060
+ },
1061
+ {
1062
+ "captures": {
1063
+ "1": {
1064
+ "name": "entity.other.namespace-prefix.css",
1065
+ "patterns": [
1066
+ {
1067
+ "include": "source.css#escapes"
1068
+ }
1069
+ ]
1070
+ }
1071
+ },
1072
+ "match": "(?x)\n# Qualified namespace prefix\n( -?(?!\\d)(?:[\\w-]|[^\\x00-\\x7F]|\\\\(?:[0-9a-fA-F]{1,6}|.))+\n| \\*\n)\n# Lookahead to ensure there's a valid identifier ahead\n(?=\n \\| (?!\\s|=|$|\\])\n (?: -?(?!\\d)\n | [\\\\\\w-]\n | [^\\x00-\\x7F]\n )\n)"
1073
+ },
1074
+ {
1075
+ "captures": {
1076
+ "1": {
1077
+ "patterns": [
1078
+ {
1079
+ "include": "#custom-attribute-name"
1080
+ },
1081
+ {
1082
+ "include": "#attribute-name"
1083
+ },
1084
+ {
1085
+ "include": "source.css#escapes"
1086
+ }
1087
+ ]
1088
+ }
1089
+ },
1090
+ "match": "(?x)\n(-?(?!\\d)(?>[\\w-]|[^\\x00-\\x7F]|\\\\(?:[0-9a-fA-F]{1,6}|.))+)\n\\s*\n(?=[~|^\\]$*=]|/\\*)"
1091
+ }
1092
+ ]
1093
+ },
1094
+ {
1095
+ "include": "source.css#pseudo-classes"
1096
+ },
1097
+ {
1098
+ "include": "source.css#pseudo-elements"
1099
+ },
1100
+ {
1101
+ "include": "#quark-functional-pseudo-classes"
1102
+ }
1103
+ ]
1104
+ },
1105
+ "selectors": {
1106
+ "patterns": [
1107
+ {
1108
+ "include": "#custom-element-names"
1109
+ },
1110
+ {
1111
+ "include": "#tag-names"
1112
+ },
1113
+ {
1114
+ "include": "#selector_class"
1115
+ },
1116
+ {
1117
+ "include": "#selector_id"
1118
+ },
1119
+ {
1120
+ "include": "#selector_pseudo_class"
1121
+ },
1122
+ {
1123
+ "include": "#tag_wildcard"
1124
+ },
1125
+ {
1126
+ "include": "#tag_parent_reference"
1127
+ },
1128
+ {
1129
+ "include": "source.css#pseudo-elements"
1130
+ },
1131
+ {
1132
+ "include": "#selector_attribute"
1133
+ },
1134
+ {
1135
+ "include": "#selector_placeholder"
1136
+ },
1137
+ {
1138
+ "include": "#parent_selector_suffix"
1139
+ }
1140
+ ]
1141
+ },
1142
+ "string_double": {
1143
+ "begin": "\"",
1144
+ "beginCaptures": {
1145
+ "0": {
1146
+ "name": "punctuation.definition.string.begin.scss"
1147
+ }
1148
+ },
1149
+ "end": "\"",
1150
+ "endCaptures": {
1151
+ "0": {
1152
+ "name": "punctuation.definition.string.end.scss"
1153
+ }
1154
+ },
1155
+ "name": "string.quoted.double.scss",
1156
+ "patterns": [
1157
+ {
1158
+ "match": "\\\\(\\h{1,6}|.)",
1159
+ "name": "constant.character.escape.scss"
1160
+ },
1161
+ {
1162
+ "include": "#interpolation"
1163
+ }
1164
+ ]
1165
+ },
1166
+ "string_single": {
1167
+ "begin": "'",
1168
+ "beginCaptures": {
1169
+ "0": {
1170
+ "name": "punctuation.definition.string.begin.scss"
1171
+ }
1172
+ },
1173
+ "end": "'",
1174
+ "endCaptures": {
1175
+ "0": {
1176
+ "name": "punctuation.definition.string.end.scss"
1177
+ }
1178
+ },
1179
+ "name": "string.quoted.single.scss",
1180
+ "patterns": [
1181
+ {
1182
+ "match": "\\\\(\\h{1,6}|.)",
1183
+ "name": "constant.character.escape.scss"
1184
+ },
1185
+ {
1186
+ "include": "#interpolation"
1187
+ }
1188
+ ]
1189
+ },
1190
+ "tag_parent_reference": {
1191
+ "match": "&",
1192
+ "name": "entity.name.tag.reference.scss"
1193
+ },
1194
+ "tag_wildcard": {
1195
+ "match": "\\*",
1196
+ "name": "entity.name.tag.wildcard.scss"
1197
+ },
1198
+ "variable_setting": {
1199
+ "begin": "(?=\\$[\\w-]+\\s*:)",
1200
+ "end": ";",
1201
+ "endCaptures": {
1202
+ "0": {
1203
+ "name": "punctuation.terminator.rule.scss"
1204
+ }
1205
+ },
1206
+ "contentName": "meta.definition.variable.other.constant.quark",
1207
+ "patterns": [
1208
+ {
1209
+ "match": "\\$[\\w-]+(?=\\s*:)",
1210
+ "name": "variable.other.constant.quark"
1211
+ },
1212
+ {
1213
+ "begin": ":",
1214
+ "beginCaptures": {
1215
+ "0": {
1216
+ "name": "punctuation.separator.key-value.scss"
1217
+ }
1218
+ },
1219
+ "end": "(?=;)",
1220
+ "patterns": [
1221
+ {
1222
+ "include": "#comment_docblock"
1223
+ },
1224
+ {
1225
+ "include": "#comment_block"
1226
+ },
1227
+ {
1228
+ "include": "#map"
1229
+ },
1230
+ {
1231
+ "include": "#property_values"
1232
+ },
1233
+ {
1234
+ "include": "#variables"
1235
+ },
1236
+ {
1237
+ "match": ",",
1238
+ "name": "punctuation.separator.delimiter.scss"
1239
+ }
1240
+ ]
1241
+ }
1242
+ ]
1243
+ },
1244
+ "variables": {
1245
+ "patterns": [
1246
+ {
1247
+ "match": "\\b([\\w-]+)(\\.)(\\$[\\w-]+)\\b",
1248
+ "captures": {
1249
+ "1": {
1250
+ "name": "variable.other.constant.quark"
1251
+ },
1252
+ "2": {
1253
+ "name": "punctuation.access.module.scss"
1254
+ },
1255
+ "3": {
1256
+ "name": "variable.other.constant.quark"
1257
+ }
1258
+ }
1259
+ },
1260
+ {
1261
+ "match": "(\\$|\\-\\-)[A-Za-z0-9_-]+\\b",
1262
+ "name": "variable.other.constant.quark"
1263
+ }
1264
+ ]
1265
+ },
1266
+ "at_rule_on": {
1267
+ "comment": "`@on input, change (debounce: 300, handle: save) { … }` / `@on submit (prevent-default);`: a comma list of event names (idents or strings), then the options group; the rule ends before the block so the body is highlighted as a rule body",
1268
+ "begin": "\\s*((@)(on))\\s+((?:[\\w-]+|\"[^\"]*\"|\\'[^\\']*\\')(?:\\s*,\\s*(?:[\\w-]+|\"[^\"]*\"|\\'[^\\']*\\'))*)(?:\\s*(\\((?:[^()]|\\([^()]*\\))*\\)))?",
1269
+ "beginCaptures": {
1270
+ "1": {
1271
+ "name": "keyword.control.at-rule.on.quark"
1272
+ },
1273
+ "2": {
1274
+ "name": "punctuation.definition.keyword.scss"
1275
+ },
1276
+ "4": {
1277
+ "name": "meta.at-rule.on.events.quark",
1278
+ "patterns": [
1279
+ {
1280
+ "match": "\"[^\"]*\"|\\'[^\\']*\\'",
1281
+ "name": "string.quoted.event-name.quark"
1282
+ },
1283
+ {
1284
+ "match": ",",
1285
+ "name": "punctuation.separator.delimiter.scss"
1286
+ },
1287
+ {
1288
+ "include": "#custom-attribute-name"
1289
+ },
1290
+ {
1291
+ "include": "#attribute-name"
1292
+ }
1293
+ ]
1294
+ },
1295
+ "5": {
1296
+ "name": "meta.at-rule.on.options.quark",
1297
+ "patterns": [
1298
+ {
1299
+ "include": "#at_rule_on_options"
1300
+ }
1301
+ ]
1302
+ }
1303
+ },
1304
+ "end": "\\s*(?=;|\\{|})",
1305
+ "contentName": "meta.at-rule.on.options.quark",
1306
+ "name": "meta.at-rule.on.quark",
1307
+ "patterns": [
1308
+ {
1309
+ "include": "#at_rule_on_options"
1310
+ }
1311
+ ]
1312
+ },
1313
+ "at_rule_view_transition": {
1314
+ "comment": "`@view-transition (types: \"t\", timeout: 500) { … }`: the options group (one line or wrapped) is tokenized like @on's; the rule ends before the block so the body is highlighted as a rule body",
1315
+ "begin": "\\s*((@)(view-transition))(?![\\w-])",
1316
+ "beginCaptures": {
1317
+ "1": {
1318
+ "name": "keyword.control.at-rule.view-transition.quark"
1319
+ },
1320
+ "2": {
1321
+ "name": "punctuation.definition.keyword.scss"
1322
+ }
1323
+ },
1324
+ "end": "\\s*(?=;|\\{|})",
1325
+ "contentName": "meta.at-rule.view-transition.options.quark",
1326
+ "name": "meta.at-rule.view-transition.quark",
1327
+ "patterns": [
1328
+ {
1329
+ "include": "#at_rule_on_options"
1330
+ }
1331
+ ]
1332
+ },
1333
+ "at_rule_on_options": {
1334
+ "comment": "`(target: \"li\", once, debounce: 300, handle: save)` after @on / @dispatch / @command names or @view-transition: option names as attribute names, values as property values",
1335
+ "patterns": [
1336
+ {
1337
+ "match": "[()]",
1338
+ "name": "punctuation.definition.parameters.quark"
1339
+ },
1340
+ {
1341
+ "comment": "an option name follows `(`, `,` or the start of a wrapped line; a value after `:` falls through to #property_values",
1342
+ "match": "(?:(?<=\\()|(?<=,)|^)\\s*([\\w-]+)(?=\\s*(?::|,|\\)|$))",
1343
+ "captures": {
1344
+ "1": {
1345
+ "name": "support.type.property-name.listener-option.quark"
1346
+ }
1347
+ }
1348
+ },
1349
+ {
1350
+ "match": ":",
1351
+ "name": "punctuation.separator.key-value.scss"
1352
+ },
1353
+ {
1354
+ "match": ",",
1355
+ "name": "punctuation.separator.delimiter.scss"
1356
+ },
1357
+ {
1358
+ "include": "#general"
1359
+ },
1360
+ {
1361
+ "include": "#property_values"
1362
+ }
1363
+ ]
1364
+ },
1365
+ "at_rule_delay": {
1366
+ "comment": "`@delay 2000 { … }` / `@delay $ms * 2 { … }`: the duration is an expression; the rule ends before the block so the body is highlighted as a rule body",
1367
+ "begin": "\\s*((@)(delay))(?![\\w-])",
1368
+ "beginCaptures": {
1369
+ "1": {
1370
+ "name": "keyword.control.at-rule.delay.quark"
1371
+ },
1372
+ "2": {
1373
+ "name": "punctuation.definition.keyword.scss"
1374
+ }
1375
+ },
1376
+ "end": "\\s*(?=;|\\{|})",
1377
+ "contentName": "meta.at-rule.delay.duration.quark",
1378
+ "name": "meta.at-rule.delay.quark",
1379
+ "patterns": [
1380
+ {
1381
+ "include": "#general"
1382
+ },
1383
+ {
1384
+ "include": "#property_values"
1385
+ }
1386
+ ]
1387
+ },
1388
+ "at_rule_dispatch": {
1389
+ "comment": "`@dispatch cart-add (detail: (sku: $sku), target: \"cart-view\");` / `@command --refresh (target: \"#feed\");`: statements inside @on blocks; names as attribute names (custom commands start with --), options like @on's",
1390
+ "begin": "\\s*((@)(dispatch|command))\\s+((?:[\\w-]+|\"[^\"]*\"|\\'[^\\']*\\')(?:\\s*,\\s*(?:[\\w-]+|\"[^\"]*\"|\\'[^\\']*\\'))*)(?:\\s*(\\((?:[^()]|\\([^()]*\\))*\\)))?",
1391
+ "beginCaptures": {
1392
+ "1": {
1393
+ "name": "keyword.control.at-rule.dispatch.quark"
1394
+ },
1395
+ "2": {
1396
+ "name": "punctuation.definition.keyword.scss"
1397
+ },
1398
+ "4": {
1399
+ "name": "meta.at-rule.dispatch.names.quark",
1400
+ "patterns": [
1401
+ {
1402
+ "match": "\"[^\"]*\"|\\'[^\\']*\\'",
1403
+ "name": "string.quoted.event-name.quark"
1404
+ },
1405
+ {
1406
+ "match": ",",
1407
+ "name": "punctuation.separator.delimiter.scss"
1408
+ },
1409
+ {
1410
+ "include": "#custom-attribute-name"
1411
+ },
1412
+ {
1413
+ "include": "#attribute-name"
1414
+ }
1415
+ ]
1416
+ },
1417
+ "5": {
1418
+ "name": "meta.at-rule.dispatch.options.quark",
1419
+ "patterns": [
1420
+ {
1421
+ "include": "#at_rule_on_options"
1422
+ }
1423
+ ]
1424
+ }
1425
+ },
1426
+ "end": "\\s*(?=;|\\{|})",
1427
+ "contentName": "meta.at-rule.dispatch.options.quark",
1428
+ "name": "meta.at-rule.dispatch.quark",
1429
+ "patterns": [
1430
+ {
1431
+ "include": "#at_rule_on_options"
1432
+ }
1433
+ ]
1434
+ },
1435
+ "at_rule_scope": {
1436
+ "comment": "`@scope { … }`: no prelude; the block is an ordinary rule body",
1437
+ "match": "((@)scope)(?![\\w-])",
1438
+ "captures": {
1439
+ "1": {
1440
+ "name": "keyword.control.at-rule.scope.quark"
1441
+ },
1442
+ "2": {
1443
+ "name": "punctuation.definition.keyword.scss"
1444
+ }
1445
+ },
1446
+ "name": "meta.at-rule.scope.quark"
1447
+ },
1448
+ "at_rule_unknown": {
1449
+ "comment": "every other at-rule is a parse error in Quark",
1450
+ "match": "(@)[\\w-]+",
1451
+ "name": "invalid.illegal.at-rule.quark"
1452
+ }
1453
+ }
1454
+ }