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 .
*/
/**
* Defines a variable .
*
* < pre >
* { % set foo = 'foo' % }
*
* { % set foo = [ 1 , 2 ] % }
*
* { % set foo = { 'foo' : 'bar' } % }
*
* { % set foo = 'foo' ~ 'bar' % }
*
* { % set foo , bar = 'foo' , 'bar' % }
*
* { % set foo % } Some content { % endset % }
* </ pre >
2018-05-10 12:24:53 +02:00
*
* @ final
2011-10-05 06:22:53 +02:00
*/
class Twig_TokenParser_Set extends Twig_TokenParser
{
public function parse ( Twig_Token $token )
{
$lineno = $token -> getLine ();
$stream = $this -> parser -> getStream ();
$names = $this -> parser -> getExpressionParser () -> parseAssignmentExpression ();
$capture = false ;
2018-05-10 12:24:53 +02:00
if ( $stream -> nextIf ( Twig_Token :: OPERATOR_TYPE , '=' )) {
2011-10-05 06:22:53 +02:00
$values = $this -> parser -> getExpressionParser () -> parseMultitargetExpression ();
$stream -> expect ( Twig_Token :: BLOCK_END_TYPE );
if ( count ( $names ) !== count ( $values )) {
2018-05-10 12:24:53 +02:00
throw new Twig_Error_Syntax ( 'When using set, you must have the same number of variables and assignments.' , $stream -> getCurrent () -> getLine (), $stream -> getSourceContext ());
2011-10-05 06:22:53 +02:00
}
} else {
$capture = true ;
if ( count ( $names ) > 1 ) {
2018-05-10 12:24:53 +02:00
throw new Twig_Error_Syntax ( 'When using set with a block, you cannot have a multi-target.' , $stream -> getCurrent () -> getLine (), $stream -> getSourceContext ());
2011-10-05 06:22:53 +02:00
}
$stream -> expect ( Twig_Token :: BLOCK_END_TYPE );
$values = $this -> parser -> subparse ( array ( $this , 'decideBlockEnd' ), true );
$stream -> expect ( Twig_Token :: BLOCK_END_TYPE );
}
return new Twig_Node_Set ( $capture , $names , $values , $lineno , $this -> getTag ());
}
public function decideBlockEnd ( Twig_Token $token )
{
return $token -> test ( 'endset' );
}
public function getTag ()
{
return 'set' ;
}
}
2018-05-10 12:24:53 +02:00
class_alias ( 'Twig_TokenParser_Set' , 'Twig\TokenParser\SetTokenParser' , false );