Exemple #1
0
 public function parse(Parser $parser, Stream $stream)
 {
     $node = new TagNode($this);
     $loopVar = $this->parseVariableNode($stream);
     if ($stream->nextTokenIf(Token::PUNCTUATION, [':', '=>'])) {
         $node->addChild($loopVar, 'loop_key');
         $loopVar = $this->parseVariableNode($stream);
     }
     $node->addChild($loopVar, 'loop_variable_0');
     $i = 1;
     while ($stream->nextTokenIf(Token::PUNCTUATION, ',')) {
         $node->addChild($this->parseVariableNode($stream), 'loop_variable_' . $i++);
     }
     $node->addData('variables', $i);
     $stream->expect(Token::OPERATOR, 'in');
     $node->addChild($parser->parseExpression($stream), 'source');
     $node->addChild($parser->parseBlock($stream, ['else', 'endfor']), 'loop_body');
     if ($stream->next()->test(Token::TAG_END, 'else')) {
         $node->addChild($parser->parseBlock($stream, 'endfor'), 'else');
         $stream->expect(Token::TAG_END);
     }
     return $node;
 }