Automattic\WooCommerce\Vendor\Symfony\Component\CssSelector\Parser

Parser::parseAttributeNodeprivateWC 1.0

Method of the class: Parser{}

No Hooks.

Returns

null. Nothing (null).

Usage

// private - for code of main (parent) class only
$result = $this->parseAttributeNode( $selector, $stream ): Node\AttributeNode;
$selector([Node\NodeInterface]()) (required)
.
$stream(TokenStream) (required)
.

Parser::parseAttributeNode() code WC 10.4.3

private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream): Node\AttributeNode
{
    $stream->skipWhitespace();
    $attribute = $stream->getNextIdentifierOrStar();

    if (null === $attribute && !$stream->getPeek()->isDelimiter(['|'])) {
        throw SyntaxErrorException::unexpectedToken('"|"', $stream->getPeek());
    }

    if ($stream->getPeek()->isDelimiter(['|'])) {
        $stream->getNext();

        if ($stream->getPeek()->isDelimiter(['='])) {
            $namespace = null;
            $stream->getNext();
            $operator = '|=';
        } else {
            $namespace = $attribute;
            $attribute = $stream->getNextIdentifier();
            $operator = null;
        }
    } else {
        $namespace = $operator = null;
    }

    if (null === $operator) {
        $stream->skipWhitespace();
        $next = $stream->getNext();

        if ($next->isDelimiter([']'])) {
            return new Node\AttributeNode($selector, $namespace, $attribute, 'exists', null);
        } elseif ($next->isDelimiter(['='])) {
            $operator = '=';
        } elseif ($next->isDelimiter(['^', '$', '*', '~', '|', '!'])
            && $stream->getPeek()->isDelimiter(['='])
        ) {
            $operator = $next->getValue().'=';
            $stream->getNext();
        } else {
            throw SyntaxErrorException::unexpectedToken('operator', $next);
        }
    }

    $stream->skipWhitespace();
    $value = $stream->getNext();

    if ($value->isNumber()) {
        // if the value is a number, it's casted into a string
        $value = new Token(Token::TYPE_STRING, (string) $value->getValue(), $value->getPosition());
    }

    if (!($value->isIdentifier() || $value->isString())) {
        throw SyntaxErrorException::unexpectedToken('string or identifier', $value);
    }

    $stream->skipWhitespace();
    $next = $stream->getNext();

    if (!$next->isDelimiter([']'])) {
        throw SyntaxErrorException::unexpectedToken('"]"', $next);
    }

    return new Node\AttributeNode($selector, $namespace, $attribute, $operator, $value->getValue());
}