gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

smarty_internal_compile_break.php (2241B)


      1 <?php
      2 /**
      3  * Smarty Internal Plugin Compile Break
      4  * Compiles the {break} tag
      5  *
      6  * @package    Smarty
      7  * @subpackage Compiler
      8  * @author     Uwe Tews
      9  */
     10 
     11 /**
     12  * Smarty Internal Plugin Compile Break Class
     13  *
     14  * @package    Smarty
     15  * @subpackage Compiler
     16  */
     17 class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
     18 {
     19     /**
     20      * Attribute definition: Overwrites base class.
     21      *
     22      * @var array
     23      * @see Smarty_Internal_CompileBase
     24      */
     25     public $optional_attributes = array('levels');
     26     /**
     27      * Attribute definition: Overwrites base class.
     28      *
     29      * @var array
     30      * @see Smarty_Internal_CompileBase
     31      */
     32     public $shorttag_order = array('levels');
     33 
     34     /**
     35      * Compiles code for the {break} tag
     36      *
     37      * @param  array  $args      array with attributes from parser
     38      * @param  object $compiler  compiler object
     39      * @param  array  $parameter array with compilation parameter
     40      *
     41      * @return string compiled code
     42      */
     43     public function compile($args, $compiler, $parameter)
     44     {
     45         static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
     46         // check and get attributes
     47         $_attr = $this->getAttributes($compiler, $args);
     48 
     49         if ($_attr['nocache'] === true) {
     50             $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
     51         }
     52 
     53         if (isset($_attr['levels'])) {
     54             if (!is_numeric($_attr['levels'])) {
     55                 $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
     56             }
     57             $_levels = $_attr['levels'];
     58         } else {
     59             $_levels = 1;
     60         }
     61         $level_count = $_levels;
     62         $stack_count = count($compiler->_tag_stack) - 1;
     63         while ($level_count > 0 && $stack_count >= 0) {
     64             if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
     65                 $level_count --;
     66             }
     67             $stack_count --;
     68         }
     69         if ($level_count != 0) {
     70             $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
     71         }
     72 
     73         return "<?php break {$_levels};?>";
     74     }
     75 }