[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/Smarty/libs/sysplugins/ -> smarty_internal_parsetree.php (source)

   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  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1