Skip to content

Commit 69ee437

Browse files
committed
Represent backslash escape mechanic in syntaxes
1 parent 7d720b5 commit 69ee437

File tree

4 files changed

+143
-74
lines changed

4 files changed

+143
-74
lines changed

Package/CSScheme.YAML-tmLanguage

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,35 +38,42 @@ repository:
3838

3939
selector:
4040
name: meta.selector.csscheme
41-
begin: \s*(?=[*a-zA-Z()-])
41+
begin: (?=[*a-zA-Z()\\-])
4242
end: \s*(?=\{)
4343
patterns:
4444
- include: '#comment-block'
4545
- include: '#selector-patterns'
4646

4747
selector-patterns:
48+
# all backslash-escape variants are for the SASS pre-processor
4849
patterns:
49-
- name: keyword.operator.subtraction.csscheme
50-
match: (?<![\w_-])(-|'-'|\\-) # '-' and \\- are escapes for the SASS pre-processor
50+
- include: '#selector-operators'
5151
- name: constant.language.wildcard.csscheme # our special "settings" selector
5252
match: \*
53+
- name: meta.scope-token.csscheme
54+
match: '[\w_.-]+' # technically, more characters are supported but nowhere used
55+
- name: constant.character.escape.csscheme
56+
match: '\\.'
57+
- name: invalid.illegal.selector.csscheme
58+
match: '.'
59+
60+
selector-operators:
61+
patterns:
62+
- name: keyword.operator.subtraction.csscheme
63+
match: -|'-'|\\- # '-' is an escape for the SASS pre-processor
5364
- name: keyword.operator.intersection.csscheme
54-
match: '&'
65+
match: '&|\\&'
5566
- name: keyword.operator.union.csscheme
56-
match: ',|\|'
67+
match: ',|\||\\\|'
5768
- name: keyword.operator.nesting.csscheme
5869
match: \s
59-
- begin: \(
60-
end: \)
70+
- begin: \(|\\\(
71+
end: \)|\\\)
6172
captures:
62-
'0': {name: punctuation.section.group.csscheme}
73+
'0': {name: keyword.operator.group.csscheme}
6374
name: meta.group.csscheme
6475
patterns:
6576
- include: '#selector-patterns'
66-
- name: meta.scope-token.csscheme
67-
match: '[\w_.-]+' # technically, more characters are supported but nowhere used
68-
- name: invalid.illegal.selector.csscheme
69-
match: '.'
7077

7178
ruleset:
7279
name: meta.ruleset.csscheme

Package/CSScheme.tmLanguage

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@
353353
<key>selector</key>
354354
<dict>
355355
<key>begin</key>
356-
<string>\s*(?=[*a-zA-Z()-])</string>
356+
<string>(?=[*a-zA-Z()\\-])</string>
357357
<key>end</key>
358358
<string>\s*(?=\{)</string>
359359
<key>name</key>
@@ -370,31 +370,25 @@
370370
</dict>
371371
</array>
372372
</dict>
373-
<key>selector-patterns</key>
373+
<key>selector-operators</key>
374374
<dict>
375375
<key>patterns</key>
376376
<array>
377377
<dict>
378378
<key>match</key>
379-
<string>(?&lt;![\w_-])(-|'-'|\\-)</string>
379+
<string>-|'-'|\\-</string>
380380
<key>name</key>
381381
<string>keyword.operator.subtraction.csscheme</string>
382382
</dict>
383383
<dict>
384384
<key>match</key>
385-
<string>\*</string>
386-
<key>name</key>
387-
<string>constant.language.wildcard.csscheme</string>
388-
</dict>
389-
<dict>
390-
<key>match</key>
391-
<string>&amp;</string>
385+
<string>&amp;|\\&amp;</string>
392386
<key>name</key>
393387
<string>keyword.operator.intersection.csscheme</string>
394388
</dict>
395389
<dict>
396390
<key>match</key>
397-
<string>,|\|</string>
391+
<string>,|\||\\\|</string>
398392
<key>name</key>
399393
<string>keyword.operator.union.csscheme</string>
400394
</dict>
@@ -406,17 +400,17 @@
406400
</dict>
407401
<dict>
408402
<key>begin</key>
409-
<string>\(</string>
403+
<string>\(|\\\(</string>
410404
<key>captures</key>
411405
<dict>
412406
<key>0</key>
413407
<dict>
414408
<key>name</key>
415-
<string>punctuation.section.group.csscheme</string>
409+
<string>keyword.operator.group.csscheme</string>
416410
</dict>
417411
</dict>
418412
<key>end</key>
419-
<string>\)</string>
413+
<string>\)|\\\)</string>
420414
<key>name</key>
421415
<string>meta.group.csscheme</string>
422416
<key>patterns</key>
@@ -427,12 +421,34 @@
427421
</dict>
428422
</array>
429423
</dict>
424+
</array>
425+
</dict>
426+
<key>selector-patterns</key>
427+
<dict>
428+
<key>patterns</key>
429+
<array>
430+
<dict>
431+
<key>include</key>
432+
<string>#selector-operators</string>
433+
</dict>
434+
<dict>
435+
<key>match</key>
436+
<string>\*</string>
437+
<key>name</key>
438+
<string>constant.language.wildcard.csscheme</string>
439+
</dict>
430440
<dict>
431441
<key>match</key>
432442
<string>[\w_.-]+</string>
433443
<key>name</key>
434444
<string>meta.scope-token.csscheme</string>
435445
</dict>
446+
<dict>
447+
<key>match</key>
448+
<string>\\.</string>
449+
<key>name</key>
450+
<string>constant.character.escape.csscheme</string>
451+
</dict>
436452
<dict>
437453
<key>match</key>
438454
<string>.</string>

Package/SCSScheme.YAML-tmLanguage

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ repository:
233233

234234
selector:
235235
name: meta.selector.csscheme
236-
begin: (?=[a-zA-Z()*&%-])
236+
begin: (?=[a-zA-Z()*&%\\-])
237237
end: (?=[{};!]) # ! for "!optional" in @extend
238238
patterns:
239239
- include: '#selector_patterns'
@@ -242,25 +242,36 @@ repository:
242242
patterns:
243243
- include: '#comment'
244244
- include: '#selector_placeholder'
245-
- include: '#selector_subtract'
246245
- include: '#interpolation'
247-
- name: constant.language.wildcard.csscheme
248-
match: \*
249246
- name: variable.other.reference.csscheme
250247
match: '&'
251-
- name: punctuation.separator.selector.csscheme
252-
match: ','
248+
- include: '#selector_operators'
249+
- name: constant.language.wildcard.csscheme # our special "settings" selector
250+
match: \*
251+
- name: meta.scope-token.csscheme
252+
match: '[\w_.-]+' # technically, more characters are supported but nowhere used
253+
- name: constant.character.escape.csscheme
254+
match: '\\.'
253255
- name: invalid.illegal.selector.csscheme
254-
match: '[^\s\w*.-]|(?<=\s)-(?=\s)' # highlight wrong use of -
255-
256-
selector_subtract:
257-
name: meta.selector.subtract.csscheme
258-
begin: (?<!\w)(?:'-'|\\-) # '-' is from an old version of sass
259-
beginCaptures:
260-
'0': {name: keyword.control.selector.subtract.csscheme}
261-
end: (?=[{,%])
262-
patterns:
263-
- include: '#selector_patterns'
256+
match: '.'
257+
258+
selector_operators:
259+
patterns:
260+
- name: keyword.operator.subtraction.csscheme
261+
match: -|'-'|\\- # '-' and \\- are escapes for the SASS pre-processor
262+
- name: keyword.operator.intersection.csscheme
263+
match: '\\&'
264+
- name: keyword.operator.union.csscheme
265+
match: ',|\\\|'
266+
- name: keyword.operator.nesting.csscheme
267+
match: \s
268+
- begin: \\\(
269+
end: \\\)
270+
captures:
271+
'0': {name: keyword.operator.group.csscheme}
272+
name: meta.group.csscheme
273+
patterns:
274+
- include: '#selector_patterns'
264275

265276
selector_placeholder:
266277
name: entity.other.attribute-name.placeholder.csscheme

Package/SCSScheme.tmLanguage

Lines changed: 67 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@
12391239
<key>selector</key>
12401240
<dict>
12411241
<key>begin</key>
1242-
<string>(?=[a-zA-Z()*&amp;%-])</string>
1242+
<string>(?=[a-zA-Z()*&amp;%\\-])</string>
12431243
<key>end</key>
12441244
<string>(?=[{};!])</string>
12451245
<key>name</key>
@@ -1252,6 +1252,59 @@
12521252
</dict>
12531253
</array>
12541254
</dict>
1255+
<key>selector_operators</key>
1256+
<dict>
1257+
<key>patterns</key>
1258+
<array>
1259+
<dict>
1260+
<key>match</key>
1261+
<string>-|'-'|\\-</string>
1262+
<key>name</key>
1263+
<string>keyword.operator.subtraction.csscheme</string>
1264+
</dict>
1265+
<dict>
1266+
<key>match</key>
1267+
<string>\\&amp;</string>
1268+
<key>name</key>
1269+
<string>keyword.operator.intersection.csscheme</string>
1270+
</dict>
1271+
<dict>
1272+
<key>match</key>
1273+
<string>,|\\\|</string>
1274+
<key>name</key>
1275+
<string>keyword.operator.union.csscheme</string>
1276+
</dict>
1277+
<dict>
1278+
<key>match</key>
1279+
<string>\s</string>
1280+
<key>name</key>
1281+
<string>keyword.operator.nesting.csscheme</string>
1282+
</dict>
1283+
<dict>
1284+
<key>begin</key>
1285+
<string>\\\(</string>
1286+
<key>captures</key>
1287+
<dict>
1288+
<key>0</key>
1289+
<dict>
1290+
<key>name</key>
1291+
<string>keyword.operator.group.csscheme</string>
1292+
</dict>
1293+
</dict>
1294+
<key>end</key>
1295+
<string>\\\)</string>
1296+
<key>name</key>
1297+
<string>meta.group.csscheme</string>
1298+
<key>patterns</key>
1299+
<array>
1300+
<dict>
1301+
<key>include</key>
1302+
<string>#selector_patterns</string>
1303+
</dict>
1304+
</array>
1305+
</dict>
1306+
</array>
1307+
</dict>
12551308
<key>selector_patterns</key>
12561309
<dict>
12571310
<key>patterns</key>
@@ -1266,11 +1319,17 @@
12661319
</dict>
12671320
<dict>
12681321
<key>include</key>
1269-
<string>#selector_subtract</string>
1322+
<string>#interpolation</string>
1323+
</dict>
1324+
<dict>
1325+
<key>match</key>
1326+
<string>&amp;</string>
1327+
<key>name</key>
1328+
<string>variable.other.reference.csscheme</string>
12701329
</dict>
12711330
<dict>
12721331
<key>include</key>
1273-
<string>#interpolation</string>
1332+
<string>#selector_operators</string>
12741333
</dict>
12751334
<dict>
12761335
<key>match</key>
@@ -1280,19 +1339,19 @@
12801339
</dict>
12811340
<dict>
12821341
<key>match</key>
1283-
<string>&amp;</string>
1342+
<string>[\w_.-]+</string>
12841343
<key>name</key>
1285-
<string>variable.other.reference.csscheme</string>
1344+
<string>meta.scope-token.csscheme</string>
12861345
</dict>
12871346
<dict>
12881347
<key>match</key>
1289-
<string>,</string>
1348+
<string>\\.</string>
12901349
<key>name</key>
1291-
<string>punctuation.separator.selector.csscheme</string>
1350+
<string>constant.character.escape.csscheme</string>
12921351
</dict>
12931352
<dict>
12941353
<key>match</key>
1295-
<string>[^\s\w*.-]|(?&lt;=\s)-(?=\s)</string>
1354+
<string>.</string>
12961355
<key>name</key>
12971356
<string>invalid.illegal.selector.csscheme</string>
12981357
</dict>
@@ -1313,30 +1372,6 @@
13131372
<key>name</key>
13141373
<string>entity.other.attribute-name.placeholder.csscheme</string>
13151374
</dict>
1316-
<key>selector_subtract</key>
1317-
<dict>
1318-
<key>begin</key>
1319-
<string>(?&lt;!\w)(?:'-'|\\-)</string>
1320-
<key>beginCaptures</key>
1321-
<dict>
1322-
<key>0</key>
1323-
<dict>
1324-
<key>name</key>
1325-
<string>keyword.control.selector.subtract.csscheme</string>
1326-
</dict>
1327-
</dict>
1328-
<key>end</key>
1329-
<string>(?=[{,%])</string>
1330-
<key>name</key>
1331-
<string>meta.selector.subtract.csscheme</string>
1332-
<key>patterns</key>
1333-
<array>
1334-
<dict>
1335-
<key>include</key>
1336-
<string>#selector_patterns</string>
1337-
</dict>
1338-
</array>
1339-
</dict>
13401375
<key>string_double</key>
13411376
<dict>
13421377
<key>begin</key>

0 commit comments

Comments
 (0)