Exemplo n.º 1
0
 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());
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
    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;
    }