aboutsummaryrefslogtreecommitdiffstats
path: root/library/Smarty/lexer
diff options
context:
space:
mode:
Diffstat (limited to 'library/Smarty/lexer')
-rw-r--r--library/Smarty/lexer/smarty_internal_configfilelexer.plex318
-rw-r--r--library/Smarty/lexer/smarty_internal_configfileparser.y362
-rw-r--r--library/Smarty/lexer/smarty_internal_templatelexer.plex770
-rw-r--r--library/Smarty/lexer/smarty_internal_templateparser.y1329
4 files changed, 0 insertions, 2779 deletions
diff --git a/library/Smarty/lexer/smarty_internal_configfilelexer.plex b/library/Smarty/lexer/smarty_internal_configfilelexer.plex
deleted file mode 100644
index 94196be5f..000000000
--- a/library/Smarty/lexer/smarty_internal_configfilelexer.plex
+++ /dev/null
@@ -1,318 +0,0 @@
-<?php
-/**
-* Smarty Internal Plugin Configfilelexer
-*
-* This is the lexer to break the config file source into tokens
-* @package Smarty
-* @subpackage Config
-* @author Uwe Tews
-*/
-/**
-* Smarty_Internal_Configfilelexer
-*
-* This is the config file lexer.
-* It is generated from the smarty_internal_configfilelexer.plex file
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
-class Smarty_Internal_Configfilelexer
-{
- /**
- * Source
- *
- * @var string
- */
- public $data;
- /**
- * byte counter
- *
- * @var int
- */
- public $counter;
- /**
- * token number
- *
- * @var int
- */
- public $token;
- /**
- * token value
- *
- * @var string
- */
- public $value;
- /**
- * current line
- *
- * @var int
- */
- public $line;
- /**
- * state number
- *
- * @var int
- */
- public $state = 1;
- /**
- * Smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
- /**
- * compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler
- */
- private $compiler = null;
- /**
- * copy of config_booleanize
- *
- * @var bool
- */
- private $configBooleanize = false;
- /**
- * trace file
- *
- * @var resource
- */
- public $yyTraceFILE;
- /**
- * trace prompt
- *
- * @var string
- */
- public $yyTracePrompt;
- /**
- * state names
- *
- * @var array
- */
- public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
-
- /**
- * storage for assembled token patterns
- *
- * @var sring
- */
- private $yy_global_pattern1 = null;
- private $yy_global_pattern2 = null;
- private $yy_global_pattern3 = null;
- private $yy_global_pattern4 = null;
- private $yy_global_pattern5 = null;
- private $yy_global_pattern6 = null;
-
- /**
- * token names
- *
- * @var array
- */
- public $smarty_token_names = array( // Text for parser error messages
- );
-
- /**
- * constructor
- *
- * @param string $data template source
- * @param Smarty_Internal_Config_File_Compiler $compiler
- */
- function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
- {
- // set instance object
- self::instance($this);
- $this->data = $data . "\n"; //now all lines are \n-terminated
- $this->counter = 0;
- if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
- $this->counter += strlen($match[0]);
- }
- $this->line = 1;
- $this->compiler = $compiler;
- $this->smarty = $compiler->smarty;
- $this->configBooleanize = $this->smarty->config_booleanize;
- }
-
- public static function &instance($new_instance = null)
- {
- static $instance = null;
- if (isset($new_instance) && is_object($new_instance)) {
- $instance = $new_instance;
- }
- return $instance;
- }
-
- public function PrintTrace()
- {
- $this->yyTraceFILE = fopen('php://output', 'w');
- $this->yyTracePrompt = '<br>';
- }
-
-
-/*!lex2php
-%input $this->data
-%counter $this->counter
-%token $this->token
-%value $this->value
-%line $this->line
-commentstart = /#|;/
-openB = /\[/
-closeB = /\]/
-section = /.*?(?=[\.=\[\]\r\n])/
-equal = /=/
-whitespace = /[ \t\r]+/
-dot = /\./
-id = /[0-9]*[a-zA-Z_]\w*/
-newline = /\n/
-single_quoted_string = /'[^'\\]*(?:\\.[^'\\]*)*'(?=[ \t\r]*[\n#;])/
-double_quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"(?=[ \t\r]*[\n#;])/
-tripple_quotes = /"""/
-tripple_quotes_end = /"""(?=[ \t\r]*[\n#;])/
-text = /[\S\s]/
-float = /\d+\.\d+(?=[ \t\r]*[\n#;])/
-int = /\d+(?=[ \t\r]*[\n#;])/
-maybe_bool = /[a-zA-Z]+(?=[ \t\r]*[\n#;])/
-naked_string = /[^\n]+?(?=[ \t\r]*\n)/
-*/
-
-/*!lex2php
-%statename START
-
-commentstart {
- $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
- $this->yypushstate(self::COMMENT);
-}
-openB {
- $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
- $this->yypushstate(self::SECTION);
-}
-closeB {
- $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
-}
-equal {
- $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
- $this->yypushstate(self::VALUE);
-}
-whitespace {
- return false;
-}
-newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
-}
-id {
- $this->token = Smarty_Internal_Configfileparser::TPC_ID;
-}
-text {
- $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
-}
-
-*/
-
-/*!lex2php
-%statename VALUE
-
-whitespace {
- return false;
-}
-float {
- $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
- $this->yypopstate();
-}
-int {
- $this->token = Smarty_Internal_Configfileparser::TPC_INT;
- $this->yypopstate();
-}
-tripple_quotes {
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
- $this->yypushstate(self::TRIPPLE);
-}
-single_quoted_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
- $this->yypopstate();
-}
-double_quoted_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
- $this->yypopstate();
-}
-maybe_bool {
- if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) {
- $this->yypopstate();
- $this->yypushstate(self::NAKED_STRING_VALUE);
- return true; //reprocess in new state
- } else {
- $this->token = Smarty_Internal_Configfileparser::TPC_BOOL;
- $this->yypopstate();
- }
-}
-naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
-}
-newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->value = "";
- $this->yypopstate();
-}
-
-*/
-
-/*!lex2php
-%statename NAKED_STRING_VALUE
-
-naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
- $this->yypopstate();
-}
-
-*/
-
-/*!lex2php
-%statename COMMENT
-
-whitespace {
- return false;
-}
-naked_string {
- $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
-}
-newline {
- $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
- $this->yypopstate();
-}
-
-*/
-
-/*!lex2php
-%statename SECTION
-
-dot {
- $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
-}
-section {
- $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
- $this->yypopstate();
-}
-
-*/
-/*!lex2php
-%statename TRIPPLE
-
-tripple_quotes_end {
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
- $this->yypopstate();
- $this->yypushstate(self::START);
-}
-text {
- $to = strlen($this->data);
- preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT;
-}
-*/
-
-}
diff --git a/library/Smarty/lexer/smarty_internal_configfileparser.y b/library/Smarty/lexer/smarty_internal_configfileparser.y
deleted file mode 100644
index ac961772d..000000000
--- a/library/Smarty/lexer/smarty_internal_configfileparser.y
+++ /dev/null
@@ -1,362 +0,0 @@
-/**
-* Smarty Internal Plugin Configfileparser
-*
-* This is the config file parser
-*
-*
-* @package Smarty
-* @subpackage Config
-* @author Uwe Tews
-*/
-%name TPC_
-%declare_class {
-/**
-* Smarty Internal Plugin Configfileparse
-*
-* This is the config file parser.
-* It is generated from the smarty_internal_configfileparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
-class Smarty_Internal_Configfileparser
-}
-%include_class
-{
- /**
- * result status
- *
- * @var bool
- */
- public $successful = true;
- /**
- * return value
- *
- * @var mixed
- */
- public $retvalue = 0;
- /**
- * @var
- */
- public $yymajor;
- /**
- * lexer object
- *
- * @var Smarty_Internal_Configfilelexer
- */
- private $lex;
- /**
- * internal error flag
- *
- * @var bool
- */
- private $internalError = false;
- /**
- * compiler object
- *
- * @var Smarty_Internal_Config_File_Compiler
- */
- public $compiler = null;
- /**
- * smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
- /**
- * copy of config_overwrite property
- *
- * @var bool
- */
- private $configOverwrite = false;
- /**
- * copy of config_read_hidden property
- *
- * @var bool
- */
- private $configReadHidden = false;
- /**
- * helper map
- *
- * @var array
- */
- private static $escapes_single = Array('\\' => '\\',
- '\'' => '\'');
-
- /**
- * constructor
- *
- * @param Smarty_Internal_Configfilelexer $lex
- * @param Smarty_Internal_Config_File_Compiler $compiler
- */
- function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
- {
- // set instance object
- self::instance($this);
- $this->lex = $lex;
- $this->smarty = $compiler->smarty;
- $this->compiler = $compiler;
- $this->configOverwrite = $this->smarty->config_overwrite;
- $this->configReadHidden = $this->smarty->config_read_hidden;
- }
-
- /**
- * @param null $new_instance
- *
- * @return null
- */
- public static function &instance($new_instance = null)
- {
- static $instance = null;
- if (isset($new_instance) && is_object($new_instance)) {
- $instance = $new_instance;
- }
- return $instance;
- }
-
- /**
- * parse optional boolean keywords
- *
- * @param string $str
- *
- * @return bool
- */
- private function parse_bool($str)
- {
- $str = strtolower($str);
- if (in_array($str, array('on', 'yes', 'true'))) {
- $res = true;
- } else {
- $res = false;
- }
- return $res;
- }
-
- /**
- * parse single quoted string
- * remove outer quotes
- * unescape inner quotes
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_single_quoted_string($qstr)
- {
- $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes
-
- $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
-
- $str = "";
- foreach ($ss as $s) {
- if (strlen($s) === 2 && $s[0] === '\\') {
- if (isset(self::$escapes_single[$s[1]])) {
- $s = self::$escapes_single[$s[1]];
- }
- }
- $str .= $s;
- }
- return $str;
- }
-
- /**
- * parse double quoted string
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_double_quoted_string($qstr)
- {
- $inner_str = substr($qstr, 1, strlen($qstr) - 2);
- return stripcslashes($inner_str);
- }
-
- /**
- * parse triple quoted string
- *
- * @param string $qstr
- *
- * @return string
- */
- private static function parse_tripple_double_quoted_string($qstr)
- {
- return stripcslashes($qstr);
- }
-
- /**
- * set a config variable in target array
- *
- * @param array $var
- * @param array $target_array
- */
- private function set_var(Array $var, Array &$target_array)
- {
- $key = $var["key"];
- $value = $var["value"];
-
- if ($this->configOverwrite || !isset($target_array['vars'][$key])) {
- $target_array['vars'][$key] = $value;
- } else {
- settype($target_array['vars'][$key], 'array');
- $target_array['vars'][$key][] = $value;
- }
- }
-
- /**
- * add config variable to global vars
- *
- * @param array $vars
- */
- private function add_global_vars(Array $vars)
- {
- if (!isset($this->compiler->config_data['vars'])) {
- $this->compiler->config_data['vars'] = Array();
- }
- foreach ($vars as $var) {
- $this->set_var($var, $this->compiler->config_data);
- }
- }
-
- /**
- * add config variable to section
- *
- * @param string $section_name
- * @param array $vars
- */
- private function add_section_vars($section_name, Array $vars)
- {
- if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) {
- $this->compiler->config_data['sections'][$section_name]['vars'] = Array();
- }
- foreach ($vars as $var) {
- $this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
- }
- }
-}
-
-%token_prefix TPC_
-
-%parse_accept
-{
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
-}
-
-%syntax_error
-{
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_config_file_error();
-}
-
-%stack_overflow
-{
- $this->internalError = true;
- $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
-}
-
-// Complete config file
-start(res) ::= global_vars sections. {
- res = null;
-}
-
-// Global vars
-global_vars(res) ::= var_list(vl). {
- $this->add_global_vars(vl);
- res = null;
-}
-
-// Sections
-sections(res) ::= sections section. {
- res = null;
-}
-
-sections(res) ::= . {
- res = null;
-}
-
-section(res) ::= OPENB SECTION(i) CLOSEB newline var_list(vars). {
- $this->add_section_vars(i, vars);
- res = null;
-}
-
-section(res) ::= OPENB DOT SECTION(i) CLOSEB newline var_list(vars). {
- if ($this->configReadHidden) {
- $this->add_section_vars(i, vars);
- }
- res = null;
-}
-
-// Var list
-var_list(res) ::= var_list(vl) newline. {
- res = vl;
-}
-
-var_list(res) ::= var_list(vl) var(v). {
- res = array_merge(vl, Array(v));
-}
-
-var_list(res) ::= . {
- res = Array();
-}
-
-
-// Var
-var(res) ::= ID(id) EQUAL value(v). {
- res = Array("key" => id, "value" => v);
-}
-
-
-value(res) ::= FLOAT(i). {
- res = (float) i;
-}
-
-value(res) ::= INT(i). {
- res = (int) i;
-}
-
-value(res) ::= BOOL(i). {
- res = $this->parse_bool(i);
-}
-
-value(res) ::= SINGLE_QUOTED_STRING(i). {
- res = self::parse_single_quoted_string(i);
-}
-
-value(res) ::= DOUBLE_QUOTED_STRING(i). {
- res = self::parse_double_quoted_string(i);
-}
-
-value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_TEXT(c) TRIPPLE_QUOTES_END(ii). {
- res = self::parse_tripple_double_quoted_string(c);
-}
-
-value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_QUOTES_END(ii). {
- res = '';
-}
-
-value(res) ::= NAKED_STRING(i). {
- res = i;
-}
-
-// NOTE: this is not a valid rule
-// It is added hier to produce a usefull error message on a missing '=';
-value(res) ::= OTHER(i). {
- res = i;
-}
-
-
-// Newline and comments
-newline(res) ::= NEWLINE. {
- res = null;
-}
-
-newline(res) ::= COMMENTSTART NEWLINE. {
- res = null;
-}
-
-newline(res) ::= COMMENTSTART NAKED_STRING NEWLINE. {
- res = null;
-}
diff --git a/library/Smarty/lexer/smarty_internal_templatelexer.plex b/library/Smarty/lexer/smarty_internal_templatelexer.plex
deleted file mode 100644
index e36df5970..000000000
--- a/library/Smarty/lexer/smarty_internal_templatelexer.plex
+++ /dev/null
@@ -1,770 +0,0 @@
-<?php
-/**
- * Smarty Internal Plugin Templatelexer
- * This is the lexer to break the template source into tokens
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
-/**
- * Smarty_Internal_Templatelexer
- * This is the template file lexer.
- * It is generated from the smarty_internal_templatelexer.plex file
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-class Smarty_Internal_Templatelexer
-{
- /**
- * Source
- *
- * @var string
- */
- public $data;
- /**
- * byte counter
- *
- * @var int
- */
- public $counter;
- /**
- * token number
- *
- * @var int
- */
- public $token;
- /**
- * token value
- *
- * @var string
- */
- public $value;
- /**
- * current line
- *
- * @var int
- */
- public $line;
- /**
- * tag start line
- *
- * @var
- */
- public $taglineno;
- /**
- * php code type
- *
- * @var string
- */
- public $phpType = '';
- /**
- * escaped left delimiter
- *
- * @var string
- */
- public $ldel = '';
- /**
- * escaped left delimiter length
- *
- * @var int
- */
- public $ldel_length = 0;
- /**
- * escaped right delimiter
- *
- * @var string
- */
- public $rdel = '';
- /**
- * escaped right delimiter length
- *
- * @var int
- */
- public $rdel_length = 0;
- /**
- * state number
- *
- * @var int
- */
- public $state = 1;
- /**
- * Smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
- /**
- * compiler object
- *
- * @var Smarty_Internal_TemplateCompilerBase
- */
- public $compiler = null;
- /**
- * literal tag nesting level
- *
- * @var int
- */
- private $literal_cnt = 0;
-
- /**
- * PHP start tag string
- *
- * @var string
- */
-
- /**
- * trace file
- *
- * @var resource
- */
- public $yyTraceFILE;
-
- /**
- * trace prompt
- *
- * @var string
- */
- public $yyTracePrompt;
-
- /**
- * XML flag true while processing xml
- *
- * @var bool
- */
- public $is_xml = false;
-
- /**
- * state names
- *
- * @var array
- */
- public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING',
- 6 => 'CHILDBODY', 7 => 'CHILDBLOCK', 8 => 'CHILDLITERAL');
-
- /**
- * storage for assembled token patterns
- *
- * @var string
- */
- private $yy_global_pattern1 = null;
-
- private $yy_global_pattern2 = null;
-
- private $yy_global_pattern3 = null;
-
- private $yy_global_pattern4 = null;
-
- private $yy_global_pattern5 = null;
-
- private $yy_global_pattern6 = null;
-
- private $yy_global_pattern7 = null;
-
- private $yy_global_pattern8 = null;
-
- /**
- * token names
- *
- * @var array
- */
- public $smarty_token_names = array( // Text for parser error messages
- 'NOT' => '(!,not)',
- 'OPENP' => '(',
- 'CLOSEP' => ')',
- 'OPENB' => '[',
- 'CLOSEB' => ']',
- 'PTR' => '->',
- 'APTR' => '=>',
- 'EQUAL' => '=',
- 'NUMBER' => 'number',
- 'UNIMATH' => '+" , "-',
- 'MATH' => '*" , "/" , "%',
- 'INCDEC' => '++" , "--',
- 'SPACE' => ' ',
- 'DOLLAR' => '$',
- 'SEMICOLON' => ';',
- 'COLON' => ':',
- 'DOUBLECOLON' => '::',
- 'AT' => '@',
- 'HATCH' => '#',
- 'QUOTE' => '"',
- 'BACKTICK' => '`',
- 'VERT' => '"|" modifier',
- 'DOT' => '.',
- 'COMMA' => '","',
- 'QMARK' => '"?"',
- 'ID' => 'id, name',
- 'TEXT' => 'text',
- 'LDELSLASH' => '{/..} closing tag',
- 'LDEL' => '{...} Smarty tag',
- 'COMMENT' => 'comment',
- 'AS' => 'as',
- 'TO' => 'to',
- 'PHP' => '"<?php", "<%", "{php}" tag',
- 'LOGOP' => '"<", "==" ... logical operator',
- 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition',
- 'SCOND' => '"is even" ... if condition',
- );
-
- /**
- * constructor
- *
- * @param string $data template source
- * @param Smarty_Internal_TemplateCompilerBase $compiler
- */
- function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->data = $data;
- $this->counter = 0;
- if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) {
- $this->counter += strlen($match[0]);
- }
- $this->line = 1;
- $this->smarty = $compiler->smarty;
- $this->compiler = $compiler;
- $this->ldel = preg_quote($this->smarty->left_delimiter, '~');
- $this->ldel_length = strlen($this->smarty->left_delimiter);
- $this->rdel = preg_quote($this->smarty->right_delimiter, '~');
- $this->rdel_length = strlen($this->smarty->right_delimiter);
- $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
- $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
- }
-
- public function PrintTrace()
- {
- $this->yyTraceFILE = fopen('php://output', 'w');
- $this->yyTracePrompt = '<br>';
- }
-
- /*
- * Check if this tag is autoliteral
- */
- public function isAutoLiteral ()
- {
- return $this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false;
- }
-
- /*!lex2php
- %input $this->data
- %counter $this->counter
- %token $this->token
- %value $this->value
- %line $this->line
- linebreak = ~[\t ]*[\r\n]+[\t ]*~
- text = ~[\S\s]~
- textdoublequoted = ~([^"\\]*?)((?:\\.[^"\\]*?)*?)(?=(SMARTYldel|\$|`\$|"))~
- namespace = ~([0-9]*[a-zA-Z_]\w*)?(\\[0-9]*[a-zA-Z_]\w*)+~
- all = ~[\S\s]+~
- emptyjava = ~[{][}]~
- phpstart = ~(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*["']?\s*php\s*["']?\s*>)|([?][>])|([%][>])|(SMARTYldel\s*php(.*?)SMARTYrdel)|(SMARTYldel\s*[/]phpSMARTYrdel)~
- slash = ~[/]~
- ldel = ~SMARTYldel\s*~
- rdel = ~\s*SMARTYrdel~
- nocacherdel = ~(\s+nocache)?\s*SMARTYrdel~
- notblockid = ~(?:(?!block)[0-9]*[a-zA-Z_]\w*)~
- smartyblockchildparent = ~[\$]smarty\.block\.(child|parent)~
- integer = ~\d+~
- hex = ~0[xX][0-9a-fA-F]+~
- math = ~\s*([*]{1,2}|[%/^&]|[<>]{2})\s*~
- comment = ~SMARTYldel[*]~
- incdec = ~([+]|[-]){2}~
- unimath = ~\s*([+]|[-])\s*~
- openP = ~\s*[(]\s*~
- closeP = ~\s*[)]~
- openB = ~\[\s*~
- closeB = ~\s*\]~
- dollar = ~[$]~
- dot = ~[.]~
- comma = ~\s*[,]\s*~
- doublecolon = ~[:]{2}~
- colon = ~\s*[:]\s*~
- at = ~[@]~
- hatch = ~[#]~
- semicolon = ~\s*[;]\s*~
- equal = ~\s*[=]\s*~
- space = ~\s+~
- ptr = ~\s*[-][>]\s*~
- aptr = ~\s*[=][>]\s*~
- singlequotestring = ~'[^'\\]*(?:\\.[^'\\]*)*'~
- backtick = ~[`]~
- vert = ~[|]~
- qmark = ~\s*[?]\s*~
- constant = ~([_]+[A-Z0-9][0-9A-Z_]*|[A-Z][0-9A-Z_]*)(?![0-9A-Z_]*[a-z])~
- attr = ~\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\s*[=]\s*~
- id = ~[0-9]*[a-zA-Z_]\w*~
- literal = ~literal~
- strip = ~strip~
- lop = ~\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\s*~
- tlop = ~\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\s+(not\s+)?(odd|even|div)\s+by))\s+~
- scond = ~\s+is\s+(not\s+)?(odd|even)~
- isin = ~\s+is\s+in\s+~
- as = ~\s+as\s+~
- to = ~\s+to\s+~
- step = ~\s+step\s+~
- block = ~block~
- if = ~(if|elseif|else if|while)\s+~
- for = ~for\s+~
- foreach = ~foreach(?![^\s])~
- setfilter = ~setfilter\s+~
- instanceof = ~\s+instanceof\s+~
- not = ~([!]\s*)|(not\s+)~
- typecast = ~[(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\s*~
- double_quote = ~["]~
- single_quote = ~[']~
- */
- /*!lex2php
- %statename TEXT
- emptyjava {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- comment {
- preg_match("~[*]{$this->rdel}~",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1] + strlen($match[0][0]);
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled comment closing tag '*{$this->smarty->right_delimiter}'");
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- return false;
- }
- phpstart {
- $obj = new Smarty_Internal_Compile_Private_Php();
- $obj->parsePhp($this);
- }
- ldel literal rdel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
- }
- }
- ldel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->yypushstate(self::TAG);
- return true;
- }
- }
- rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- text {
- $to = strlen($this->data);
- preg_match("~($this->ldel)|([<]script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*[>])|([<][?])|([<][%])|([?][>])|([%][>])~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- */
- /*!lex2php
- %statename TAG
- ldel if {
- $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- ldel for {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- ldel foreach {
- $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- ldel setfilter {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- ldel id nocacherdel {
- $this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG;
- $this->taglineno = $this->line;
- }
- ldel slash notblockid rdel {
- $this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG;
- $this->taglineno = $this->line;
- }
- ldel dollar id nocacherdel {
- if ($this->_yy_stack[count($this->_yy_stack)-1] == self::TEXT) {
- $this->yypopstate();
- $this->token = Smarty_Internal_Templateparser::TP_SIMPLEOUTPUT;
- $this->taglineno = $this->line;
- } else {
- $this->value = $this->smarty->left_delimiter;
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- }
- ldel slash {
- $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- ldel {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->yybegin(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- */
- /*!lex2php
- %statename TAGBODY
- rdel {
- $this->token = Smarty_Internal_Templateparser::TP_RDEL;
- $this->yypopstate();
- }
- double_quote {
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
- $this->yypushstate(self::DOUBLEQUOTEDSTRING);
- }
- singlequotestring {
- $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
- }
- smartyblockchildparent {
- $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
- $this->taglineno = $this->line;
- }
- dollar id {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
- }
- dollar {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
- }
- isin {
- $this->token = Smarty_Internal_Templateparser::TP_ISIN;
- }
- as {
- $this->token = Smarty_Internal_Templateparser::TP_AS;
- }
- to {
- $this->token = Smarty_Internal_Templateparser::TP_TO;
- }
- step {
- $this->token = Smarty_Internal_Templateparser::TP_STEP;
- }
- instanceof {
- $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
- }
- lop {
- $this->token = Smarty_Internal_Templateparser::TP_LOGOP;
- }
- tlop {
- $this->token = Smarty_Internal_Templateparser::TP_TLOGOP;
- }
- scond {
- $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND;
- }
- not{
- $this->token = Smarty_Internal_Templateparser::TP_NOT;
- }
- typecast {
- $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
- }
- openP {
- $this->token = Smarty_Internal_Templateparser::TP_OPENP;
- }
- closeP {
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
- }
- openB {
- $this->token = Smarty_Internal_Templateparser::TP_OPENB;
- }
- closeB {
- $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
- }
- ptr {
- $this->token = Smarty_Internal_Templateparser::TP_PTR;
- }
- aptr {
- $this->token = Smarty_Internal_Templateparser::TP_APTR;
- }
- equal {
- $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
- }
- incdec {
- $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
- }
- unimath {
- $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
- }
- math {
- $this->token = Smarty_Internal_Templateparser::TP_MATH;
- }
- at {
- $this->token = Smarty_Internal_Templateparser::TP_AT;
- }
- hatch {
- $this->token = Smarty_Internal_Templateparser::TP_HATCH;
- }
- attr {
- // resolve conflicts with shorttag and right_delimiter starting with '='
- if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) {
- preg_match("~\s+~",$this->value,$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_ATTR;
- }
- }
- namespace {
- $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
- }
- id {
- $this->token = Smarty_Internal_Templateparser::TP_ID;
- }
- integer {
- $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
- }
- backtick {
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->yypopstate();
- }
- vert {
- $this->token = Smarty_Internal_Templateparser::TP_VERT;
- }
- dot {
- $this->token = Smarty_Internal_Templateparser::TP_DOT;
- }
- comma {
- $this->token = Smarty_Internal_Templateparser::TP_COMMA;
- }
- semicolon {
- $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
- }
- doublecolon {
- $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
- }
- colon {
- $this->token = Smarty_Internal_Templateparser::TP_COLON;
- }
- qmark {
- $this->token = Smarty_Internal_Templateparser::TP_QMARK;
- }
- hex {
- $this->token = Smarty_Internal_Templateparser::TP_HEX;
- }
- space {
- $this->token = Smarty_Internal_Templateparser::TP_SPACE;
- }
- ldel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->yypushstate(self::TAG);
- return true;
- }
- }
- text {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- */
-
- /*!lex2php
- %statename LITERAL
- ldel literal rdel {
- $this->literal_cnt++;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
- }
- ldel slash literal rdel {
- if ($this->literal_cnt) {
- $this->literal_cnt--;
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
- $this->yypopstate();
- }
- }
- text {
- $to = strlen($this->data);
- preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
- }
- */
- /*!lex2php
- %statename DOUBLEQUOTEDSTRING
- ldel literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- ldel slash literal rdel {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- ldel slash {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->yypushstate(self::TAG);
- return true;
- }
- }
- ldel id {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->yypushstate(self::TAG);
- return true;
- }
- }
- ldel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LDEL;
- $this->taglineno = $this->line;
- $this->yypushstate(self::TAGBODY);
- }
- }
- double_quote {
- $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
- $this->yypopstate();
- }
- backtick dollar {
- $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
- $this->value = substr($this->value,0,-1);
- $this->yypushstate(self::TAGBODY);
- $this->taglineno = $this->line;
- }
- dollar id {
- $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
- }
- dollar {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- textdoublequoted {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- text {
- $to = strlen($this->data);
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- */
- /*!lex2php
- %statename CHILDBODY
- ldel strip rdel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- return false;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
- }
- }
- ldel slash strip rdel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- return false;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
- }
- }
- ldel block {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- return false;
- } else {
- $this->yypopstate();
- return true;
- }
- }
- text {
- $to = strlen($this->data);
- preg_match("~SMARTYldel\s*(([/])?strip\s*SMARTYrdel|block\s+)~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- return false;
- }
-
- */
- /*!lex2php
- %statename CHILDBLOCK
- ldel literal rdel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- $this->yypushstate(self::CHILDLITERAL);
- }
- }
- ldel block {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- } else {
- $this->yypopstate();
- return true;
- }
- }
- ldel slash block {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- } else {
- $this->yypopstate();
- return true;
- }
- }
- ldel smartyblockchildparent {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- } else {
- $this->yypopstate();
- return true;
- }
- }
- text {
- $to = strlen($this->data);
- preg_match("~SMARTYldel\s*(literal\s*SMARTYrdel|([/])?block(\s|SMARTYrdel)|[\$]smarty\.block\.(child|parent))~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- }
- */
- /*!lex2php
- %statename CHILDLITERAL
- ldel literal rdel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- $this->yypushstate(self::CHILDLITERAL);
- }
- }
- ldel slash literal rdel {
- if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- $this->yypopstate();
- }
- }
- text {
- $to = strlen($this->data);
- preg_match("~{$this->ldel}[/]?literal\s*{$this->rdel}~i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
- if (isset($match[0][1])) {
- $to = $match[0][1];
- } else {
- $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
- }
- $this->value = substr($this->data,$this->counter,$to-$this->counter);
- $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
- }
- */
- }
-
- \ No newline at end of file
diff --git a/library/Smarty/lexer/smarty_internal_templateparser.y b/library/Smarty/lexer/smarty_internal_templateparser.y
deleted file mode 100644
index 225f71b24..000000000
--- a/library/Smarty/lexer/smarty_internal_templateparser.y
+++ /dev/null
@@ -1,1329 +0,0 @@
-/**
-* Smarty Internal Plugin Templateparser
-*
-* This is the template parser
-*
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
-%stack_size 500
-%name TP_
-%declare_class {
-/**
-* Smarty Internal Plugin Templateparser
-*
-* This is the template parser.
-* It is generated from the smarty_internal_templateparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
-class Smarty_Internal_Templateparser
-}
-%include_class
-{
- const Err1 = "Security error: Call to private object member not allowed";
- const Err2 = "Security error: Call to dynamic object member not allowed";
- const Err3 = "PHP in template not allowed. Use SmartyBC to enable it";
-
- /**
- * result status
- *
- * @var bool
- */
- public $successful = true;
- /**
- * return value
- *
- * @var mixed
- */
- public $retvalue = 0;
- /**
- * counter for prefix code
- *
- * @var int
- */
- public static $prefix_number = 0;
- /**
- * @var
- */
- public $yymajor;
- /**
- * last index of array variable
- *
- * @var mixed
- */
- public $last_index;
- /**
- * last variable name
- *
- * @var string
- */
- public $last_variable;
- /**
- * root parse tree buffer
- *
- * @var Smarty_Internal_ParseTree
- */
- public $root_buffer;
- /**
- * current parse tree object
- *
- * @var Smarty_Internal_ParseTree
- */
- public $current_buffer;
- /**
- * lexer object
- *
- * @var Smarty_Internal_Templatelexer
- */
- private $lex;
- /**
- * internal error flag
- *
- * @var bool
- */
- private $internalError = false;
- /**
- * {strip} status
- *
- * @var bool
- */
- public $strip = false;
- /**
- * compiler object
- *
- * @var Smarty_Internal_TemplateCompilerBase
- */
- public $compiler = null;
- /**
- * smarty object
- *
- * @var Smarty
- */
- public $smarty = null;
- /**
- * template object
- *
- * @var Smarty_Internal_Template
- */
- public $template = null;
- /**
- * block nesting level
- *
- * @var int
- */
- public $block_nesting_level = 0;
-
- /**
- * security object
- *
- * @var Smarty_Security
- */
- private $security = null;
-
- /**
- * constructor
- *
- * @param Smarty_Internal_Templatelexer $lex
- * @param Smarty_Internal_TemplateCompilerBase $compiler
- */
- function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
- {
- $this->lex = $lex;
- $this->compiler = $compiler;
- $this->template = $this->compiler->template;
- $this->smarty = $this->template->smarty;
- $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
- $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template($this);
- }
-
- /**
- * insert PHP code in current buffer
- *
- * @param string $code
- */
- public function insertPhpCode($code)
- {
- $this->current_buffer->append_subtree(new Smarty_Internal_ParseTree_Tag($this, $code));
- }
-
- /**
- * merge PHP code with prefix code and return parse tree tag object
- *
- * @param string $code
- *
- * @return Smarty_Internal_ParseTree_Tag
- */
- public function mergePrefixCode($code)
- {
- $tmp ='';
- foreach ($this->compiler->prefix_code as $preCode) {
- $tmp = empty($tmp) ? $preCode : $this->compiler->appendCode($tmp, $preCode);
- }
- $this->compiler->prefix_code=array();
- $tmp = empty($tmp) ? $code : $this->compiler->appendCode($tmp, $code);
- return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp,true));
- }
-
-}
-
-%token_prefix TP_
-
-%parse_accept
-{
- $this->successful = !$this->internalError;
- $this->internalError = false;
- $this->retvalue = $this->_retvalue;
-}
-
-%syntax_error
-{
- $this->internalError = true;
- $this->yymajor = $yymajor;
- $this->compiler->trigger_template_error();
-}
-
-%stack_overflow
-{
- $this->internalError = true;
- $this->compiler->trigger_template_error("Stack overflow in template parser");
-}
-
-%left VERT.
-%left COLON.
-
- //
- // complete template
- //
-start(res) ::= template. {
- res = $this->root_buffer->to_smarty_php();
-}
-
- //
- // loop over template elements
- //
- // single template element
-template ::= template_element(e). {
- if (e != null) {
- $this->current_buffer->append_subtree(e);
- }
-}
-
- // loop of elements
-template ::= template template_element(e). {
- if (e != null) {
- // because of possible code injection
- $this->current_buffer->append_subtree(e);
- }
-}
-
- // empty template
-template ::= .
-
-//
-// template elements
-//
- // Smarty tag
-template_element(res)::= smartytag(st). {
- if ($this->compiler->has_code) {
- res = $this->mergePrefixCode(st);
- } else {
- res = null;
- }
- $this->compiler->has_variable_string = false;
- $this->block_nesting_level = count($this->compiler->_tag_stack);
-}
-
- // Literal
-template_element(res) ::= literal(l). {
- res = new Smarty_Internal_ParseTree_Text($this, l);
-}
- // php tags
-template_element(res)::= PHP(o). {
- $code = $this->compiler->compileTag('private_php',array(array('code' => o), array('type' => $this->lex->phpType )),array());
- if ($this->compiler->has_code && !empty($code)) {
- $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();
- res = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp.$code,true));
- } else {
- res = null;
- }
-}
-
- // nocache code
-template_element(res)::= NOCACHE(c). {
- $this->compiler->tag_nocache = true;
- $save = $this->template->has_nocache_code;
- res = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode("<?php echo '{c}';?>\n", $this->compiler, true));
- $this->template->has_nocache_code = $save;
-}
- // template text
-template_element(res)::= text_content(t). {
- res = $this->compiler->processText(t);
-}
-
-text_content(res) ::= TEXT(o). {
- res = o;
-}
-
-text_content(res) ::= text_content(t) TEXT(o). {
- res = t . o;
-}
-
- // strip on
-template_element ::= STRIPON(d). {
- $this->strip = true;
-}
- // strip off
-template_element ::= STRIPOFF(d). {
- $this->strip = false;
-}
- // process source of inheritance child block
-template_element ::= BLOCKSOURCE(s). {
- if ($this->strip) {
- SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', s));
- } else {
- SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, s);
- }
-}
-
- // Litteral
-literal(res) ::= LITERALSTART LITERALEND. {
- res = '';
-}
-
-literal(res) ::= LITERALSTART literal_elements(l) LITERALEND. {
- res = l;
-}
-
-literal_elements(res) ::= literal_elements(l1) literal_element(l2). {
- res = l1.l2;
-}
-
-literal_elements(res) ::= . {
- res = '';
-}
-
-literal_element(res) ::= literal(l). {
- res = l;
-}
-
-literal_element(res) ::= LITERAL(l). {
- res = l;
-}
-
-smartytag(res) ::= tag(t) RDEL. {
- res = t;
-}
-//
-// output tags start here
-//
-smartytag(res) ::= SIMPLEOUTPUT(i). {
- $var = trim(substr(i, $this->lex->ldel_length, -$this->lex->rdel_length), ' $');
- if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
- res = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\'')));
- } else {
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\'')));
- }
-}
-
- // output with optional attributes
-tag(res) ::= LDEL variable(e). {
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e));
-}
-
-tag(res) ::= LDEL variable(e) attributes(a). {
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e));
-}
-tag(res) ::= LDEL value(e). {
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e));
-}
-tag(res) ::= LDEL value(e) attributes(a). {
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e));
-}
-
-tag(res) ::= LDEL expr(e). {
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>e));
-}
-
-tag(res) ::= LDEL expr(e) attributes(a). {
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>e));
-}
-
-//
-// Smarty tags start here
-//
-
- // assign new style
-tag(res) ::= LDEL DOLLARID(i) EQUAL value(e). {
- res = $this->compiler->compileTag('assign',array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')));
-}
-
-tag(res) ::= LDEL DOLLARID(i) EQUAL expr(e). {
- res = $this->compiler->compileTag('assign',array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')));
-}
-
-tag(res) ::= LDEL DOLLARID(i) EQUAL expr(e) attributes(a). {
- res = $this->compiler->compileTag('assign',array_merge(array(array('value'=>e),array('var'=>'\''.substr(i,1).'\'')),a));
-}
-
-tag(res) ::= LDEL varindexed(vi) EQUAL expr(e) attributes(a). {
- res = $this->compiler->compileTag('assign',array_merge(array(array('value'=>e),array('var'=>vi['var'])),a),array('smarty_internal_index'=>vi['smarty_internal_index']));
-}
-
-// simple tag like {name}
-smartytag(res)::= SIMPLETAG(t). {
- $tag = trim(substr(t, $this->lex->ldel_length, -$this->lex->rdel_length));
- if ($tag == 'strip') {
- $this->strip = true;
- res = null;;
- } else {
- if (defined($tag)) {
- if ($this->security) {
- $this->security->isTrustedConstant($tag, $this->compiler);
- }
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag));
- } else {
- if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
- res = $this->compiler->compileTag($match[1],array("'nocache'"));
- } else {
- res = $this->compiler->compileTag($tag,array());
- }
- }
- }
-}
-
- // tag with optional Smarty2 style attributes
-tag(res) ::= LDEL ID(i) attributes(a). {
- if (defined(i)) {
- if ($this->security) {
- $this->security->isTrustedConstant(i, $this->compiler);
- }
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i));
- } else {
- res = $this->compiler->compileTag(i,a);
- }
-}
-tag(res) ::= LDEL ID(i). {
- if (defined(i)) {
- if ($this->security) {
- $this->security->isTrustedConstant(i, $this->compiler);
- }
- res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>i));
- } else {
- res = $this->compiler->compileTag(i,array());
- }
-}
-
-
- // tag with modifier and optional Smarty2 style attributes
-tag(res) ::= LDEL ID(i) modifierlist(l)attributes(a). {
- if (defined(i)) {
- if ($this->security) {
- $this->security->isTrustedConstant(i, $this->compiler);
- }
- res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i, 'modifierlist'=>l));
- } else {
- res = '<?php ob_start();?>'.$this->compiler->compileTag(i,a).'<?php echo ';
- res .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>l,'value'=>'ob_get_clean()')).';?>';
- }
-}
-
- // registered object tag
-tag(res) ::= LDEL ID(i) PTR ID(m) attributes(a). {
- res = $this->compiler->compileTag(i,a,array('object_method'=>m));
-}
-
- // registered object tag with modifiers
-tag(res) ::= LDEL ID(i) PTR ID(me) modifierlist(l) attributes(a). {
- res = '<?php ob_start();?>'.$this->compiler->compileTag(i,a,array('object_method'=>me)).'<?php echo ';
- res .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>l,'value'=>'ob_get_clean()')).';?>';
-}
-
- // {if}, {elseif} and {while} tag
-tag(res) ::= LDELIF(i) expr(ie). {
- $tag = trim(substr(i,$this->lex->ldel_length));
- res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie));
-}
-
-tag(res) ::= LDELIF(i) expr(ie) attributes(a). {
- $tag = trim(substr(i,$this->lex->ldel_length));
- res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,a,array('if condition'=>ie));
-}
-
-tag(res) ::= LDELIF(i) statement(ie). {
- $tag = trim(substr(i,$this->lex->ldel_length));
- res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie));
-}
-
-tag(res) ::= LDELIF(i) statement(ie) attributes(a). {
- $tag = trim(substr(i,$this->lex->ldel_length));
- res = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,a,array('if condition'=>ie));
-}
-
- // {for} tag
-tag(res) ::= LDELFOR statements(st) SEMICOLON expr(ie) SEMICOLON varindexed(v2) foraction(e2) attributes(a). {
- res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('ifexp'=>ie),array('var'=>v2),array('step'=>e2))),1);
-}
-
- foraction(res) ::= EQUAL expr(e). {
- res = '='.e;
-}
-
- foraction(res) ::= INCDEC(e). {
- res = e;
-}
-
-tag(res) ::= LDELFOR statement(st) TO expr(v) attributes(a). {
- res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v))),0);
-}
-
-tag(res) ::= LDELFOR statement(st) TO expr(v) STEP expr(v2) attributes(a). {
- res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v),array('step'=>v2))),0);
-}
-
- // {foreach} tag
-tag(res) ::= LDELFOREACH attributes(a). {
- res = $this->compiler->compileTag('foreach',a);
-}
-
- // {foreach $array as $var} tag
-tag(res) ::= LDELFOREACH SPACE value(v1) AS varvar(v0) attributes(a). {
- res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>v1),array('item'=>v0))));
-}
-
-tag(res) ::= LDELFOREACH SPACE value(v1) AS varvar(v2) APTR varvar(v0) attributes(a). {
- res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>v1),array('item'=>v0),array('key'=>v2))));
-}
-
-tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v0) attributes(a). {
- res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0))));
-}
-
-tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v1) APTR varvar(v0) attributes(a). {
- res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0),array('key'=>v1))));
-}
-
- // {setfilter}
-tag(res) ::= LDELSETFILTER ID(m) modparameters(p). {
- res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array(m),p))));
-}
-
-tag(res) ::= LDELSETFILTER ID(m) modparameters(p) modifierlist(l). {
- res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array(m),p)),l)));
-}
-
- // {$smarty.block.child} or {$smarty.block.parent}
-tag(res) ::= LDEL SMARTYBLOCKCHILDPARENT(i). {
- $j = strrpos(i,'.');
- if (i[$j+1] == 'c') {
- // {$smarty.block.child}
- res = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
- } else {
- // {$smarty.block.parent}
- res = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler);
- }
-}
-
-
- // end of block tag {/....}
-smartytag(res)::= CLOSETAG(t). {
- $tag = trim(substr(t, $this->lex->ldel_length, -$this->lex->rdel_length), ' /');
- if ($tag == 'strip') {
- $this->strip = false;
- res = null;
- } else {
- res = $this->compiler->compileTag($tag.'close',array());
- }
- }
-tag(res) ::= LDELSLASH ID(i). {
- res = $this->compiler->compileTag(i.'close',array());
-}
-
-tag(res) ::= LDELSLASH ID(i) modifierlist(l). {
- res = $this->compiler->compileTag(i.'close',array(),array('modifier_list'=>l));
-}
-
- // end of block object tag {/....}
-tag(res) ::= LDELSLASH ID(i) PTR ID(m). {
- res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m));
-}
-
-tag(res) ::= LDELSLASH ID(i) PTR ID(m) modifierlist(l). {
- res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m, 'modifier_list'=>l));
-}
-
-//
-//Attributes of Smarty tags
-//
- // list of attributes
-attributes(res) ::= attributes(a1) attribute(a2). {
- res = a1;
- res[] = a2;
-}
-
- // single attribute
-attributes(res) ::= attribute(a). {
- res = array(a);
-}
-
- // no attributes
-attributes(res) ::= . {
- res = array();
-}
-
- // attribute
-attribute(res) ::= SPACE ID(v) EQUAL ID(id). {
- if (defined(id)) {
- if ($this->security) {
- $this->security->isTrustedConstant(id, $this->compiler);
- }
- res = array(v=>id);
- } else {
- res = array(v=>'\''.id.'\'');
- }
-}
-
-attribute(res) ::= ATTR(v) expr(e). {
- res = array(trim(v," =\n\r\t")=>e);
-}
-
-attribute(res) ::= ATTR(v) value(e). {
- res = array(trim(v," =\n\r\t")=>e);
-}
-
-attribute(res) ::= SPACE ID(v). {
- res = '\''.v.'\'';
-}
-
-attribute(res) ::= SPACE expr(e). {
- res = e;
-}
-
-attribute(res) ::= SPACE value(v). {
- res = v;
-}
-
-attribute(res) ::= SPACE INTEGER(i) EQUAL expr(e). {
- res = array(i=>e);
-}
-
-
-
-//
-// statement
-//
-statements(res) ::= statement(s). {
- res = array(s);
-}
-
-statements(res) ::= statements(s1) COMMA statement(s). {
- s1[]=s;
- res = s1;
-}
-
-statement(res) ::= DOLLARID(i) EQUAL INTEGER(e). {
- res = array('var' => '\''.substr(i,1).'\'', 'value'=>e);
-}
-statement(res) ::= DOLLARID(i) EQUAL expr(e). {
- res = array('var' => '\''.substr(i,1).'\'', 'value'=>e);
-}
-
-statement(res) ::= varindexed(vi) EQUAL expr(e). {
- res = array('var' => vi, 'value'=>e);
-}
-
-statement(res) ::= OPENP statement(st) CLOSEP. {
- res = st;
-}
-
-
-//
-// expressions
-//
-
- // single value
-expr(res) ::= value(v). {
- res = v;
-}
-
- // ternary
-expr(res) ::= ternary(v). {
- res = v;
-}
-
- // resources/streams
-expr(res) ::= DOLLARID(i) COLON ID(i2). {
- res = '$_smarty_tpl->getStreamVariable(\''.substr(i,1).'://' . i2 . '\')';
-}
-
- // arithmetic expression
-expr(res) ::= expr(e) MATH(m) value(v). {
- res = e . trim(m) . v;
-}
-
-expr(res) ::= expr(e) UNIMATH(m) value(v). {
- res = e . trim(m) . v;
-}
-
- // array
-expr(res) ::= array(a). {
- res = a;
-}
-
- // modifier
-expr(res) ::= expr(e) modifierlist(l). {
- res = $this->compiler->compileTag('private_modifier',array(),array('value'=>e,'modifierlist'=>l));
-}
-
-// if expression
- // simple expression
-expr(res) ::= expr(e1) lop(c) expr(e2). {
- res = (isset(c['pre']) ? c['pre'] : '') . e1.c['op'].e2 . (isset(c['pre']) ? ')' : '');
-}
-expr(res) ::= expr(e1) scond(c). {
- res = c . e1 . ')';
-}
-
-expr(res) ::= expr(e1) ISIN array(a). {
- res = 'in_array('.e1.','.a.')';
-}
-
-expr(res) ::= expr(e1) ISIN value(v). {
- res = 'in_array('.e1.',(array)'.v.')';
-}
-
-expr(res) ::= variable(v1) INSTANCEOF(i) ns1(v2). {
- res = v1.i.v2;
-}
-
-
-//
-// ternary
-//
-ternary(res) ::= OPENP expr(v) CLOSEP QMARK DOLLARID(e1) COLON expr(e2). {
- res = v.' ? '. $this->compiler->compileVariable('\''.substr(e1,1).'\'') . ' : '.e2;
-}
-
-ternary(res) ::= OPENP expr(v) CLOSEP QMARK expr(e1) COLON expr(e2). {
- res = v.' ? '.e1.' : '.e2;
-}
-
- // value
-value(res) ::= variable(v). {
- res = v;
-}
-
- // +/- value
-value(res) ::= UNIMATH(m) value(v). {
- res = m.v;
-}
-
- // logical negation
-value(res) ::= NOT value(v). {
- res = '!'.v;
-}
-
-value(res) ::= TYPECAST(t) value(v). {
- res = t.v;
-}
-
-value(res) ::= variable(v) INCDEC(o). {
- res = v.o;
-}
-
- // numeric
-value(res) ::= HEX(n). {
- res = n;
-}
-
-value(res) ::= INTEGER(n). {
- res = n;
-}
-
-value(res) ::= INTEGER(n1) DOT INTEGER(n2). {
- res = n1.'.'.n2;
-}
-
-value(res) ::= INTEGER(n1) DOT. {
- res = n1.'.';
-}
-
-value(res) ::= DOT INTEGER(n1). {
- res = '.'.n1;
-}
-
- // ID, true, false, null
-value(res) ::= ID(id). {
- if (defined(id)) {
- if ($this->security) {
- $this->security->isTrustedConstant(id, $this->compiler);
- }
- res = id;
- } else {
- res = '\''.id.'\'';
- }
-}
-
- // function call
-value(res) ::= function(f). {
- res = f;
-}
-
- // expression
-value(res) ::= OPENP expr(e) CLOSEP. {
- res = "(". e .")";
-}
-
- // singele quoted string
-value(res) ::= SINGLEQUOTESTRING(t). {
- res = t;
-}
-
- // double quoted string
-value(res) ::= doublequoted_with_quotes(s). {
- res = s;
-}
-
-
-value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). {
- self::$prefix_number++;
- if (vi['var'] == '\'smarty\'') {
- $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.' = '. $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>';
- } else {
- $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.' = '. $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].';?>';
- }
- res = '$_tmp'.self::$prefix_number.'::'.r[0].r[1];
-}
-
- // Smarty tag
-value(res) ::= smartytag(st). {
- self::$prefix_number++;
- $tmp = $this->compiler->appendCode('<?php ob_start();?>', st);
- $this->compiler->prefix_code[] = $this->compiler->appendCode($tmp, '<?php $_tmp'.self::$prefix_number.'=ob_get_clean();?>');
- res = '$_tmp'.self::$prefix_number;
-}
-
-value(res) ::= value(v) modifierlist(l). {
- res = $this->compiler->compileTag('private_modifier',array(),array('value'=>v,'modifierlist'=>l));
-}
- // name space constant
-value(res) ::= NAMESPACE(c). {
- res = c;
-}
-
-
- // static class access
-value(res) ::= ns1(c)DOUBLECOLON static_class_access(s). {
- if (!in_array(strtolower(c), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess(c, s, $this->compiler))) {
- if (isset($this->smarty->registered_classes[c])) {
- res = $this->smarty->registered_classes[c].'::'.s[0].s[1];
- } else {
- res = c.'::'.s[0].s[1];
- }
- } else {
- $this->compiler->trigger_template_error ("static class '".c."' is undefined or not allowed by security setting");
- }
-}
-//
-// namespace stuff
-//
-
-ns1(res) ::= ID(i). {
- res = i;
-}
-
-ns1(res) ::= NAMESPACE(i). {
- res = i;
-}
-
-//ns1(res) ::= variable(v). {
-// res = v;
-//}
-
-
-
-
-//
-// variables
-//
- // Smarty variable (optional array)
-variable(res) ::= DOLLARID(i). {
- res = $this->compiler->compileVariable('\''.substr(i,1).'\'');
-}
-variable(res) ::= varindexed(vi). {
- if (vi['var'] == '\'smarty\'') {
- $smarty_var = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']);
- res = $smarty_var;
- } else {
- // used for array reset,next,prev,end,current
- $this->last_variable = vi['var'];
- $this->last_index = vi['smarty_internal_index'];
- res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'];
- }
-}
-
- // variable with property
-variable(res) ::= varvar(v) AT ID(p). {
- res = '$_smarty_tpl->tpl_vars['. v .']->'.p;
-}
-
- // object
-variable(res) ::= object(o). {
- res = o;
-}
-
- // config variable
-variable(res) ::= HATCH ID(i) HATCH. {
- res = '$_smarty_tpl->getConfigVariable( \''. i .'\')';
-}
-
-variable(res) ::= HATCH ID(i) HATCH arrayindex(a). {
- res = '(is_array($tmp = $_smarty_tpl->getConfigVariable( \''. i .'\')) ? $tmp'.a.' :null)';
-}
-
-variable(res) ::= HATCH variable(v) HATCH. {
- res = '$_smarty_tpl->getConfigVariable( '. v .')';
-}
-
-variable(res) ::= HATCH variable(v) HATCH arrayindex(a). {
- res = '(is_array($tmp = $_smarty_tpl->getConfigVariable( '. v .')) ? $tmp'.a.' : null)';
-}
-
-varindexed(res) ::= DOLLARID(i) arrayindex(a). {
- res = array('var'=>'\''.substr(i,1).'\'', 'smarty_internal_index'=>a);
-}
-varindexed(res) ::= varvar(v) arrayindex(a). {
- res = array('var'=>v, 'smarty_internal_index'=>a);
-}
-
-//
-// array index
-//
- // multiple array index
-arrayindex(res) ::= arrayindex(a1) indexdef(a2). {
- res = a1.a2;
-}
-
- // no array index
-arrayindex ::= . {
- return;
-}
-
-// single index definition
- // Smarty2 style index
-indexdef(res) ::= DOT DOLLARID(i). {
- res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';
-}
-indexdef(res) ::= DOT varvar(v). {
- res = '['.$this->compiler->compileVariable(v).']';
-}
-
-indexdef(res) ::= DOT varvar(v) AT ID(p). {
- res = '['.$this->compiler->compileVariable(v).'->'.p.']';
-}
-
-indexdef(res) ::= DOT ID(i). {
- if (defined(i)) {
- if ($this->security) {
- $this->security->isTrustedConstant(i, $this->compiler);
- }
- res = '['. i .']';
- } else {
- res = "['". i ."']";
- }
-}
-
-indexdef(res) ::= DOT INTEGER(n). {
- res = '['. n .']';
-}
-
-indexdef(res) ::= DOT LDEL expr(e) RDEL. {
- res = '['. e .']';
-}
-
- // section tag index
-indexdef(res) ::= OPENB ID(i)CLOSEB. {
- res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\'index\']').']';
-}
-
-indexdef(res) ::= OPENB ID(i) DOT ID(i2) CLOSEB. {
- res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\''.i2.'\']').']';
-}
-indexdef(res) ::= OPENB SINGLEQUOTESTRING(s) CLOSEB. {
- res = '['.s.']';
-}
-indexdef(res) ::= OPENB INTEGER(n) CLOSEB. {
- res = '['.n.']';
-}
-indexdef(res) ::= OPENB DOLLARID(i) CLOSEB. {
- res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']';;
-}
-indexdef(res) ::= OPENB variable(v) CLOSEB. {
- res = '['.v.']';
-}
-indexdef(res) ::= OPENB value(v) CLOSEB. {
- res = '['.v.']';
-}
-
- // PHP style index
-indexdef(res) ::= OPENB expr(e) CLOSEB. {
- res = '['. e .']';
-}
-
- // for assign append array
-indexdef(res) ::= OPENB CLOSEB. {
- res = '[]';
-}
-
-
-//
-// variable variable names
-//
-
- // singel identifier element
-varvar(res) ::= DOLLARID(i). {
- res = '\''.substr(i,1).'\'';
-}
- // single $
-varvar(res) ::= DOLLAR. {
- res = "''";
-}
-
- // sequence of identifier elements
-varvar(res) ::= varvar(v1) varvarele(v2). {
- res = v1.'.'.v2;
-}
-
- // fix sections of element
-varvarele(res) ::= ID(s). {
- res = '\''.s.'\'';
-}
-
- // variable sections of element
-varvarele(res) ::= LDEL expr(e) RDEL. {
- res = '('.e.')';
-}
-
-//
-// objects
-//
-object(res) ::= varindexed(vi) objectchain(oc). {
- if (vi['var'] == '\'smarty\'') {
- res = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).oc;
- } else {
- res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].oc;
- }
-}
-
- // single element
-objectchain(res) ::= objectelement(oe). {
- res = oe;
-}
-
- // chain of elements
-objectchain(res) ::= objectchain(oc) objectelement(oe). {
- res = oc.oe;
-}
-
- // variable
-objectelement(res)::= PTR ID(i) arrayindex(a). {
- if ($this->security && substr(i,0,1) == '_') {
- $this->compiler->trigger_template_error (self::Err1);
- }
- res = '->'.i.a;
-}
-
-objectelement(res)::= PTR varvar(v) arrayindex(a). {
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- res = '->{'.$this->compiler->compileVariable(v).a.'}';
-}
-
-objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). {
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- res = '->{'.e.a.'}';
-}
-
-objectelement(res)::= PTR ID(ii) LDEL expr(e) RDEL arrayindex(a). {
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- res = '->{\''.ii.'\'.'.e.a.'}';
-}
-
- // method
-objectelement(res)::= PTR method(f). {
- res = '->'.f;
-}
-
-
-//
-// function
-//
-function(res) ::= ns1(f) OPENP params(p) CLOSEP. {
- if (!$this->security || $this->security->isTrustedPhpFunction(f, $this->compiler)) {
- if (strcasecmp(f,'isset') === 0 || strcasecmp(f,'empty') === 0 || strcasecmp(f,'array') === 0 || is_callable(f)) {
- $func_name = strtolower(f);
- if ($func_name == 'isset') {
- if (count(p) == 0) {
- $this->compiler->trigger_template_error ('Illegal number of paramer in "isset()"');
- }
- $par = implode(',',p);
- if (strncasecmp($par,'$_smarty_tpl->getConfigVariable',strlen('$_smarty_tpl->getConfigVariable')) === 0) {
- self::$prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.'='.str_replace(')',', false)',$par).';?>';
- $isset_par = '$_tmp'.self::$prefix_number;
- } else {
- $isset_par=str_replace("')->value","',null,true,false)->value",$par);
- }
- res = f . "(". $isset_par .")";
- } elseif (in_array($func_name,array('empty','reset','current','end','prev','next'))){
- if (count(p) != 1) {
- $this->compiler->trigger_template_error ('Illegal number of paramer in "empty()"');
- }
- if ($func_name == 'empty') {
- res = $func_name.'('.str_replace("')->value","',null,true,false)->value",p[0]).')';
- } else {
- res = $func_name.'('.p[0].')';
- }
- } else {
- res = f . "(". implode(',',p) .")";
- }
- } else {
- $this->compiler->trigger_template_error ("unknown function \"" . f . "\"");
- }
- }
-}
-
-
-//
-// method
-//
-method(res) ::= ID(f) OPENP params(p) CLOSEP. {
- if ($this->security && substr(f,0,1) == '_') {
- $this->compiler->trigger_template_error (self::Err1);
- }
- res = f . "(". implode(',',p) .")";
-}
-
-method(res) ::= DOLLARID(f) OPENP params(p) CLOSEP. {
- if ($this->security) {
- $this->compiler->trigger_template_error (self::Err2);
- }
- self::$prefix_number++;
- $this->compiler->prefix_code[] = '<?php $_tmp'.self::$prefix_number.'='.$this->compiler->compileVariable('\''.substr(f,1).'\'').';?>';
- res = '$_tmp'.self::$prefix_number.'('. implode(',',p) .')';
-}
-
-// function/method parameter
- // multiple parameters
-params(res) ::= params(p) COMMA expr(e). {
- res = array_merge(p,array(e));
-}
-
- // single parameter
-params(res) ::= expr(e). {
- res = array(e);
-}
-
- // kein parameter
-params(res) ::= . {
- res = array();
-}
-
-//
-// modifier
-//
-modifierlist(res) ::= modifierlist(l) modifier(m) modparameters(p). {
- res = array_merge(l,array(array_merge(m,p)));
-}
-
-modifierlist(res) ::= modifier(m) modparameters(p). {
- res = array(array_merge(m,p));
-}
-
-modifier(res) ::= VERT AT ID(m). {
- res = array(m);
-}
-
-modifier(res) ::= VERT ID(m). {
- res = array(m);
-}
-
-//
-// modifier parameter
-//
- // multiple parameter
-modparameters(res) ::= modparameters(mps) modparameter(mp). {
- res = array_merge(mps,mp);
-}
-
- // no parameter
-modparameters(res) ::= . {
- res = array();
-}
-
- // parameter expression
-modparameter(res) ::= COLON value(mp). {
- res = array(mp);
-}
-
-modparameter(res) ::= COLON array(mp). {
- res = array(mp);
-}
-
- // static class methode call
-static_class_access(res) ::= method(m). {
- res = array(m, '', 'method');
-}
-
- // static class methode call with object chainig
-static_class_access(res) ::= method(m) objectchain(oc). {
- res = array(m, oc, 'method');
-}
-
- // static class constant
-static_class_access(res) ::= ID(v). {
- res = array(v, '');
-}
-
- // static class variables
-static_class_access(res) ::= DOLLARID(v) arrayindex(a). {
- res = array(v, a, 'property');
-}
-
- // static class variables with object chain
-static_class_access(res) ::= DOLLARID(v) arrayindex(a) objectchain(oc). {
- res = array(v, a.oc, 'property');
-}
-
-
-// if conditions and operators
-lop(res) ::= LOGOP(o). {
- res['op'] = ' '. trim(o) . ' ';
-}
-
-lop(res) ::= TLOGOP(o). {
- static $lops = array(
- 'eq' => array('op' => ' == ', 'pre' => null),
- 'ne' => array('op' => ' != ', 'pre' => null),
- 'neq' => array('op' => ' != ', 'pre' => null),
- 'gt' => array('op' => ' > ', 'pre' => null),
- 'ge' => array('op' => ' >= ', 'pre' => null),
- 'gte' => array('op' => ' >= ', 'pre' => null),
- 'lt' => array('op' => ' < ', 'pre' => null),
- 'le' => array('op' => ' <= ', 'pre' => null),
- 'lte' => array('op' => ' <= ', 'pre' => null),
- 'mod' => array('op' => ' % ', 'pre' => null),
- 'and' => array('op' => ' && ', 'pre' => null),
- 'or' => array('op' => ' || ', 'pre' => null),
- 'xor' => array('op' => ' xor ', 'pre' => null),
- 'isdivby' => array('op' => ' % ', 'pre' => '!('),
- 'isnotdivby' => array('op' => ' % ', 'pre' => '('),
- 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
- 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
- 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
- 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),
- );
- $op = strtolower(preg_replace('/\s*/', '', o));
- res = $lops[$op];
-}
-
-scond(res) ::= SINGLECOND(o). {
- static $scond = array (
- 'iseven' => '!(1 & ',
- 'isnoteven' => '(1 & ',
- 'isodd' => '(1 & ',
- 'isnotodd' => '!(1 & ',
- );
- $op = strtolower(str_replace(' ', '', o));
- res = $scond[$op];
-}
-
-//
-// ARRAY element assignment
-//
-array(res) ::= OPENB arrayelements(a) CLOSEB. {
- res = 'array('.a.')';
-}
-
-arrayelements(res) ::= arrayelement(a). {
- res = a;
-}
-
-arrayelements(res) ::= arrayelements(a1) COMMA arrayelement(a). {
- res = a1.','.a;
-}
-
-arrayelements ::= . {
- return;
-}
-
-arrayelement(res) ::= value(e1) APTR expr(e2). {
- res = e1.'=>'.e2;
-}
-
-arrayelement(res) ::= ID(i) APTR expr(e2). {
- res = '\''.i.'\'=>'.e2;
-}
-
-arrayelement(res) ::= expr(e). {
- res = e;
-}
-
-
-//
-// double qouted strings
-//
-doublequoted_with_quotes(res) ::= QUOTE QUOTE. {
- res = "''";
-}
-
-doublequoted_with_quotes(res) ::= QUOTE doublequoted(s) QUOTE. {
- res = s->to_smarty_php();
-}
-
-
-doublequoted(res) ::= doublequoted(o1) doublequotedcontent(o2). {
- o1->append_subtree(o2);
- res = o1;
-}
-
-doublequoted(res) ::= doublequotedcontent(o). {
- res = new Smarty_Internal_ParseTree_Dq($this, o);
-}
-
-doublequotedcontent(res) ::= BACKTICK variable(v) BACKTICK. {
- res = new Smarty_Internal_ParseTree_Code($this, '(string)'.v);
-}
-
-doublequotedcontent(res) ::= BACKTICK expr(e) BACKTICK. {
- res = new Smarty_Internal_ParseTree_Code($this, '(string)'.e);
-}
-
-doublequotedcontent(res) ::= DOLLARID(i). {
- res = new Smarty_Internal_ParseTree_Code($this, '(string)$_smarty_tpl->tpl_vars[\''. substr(i,1) .'\']->value');
-}
-
-doublequotedcontent(res) ::= LDEL variable(v) RDEL. {
- res = new Smarty_Internal_ParseTree_Code($this, '(string)'.v);
-}
-
-doublequotedcontent(res) ::= LDEL expr(e) RDEL. {
- res = new Smarty_Internal_ParseTree_Code($this, '(string)('.e.')');
-}
-
-doublequotedcontent(res) ::= smartytag(st). {
- res = new Smarty_Internal_ParseTree_Tag($this, st);
-}
-
-doublequotedcontent(res) ::= TEXT(o). {
- res = new Smarty_Internal_ParseTree_DqContent($this, o);
-}
-