[ Index ]

PHP Cross Reference of phpBB-3.2.11-deutsch

title

Body

[close]

/vendor/twig/twig/src/TokenParser/ -> AutoEscapeTokenParser.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of Twig.
   5   *
   6   * (c) Fabien Potencier
   7   *
   8   * For the full copyright and license information, please view the LICENSE
   9   * file that was distributed with this source code.
  10   */
  11  
  12  namespace Twig\TokenParser;
  13  
  14  use Twig\Error\SyntaxError;
  15  use Twig\Node\AutoEscapeNode;
  16  use Twig\Node\Expression\ConstantExpression;
  17  use Twig\Token;
  18  
  19  /**
  20   * Marks a section of a template to be escaped or not.
  21   *
  22   *   {% autoescape true %}
  23   *     Everything will be automatically escaped in this block
  24   *   {% endautoescape %}
  25   *
  26   *   {% autoescape false %}
  27   *     Everything will be outputed as is in this block
  28   *   {% endautoescape %}
  29   *
  30   *   {% autoescape true js %}
  31   *     Everything will be automatically escaped in this block
  32   *     using the js escaping strategy
  33   *   {% endautoescape %}
  34   *
  35   * @final
  36   */
  37  class AutoEscapeTokenParser extends AbstractTokenParser
  38  {
  39      public function parse(Token $token)
  40      {
  41          $lineno = $token->getLine();
  42          $stream = $this->parser->getStream();
  43  
  44          if ($stream->test(Token::BLOCK_END_TYPE)) {
  45              $value = 'html';
  46          } else {
  47              $expr = $this->parser->getExpressionParser()->parseExpression();
  48              if (!$expr instanceof ConstantExpression) {
  49                  throw new SyntaxError('An escaping strategy must be a string or a bool.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
  50              }
  51              $value = $expr->getAttribute('value');
  52  
  53              $compat = true === $value || false === $value;
  54  
  55              if (true === $value) {
  56                  $value = 'html';
  57              }
  58  
  59              if ($compat && $stream->test(Token::NAME_TYPE)) {
  60                  @trigger_error('Using the autoescape tag with "true" or "false" before the strategy name is deprecated since version 1.21.', E_USER_DEPRECATED);
  61  
  62                  if (false === $value) {
  63                      throw new SyntaxError('Unexpected escaping strategy as you set autoescaping to false.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
  64                  }
  65  
  66                  $value = $stream->next()->getValue();
  67              }
  68          }
  69  
  70          $stream->expect(Token::BLOCK_END_TYPE);
  71          $body = $this->parser->subparse([$this, 'decideBlockEnd'], true);
  72          $stream->expect(Token::BLOCK_END_TYPE);
  73  
  74          return new AutoEscapeNode($value, $body, $lineno, $this->getTag());
  75      }
  76  
  77      public function decideBlockEnd(Token $token)
  78      {
  79          return $token->test('endautoescape');
  80      }
  81  
  82      public function getTag()
  83      {
  84          return 'autoescape';
  85      }
  86  }
  87  
  88  class_alias('Twig\TokenParser\AutoEscapeTokenParser', 'Twig_TokenParser_AutoEscape');


Generated: Wed Nov 11 20:33:01 2020 Cross-referenced by PHPXref 0.7.1