2011-10-05 06:22:53 +02:00
< ? php
/*
* This file is part of Twig .
*
2018-05-10 12:24:53 +02:00
* ( c ) Fabien Potencier
2011-10-05 06:22:53 +02:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
/**
* Imports macros .
*
* < pre >
* { % from 'forms.html' import forms % }
* </ pre >
2018-05-10 12:24:53 +02:00
*
* @ final
2011-10-05 06:22:53 +02:00
*/
class Twig_TokenParser_From extends Twig_TokenParser
{
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 ;
2018-05-10 12:24:53 +02:00
if ( $stream -> nextIf ( 'as' )) {
2011-10-05 06:22:53 +02:00
$alias = $stream -> expect ( Twig_Token :: NAME_TYPE ) -> getValue ();
}
$targets [ $name ] = $alias ;
2018-05-10 12:24:53 +02:00
if ( ! $stream -> nextIf ( Twig_Token :: PUNCTUATION_TYPE , ',' )) {
2011-10-05 06:22:53 +02:00
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 ());
2013-08-01 21:20:12 +02:00
foreach ( $targets as $name => $alias ) {
2018-05-10 12:24:53 +02:00
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 -> getSourceContext ());
}
$this -> parser -> addImportedSymbol ( 'function' , $alias , 'get' . $name , $node -> getNode ( 'var' ));
2011-10-05 06:22:53 +02:00
}
return $node ;
}
public function getTag ()
{
return 'from' ;
}
}
2018-05-10 12:24:53 +02:00
class_alias ( 'Twig_TokenParser_From' , 'Twig\TokenParser\FromTokenParser' , false );