1: <?php
 2:  3:  4:  5:  6:  7:  8:  9: 
10: 
11: 12: 13: 14: 15: 16: 
17: class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
18: {
19:     20: 21: 22: 23: 24: 
25:     public $optional_attributes = array('levels');
26:     27: 28: 29: 30: 31: 
32:     public $shorttag_order = array('levels');
33: 
34:     35: 36: 37: 38: 39: 40: 41: 42: 
43:     public function compile($args, $compiler, $parameter)
44:     {
45:         static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
46:         
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 continue {$_levels} level(s)", $compiler->lex->taglineno);
71:         }
72: 
73:         return "<?php continue {$_levels};?>";
74:     }
75: }
76: