Skip to content

Commit affa1ed

Browse files
committed
Add css_identifier prelexer (can be prefixed by hyphens)
1 parent 8c14917 commit affa1ed

File tree

3 files changed

+61
-20
lines changed

3 files changed

+61
-20
lines changed

src/parser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2160,7 +2160,7 @@ namespace Sass {
21602160
// main selector match
21612161
sequence <
21622162
// allow namespace prefix
2163-
optional < namespace_prefix >,
2163+
optional < namespace_schema >,
21642164
// modifiers prefixes
21652165
alternatives <
21662166
sequence <

src/prelexer.cpp

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -245,23 +245,11 @@ namespace Sass {
245245
exactly <'/'>,
246246
optional <
247247
sequence <
248-
zero_plus <
249-
exactly <'-'>
250-
>,
251-
alternatives <
252-
identifier,
253-
interpolant
254-
>,
248+
css_ip_identifier,
255249
exactly <'|'>
256250
>
257251
>,
258-
zero_plus <
259-
exactly <'-'>
260-
>,
261-
alternatives <
262-
identifier,
263-
interpolant
264-
>,
252+
css_ip_identifier,
265253
exactly <'/'>
266254
> (src);
267255
}
@@ -388,19 +376,67 @@ namespace Sass {
388376
return word<null_kwd>(src);
389377
}
390378

379+
const char* css_identifier(const char* src) {
380+
return sequence <
381+
zero_plus <
382+
exactly <'-'>
383+
>,
384+
identifier
385+
>(src);
386+
}
387+
388+
const char* css_ip_identifier(const char* src) {
389+
return sequence <
390+
zero_plus <
391+
exactly <'-'>
392+
>,
393+
alternatives <
394+
identifier,
395+
interpolant
396+
>
397+
>(src);
398+
}
399+
391400
// Match CSS type selectors
392401
const char* namespace_prefix(const char* src) {
393-
return sequence< optional< alternatives< identifier, exactly<'*'> > >,
394-
exactly<'|'>, negate<exactly<'='>> >(src);
402+
return sequence <
403+
optional <
404+
alternatives <
405+
exactly <'*'>,
406+
css_identifier
407+
>
408+
>,
409+
exactly <'|'>,
410+
negate <
411+
exactly <'='>
412+
>
413+
>(src);
395414
}
415+
416+
// Match CSS type selectors
417+
const char* namespace_schema(const char* src) {
418+
return sequence <
419+
optional <
420+
alternatives <
421+
exactly <'*'>,
422+
css_ip_identifier
423+
>
424+
>,
425+
exactly<'|'>,
426+
negate <
427+
exactly <'='>
428+
>
429+
>(src);
430+
}
431+
396432
const char* hyphens_and_identifier(const char* src) {
397433
return sequence< zero_plus< exactly< '-' > >, identifier >(src);
398434
}
399435
const char* hyphens_and_name(const char* src) {
400436
return sequence< zero_plus< exactly< '-' > >, name >(src);
401437
}
402438
const char* universal(const char* src) {
403-
return sequence< optional<namespace_prefix>, exactly<'*'> >(src);
439+
return sequence< optional<namespace_schema>, exactly<'*'> >(src);
404440
}
405441
// Match CSS id names.
406442
const char* id_name(const char* src) {
@@ -412,7 +448,7 @@ namespace Sass {
412448
}
413449
// Attribute name in an attribute selector.
414450
const char* attribute_name(const char* src) {
415-
return alternatives< sequence< optional<namespace_prefix>, identifier>,
451+
return alternatives< sequence< optional<namespace_schema>, identifier>,
416452
identifier >(src);
417453
}
418454
// match placeholder selectors
@@ -879,7 +915,7 @@ namespace Sass {
879915
}
880916

881917
const char* type_selector(const char* src) {
882-
return sequence< optional<namespace_prefix>, identifier>(src);
918+
return sequence< optional<namespace_schema>, identifier>(src);
883919
}
884920
const char* re_type_selector(const char* src) {
885921
return alternatives< type_selector, universal, quoted_string, dimension, percentage, number, identifier_alnums >(src);

src/prelexer.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,12 @@ namespace Sass {
254254
const char* re_type_selector(const char* src);
255255
const char* re_static_expression(const char* src);
256256

257+
// identifier that can start with hyphens
258+
const char* css_identifier(const char* src);
259+
const char* css_ip_identifier(const char* src);
260+
257261
// Match CSS type selectors
262+
const char* namespace_schema(const char* src);
258263
const char* namespace_prefix(const char* src);
259264
const char* type_selector(const char* src);
260265
const char* hyphens_and_identifier(const char* src);

0 commit comments

Comments
 (0)