@@ -57,13 +57,18 @@ public static function parse(ParserState $oParserState, $oList = null)
5757 $ aComments = [];
5858 $ oResult = new DeclarationBlock ($ oParserState ->currentLine ());
5959 try {
60+ $ selectors = [];
6061 $ selectorParts = [];
6162 $ stringWrapperCharacter = null ;
62- static $ stopCharacters = ['{ ' , '} ' , '\'' , '" ' ];
63+ $ consumedNextCharacter = false ;
64+ static $ stopCharacters = ['{ ' , '} ' , '\'' , '" ' , ', ' ];
6365 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 );
6670 $ nextCharacter = $ oParserState ->peek ();
71+ $ consumedNextCharacter = false ;
6772 switch ($ nextCharacter ) {
6873 case '\'' :
6974 // The fallthrough is intentional.
@@ -76,11 +81,20 @@ public static function parse(ParserState $oParserState, $oList = null)
7681 }
7782 }
7883 break ;
84+ case ', ' :
85+ if (!\is_string ($ stringWrapperCharacter )) {
86+ $ selectors [] = \implode ('' , $ selectorParts );
87+ $ selectorParts = [];
88+ $ oParserState ->consume (1 );
89+ $ consumedNextCharacter = true ;
90+ }
91+ break ;
7992 }
8093 } 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 );
8296 if ($ oParserState ->comes ('{ ' )) {
83- $ oParserState ->consume (1 );
97+ $ oPparserState ->consume (1 );
8498 }
8599 } catch (UnexpectedTokenException $ e ) {
86100 if ($ oParserState ->getSettings ()->bLenientParsing ) {
0 commit comments