Skip to content

Commit 134f4e6

Browse files
committed
Improved selector parsing + better handling for '}'
1 parent 4ea4fd6 commit 134f4e6

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

lib/Sabberworm/CSS/CSSList/CSSList.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,18 @@ private static function parseListItem(ParserState $oParserState, CSSList $oList)
8383
}
8484
return $oAtRule;
8585
} else if ($oParserState->comes('}')) {
86-
if ($bIsRoot) {
87-
if ($oParserState->getSettings()->bLenientParsing) {
88-
return DeclarationBlock::parse($oParserState);
86+
if (!$oParserState->getSettings()->bLenientParsing) {
87+
throw new UnexpectedTokenException('CSS selector', '}', 'identifier', $oParserState->currentLine());
88+
} else {
89+
if ($bIsRoot) {
90+
if ($oParserState->getSettings()->bLenientParsing) {
91+
return DeclarationBlock::parse($oParserState);
92+
} else {
93+
throw new SourceException("Unopened {", $oParserState->currentLine());
94+
}
8995
} else {
90-
throw new SourceException("Unopened {", $oParserState->currentLine());
96+
return null;
9197
}
92-
} else {
93-
return null;
9498
}
9599
} else {
96100
return DeclarationBlock::parse($oParserState);

lib/Sabberworm/CSS/RuleSet/DeclarationBlock.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ public static function parse(ParserState $oParserState) {
3030
$aComments = array();
3131
$oResult = new DeclarationBlock($oParserState->currentLine());
3232
try {
33-
$oResult->setSelector($oParserState->consumeUntil('{', false, true, $aComments));
33+
$oResult->setSelector($oParserState->consume(1) . $oParserState->consumeUntil(array('{', '}'), false, false, $aComments));
34+
if ($oParserState->comes('{')) {
35+
$oParserState->consume(1);
36+
}
3437
} catch (UnexpectedTokenException $e) {
3538
if($oParserState->getSettings()->bLenientParsing) {
36-
$oParserState->consumeUntil('}', false, true);
39+
if(!$oParserState->comes('}')) {
40+
$oParserState->consumeUntil('}', false, true);
41+
}
3742
return false;
3843
} else {
3944
throw $e;

0 commit comments

Comments
 (0)