You are here

public function Twig_TokenParser_From::parse in Translation template extractor 7.3

Same name and namespace in other branches
  1. 6.3 vendor/Twig/TokenParser/From.php \Twig_TokenParser_From::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/TokenParser/From.php, line 21

Class

Twig_TokenParser_From
Imports macros.

Code

public function parse(Twig_Token $token) {
  $macro = $this->parser
    ->getExpressionParser()
    ->parseExpression();
  $stream = $this->parser
    ->getStream();
  $stream
    ->expect('import');
  $targets = array();
  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] = $alias;
    if (!$stream
      ->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
      break;
    }
  } while (true);
  $stream
    ->expect(Twig_Token::BLOCK_END_TYPE);
  $node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser
    ->getVarName(), $token
    ->getLine()), $token
    ->getLine(), $this
    ->getTag());
  foreach ($targets as $name => $alias) {
    if ($this->parser
      ->isReservedMacroName($name)) {
      throw new Twig_Error_Syntax(sprintf('"%s" cannot be an imported macro as it is a reserved keyword.', $name), $token
        ->getLine(), $stream
        ->getFilename());
    }
    $this->parser
      ->addImportedSymbol('function', $alias, 'get' . $name, $node
      ->getNode('var'));
  }
  return $node;
}