@@ -57,13 +57,18 @@ public static function parse(ParserState $oParserState, $oList = null)
57
57
$ aComments = [];
58
58
$ oResult = new DeclarationBlock ($ oParserState ->currentLine ());
59
59
try {
60
+ $ selectors = [];
60
61
$ selectorParts = [];
61
62
$ stringWrapperCharacter = null ;
62
- static $ stopCharacters = ['{ ' , '} ' , '\'' , '" ' ];
63
+ $ consumedNextCharacter = false ;
64
+ static $ stopCharacters = ['{ ' , '} ' , '\'' , '" ' , ', ' ];
63
65
do {
64
- $ selectorParts [] = $ oParserState ->consume (1 )
65
- . $ oParserState ->consumeUntil ($ stopCharacters , false , false , $ aComments );
66
+ if (!$ consumedNextCharacter ) {
67
+ $ selectorParts [] = $ oParserState ->consume (1 );
68
+ }
69
+ $ selectorParts [] = $ oParserState ->consumeUntil ($ stopCharacters , false , false , $ aComments );
66
70
$ nextCharacter = $ oParserState ->peek ();
71
+ $ consumedNextCharacter = false ;
67
72
switch ($ nextCharacter ) {
68
73
case '\'' :
69
74
// The fallthrough is intentional.
@@ -76,11 +81,20 @@ public static function parse(ParserState $oParserState, $oList = null)
76
81
}
77
82
}
78
83
break ;
84
+ case ', ' :
85
+ if (!\is_string ($ stringWrapperCharacter )) {
86
+ $ selectors [] = \implode ('' , $ selectorParts );
87
+ $ selectorParts = [];
88
+ $ oParserState ->consume (1 );
89
+ $ consumedNextCharacter = true ;
90
+ }
91
+ break ;
79
92
}
80
93
} while (!\in_array ($ nextCharacter , ['{ ' , '} ' ], true ) || \is_string ($ stringWrapperCharacter ));
81
- $ oResult ->setSelectors (\implode ('' , $ selectorParts ), $ oList );
94
+ $ selectors [] = \implode ('' , $ selectorParts ); // add final or only selector
95
+ $ oResult ->setSelectors ($ selectors , $ oList );
82
96
if ($ oParserState ->comes ('{ ' )) {
83
- $ oParserState ->consume (1 );
97
+ $ oPparserState ->consume (1 );
84
98
}
85
99
} catch (UnexpectedTokenException $ e ) {
86
100
if ($ oParserState ->getSettings ()->bLenientParsing ) {
0 commit comments