@@ -37,20 +37,36 @@ public static function parse(ParserState $oParserState, $bIsColorComponent = fal
3737 }
3838 }
3939
40- $ sUnit = null ;
41- $ aSizeUnits = self ::getSizeUnits ();
42- $ sUnit = strtolower ($ oParserState ->parseIdentifier ());
43- $ oParserState ->backtrack (strlen ($ sUnit ));
40+ $ sParsedUnit = '' ;
41+ $ iOffset = 0 ;
42+ while (true ) {
43+ $ sChar = $ oParserState ->peek (1 , $ iOffset );
44+ $ iPeek = ord ($ sChar );
45+
46+ // Ranges: a-z A-Z 0-9 %
47+ if (($ iPeek >= 97 && $ iPeek <= 122 ) ||
48+ ($ iPeek >= 65 && $ iPeek <= 90 ) ||
49+ ($ iPeek >= 48 && $ iPeek <= 57 ) ||
50+ ($ iPeek === 37 )) {
51+ $ sParsedUnit .= $ sChar ;
52+ $ iOffset ++;
53+ } else {
54+ break ;
55+ }
56+ }
57+
58+ $ sUnit = null ;
59+ $ aSizeUnits = self ::getSizeUnits ();
4460
4561 foreach ($ aSizeUnits as $ iLength => $ aValues ) {
4662 $ iConsumeLength = $ iLength ;
4763 $ sKey = strtolower ($ oParserState ->peek ($ iLength ));
4864 if (array_key_exists ($ sKey , $ aValues )) {
49- if ($ sUnit !== $ sKey ) {
65+ if (strtolower ( $ sParsedUnit ) !== $ sKey ) {
5066 if (!$ oParserState ->getSettings ()->bLenientParsing ) {
51- throw new UnexpectedTokenException ('Unit ' , $ sUnit , 'identifier ' , $ oParserState ->currentLine ());
67+ throw new UnexpectedTokenException ('Unit ' , $ sParsedUnit , 'identifier ' , $ oParserState ->currentLine ());
5268 }
53- $ iConsumeLength = strlen ($ sUnit );
69+ $ iConsumeLength = strlen ($ sParsedUnit );
5470 }
5571 if (($ sUnit = $ aValues [$ sKey ]) !== null ) {
5672 $ oParserState ->consume ($ iConsumeLength );
0 commit comments