[ Index ]

PHP Cross Reference of phpBB-3.3.2-deutsch

title

Body

[close]

/vendor/twig/twig/src/TokenParser/ -> SetTokenParser.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\SetNode;
  16  use Twig\Token;
  17  
  18  /**
  19   * Defines a variable.
  20   *
  21   *  {% set foo = 'foo' %}
  22   *  {% set foo = [1, 2] %}
  23   *  {% set foo = {'foo': 'bar'} %}
  24   *  {% set foo = 'foo' ~ 'bar' %}
  25   *  {% set foo, bar = 'foo', 'bar' %}
  26   *  {% set foo %}Some content{% endset %}
  27   */
  28  final class SetTokenParser extends AbstractTokenParser
  29  {
  30      public function parse(Token $token)
  31      {
  32          $lineno = $token->getLine();
  33          $stream = $this->parser->getStream();
  34          $names = $this->parser->getExpressionParser()->parseAssignmentExpression();
  35  
  36          $capture = false;
  37          if ($stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) {
  38              $values = $this->parser->getExpressionParser()->parseMultitargetExpression();
  39  
  40              $stream->expect(/* Token::BLOCK_END_TYPE */ 3);
  41  
  42              if (\count($names) !== \count($values)) {
  43                  throw new SyntaxError('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
  44              }
  45          } else {
  46              $capture = true;
  47  
  48              if (\count($names) > 1) {
  49                  throw new SyntaxError('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
  50              }
  51  
  52              $stream->expect(/* Token::BLOCK_END_TYPE */ 3);
  53  
  54              $values = $this->parser->subparse([$this, 'decideBlockEnd'], true);
  55              $stream->expect(/* Token::BLOCK_END_TYPE */ 3);
  56          }
  57  
  58          return new SetNode($capture, $names, $values, $lineno, $this->getTag());
  59      }
  60  
  61      public function decideBlockEnd(Token $token)
  62      {
  63          return $token->test('endset');
  64      }
  65  
  66      public function getTag()
  67      {
  68          return 'set';
  69      }
  70  }
  71  
  72  class_alias('Twig\TokenParser\SetTokenParser', 'Twig_TokenParser_Set');


Generated: Wed Nov 11 20:28:18 2020 Cross-referenced by PHPXref 0.7.1