shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

ForLoop.php (1564B)


      1 <?php
      2 
      3 /*
      4  * This file is part of Twig.
      5  *
      6  * (c) 2011 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 /**
     13  * Internal node used by the for node.
     14  *
     15  * @author Fabien Potencier <fabien@symfony.com>
     16  */
     17 class Twig_Node_ForLoop extends Twig_Node
     18 {
     19     public function __construct($lineno, $tag = null)
     20     {
     21         parent::__construct(array(), array('with_loop' => false, 'ifexpr' => false, 'else' => false), $lineno, $tag);
     22     }
     23 
     24     public function compile(Twig_Compiler $compiler)
     25     {
     26         if ($this->getAttribute('else')) {
     27             $compiler->write("\$context['_iterated'] = true;\n");
     28         }
     29 
     30         if ($this->getAttribute('with_loop')) {
     31             $compiler
     32                 ->write("++\$context['loop']['index0'];\n")
     33                 ->write("++\$context['loop']['index'];\n")
     34                 ->write("\$context['loop']['first'] = false;\n")
     35             ;
     36 
     37             if (!$this->getAttribute('ifexpr')) {
     38                 $compiler
     39                     ->write("if (isset(\$context['loop']['length'])) {\n")
     40                     ->indent()
     41                     ->write("--\$context['loop']['revindex0'];\n")
     42                     ->write("--\$context['loop']['revindex'];\n")
     43                     ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n")
     44                     ->outdent()
     45                     ->write("}\n")
     46                 ;
     47             }
     48         }
     49     }
     50 }