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 .
*/
/**
* Marks a section of a template to be escaped or not .
*
* < pre >
* { % autoescape true % }
* Everything will be automatically escaped in this block
* { % endautoescape % }
*
* { % autoescape false % }
* Everything will be outputed as is in this block
* { % endautoescape % }
*
* { % autoescape true js % }
* Everything will be automatically escaped in this block
* using the js escaping strategy
* { % endautoescape % }
* </ pre >
2018-05-10 12:24:53 +02:00
*
* @ final
2011-10-05 06:22:53 +02:00
*/
class Twig_TokenParser_AutoEscape extends Twig_TokenParser
{
public function parse ( Twig_Token $token )
{
$lineno = $token -> getLine ();
2013-08-01 21:20:12 +02:00
$stream = $this -> parser -> getStream ();
if ( $stream -> test ( Twig_Token :: BLOCK_END_TYPE )) {
$value = 'html' ;
} else {
$expr = $this -> parser -> getExpressionParser () -> parseExpression ();
if ( ! $expr instanceof Twig_Node_Expression_Constant ) {
2018-05-10 12:24:53 +02:00
throw new Twig_Error_Syntax ( 'An escaping strategy must be a string or a bool.' , $stream -> getCurrent () -> getLine (), $stream -> getSourceContext ());
2013-08-01 21:20:12 +02:00
}
$value = $expr -> getAttribute ( 'value' );
2011-10-05 06:22:53 +02:00
2013-08-01 21:20:12 +02:00
$compat = true === $value || false === $value ;
if ( true === $value ) {
$value = 'html' ;
2011-10-05 06:22:53 +02:00
}
2013-08-01 21:20:12 +02:00
if ( $compat && $stream -> test ( Twig_Token :: NAME_TYPE )) {
2018-05-10 12:24:53 +02:00
@ trigger_error ( 'Using the autoescape tag with "true" or "false" before the strategy name is deprecated since version 1.21.' , E_USER_DEPRECATED );
2013-08-01 21:20:12 +02:00
if ( false === $value ) {
2018-05-10 12:24:53 +02:00
throw new Twig_Error_Syntax ( 'Unexpected escaping strategy as you set autoescaping to false.' , $stream -> getCurrent () -> getLine (), $stream -> getSourceContext ());
2013-08-01 21:20:12 +02:00
}
$value = $stream -> next () -> getValue ();
}
2011-10-05 06:22:53 +02:00
}
2013-08-01 21:20:12 +02:00
$stream -> expect ( Twig_Token :: BLOCK_END_TYPE );
2011-10-05 06:22:53 +02:00
$body = $this -> parser -> subparse ( array ( $this , 'decideBlockEnd' ), true );
2013-08-01 21:20:12 +02:00
$stream -> expect ( Twig_Token :: BLOCK_END_TYPE );
2011-10-05 06:22:53 +02:00
return new Twig_Node_AutoEscape ( $value , $body , $lineno , $this -> getTag ());
}
public function decideBlockEnd ( Twig_Token $token )
{
return $token -> test ( 'endautoescape' );
}
public function getTag ()
{
return 'autoescape' ;
}
}
2018-05-10 12:24:53 +02:00
class_alias ( 'Twig_TokenParser_AutoEscape' , 'Twig\TokenParser\AutoEscapeTokenParser' , false );