update to smarty v3.1.24
[GitHub/Stricted/Domain-Control-Panel.git] / lib / api / smarty / sysplugins / smarty_internal_parsetree_template.php
1 <?php
2 /**
3 * Smarty Internal Plugin Templateparser Parse Tree
4 * These are classes to build parse tree in the template parser
5 *
6 * @package Smarty
7 * @subpackage Compiler
8 * @author Thue Kristensen
9 * @author Uwe Tews
10 */
11
12 /**
13 * Template element
14 *
15 * @package Smarty
16 * @subpackage Compiler
17 * @ignore
18 */
19 class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
20 {
21
22 /**
23 * Array of template elements
24 *
25 * @var array
26 */
27 public $subtrees = Array();
28
29 /**
30 * Create root of parse tree for template elements
31 *
32 * @param object $parser parse object
33 */
34 public function __construct($parser)
35 {
36 $this->parser = $parser;
37 }
38
39 /**
40 * Append buffer to subtree
41 *
42 * @param Smarty_Internal_ParseTree $subtree
43 */
44 public function append_subtree(Smarty_Internal_ParseTree $subtree)
45 {
46 if (!empty($subtree->subtrees)) {
47 $this->subtrees = array_merge($this->subtrees, $subtree->subtrees);
48 } else {
49 if ($subtree->data !== '') {
50 $this->subtrees[] = $subtree;
51 }
52 }
53 }
54
55 /**
56 * Sanitize and merge subtree buffers together
57 *
58 * @return string template code content
59 */
60 public function to_smarty_php()
61 {
62 $code = '';
63 for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) {
64 if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) {
65 $subtree = $this->subtrees[$key]->to_smarty_php();
66 while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text || $this->subtrees[$key + 1]->data == '')) {
67 $key ++;
68 if ($this->subtrees[$key]->data == '') {
69 continue;
70 }
71 $subtree .= $this->subtrees[$key]->to_smarty_php();
72 }
73 if ($subtree == '') {
74 continue;
75 }
76 $code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "<?php echo '\$1'; ?>\n", $subtree);
77 continue;
78 }
79 if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) {
80 $subtree = $this->subtrees[$key]->to_smarty_php();
81 while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag || $this->subtrees[$key + 1]->data == '')) {
82 $key ++;
83 if ($this->subtrees[$key]->data == '') {
84 continue;
85 }
86 $subtree = $this->parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php());
87 }
88 if ($subtree == '') {
89 continue;
90 }
91 $code .= $subtree;
92 continue;
93 }
94 $code .= $this->subtrees[$key]->to_smarty_php();
95 }
96 return $code;
97 }
98 }