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

Breadcrumb

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

function BlockTokenParser::parse

Overrides TokenParserInterface::parse

File

vendor/twig/twig/src/TokenParser/BlockTokenParser.php, line 36

Class

BlockTokenParser
Marks a section of a template as being reusable.

Namespace

Twig\TokenParser

Code

public function parse(Token $token) : Node {
    $lineno = $token->getLine();
    $stream = $this->parser
        ->getStream();
    $name = $stream->expect(Token::NAME_TYPE)
        ->getValue();
    $this->parser
        ->setBlock($name, $block = new BlockNode($name, new EmptyNode(), $lineno));
    $this->parser
        ->pushLocalScope();
    $this->parser
        ->pushBlockStack($name);
    if ($stream->nextIf(Token::BLOCK_END_TYPE)) {
        $body = $this->parser
            ->subparse([
            $this,
            'decideBlockEnd',
        ], true);
        if ($token = $stream->nextIf(Token::NAME_TYPE)) {
            $value = $token->getValue();
            if ($value != $name) {
                throw new SyntaxError(\sprintf('Expected endblock for block "%s" (but "%s" given).', $name, $value), $stream->getCurrent()
                    ->getLine(), $stream->getSourceContext());
            }
        }
    }
    else {
        $body = new Nodes([
            new PrintNode($this->parser
                ->getExpressionParser()
                ->parseExpression(), $lineno),
        ]);
    }
    $stream->expect(Token::BLOCK_END_TYPE);
    $block->setNode('body', $body);
    $this->parser
        ->popBlockStack();
    $this->parser
        ->popLocalScope();
    return new BlockReferenceNode($name, $lineno);
}

API Navigation

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