From 6fc07742f8fca9d32db23243d374ea27e8ee4c1e Mon Sep 17 00:00:00 2001 From: rvelices Date: Thu, 20 Jun 2013 03:38:47 +0000 Subject: smarty 3 - first pass for tests git-svn-id: http://piwigo.org/svn/trunk@23384 68402e56-0260-453c-a942-63ccdbb3a9ee --- .../smarty_internal_smartytemplatecompiler.php | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php (limited to 'include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php') diff --git a/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php new file mode 100644 index 000000000..1ec1aa430 --- /dev/null +++ b/include/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php @@ -0,0 +1,127 @@ +smarty = $smarty; + parent::__construct(); + // get required plugins + $this->lexer_class = $lexer_class; + $this->parser_class = $parser_class; + } + + /** + * Methode to compile a Smarty template + * + * @param mixed $_content template source + * @return bool true if compiling succeeded, false if it failed + */ + protected function doCompile($_content) + { + /* here is where the compiling takes place. Smarty + tags in the templates are replaces with PHP code, + then written to compiled files. */ + // init the lexer/parser to compile the template + $this->lex = new $this->lexer_class($_content, $this); + $this->parser = new $this->parser_class($this->lex, $this); + if ($this->smarty->_parserdebug) + $this->parser->PrintTrace(); + // get tokens from lexer and parse them + while ($this->lex->yylex() && !$this->abort_and_recompile) { + if ($this->smarty->_parserdebug) { + echo "
Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token " .
+                    htmlentities($this->lex->value) . "
"; + } + $this->parser->doParse($this->lex->token, $this->lex->value); + } + + if ($this->abort_and_recompile) { + // exit here on abort + return false; + } + // finish parsing process + $this->parser->doParse(0, 0); + // check for unclosed tags + if (count($this->_tag_stack) > 0) { + // get stacked info + list($openTag, $_data) = array_pop($this->_tag_stack); + $this->trigger_template_error("unclosed {" . $openTag . "} tag"); + } + // return compiled code + // return str_replace(array("? >\nparser->retvalue); + return $this->parser->retvalue; + } + +} + +?> \ No newline at end of file -- cgit v1.2.3