aboutsummaryrefslogtreecommitdiffstats
path: root/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php')
-rw-r--r--library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php81
1 files changed, 58 insertions, 23 deletions
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
index 117310439..56d3b0665 100644
--- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
+++ b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
@@ -18,6 +18,20 @@
class Smarty_Internal_Config_File_Compiler
{
/**
+ * Lexer class name
+ *
+ * @var string
+ */
+ public $lexer_class;
+
+ /**
+ * Parser class name
+ *
+ * @var string
+ */
+ public $parser_class;
+
+ /**
* Lexer object
*
* @var object
@@ -41,9 +55,9 @@ class Smarty_Internal_Config_File_Compiler
/**
* Smarty object
*
- * @var Smarty_Internal_Config object
+ * @var Smarty_Internal_Template object
*/
- public $config;
+ public $template;
/**
* Compiled config data sections and variables
@@ -53,39 +67,52 @@ class Smarty_Internal_Config_File_Compiler
public $config_data = array();
/**
+ * compiled config data must always be written
+ *
+ * @var bool
+ */
+ public $write_compiled_code = true;
+
+ /**
* Initialize compiler
*
- * @param Smarty $smarty base instance
+ * @param string $lexer_class class name
+ * @param string $parser_class class name
+ * @param Smarty $smarty global instance
*/
- public function __construct($smarty)
+ public function __construct($lexer_class, $parser_class, Smarty $smarty)
{
$this->smarty = $smarty;
+ // get required plugins
+ $this->lexer_class = $lexer_class;
+ $this->parser_class = $parser_class;
+ $this->smarty = $smarty;
$this->config_data['sections'] = array();
$this->config_data['vars'] = array();
}
/**
- * Method to compile a Smarty template.
+ * Method to compile Smarty config source.
*
- * @param Smarty_Internal_Config $config config object
+ * @param Smarty_Internal_Template $template
*
- * @return bool true if compiling succeeded, false if it failed
+ * @return bool true if compiling succeeded, false if it failed
*/
- public function compileSource(Smarty_Internal_Config $config)
+ public function compileTemplate(Smarty_Internal_Template $template)
{
- /* here is where the compiling takes place. Smarty
- tags in the templates are replaces with PHP code,
- then written to compiled files. */
- $this->config = $config;
- // get config file source
- $_content = $config->source->content . "\n";
- // on empty template just return
- if ($_content == '') {
- return true;
+ $this->template = $template;
+ $this->template->compiled->file_dependency[$this->template->source->uid] = array($this->template->source->filepath,
+ $this->template->source->getTimeStamp(),
+ $this->template->source->type);
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->start_compile($this->template);
}
// init the lexer/parser to compile the config file
- $lex = new Smarty_Internal_Configfilelexer($_content, $this);
- $parser = new Smarty_Internal_Configfileparser($lex, $this);
+ /* @var Smarty_Internal_ConfigFileLexer $lex */
+ $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) .
+ "\n", $this);
+ /* @var Smarty_Internal_ConfigFileParser $parser */
+ $parser = new $this->parser_class($lex, $this);
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
$mbEncoding = mb_internal_encoding();
@@ -94,7 +121,6 @@ class Smarty_Internal_Config_File_Compiler
$mbEncoding = null;
}
-
if ($this->smarty->_parserdebug) {
$parser->PrintTrace();
}
@@ -111,8 +137,17 @@ class Smarty_Internal_Config_File_Compiler
if ($mbEncoding) {
mb_internal_encoding($mbEncoding);
}
+ if ($this->smarty->debugging) {
+ $this->smarty->_debug->end_compile($this->template);
+ }
+ // template header code
+ $template_header = "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " .
+ strftime("%Y-%m-%d %H:%M:%S") . "\n";
+ $template_header .= " compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";
- $config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
+ $code = '<?php $_smarty_tpl->smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' .
+ var_export($this->config_data, true) . '); ?>';
+ return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code);
}
/**
@@ -129,13 +164,13 @@ class Smarty_Internal_Config_File_Compiler
{
$this->lex = Smarty_Internal_Configfilelexer::instance();
$this->parser = Smarty_Internal_Configfileparser::instance();
- // get template source line which has error
+ // get config source line which has error
$line = $this->lex->line;
if (isset($args)) {
// $line--;
}
$match = preg_split("/\n/", $this->lex->data);
- $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
+ $error_text = "Syntax error in config file '{$this->template->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
if (isset($args)) {
// individual error message
$error_text .= $args;