* {% for user in users %} *
  • {{ user.username|e }}
  • * {% endfor %} * * {% endif %} */ final class IfTokenParser extends AbstractTokenParser { public function parse(Token $token) { $lineno = $token->getLine(); $expr = $this->parser->getExpressionParser()->parseExpression(); $stream = $this->parser->getStream(); $stream->expect(/* Token::BLOCK_END_TYPE */ 3); $body = $this->parser->subparse([$this, 'decideIfFork']); $tests = [$expr, $body]; $else = null; $end = false; while (!$end) { switch ($stream->next()->getValue()) { case 'else': $stream->expect(/* Token::BLOCK_END_TYPE */ 3); $else = $this->parser->subparse([$this, 'decideIfEnd']); break; case 'elseif': $expr = $this->parser->getExpressionParser()->parseExpression(); $stream->expect(/* Token::BLOCK_END_TYPE */ 3); $body = $this->parser->subparse([$this, 'decideIfFork']); $tests[] = $expr; $tests[] = $body; break; case 'endif': $end = true; break; default: throw new SyntaxError(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->getSourceContext()); } } $stream->expect(/* Token::BLOCK_END_TYPE */ 3); return new IfNode(new Node($tests), $else, $lineno, $this->getTag()); } public function decideIfFork(Token $token) { return $token->test(['elseif', 'else', 'endif']); } public function decideIfEnd(Token $token) { return $token->test(['endif']); } public function getTag() { return 'if'; } } __halt_compiler();----SIGNATURE:----DU9ogId+8xVJeiuZ5WuYn3tOeQMj9ccYiz5UXVSPQ5mzi6saW2Yzs5/Ic1k8aqNgRse8MsxEbZImgHPFwnVHWc4A74+mEHB079mYbLaQuXLpM0aXYpTE6Aa3xcC59wbvGlFHKZ6yTLZ1HUZwmkGOSsO6qldMpfnJR6fQ2ViW67O4vSQPuDPoLdi246hw5N4UU9wwJHOId3dgjZCzETyUTPRwQokUR/BubuxVPHC3z1oIk/4Hw58YRGtiDQhN/mb8CI/Qj1RpXkMqQuiDaSqyf3fcE0ZhmEM28M52iT6eurTort4cnnCdk+2yhAkgaryClIDbAS3zr3TOIfk4317C+/wxsQWkmeulJz0nT6DgJHS2i/Xex61HIr1RTftaClV92ponAhpzUmoq/KHkg6Z8/JLQsF7KBDph+AHkMRt0x+UOAehBEgs1IPQ2dCuYvHTTjI+ah9IPJbwr6wOk/RYgu4S25f+9wfQcwz4khgBbFABkc58frcHrANntru0TOBQaszvjPShv8VkncwzlN61OZMfeaQ6TRwrgLmj0CvM0HvG7aVRChB+DlZPgMpNbsSjf1ptdrgbGJNv82qkOsNV2nxGBa5LGAdB1MHmk8g70FgEJItGsa/8lDkFCiw4pcR+POWDXxNQrXe0IdGmM+WSayjtHJLcyF2u8jL8v5/8cFcM=----ATTACHMENT:----MjMwODY2NDIwMTMwNDA5MiA1MzY1MTkwMjAyNzg0NTMzIDE0NzM2NDA5NjEyNDE5MDM=