Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. TokenStream.php

class TokenStream

Same name in this branch
  1. 11.1.x vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php \PhpParser\Internal\TokenStream
  2. 11.1.x vendor/twig/twig/src/TokenStream.php \Twig\TokenStream

CSS selector token stream.

This component is a port of the Python cssselect library, which is copyright Ian Bicking, @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>

@internal

Hierarchy

  • class \Symfony\Component\CssSelector\Parser\TokenStream

Expanded class hierarchy of TokenStream

See also

https://github.com/SimonSapin/cssselect.

8 files declare their use of TokenStream
CommentHandler.php in vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
HandlerInterface.php in vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
HashHandler.php in vendor/symfony/css-selector/Parser/Handler/HashHandler.php
IdentifierHandler.php in vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
NumberHandler.php in vendor/symfony/css-selector/Parser/Handler/NumberHandler.php

... See full list

File

vendor/symfony/css-selector/Parser/TokenStream.php, line 27

Namespace

Symfony\Component\CssSelector\Parser
View source
class TokenStream {
    
    /**
     * @var Token[]
     */
    private array $tokens = [];
    
    /**
     * @var Token[]
     */
    private array $used = [];
    private int $cursor = 0;
    private ?Token $peeked;
    private bool $peeking = false;
    
    /**
     * Pushes a token.
     *
     * @return $this
     */
    public function push(Token $token) : static {
        $this->tokens[] = $token;
        return $this;
    }
    
    /**
     * Freezes stream.
     *
     * @return $this
     */
    public function freeze() : static {
        return $this;
    }
    
    /**
     * Returns next token.
     *
     * @throws InternalErrorException If there is no more token
     */
    public function getNext() : Token {
        if ($this->peeking) {
            $this->peeking = false;
            $this->used[] = $this->peeked;
            return $this->peeked;
        }
        if (!isset($this->tokens[$this->cursor])) {
            throw new InternalErrorException('Unexpected token stream end.');
        }
        return $this->tokens[$this->cursor++];
    }
    
    /**
     * Returns peeked token.
     */
    public function getPeek() : Token {
        if (!$this->peeking) {
            $this->peeked = $this->getNext();
            $this->peeking = true;
        }
        return $this->peeked;
    }
    
    /**
     * Returns used tokens.
     *
     * @return Token[]
     */
    public function getUsed() : array {
        return $this->used;
    }
    
    /**
     * Returns next identifier token.
     *
     * @throws SyntaxErrorException If next token is not an identifier
     */
    public function getNextIdentifier() : string {
        $next = $this->getNext();
        if (!$next->isIdentifier()) {
            throw SyntaxErrorException::unexpectedToken('identifier', $next);
        }
        return $next->getValue();
    }
    
    /**
     * Returns next identifier or null if star delimiter token is found.
     *
     * @throws SyntaxErrorException If next token is not an identifier or a star delimiter
     */
    public function getNextIdentifierOrStar() : ?string {
        $next = $this->getNext();
        if ($next->isIdentifier()) {
            return $next->getValue();
        }
        if ($next->isDelimiter([
            '*',
        ])) {
            return null;
        }
        throw SyntaxErrorException::unexpectedToken('identifier or "*"', $next);
    }
    
    /**
     * Skips next whitespace if any.
     */
    public function skipWhitespace() : void {
        $peek = $this->getPeek();
        if ($peek->isWhitespace()) {
            $this->getNext();
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary
TokenStream::$cursor private property
TokenStream::$peeked private property
TokenStream::$peeking private property
TokenStream::$tokens private property
TokenStream::$used private property
TokenStream::freeze public function Freezes stream.
TokenStream::getNext public function Returns next token.
TokenStream::getNextIdentifier public function Returns next identifier token.
TokenStream::getNextIdentifierOrStar public function Returns next identifier or null if star delimiter token is found.
TokenStream::getPeek public function Returns peeked token.
TokenStream::getUsed public function Returns used tokens.
TokenStream::push public function Pushes a token.
TokenStream::skipWhitespace public function Skips next whitespace if any.

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal