From c23ce16cafb826c8bb4fe7aaf2a5525b29052b23 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sun, 6 Dec 2015 20:12:05 +0100 Subject: update smarty library - seems to bring some performance improvement --- .../smarty_internal_config_file_compiler.php | 75 +++++++++++++++------- 1 file changed, 53 insertions(+), 22 deletions(-) (limited to 'library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php') 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..50779c7b5 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php @@ -17,6 +17,19 @@ */ class Smarty_Internal_Config_File_Compiler { + /** + * Lexer class name + * + * @var string + */ + public $lexer_class; + + /** + * Parser class name + * + * @var string + */ + public $parser_class; /** * Lexer object * @@ -41,9 +54,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 @@ -52,40 +65,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 == '') { + $this->template = $template; + $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->name, $this->template->source->timestamp, $this->template->source->type); + // on empty config just return + if ($template->source->content == '') { return true; } + if ($this->smarty->debugging) { + Smarty_Internal_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); + $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->content) . "\n", $this); + $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 +119,6 @@ class Smarty_Internal_Config_File_Compiler $mbEncoding = null; } - if ($this->smarty->_parserdebug) { $parser->PrintTrace(); } @@ -111,8 +135,15 @@ class Smarty_Internal_Config_File_Compiler if ($mbEncoding) { mb_internal_encoding($mbEncoding); } + if ($this->smarty->debugging) { + Smarty_Internal_Debug::end_compile($this->template); + } + // template header code + $template_header = "template->source->filepath . "\" */ ?>\n"; - $config->compiled_config = 'config_data, true) . '; ?>'; + $code = 'config_data, true) . '); ?>'; + return $template_header . Smarty_Internal_Extension_CodeFrame::create($this->template, $code); } /** @@ -129,13 +160,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; -- cgit v1.2.3 From 26c465ad0c1d5b6801507ed190430f44ac92c672 Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sun, 6 Dec 2015 21:09:58 +0100 Subject: update smarty to 3.1.28-dev which fixes a bug where changes in a template are only visible on the second pageload which is annoying for developing --- .../smarty_internal_config_file_compiler.php | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php') 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 50779c7b5..56d3b0665 100644 --- a/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ b/library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php @@ -30,6 +30,7 @@ class Smarty_Internal_Config_File_Compiler * @var string */ public $parser_class; + /** * Lexer object * @@ -100,16 +101,17 @@ class Smarty_Internal_Config_File_Compiler public function compileTemplate(Smarty_Internal_Template $template) { $this->template = $template; - $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->name, $this->template->source->timestamp, $this->template->source->type); - // on empty config just return - if ($template->source->content == '') { - return true; - } + $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) { - Smarty_Internal_Debug::start_compile($this->template); + $this->smarty->_debug->start_compile($this->template); } // init the lexer/parser to compile the config file - $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->content) . "\n", $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) { @@ -136,14 +138,16 @@ class Smarty_Internal_Config_File_Compiler mb_internal_encoding($mbEncoding); } if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this->template); + $this->smarty->_debug->end_compile($this->template); } // template header code - $template_header = "template->source->filepath . "\" */ ?>\n"; - $code = 'config_data, true) . '); ?>'; - return $template_header . Smarty_Internal_Extension_CodeFrame::create($this->template, $code); + $code = 'smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' . + var_export($this->config_data, true) . '); ?>'; + return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code); } /** -- cgit v1.2.3