gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

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 }