[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

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

   1  <?php
   2  /**
   3   * Smarty Internal Plugin Config File Compiler
   4   *
   5   * This is the config file compiler class. It calls the lexer and parser to
   6   * perform the compiling.
   7   *
   8   * @package Smarty
   9   * @subpackage Config
  10   * @author Uwe Tews
  11   */
  12  
  13  /**
  14   * Main config file compiler class
  15   *
  16   * @package Smarty
  17   * @subpackage Config
  18   */
  19  class Smarty_Internal_Config_File_Compiler {
  20  
  21      /**
  22       * Lexer object
  23       *
  24       * @var object
  25       */
  26      public $lex;
  27  
  28      /**
  29       * Parser object
  30       *
  31       * @var object
  32       */
  33      public $parser;
  34  
  35      /**
  36       * Smarty object
  37       *
  38       * @var Smarty object
  39       */
  40      public $smarty;
  41  
  42      /**
  43       * Smarty object
  44       *
  45       * @var Smarty_Internal_Config object
  46       */
  47      public $config;
  48  
  49      /**
  50       * Compiled config data sections and variables
  51       *
  52       * @var array
  53       */
  54      public $config_data = array();
  55  
  56      /**
  57       * Initialize compiler
  58       *
  59       * @param Smarty $smarty base instance
  60       */
  61      public function __construct($smarty)
  62      {
  63          $this->smarty = $smarty;
  64          $this->config_data['sections'] = array();
  65          $this->config_data['vars'] = array();
  66      }
  67  
  68      /**
  69       * Method to compile a Smarty template.
  70       *
  71       * @param  Smarty_Internal_Config $config config object
  72       * @return bool true if compiling succeeded, false if it failed
  73       */
  74      public function compileSource(Smarty_Internal_Config $config)
  75      {
  76          /* here is where the compiling takes place. Smarty
  77            tags in the templates are replaces with PHP code,
  78            then written to compiled files. */
  79          $this->config = $config;
  80          // get config file source
  81          $_content = $config->source->content . "\n";
  82          // on empty template just return
  83          if ($_content == '') {
  84              return true;
  85          }
  86          // init the lexer/parser to compile the config file
  87          $lex = new Smarty_Internal_Configfilelexer($_content, $this->smarty);
  88          $parser = new Smarty_Internal_Configfileparser($lex, $this);
  89          if ($this->smarty->_parserdebug) $parser->PrintTrace();
  90          // get tokens from lexer and parse them
  91          while ($lex->yylex()) {
  92              if ($this->smarty->_parserdebug) echo "<br>Parsing  {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
  93              $parser->doParse($lex->token, $lex->value);
  94          }
  95          // finish parsing process
  96          $parser->doParse(0, 0);
  97          $config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
  98      }
  99  
 100      /**
 101       * display compiler error messages without dying
 102       *
 103       * If parameter $args is empty it is a parser detected syntax error.
 104       * In this case the parser is called to obtain information about exspected tokens.
 105       *
 106       * If parameter $args contains a string this is used as error message
 107       *
 108       * @param string $args individual error message or null
 109       */
 110      public function trigger_config_file_error($args = null)
 111      {
 112          $this->lex = Smarty_Internal_Configfilelexer::instance();
 113          $this->parser = Smarty_Internal_Configfileparser::instance();
 114          // get template source line which has error
 115          $line = $this->lex->line;
 116          if (isset($args)) {
 117              // $line--;
 118          }
 119          $match = preg_split("/\n/", $this->lex->data);
 120          $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line-1]}' ";
 121          if (isset($args)) {
 122              // individual error message
 123              $error_text .= $args;
 124          } else {
 125              // exspected token from parser
 126              foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
 127                  $exp_token = $this->parser->yyTokenName[$token];
 128                  if (isset($this->lex->smarty_token_names[$exp_token])) {
 129                      // token type from lexer
 130                      $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';
 131                  } else {
 132                      // otherwise internal token name
 133                      $expect[] = $this->parser->yyTokenName[$token];
 134                  }
 135              }
 136              // output parser error message
 137              $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);
 138          }
 139          throw new SmartyCompilerException($error_text);
 140      }
 141  
 142  }
 143  
 144  ?>


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