diff options
author | Vasudev Kamath <kamathvasudev@gmail.com> | 2012-07-06 22:47:27 +0530 |
---|---|---|
committer | Vasudev Kamath <kamathvasudev@gmail.com> | 2012-07-06 22:47:27 +0530 |
commit | ba4db236ecff1ffdb56adc2715b3f53515f8cb34 (patch) | |
tree | f0b9928aade8aab95d1608890fde1918ce163754 /library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php | |
parent | 6e4760dd9c512147309b5e4a98d25216610f81da (diff) | |
parent | a122fecf50d06856a2ada8b564f711fb52c327f0 (diff) | |
download | volse-hubzilla-ba4db236ecff1ffdb56adc2715b3f53515f8cb34.tar.gz volse-hubzilla-ba4db236ecff1ffdb56adc2715b3f53515f8cb34.tar.bz2 volse-hubzilla-ba4db236ecff1ffdb56adc2715b3f53515f8cb34.zip |
Merge branch 'master' of git://github.com/friendica/friendica
Diffstat (limited to 'library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php')
-rw-r--r-- | library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php new file mode 100644 index 000000000..1ec1aa430 --- /dev/null +++ b/library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php @@ -0,0 +1,127 @@ +<?php +/** + * Smarty Internal Plugin Smarty Template Compiler Base + * + * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser + * + * @package Smarty + * @subpackage Compiler + * @author Uwe Tews + */ + +/** + * @ignore + */ +include ("smarty_internal_parsetree.php"); + +/** + * Class SmartyTemplateCompiler + * + * @package Smarty + * @subpackage Compiler + */ +class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase { + + /** + * Lexer class name + * + * @var string + */ + public $lexer_class; + + /** + * Parser class name + * + * @var string + */ + public $parser_class; + + /** + * Lexer object + * + * @var object + */ + public $lex; + + /** + * Parser object + * + * @var object + */ + public $parser; + + /** + * Smarty object + * + * @var object + */ + public $smarty; + + /** + * array of vars which can be compiled in local scope + * + * @var array + */ + public $local_var = array(); + + /** + * Initialize compiler + * + * @param string $lexer_class class name + * @param string $parser_class class name + * @param Smarty $smarty global instance + */ + public function __construct($lexer_class, $parser_class, $smarty) + { + $this->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 "<pre>Line {$this->lex->line} Parsing {$this->parser->yyTokenName[$this->lex->token]} Token " . + htmlentities($this->lex->value) . "</pre>"; + } + $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("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue); + return $this->parser->retvalue; + } + +} + +?>
\ No newline at end of file |