From 51609351f2c4b5082b7e6f0744cd3811c325303f Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 11 Oct 2016 14:01:29 +0200 Subject: * initial template --- .../smarty_internal_smartytemplatecompiler.php | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 lib/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php (limited to 'lib/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php') diff --git a/lib/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php b/lib/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php new file mode 100644 index 0000000..1ec1aa4 --- /dev/null +++ b/lib/smarty/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