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 blocks defined in another template into the current template .
*
* < pre >
* { % extends " base.html " % }
*
* { % use " blocks.html " % }
*
* { % block title % }{ % endblock % }
* { % block content % }{ % endblock % }
* </ pre >
*
2018-05-10 12:24:53 +02:00
* @ see https :// twig . symfony . com / doc / templates . html #horizontal-reuse for details.
*
* @ final
2011-10-05 06:22:53 +02:00
*/
class Twig_TokenParser_Use extends Twig_TokenParser
{
public function parse ( Twig_Token $token )
{
$template = $this -> parser -> getExpressionParser () -> parseExpression ();
2013-08-01 21:20:12 +02:00
$stream = $this -> parser -> getStream ();
2011-10-05 06:22:53 +02:00
if ( ! $template instanceof Twig_Node_Expression_Constant ) {
2018-05-10 12:24:53 +02:00
throw new Twig_Error_Syntax ( 'The template references in a "use" statement must be a string.' , $stream -> getCurrent () -> getLine (), $stream -> getSourceContext ());
2011-10-05 06:22:53 +02:00
}
$targets = array ();
2018-05-10 12:24:53 +02:00
if ( $stream -> nextIf ( 'with' )) {
2011-10-05 06:22:53 +02:00
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 ] = new Twig_Node_Expression_Constant ( $alias , - 1 );
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 );
$this -> parser -> addTrait ( new Twig_Node ( array ( 'template' => $template , 'targets' => new Twig_Node ( $targets ))));
2018-05-10 12:24:53 +02:00
return new Twig_Node ();
2011-10-05 06:22:53 +02:00
}
public function getTag ()
{
return 'use' ;
}
}
2018-05-10 12:24:53 +02:00
class_alias ( 'Twig_TokenParser_Use' , 'Twig\TokenParser\UseTokenParser' , false );