@@ -75,16 +75,25 @@ public static function parseValue(ParserState $oParserState, $aListDelimiters =
7575
7676 public static function parseIdentifierOrFunction (ParserState $ oParserState , $ bIgnoreCase = false )
7777 {
78- $ sResult = $ oParserState ->parseIdentifier ($ bIgnoreCase );
78+ $ oParserState ->setAnchor ();
79+ $ mResult = $ oParserState ->parseIdentifier ($ bIgnoreCase );
7980
8081 if ($ oParserState ->comes ('( ' )) {
81- $ oParserState ->consume ('( ' );
82- $ aArguments = Value::parseValue ($ oParserState , ['= ' , ' ' , ', ' ]);
83- $ sResult = new CSSFunction ($ sResult , $ aArguments , ', ' , $ oParserState ->currentLine ());
84- $ oParserState ->consume (') ' );
82+ if ($ oParserState ->streql ('url ' , $ mResult )) {
83+ $ oParserState ->backtrackToAnchor ();
84+ $ mResult = URL ::parse ($ oParserState );
85+ } else if ($ oParserState ->streql ('calc ' , $ mResult ) || $ oParserState ->streql ('-webkit-calc ' , $ mResult ) || $ oParserState ->streql ('-moz-calc ' , $ mResult )) {
86+ $ oParserState ->backtrackToAnchor ();
87+ $ mResult = CalcFunction::parse ($ oParserState );
88+ } else {
89+ $ oParserState ->consume ('( ' );
90+ $ aArguments = Value::parseValue ($ oParserState , array ('= ' , ' ' , ', ' ));
91+ $ mResult = new CSSFunction ($ mResult , $ aArguments , ', ' , $ oParserState ->currentLine ());
92+ $ oParserState ->consume (') ' );
93+ }
8594 }
8695
87- return $ sResult ;
96+ return $ mResult ;
8897 }
8998
9099 public static function parsePrimitiveValue (ParserState $ oParserState )
@@ -98,13 +107,6 @@ public static function parsePrimitiveValue(ParserState $oParserState)
98107 $ oValue = Size::parse ($ oParserState );
99108 } elseif ($ oParserState ->comes ('# ' ) || $ oParserState ->comes ('rgb ' , true ) || $ oParserState ->comes ('hsl ' , true )) {
100109 $ oValue = Color::parse ($ oParserState );
101- } elseif ($ oParserState ->comes ('url ' , true )) {
102- $ oValue = URL ::parse ($ oParserState );
103- } elseif (
104- $ oParserState ->comes ('calc ' , true ) || $ oParserState ->comes ('-webkit-calc ' , true )
105- || $ oParserState ->comes ('-moz-calc ' , true )
106- ) {
107- $ oValue = CalcFunction::parse ($ oParserState );
108110 } elseif ($ oParserState ->comes ("' " ) || $ oParserState ->comes ('" ' )) {
109111 $ oValue = CSSString::parse ($ oParserState );
110112 } elseif ($ oParserState ->comes ("progid: " ) && $ oParserState ->getSettings ()->bLenientParsing ) {
0 commit comments