]> git.mxchange.org Git - friendica.git/blob - library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php
Add Smarty to Composer
[friendica.git] / library / Smarty / libs / sysplugins / smarty_internal_compile_continue.php
1 <?php
2 /**
3  * Smarty Internal Plugin Compile Continue
4  * Compiles the {continue} tag
5  *
6  * @package    Smarty
7  * @subpackage Compiler
8  * @author     Uwe Tews
9  */
10
11 /**
12  * Smarty Internal Plugin Compile Continue Class
13  *
14  * @package    Smarty
15  * @subpackage Compiler
16  */
17 class Smarty_Internal_Compile_Continue 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 {continue} 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 continue {$_levels} level(s)", $compiler->lex->taglineno);
71         }
72
73         return "<?php continue {$_levels}?>";
74     }
75 }