summaryrefslogtreecommitdiff
path: root/lib/smarty/sysplugins/smarty_internal_parsetree_template.php
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2018-10-18 02:39:34 +0200
committeremkael <emkael@tlen.pl>2018-10-18 02:39:42 +0200
commitab5d8d4e07bb3c8230d0285ef8902ef1979fce51 (patch)
tree0b955e585cb2fdbc7207392a5f2c97d610b6a5bc /lib/smarty/sysplugins/smarty_internal_parsetree_template.php
parentc055ce2ab60c6582bad3e5babcb1d00384fde78a (diff)
Updating Smarty
Diffstat (limited to 'lib/smarty/sysplugins/smarty_internal_parsetree_template.php')
-rw-r--r--lib/smarty/sysplugins/smarty_internal_parsetree_template.php129
1 files changed, 129 insertions, 0 deletions
diff --git a/lib/smarty/sysplugins/smarty_internal_parsetree_template.php b/lib/smarty/sysplugins/smarty_internal_parsetree_template.php
new file mode 100644
index 0000000..8e716bd
--- /dev/null
+++ b/lib/smarty/sysplugins/smarty_internal_parsetree_template.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parse Tree
+ * These are classes to build parse tree in the template parser
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Thue Kristensen
+ * @author Uwe Tews
+ */
+
+/**
+ * Template element
+ *
+ * @package Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
+{
+ /**
+ * Array of template elements
+ *
+ * @var array
+ */
+ public $subtrees = array();
+
+ /**
+ * Create root of parse tree for template elements
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Append buffer to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param Smarty_Internal_ParseTree $subtree
+ */
+ public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree)
+ {
+ if (!empty($subtree->subtrees)) {
+ $this->subtrees = array_merge($this->subtrees, $subtree->subtrees);
+ } else {
+ if ($subtree->data !== '') {
+ $this->subtrees[] = $subtree;
+ }
+ }
+ }
+
+ /**
+ * Append array to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty_Internal_ParseTree[] $array
+ */
+ public function append_array(Smarty_Internal_Templateparser $parser, $array = array())
+ {
+ if (!empty($array)) {
+ $this->subtrees = array_merge($this->subtrees, (array)$array);
+ }
+ }
+
+ /**
+ * Prepend array to subtree
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ * @param \Smarty_Internal_ParseTree[] $array
+ */
+ public function prepend_array(Smarty_Internal_Templateparser $parser, $array = array())
+ {
+ if (!empty($array)) {
+ $this->subtrees = array_merge((array)$array, $this->subtrees);
+ }
+ }
+
+ /**
+ * Sanitize and merge subtree buffers together
+ *
+ * @param \Smarty_Internal_Templateparser $parser
+ *
+ * @return string template code content
+ */
+ public function to_smarty_php(Smarty_Internal_Templateparser $parser)
+ {
+ $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($parser);
+ 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($parser);
+ }
+ if ($subtree === '') {
+ continue;
+ }
+ $code .= preg_replace(
+ '/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/',
+ "<?php echo '\$1'; ?>\n",
+ $subtree
+ );
+ continue;
+ }
+ if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
+ $subtree = $this->subtrees[ $key ]->to_smarty_php($parser);
+ 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 = $parser->compiler->appendCode($subtree, $this->subtrees[ $key ]->to_smarty_php($parser));
+ }
+ if ($subtree === '') {
+ continue;
+ }
+ $code .= $subtree;
+ continue;
+ }
+ $code .= $this->subtrees[ $key ]->to_smarty_php($parser);
+ }
+ return $code;
+ }
+}