You are here

public function Twig_TokenParser_Use::parse in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/twig/twig/lib/Twig/TokenParser/Use.php \Twig_TokenParser_Use::parse()

Parses a token and returns a node.

Parameters

Twig_Token $token A Twig_Token instance:

Return value

Twig_NodeInterface A Twig_NodeInterface instance

Throws

Twig_Error_Syntax

Overrides Twig_TokenParserInterface::parse

File

vendor/twig/twig/lib/Twig/TokenParser/Use.php, line 28

Class

Twig_TokenParser_Use
Imports blocks defined in another template into the current template.

Code

public function parse(Twig_Token $token) {
  $template = $this->parser
    ->getExpressionParser()
    ->parseExpression();
  $stream = $this->parser
    ->getStream();
  if (!$template instanceof Twig_Node_Expression_Constant) {
    throw new Twig_Error_Syntax('The template references in a "use" statement must be a string.', $stream
      ->getCurrent()
      ->getLine(), $stream
      ->getFilename());
  }
  $targets = array();
  if ($stream
    ->nextIf('with')) {
    do {
      $name = $stream
        ->expect(Twig_Token::NAME_TYPE)
        ->getValue();
      $alias = $name;
      if ($stream
        ->nextIf('as')) {
        $alias = $stream
          ->expect(Twig_Token::NAME_TYPE)
          ->getValue();
      }
      $targets[$name] = new Twig_Node_Expression_Constant($alias, -1);
      if (!$stream
        ->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
        break;
      }
    } while (true);
  }
  $stream
    ->expect(Twig_Token::BLOCK_END_TYPE);
  $this->parser
    ->addTrait(new Twig_Node(array(
    'template' => $template,
    'targets' => new Twig_Node($targets),
  )));
}