Skip to content

Commit 81b92ef

Browse files
committed
Fix parsing unit
1 parent d9a7d90 commit 81b92ef

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

lib/Sabberworm/CSS/Value/Size.php

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)