<?php
class Smarty_Compiler extends Smarty {
var $_folded_blocks = array();
var $_current_file = null;
var $_current_line_no = 1;
var $_capture_stack = array();
var $_plugin_info = array();
var $_init_smarty_vars = false;
var $_permitted_tokens = array('true','false','yes','no','on','off','null');
var $_db_qstr_regexp = null;
var $_si_qstr_regexp = null;
var $_qstr_regexp = null;
var $_func_regexp = null;
var $_reg_obj_regexp = null;
var $_var_bracket_regexp = null;
var $_num_const_regexp = null;
var $_dvar_guts_regexp = null;
var $_dvar_regexp = null;
var $_cvar_regexp = null;
var $_svar_regexp = null;
var $_avar_regexp = null;
var $_mod_regexp = null;
var $_var_regexp = null;
var $_parenth_param_regexp = null;
var $_func_call_regexp = null;
var $_obj_ext_regexp = null;
var $_obj_start_regexp = null;
var $_obj_params_regexp = null;
var $_obj_call_regexp = null;
var $_cacheable_state = 0;
var $_cache_attrs_count = 0;
var $_nocache_count = 0;
var $_cache_serial = null;
var $_cache_include = null;
var $_strip_depth = 0;
var $_additional_newline = "\n";
function Smarty_Compiler()
{
$this->_db_qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';
$this->_si_qstr_regexp = '\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'';
$this->_qstr_regexp = '(?:'.$this->_db_qstr_regexp .'|'.$this->_si_qstr_regexp .')';
$this->_var_bracket_regexp = '\[\$?[\w\.]+\]';
$this->_num_const_regexp = '(?:\-?\d+(?:\.\d+)?)';
$this->_dvar_math_regexp = '(?:[\+\*\/\%]|(?:-(?!>)))';
$this->_dvar_math_var_regexp = '[\$\w\.\+\-\*\/\%\d\>\[\]]';
$this->_dvar_guts_regexp = '\w+(?:'.$this->_var_bracket_regexp
.')*(?:\.\$?\w+(?:'.$this->_var_bracket_regexp .')*)*(?:'.$this->_dvar_math_regexp .'(?:'.$this->_num_const_regexp .'|'.$this->_dvar_math_var_regexp .')*)?';
$this->_dvar_regexp = '\$'.$this->_dvar_guts_regexp;
$this->_cvar_regexp = '\#\w+\#';
$this->_svar_regexp = '\%\w+\.\w+\%';
$this->_avar_regexp = '(?:'.$this->_dvar_regexp .'|'
.$this->_cvar_regexp .'|'.$this->_svar_regexp .')';
$this->_var_regexp = '(?:'.$this->_avar_regexp .'|'.$this->_qstr_regexp .')';
$this->_obj_ext_regexp = '\->(?:\$?'.$this->_dvar_guts_regexp .')';
$this->_obj_restricted_param_regexp = '(?:'
.'(?:'.$this->_var_regexp .'|'.$this->_num_const_regexp .')(?:'.$this->_obj_ext_regexp .'(?:\((?:(?:'.$this->_var_regexp .'|'.$this->_num_const_regexp .')'
.'(?:\s*,\s*(?:'.$this->_var_regexp .'|'.$this->_num_const_regexp .'))*)?\))?)*)';
$this->_obj_single_param_regexp = '(?:\w+|'.$this->_obj_restricted_param_regexp .'(?:\s*,\s*(?:(?:\w+|'
.$this->_var_regexp .$this->_obj_restricted_param_regexp .')))*)';
$this->_obj_params_regexp = '\((?:'.$this->_obj_single_param_regexp
.'(?:\s*,\s*'.$this->_obj_single_param_regexp .')*)?\)';
$this->_obj_start_regexp = '(?:'.$this->_dvar_regexp .'(?:'.$this->_obj_ext_regexp .')+)';
$this->_obj_call_regexp = '(?:'.$this->_obj_start_regexp .'(?:'.$this->_obj_params_regexp .')?(?:'.$this->_dvar_math_regexp .'(?:'.$this->_num_const_regexp .'|'.$this->_dvar_math_var_regexp .')*)?)';
$this->_mod_regexp = '(?:\|@?\w+(?::(?:\w+|'.$this->_num_const_regexp .'|'
.$this->_obj_call_regexp .'|'.$this->_avar_regexp .'|'.$this->_qstr_regexp .'))*)';
$this->_func_regexp = '[a-zA-Z_]\w*';
$this->_reg_obj_regexp = '[a-zA-Z_]\w*->[a-zA-Z_]\w*';
$this->_param_regexp = '(?:\s*(?:'.$this->_obj_call_regexp .'|'
.$this->_var_regexp .'|'.$this->_num_const_regexp .'|\w+)(?>'.$this->_mod_regexp .'*)\s*)';
$this->_parenth_param_regexp = '(?:\((?:\w+|'
.$this->_param_regexp .'(?:\s*,\s*(?:(?:\w+|'
.$this->_param_regexp .')))*)?\))';
$this->_func_call_regexp = '(?:'.$this->_func_regexp .'\s*(?:'
.$this->_parenth_param_regexp .'))';
}
function _compile_file($resource_name,$source_content,&$compiled_content)
{
if ($this->security) {
if ($this->php_handling == SMARTY_PHP_ALLOW &&
!$this->security_settings['PHP_HANDLING']) {
$this->php_handling = SMARTY_PHP_PASSTHRU;
}
}
$this->_load_filters();
$this->_current_file = $resource_name;
$this->_current_line_no = 1;
$ldq = preg_quote($this->left_delimiter,'~');
$rdq = preg_quote($this->right_delimiter,'~');
if (count($this->_plugins['prefilter']) >0) {
foreach ($this->_plugins['prefilter'] as $filter_name =>$prefilter) {
if ($prefilter === false) continue;
if ($prefilter[3] ||is_callable($prefilter[0])) {
$source_content = call_user_func_array($prefilter[0],
array($source_content,&$this));
$this->_plugins['prefilter'][$filter_name][3] = true;
}else {
$this->_trigger_fatal_error("[plugin] prefilter '$filter_name' is not implemented");
}
}
}
$search = "~{$ldq}\*(.*?)\*{$rdq}|{$ldq}\s*literal\s*{$rdq}(.*?){$ldq}\s*/literal\s*{$rdq}|{$ldq}\s*php\s*{$rdq}(.*?){$ldq}\s*/php\s*{$rdq}~s";
preg_match_all($search,$source_content,$match,PREG_SET_ORDER);
$this->_folded_blocks = $match;
reset($this->_folded_blocks);
$source_content = preg_replace($search.'e',"'"
.$this->_quote_replace($this->left_delimiter) .'php'
."' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
.$this->_quote_replace($this->right_delimiter)
."'"
,$source_content);
preg_match_all("~{$ldq}\s*(.*?)\s*{$rdq}~s",$source_content,$_match);
$template_tags = $_match[1];
$text_blocks = preg_split("~{$ldq}.*?{$rdq}~s",$source_content);
for ($curr_tb = 0,$for_max = count($text_blocks);$curr_tb <$for_max;$curr_tb++) {
if (preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?\s*php\s*[\"\']?)~is',$text_blocks[$curr_tb],$sp_match)) {
$sp_match[1] = array_unique($sp_match[1]);
usort($sp_match[1],'_smarty_sort_length');
for ($curr_sp = 0,$for_max2 = count($sp_match[1]);$curr_sp <$for_max2;$curr_sp++) {
$text_blocks[$curr_tb] = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$text_blocks[$curr_tb]);
}
for ($curr_sp = 0,$for_max2 = count($sp_match[1]);$curr_sp <$for_max2;$curr_sp++) {
if ($this->php_handling == SMARTY_PHP_PASSTHRU) {
$text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%','<?php echo \''.str_replace("'","\'",$sp_match[1][$curr_sp]).'\'; ?>'."\n",$text_blocks[$curr_tb]);
}else if ($this->php_handling == SMARTY_PHP_QUOTE) {
$text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%',htmlspecialchars($sp_match[1][$curr_sp]),$text_blocks[$curr_tb]);
}else if ($this->php_handling == SMARTY_PHP_REMOVE) {
$text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%','',$text_blocks[$curr_tb]);
}else {
$sp_match[1][$curr_sp] = preg_replace('~(<\?(?!php|=|$))~i','<?php echo \'\\1\'?>'."\n",$sp_match[1][$curr_sp]);
$text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%',$sp_match[1][$curr_sp],$text_blocks[$curr_tb]);
}
}
}
}
$compiled_tags = array();
for ($i = 0,$for_max = count($template_tags);$i <$for_max;$i++) {
$this->_current_line_no += substr_count($text_blocks[$i],"\n");
$compiled_tags[] = $this->_compile_tag($template_tags[$i]);
$this->_current_line_no += substr_count($template_tags[$i],"\n");
}
if (count($this->_tag_stack)>0) {
list($_open_tag,$_line_no) = end($this->_tag_stack);
$this->_syntax_error("unclosed tag \{$_open_tag} (opened line $_line_no).",E_USER_ERROR,__FILE__,__LINE__);
return;
}
$strip = false;
for ($i = 0,$for_max = count($compiled_tags);$i <$for_max;$i++) {
if ($compiled_tags[$i] == '{strip}') {
$compiled_tags[$i] = '';
$strip = true;
$text_blocks[$i +1] = ltrim($text_blocks[$i +1]);
}
if ($strip) {
for ($j = $i +1;$j <$for_max;$j++) {
$text_blocks[$j] = preg_replace('![\t ]*[\r\n]+[\t ]*!','',$text_blocks[$j]);
if ($compiled_tags[$j] == '{/strip}') {
$text_blocks[$j] = rtrim($text_blocks[$j]);
}
$text_blocks[$j] = "<?php echo '".strtr($text_blocks[$j],array("'"=>"\'","\\"=>"\\\\")) ."'; ?>";
if ($compiled_tags[$j] == '{/strip}') {
$compiled_tags[$j] = "\n";
$strip = false;
$i = $j;
break;
}
}
}
}
$compiled_content = '';
$tag_guard = '%%%SMARTYOTG'.