@@ -63,16 +63,25 @@ public static function parseValue(ParserState $oParserState, $aListDelimiters =
6363 }
6464
6565 public static function parseIdentifierOrFunction (ParserState $ oParserState , $ bIgnoreCase = false ) {
66- $ sResult = $ oParserState ->parseIdentifier ($ bIgnoreCase );
66+ $ oParserState ->setAnchor ();
67+ $ mResult = $ oParserState ->parseIdentifier ($ bIgnoreCase );
6768
6869 if ($ oParserState ->comes ('( ' )) {
69- $ oParserState ->consume ('( ' );
70- $ aArguments = Value::parseValue ($ oParserState , array ('= ' , ' ' , ', ' ));
71- $ sResult = new CSSFunction ($ sResult , $ aArguments , ', ' , $ oParserState ->currentLine ());
72- $ oParserState ->consume (') ' );
70+ if ($ oParserState ->streql ('url ' , $ mResult )) {
71+ $ oParserState ->backtrackToAnchor ();
72+ $ mResult = URL ::parse ($ oParserState );
73+ } else if ($ oParserState ->streql ('calc ' , $ mResult ) || $ oParserState ->streql ('-webkit-calc ' , $ mResult ) || $ oParserState ->streql ('-moz-calc ' , $ mResult )) {
74+ $ oParserState ->backtrackToAnchor ();
75+ $ mResult = CalcFunction::parse ($ oParserState );
76+ } else {
77+ $ oParserState ->consume ('( ' );
78+ $ aArguments = Value::parseValue ($ oParserState , array ('= ' , ' ' , ', ' ));
79+ $ mResult = new CSSFunction ($ mResult , $ aArguments , ', ' , $ oParserState ->currentLine ());
80+ $ oParserState ->consume (') ' );
81+ }
7382 }
7483
75- return $ sResult ;
84+ return $ mResult ;
7685 }
7786
7887 public static function parsePrimitiveValue (ParserState $ oParserState ) {
@@ -82,10 +91,6 @@ public static function parsePrimitiveValue(ParserState $oParserState) {
8291 $ oValue = Size::parse ($ oParserState );
8392 } else if ($ oParserState ->comes ('# ' ) || $ oParserState ->comes ('rgb ' , true ) || $ oParserState ->comes ('hsl ' , true )) {
8493 $ oValue = Color::parse ($ oParserState );
85- } else if ($ oParserState ->comes ('url ' , true )) {
86- $ oValue = URL ::parse ($ oParserState );
87- } else if ($ oParserState ->comes ('calc ' , true ) || $ oParserState ->comes ('-webkit-calc ' , true ) || $ oParserState ->comes ('-moz-calc ' , true )) {
88- $ oValue = CalcFunction::parse ($ oParserState );
8994 } else if ($ oParserState ->comes ("' " ) || $ oParserState ->comes ('" ' )) {
9095 $ oValue = CSSString::parse ($ oParserState );
9196 } else if ($ oParserState ->comes ("progid: " ) && $ oParserState ->getSettings ()->bLenientParsing ) {
0 commit comments