diff --git a/library/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/library/smarty/libs/sysplugins/smarty_internal_parsetree_template.php new file mode 100644 --- /dev/null +++ b/library/smarty/libs/sysplugins/smarty_internal_parsetree_template.php @@ -0,0 +1,94 @@ +parser = $parser; + } + + /** + * Append buffer to subtree + * + * @param Smarty_Internal_ParseTree $subtree + */ + public function append_subtree(Smarty_Internal_ParseTree $subtree) { + if (!empty($subtree->subtrees)) { + $this->subtrees = array_merge($this->subtrees, $subtree->subtrees); + } else { + if ($subtree->data !== '') { + $this->subtrees[] = $subtree; + } + } + } + + /** + * Sanitize and merge subtree buffers together + * + * @return string template code content + */ + public function to_smarty_php() { + $code = ''; + for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) { + if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) { + $subtree = $this->subtrees[$key]->to_smarty_php(); + while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text || $this->subtrees[$key + 1]->data == '')) { + $key++; + if ($this->subtrees[$key]->data == '') { + continue; + } + $subtree .= $this->subtrees[$key]->to_smarty_php(); + } + if ($subtree == '') { + continue; + } + $code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "\n", $subtree); + continue; + } + if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) { + $subtree = $this->subtrees[$key]->to_smarty_php(); + while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag || $this->subtrees[$key + 1]->data == '')) { + $key++; + if ($this->subtrees[$key]->data == '') { + continue; + } + $subtree = $this->parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php()); + } + if ($subtree == '') { + continue; + } + $code .= $subtree; + continue; + } + $code .= $this->subtrees[$key]->to_smarty_php(); + } + return $code; + } +}