Code

Updated integrated smarty
[gosa.git] / gosa-core / include / smarty / sysplugins / smarty_internal_smartytemplatecompiler.php
1 <?php
2 /**
3  * Smarty Internal Plugin Smarty Template Compiler Base
4  *
5  * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
6  *
7  * @package Smarty
8  * @subpackage Compiler
9  * @author Uwe Tews
10  */
12 /**
13  * @ignore
14  */
15 include ("smarty_internal_parsetree.php");
17 /**
18  * Class SmartyTemplateCompiler
19  *
20  * @package Smarty
21  * @subpackage Compiler
22  */
23 class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase {
25     /**
26      * Lexer class name
27      *
28      * @var string
29      */
30     public $lexer_class;
32     /**
33      * Parser class name
34      *
35      * @var string
36      */
37     public $parser_class;
39     /**
40      * Lexer object
41      *
42      * @var object
43      */
44     public $lex;
46     /**
47      * Parser object
48      *
49      * @var object
50      */
51     public $parser;
53     /**
54      * Smarty object
55      *
56      * @var object
57      */
58     public $smarty;
60     /**
61      * array of vars which can be compiled in local scope
62      *
63      * @var array
64      */
65     public $local_var = array();
67     /**
68      * Initialize compiler
69      *
70      * @param string $lexer_class  class name
71      * @param string $parser_class class name
72      * @param Smarty $smarty       global instance
73      */
74     public function __construct($lexer_class, $parser_class, $smarty)
75     {
76         $this->smarty = $smarty;
77         parent::__construct();
78         // get required plugins
79         $this->lexer_class = $lexer_class;
80         $this->parser_class = $parser_class;
81     }
83     /**
84      * Methode to compile a Smarty template
85      *
86      * @param  mixed $_content template source
87      * @return bool true if compiling succeeded, false if it failed
88      */
89     protected function doCompile($_content)
90     {
91         /* here is where the compiling takes place. Smarty
92           tags in the templates are replaces with PHP code,
93           then written to compiled files. */
94         // init the lexer/parser to compile the template
95         $this->lex = new $this->lexer_class($_content, $this);
96         $this->parser = new $this->parser_class($this->lex, $this);
97         if ($this->smarty->_parserdebug)
98             $this->parser->PrintTrace();
99         // get tokens from lexer and parse them
100         while ($this->lex->yylex() && !$this->abort_and_recompile) {
101             if ($this->smarty->_parserdebug) {
102                 echo "<pre>Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token " .
103                     htmlentities($this->lex->value) . "</pre>";
104             }
105             $this->parser->doParse($this->lex->token, $this->lex->value);
106         }
108         if ($this->abort_and_recompile) {
109             // exit here on abort
110             return false;
111         }
112         // finish parsing process
113         $this->parser->doParse(0, 0);
114         // check for unclosed tags
115         if (count($this->_tag_stack) > 0) {
116             // get stacked info
117             list($openTag, $_data) = array_pop($this->_tag_stack);
118             $this->trigger_template_error("unclosed {" . $openTag . "} tag");
119         }
120         // return compiled code
121         // return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue);
122         return $this->parser->retvalue;
123     }
127 ?>