public function parse(Apishka_Templater_Token $token) { $lineno = $token->getLine(); $expr = $this->parser->getExpressionParser()->parseExpression(); $stream = $this->parser->getStream(); $stream->expect(Apishka_Templater_Token::BLOCK_END_TYPE); $body = $this->parser->subparse(array($this, 'decideIfFork')); $tests = array($expr, $body); $else = null; $end = false; while (!$end) { switch ($stream->next()->getValue()) { case 'else': $stream->expect(Apishka_Templater_Token::BLOCK_END_TYPE); $else = $this->parser->subparse(array($this, 'decideIfEnd')); break; case 'elseif': $expr = $this->parser->getExpressionParser()->parseExpression(); $stream->expect(Apishka_Templater_Token::BLOCK_END_TYPE); $body = $this->parser->subparse(array($this, 'decideIfFork')); $tests[] = $expr; $tests[] = $body; break; case 'endif': $end = true; break; default: throw new Apishka_Templater_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getFilename()); } } $stream->expect(Apishka_Templater_Token::BLOCK_END_TYPE); return Apishka_Templater_Node_If::apishka(Apishka_Templater_Node::apishka($tests), $else, $lineno, $this->getTag()); }
public function __construct(Apishka_Templater_Node_Expression_AssignName $keyTarget, Apishka_Templater_Node_Expression_AssignName $valueTarget, Apishka_Templater_Node_ExpressionAbstract $seq, Apishka_Templater_Node_ExpressionAbstract $ifexpr = null, Apishka_Templater_NodeAbstract $body, Apishka_Templater_NodeAbstract $else = null, $lineno, $tag = null) { $body = Apishka_Templater_Node::apishka(array($body, $this->loop = Apishka_Templater_Node_ForLoop::apishka($lineno, $tag))); if (null !== $ifexpr) { $body = Apishka_Templater_Node_If::apishka(Apishka_Templater_Node::apishka(array($ifexpr, $body)), null, $lineno, $tag); } parent::__construct(array('key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body, 'else' => $else), array('with_loop' => true, 'ifexpr' => null !== $ifexpr), $lineno, $tag); }
public function getTests() { $tests = array(); $t = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka(true, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1); $else = null; $node = Apishka_Templater_Node_If::apishka($t, $else, 1); $tests[] = array($node, <<<EOF // line 1 if (true) { echo {$this->getVariableGetter('foo')}; } EOF ); $t = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka(true, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(false, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1)), array(), 1); $else = null; $node = Apishka_Templater_Node_If::apishka($t, $else, 1); $tests[] = array($node, <<<EOF // line 1 if (true) { echo {$this->getVariableGetter('foo')}; } elseif (false) { echo {$this->getVariableGetter('bar')}; } EOF ); $t = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka(true, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1); $else = Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1); $node = Apishka_Templater_Node_If::apishka($t, $else, 1); $tests[] = array($node, <<<EOF // line 1 if (true) { echo {$this->getVariableGetter('foo')}; } else { echo {$this->getVariableGetter('bar')}; } EOF ); return $tests; }