@@ -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);
0 commit comments