[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
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 */ 15 include ("smarty_internal_parsetree.php"); 16 17 /** 18 * Class SmartyTemplateCompiler 19 * 20 * @package Smarty 21 * @subpackage Compiler 22 */ 23 class 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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |