packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/includes/smarty/sysplugins/smarty_internal_parsetree.php
changeset 0 3906ca745819
equal deleted inserted replaced
-1:000000000000 0:3906ca745819
       
     1 <?php
       
     2 /**
       
     3  * Smarty Internal Plugin Templateparser Parsetrees
       
     4  *
       
     5  * These are classes to build parsetrees in the template parser
       
     6  *
       
     7  * @package Smarty
       
     8  * @subpackage Compiler
       
     9  * @author Thue Kristensen
       
    10  * @author Uwe Tews
       
    11  */
       
    12 
       
    13 /**
       
    14  * @package Smarty
       
    15  * @subpackage Compiler
       
    16  * @ignore
       
    17  */
       
    18 abstract class _smarty_parsetree {
       
    19 
       
    20     /**
       
    21      * Parser object
       
    22      * @var object
       
    23      */
       
    24     public $parser;
       
    25     /**
       
    26      * Buffer content
       
    27      * @var mixed
       
    28      */
       
    29     public $data;
       
    30 
       
    31     /**
       
    32      * Return buffer
       
    33      *
       
    34      * @return string  buffer content
       
    35      */
       
    36     abstract public function to_smarty_php();
       
    37 
       
    38 }
       
    39 
       
    40 /**
       
    41  * A complete smarty tag.
       
    42  *
       
    43  * @package Smarty
       
    44  * @subpackage Compiler
       
    45  * @ignore
       
    46  */
       
    47 class _smarty_tag extends _smarty_parsetree {
       
    48 
       
    49     /**
       
    50      * Saved block nesting level
       
    51      * @var int
       
    52      */
       
    53     public $saved_block_nesting;
       
    54 
       
    55     /**
       
    56      * Create parse tree buffer for Smarty tag
       
    57      *
       
    58      * @param object $parser    parser object
       
    59      * @param string $data      content
       
    60      */
       
    61     public function __construct($parser, $data)
       
    62     {
       
    63         $this->parser = $parser;
       
    64         $this->data = $data;
       
    65         $this->saved_block_nesting = $parser->block_nesting_level;
       
    66     }
       
    67 
       
    68     /**
       
    69      * Return buffer content
       
    70      *
       
    71      * @return string  content
       
    72      */
       
    73     public function to_smarty_php()
       
    74     {
       
    75         return $this->data;
       
    76     }
       
    77 
       
    78     /**
       
    79      * Return complied code that loads the evaluated outout of buffer content into a temporary variable
       
    80      *
       
    81      * @return string template code
       
    82      */
       
    83     public function assign_to_var()
       
    84     {
       
    85         $var = sprintf('$_tmp%d', ++$this->parser->prefix_number);
       
    86         $this->parser->compiler->prefix_code[] = sprintf('<?php ob_start();?>%s<?php %s=ob_get_clean();?>', $this->data, $var);
       
    87         return $var;
       
    88     }
       
    89 
       
    90 }
       
    91 
       
    92 /**
       
    93  * Code fragment inside a tag.
       
    94  *
       
    95  * @package Smarty
       
    96  * @subpackage Compiler
       
    97  * @ignore
       
    98  */
       
    99 class _smarty_code extends _smarty_parsetree {
       
   100 
       
   101 
       
   102     /**
       
   103      * Create parse tree buffer for code fragment
       
   104      *
       
   105      * @param object $parser    parser object
       
   106      * @param string $data      content
       
   107      */
       
   108     public function __construct($parser, $data)
       
   109     {
       
   110         $this->parser = $parser;
       
   111         $this->data = $data;
       
   112     }
       
   113 
       
   114     /**
       
   115      * Return buffer content in parentheses
       
   116      *
       
   117      * @return string  content
       
   118      */
       
   119     public function to_smarty_php()
       
   120     {
       
   121         return sprintf("(%s)", $this->data);
       
   122     }
       
   123 
       
   124 }
       
   125 
       
   126 /**
       
   127  * Double quoted string inside a tag.
       
   128  *
       
   129  * @package Smarty
       
   130  * @subpackage Compiler
       
   131  * @ignore
       
   132  */
       
   133 class _smarty_doublequoted extends _smarty_parsetree {
       
   134 
       
   135     /**
       
   136      * Create parse tree buffer for double quoted string subtrees
       
   137      *
       
   138      * @param object $parser    parser object
       
   139      * @param _smarty_parsetree $subtree    parsetree buffer
       
   140      */
       
   141     public function __construct($parser, _smarty_parsetree $subtree)
       
   142     {
       
   143         $this->parser = $parser;
       
   144         $this->subtrees[] = $subtree;
       
   145         if ($subtree instanceof _smarty_tag) {
       
   146             $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
       
   147         }
       
   148     }
       
   149 
       
   150     /**
       
   151      * Append buffer to subtree
       
   152      *
       
   153      * @param _smarty_parsetree $subtree  parsetree buffer
       
   154      */
       
   155     public function append_subtree(_smarty_parsetree $subtree)
       
   156     {
       
   157         $last_subtree = count($this->subtrees) - 1;
       
   158         if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {
       
   159             if ($subtree instanceof _smarty_code) {
       
   160                 $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';
       
   161             } elseif ($subtree instanceof _smarty_dq_content) {
       
   162                 $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';
       
   163             } else {
       
   164                 $this->subtrees[$last_subtree]->data .= $subtree->data;
       
   165             }
       
   166         } else {
       
   167             $this->subtrees[] = $subtree;
       
   168         }
       
   169         if ($subtree instanceof _smarty_tag) {
       
   170             $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
       
   171         }
       
   172     }
       
   173 
       
   174     /**
       
   175      * Merge subtree buffer content together
       
   176      *
       
   177      * @return string  compiled template code
       
   178      */
       
   179     public function to_smarty_php()
       
   180     {
       
   181         $code = '';
       
   182         foreach ($this->subtrees as $subtree) {
       
   183             if ($code !== "") {
       
   184                 $code .= ".";
       
   185             }
       
   186             if ($subtree instanceof _smarty_tag) {
       
   187                 $more_php = $subtree->assign_to_var();
       
   188             } else {
       
   189                 $more_php = $subtree->to_smarty_php();
       
   190             }
       
   191 
       
   192             $code .= $more_php;
       
   193 
       
   194             if (!$subtree instanceof _smarty_dq_content) {
       
   195                 $this->parser->compiler->has_variable_string = true;
       
   196             }
       
   197         }
       
   198         return $code;
       
   199     }
       
   200 
       
   201 }
       
   202 
       
   203 /**
       
   204  * Raw chars as part of a double quoted string.
       
   205  *
       
   206  * @package Smarty
       
   207  * @subpackage Compiler
       
   208  * @ignore
       
   209  */
       
   210 class _smarty_dq_content extends _smarty_parsetree {
       
   211 
       
   212 
       
   213     /**
       
   214      * Create parse tree buffer with string content
       
   215      *
       
   216      * @param object $parser  parser object
       
   217      * @param string $data    string section
       
   218      */
       
   219     public function __construct($parser, $data)
       
   220     {
       
   221         $this->parser = $parser;
       
   222         $this->data = $data;
       
   223     }
       
   224 
       
   225     /**
       
   226      * Return content as double quoted string
       
   227      *
       
   228      * @return string doubled quoted string
       
   229      */
       
   230     public function to_smarty_php()
       
   231     {
       
   232         return '"' . $this->data . '"';
       
   233     }
       
   234 
       
   235 }
       
   236 
       
   237 /**
       
   238  * Template element
       
   239  *
       
   240  * @package Smarty
       
   241  * @subpackage Compiler
       
   242  * @ignore
       
   243  */
       
   244 class _smarty_template_buffer extends _smarty_parsetree {
       
   245 
       
   246     /**
       
   247      * Array of template elements
       
   248      *
       
   249      * @var array
       
   250      */
       
   251     public $subtrees = Array();
       
   252 
       
   253     /**
       
   254      * Create root of parse tree for template elements
       
   255      *
       
   256      * @param object $parser    parse object
       
   257      */
       
   258     public function __construct($parser)
       
   259     {
       
   260         $this->parser = $parser;
       
   261     }
       
   262 
       
   263     /**
       
   264      * Append buffer to subtree
       
   265      *
       
   266      * @param _smarty_parsetree $subtree
       
   267      */
       
   268     public function append_subtree(_smarty_parsetree $subtree)
       
   269     {
       
   270         $this->subtrees[] = $subtree;
       
   271     }
       
   272 
       
   273     /**
       
   274      * Sanitize and merge subtree buffers together
       
   275      *
       
   276      * @return string template code content
       
   277      */
       
   278     public function to_smarty_php()
       
   279     {
       
   280         $code = '';
       
   281         for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {
       
   282             if ($key + 2 < $cnt) {
       
   283                 if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {
       
   284                     $key = $key + 1;
       
   285                     continue;
       
   286                 }
       
   287                 if (substr($this->subtrees[$key]->data, -1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, -1) == '?') {
       
   288                     $key = $key + 2;
       
   289                     continue;
       
   290                 }
       
   291             }
       
   292             if (substr($code, -1) == '<') {
       
   293                 $subtree = $this->subtrees[$key]->to_smarty_php();
       
   294                 if (substr($subtree, 0, 1) == '?') {
       
   295                     $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>?' . substr($subtree, 1);
       
   296                 } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') {
       
   297                     $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>%' . substr($subtree, 1);
       
   298                 } else {
       
   299                     $code .= $subtree;
       
   300                 }
       
   301                 continue;
       
   302             }
       
   303             if ($this->parser->asp_tags && substr($code, -1) == '%') {
       
   304                 $subtree = $this->subtrees[$key]->to_smarty_php();
       
   305                 if (substr($subtree, 0, 1) == '>') {
       
   306                     $code = substr($code, 0, strlen($code) - 1) . '%<?php ?>>' . substr($subtree, 1);
       
   307                 } else {
       
   308                     $code .= $subtree;
       
   309                 }
       
   310                 continue;
       
   311             }
       
   312             if (substr($code, -1) == '?') {
       
   313                 $subtree = $this->subtrees[$key]->to_smarty_php();
       
   314                 if (substr($subtree, 0, 1) == '>') {
       
   315                     $code = substr($code, 0, strlen($code) - 1) . '?<?php ?>>' . substr($subtree, 1);
       
   316                 } else {
       
   317                     $code .= $subtree;
       
   318                 }
       
   319                 continue;
       
   320             }
       
   321             $code .= $this->subtrees[$key]->to_smarty_php();
       
   322         }
       
   323         return $code;
       
   324     }
       
   325 
       
   326 }
       
   327 
       
   328 /**
       
   329  * template text
       
   330  *
       
   331  * @package Smarty
       
   332  * @subpackage Compiler
       
   333  * @ignore
       
   334  */
       
   335 class _smarty_text extends _smarty_parsetree {
       
   336 
       
   337 
       
   338     /**
       
   339      * Create template text buffer
       
   340      *
       
   341      * @param object $parser    parser object
       
   342      * @param string $data      text
       
   343      */
       
   344     public function __construct($parser, $data)
       
   345     {
       
   346         $this->parser = $parser;
       
   347         $this->data = $data;
       
   348     }
       
   349 
       
   350     /**
       
   351      * Return buffer content
       
   352      *
       
   353      * @return strint text
       
   354      */
       
   355     public function to_smarty_php()
       
   356     {
       
   357         return $this->data;
       
   358     }
       
   359 
       
   360 }
       
   361 
       
   362 /**
       
   363  * template linebreaks
       
   364  *
       
   365  * @package Smarty
       
   366  * @subpackage Compiler
       
   367  * @ignore
       
   368  */
       
   369 class _smarty_linebreak extends _smarty_parsetree {
       
   370 
       
   371     /**
       
   372      * Create buffer with linebreak content
       
   373      *
       
   374      * @param object $parser    parser object
       
   375      * @param string  $data     linebreak string
       
   376      */
       
   377     public function __construct($parser, $data)
       
   378     {
       
   379         $this->parser = $parser;
       
   380         $this->data = $data;
       
   381     }
       
   382 
       
   383     /**
       
   384      * Return linebrak
       
   385      *
       
   386      * @return string linebreak
       
   387      */
       
   388     public function to_smarty_php()
       
   389     {
       
   390         return $this->data;
       
   391     }
       
   392 
       
   393 }
       
   394 
       
   395 ?>