public function Twig_TokenParser_Use::parse in Zircon Profile 8
Same name and namespace in other branches
- 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
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),
  )));
}