smarty_internal_parsetree_template.php (3054B)
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 }