source: pro-violet-viettel/sourcecode/application/third_party/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php

Last change on this file was 345, checked in by quyenla, 11 years ago

collaborator page

File size: 3.2 KB
Line 
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 */
11
12/**
13 * @ignore
14 */
15include ("smarty_internal_parsetree.php");
16
17/**
18 * Class SmartyTemplateCompiler
19 *
20 * @package Smarty
21 * @subpackage Compiler
22 */
23class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase {
24
25    /**
26     * Lexer class name
27     *
28     * @var string
29     */
30    public $lexer_class;
31
32    /**
33     * Parser class name
34     *
35     * @var string
36     */
37    public $parser_class;
38
39    /**
40     * Lexer object
41     *
42     * @var object
43     */
44    public $lex;
45
46    /**
47     * Parser object
48     *
49     * @var object
50     */
51    public $parser;
52
53    /**
54     * Smarty object
55     *
56     * @var object
57     */
58    public $smarty;
59
60    /**
61     * array of vars which can be compiled in local scope
62     *
63     * @var array
64     */
65    public $local_var = array();
66
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    }
82
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        }
107
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    }
124
125}
126
127?>
Note: See TracBrowser for help on using the repository browser.