mirror of
https://github.com/linuxserver/Heimdall.git
synced 2025-12-10 08:53:57 +09:00
Updates to vendors etc
This commit is contained in:
44
vendor/symfony/css-selector/Parser/Parser.php
vendored
44
vendor/symfony/css-selector/Parser/Parser.php
vendored
@@ -87,13 +87,17 @@ class Parser implements ParserInterface
|
||||
];
|
||||
}
|
||||
|
||||
private function parseSelectorList(TokenStream $stream): array
|
||||
private function parseSelectorList(TokenStream $stream, bool $isArgument = false): array
|
||||
{
|
||||
$stream->skipWhitespace();
|
||||
$selectors = [];
|
||||
|
||||
while (true) {
|
||||
$selectors[] = $this->parserSelectorNode($stream);
|
||||
if ($isArgument && $stream->getPeek()->isDelimiter([')'])) {
|
||||
break;
|
||||
}
|
||||
|
||||
$selectors[] = $this->parserSelectorNode($stream, $isArgument);
|
||||
|
||||
if ($stream->getPeek()->isDelimiter([','])) {
|
||||
$stream->getNext();
|
||||
@@ -106,15 +110,19 @@ class Parser implements ParserInterface
|
||||
return $selectors;
|
||||
}
|
||||
|
||||
private function parserSelectorNode(TokenStream $stream): Node\SelectorNode
|
||||
private function parserSelectorNode(TokenStream $stream, bool $isArgument = false): Node\SelectorNode
|
||||
{
|
||||
[$result, $pseudoElement] = $this->parseSimpleSelector($stream);
|
||||
[$result, $pseudoElement] = $this->parseSimpleSelector($stream, false, $isArgument);
|
||||
|
||||
while (true) {
|
||||
$stream->skipWhitespace();
|
||||
$peek = $stream->getPeek();
|
||||
|
||||
if ($peek->isFileEnd() || $peek->isDelimiter([','])) {
|
||||
if (
|
||||
$peek->isFileEnd()
|
||||
|| $peek->isDelimiter([','])
|
||||
|| ($isArgument && $peek->isDelimiter([')']))
|
||||
) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -129,7 +137,7 @@ class Parser implements ParserInterface
|
||||
$combinator = ' ';
|
||||
}
|
||||
|
||||
[$nextSelector, $pseudoElement] = $this->parseSimpleSelector($stream);
|
||||
[$nextSelector, $pseudoElement] = $this->parseSimpleSelector($stream, false, $isArgument);
|
||||
$result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector);
|
||||
}
|
||||
|
||||
@@ -141,7 +149,7 @@ class Parser implements ParserInterface
|
||||
*
|
||||
* @throws SyntaxErrorException
|
||||
*/
|
||||
private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = false): array
|
||||
private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = false, bool $isArgument = false): array
|
||||
{
|
||||
$stream->skipWhitespace();
|
||||
|
||||
@@ -154,7 +162,7 @@ class Parser implements ParserInterface
|
||||
if ($peek->isWhitespace()
|
||||
|| $peek->isFileEnd()
|
||||
|| $peek->isDelimiter([',', '+', '>', '~'])
|
||||
|| ($insideNegation && $peek->isDelimiter([')']))
|
||||
|| ($isArgument && $peek->isDelimiter([')']))
|
||||
) {
|
||||
break;
|
||||
}
|
||||
@@ -215,7 +223,7 @@ class Parser implements ParserInterface
|
||||
throw SyntaxErrorException::nestedNot();
|
||||
}
|
||||
|
||||
[$argument, $argumentPseudoElement] = $this->parseSimpleSelector($stream, true);
|
||||
[$argument, $argumentPseudoElement] = $this->parseSimpleSelector($stream, true, true);
|
||||
$next = $stream->getNext();
|
||||
|
||||
if (null !== $argumentPseudoElement) {
|
||||
@@ -227,6 +235,24 @@ class Parser implements ParserInterface
|
||||
}
|
||||
|
||||
$result = new Node\NegationNode($result, $argument);
|
||||
} elseif ('is' === strtolower($identifier)) {
|
||||
$selectors = $this->parseSelectorList($stream, true);
|
||||
|
||||
$next = $stream->getNext();
|
||||
if (!$next->isDelimiter([')'])) {
|
||||
throw SyntaxErrorException::unexpectedToken('")"', $next);
|
||||
}
|
||||
|
||||
$result = new Node\MatchingNode($result, $selectors);
|
||||
} elseif ('where' === strtolower($identifier)) {
|
||||
$selectors = $this->parseSelectorList($stream, true);
|
||||
|
||||
$next = $stream->getNext();
|
||||
if (!$next->isDelimiter([')'])) {
|
||||
throw SyntaxErrorException::unexpectedToken('")"', $next);
|
||||
}
|
||||
|
||||
$result = new Node\SpecificityAdjustmentNode($result, $selectors);
|
||||
} else {
|
||||
$arguments = [];
|
||||
$next = null;
|
||||
|
||||
Reference in New Issue
Block a user