@@ -44,7 +44,8 @@ public static function parseValue(ParserState $oParserState, array $aListDelimit
4444 while (
4545 !($ oParserState ->comes ('} ' ) || $ oParserState ->comes ('; ' ) || $ oParserState ->comes ('! ' )
4646 || $ oParserState ->comes (') ' )
47- || $ oParserState ->comes ('\\' ))
47+ || $ oParserState ->comes ('\\' )
48+ || $ oParserState ->isEnd ())
4849 ) {
4950 if (count ($ aStack ) > 0 ) {
5051 $ bFoundDelimiter = false ;
@@ -105,16 +106,25 @@ public static function parseValue(ParserState $oParserState, array $aListDelimit
105106 */
106107 public static function parseIdentifierOrFunction (ParserState $ oParserState , $ bIgnoreCase = false )
107108 {
108- $ sResult = $ oParserState ->parseIdentifier ($ bIgnoreCase );
109+ $ oAnchor = $ oParserState ->anchor ();
110+ $ mResult = $ oParserState ->parseIdentifier ($ bIgnoreCase );
109111
110112 if ($ oParserState ->comes ('( ' )) {
111- $ oParserState ->consume ('( ' );
112- $ aArguments = Value::parseValue ($ oParserState , ['= ' , ' ' , ', ' ]);
113- $ sResult = new CSSFunction ($ sResult , $ aArguments , ', ' , $ oParserState ->currentLine ());
114- $ oParserState ->consume (') ' );
113+ $ oAnchor ->backtrack ();
114+ if ($ oParserState ->streql ('url ' , $ mResult )) {
115+ $ mResult = URL ::parse ($ oParserState );
116+ } elseif (
117+ $ oParserState ->streql ('calc ' , $ mResult )
118+ || $ oParserState ->streql ('-webkit-calc ' , $ mResult )
119+ || $ oParserState ->streql ('-moz-calc ' , $ mResult )
120+ ) {
121+ $ mResult = CalcFunction::parse ($ oParserState );
122+ } else {
123+ $ mResult = CSSFunction::parse ($ oParserState , $ bIgnoreCase );
124+ }
115125 }
116126
117- return $ sResult ;
127+ return $ mResult ;
118128 }
119129
120130 /**
@@ -137,13 +147,6 @@ public static function parsePrimitiveValue(ParserState $oParserState)
137147 $ oValue = Size::parse ($ oParserState );
138148 } elseif ($ oParserState ->comes ('# ' ) || $ oParserState ->comes ('rgb ' , true ) || $ oParserState ->comes ('hsl ' , true )) {
139149 $ oValue = Color::parse ($ oParserState );
140- } elseif ($ oParserState ->comes ('url ' , true )) {
141- $ oValue = URL ::parse ($ oParserState );
142- } elseif (
143- $ oParserState ->comes ('calc ' , true ) || $ oParserState ->comes ('-webkit-calc ' , true )
144- || $ oParserState ->comes ('-moz-calc ' , true )
145- ) {
146- $ oValue = CalcFunction::parse ($ oParserState );
147150 } elseif ($ oParserState ->comes ("' " ) || $ oParserState ->comes ('" ' )) {
148151 $ oValue = CSSString::parse ($ oParserState );
149152 } elseif ($ oParserState ->comes ("progid: " ) && $ oParserState ->getSettings ()->bLenientParsing ) {
0 commit comments