From f20a6be33df31a1d7a6cd9172650d329297f8e6a Mon Sep 17 00:00:00 2001 From: andrei Date: Thu, 11 Apr 2002 16:22:50 +0000 Subject: [PATCH] Added ability to use simple variables for array indices or object properties. --- NEWS | 2 ++ Smarty_Compiler.class.php | 11 +++++++---- libs/Smarty_Compiler.class.php | 11 +++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 74f62e5e..7b364e48 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,5 @@ + - added ability to use simple variables as array indices or + object properties. (Andrei) - added ability to unregister pre/postfilters plugins at runtime. (Andrei) - added 'htmlall' attribute to escape modifier. (Monte) diff --git a/Smarty_Compiler.class.php b/Smarty_Compiler.class.php index 3043736a..9d75fdd0 100644 --- a/Smarty_Compiler.class.php +++ b/Smarty_Compiler.class.php @@ -239,7 +239,7 @@ class Smarty_Compiler extends Smarty { /* If the tag name matches a variable or section property definition, we simply process it. */ - if (preg_match('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command) || // if a variable + if (preg_match('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\$?\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command) || // if a variable preg_match('!^#(\w+)#(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command) || // or a configuration variable preg_match('!^%\w+\.\w+%(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command)) { // or a section property settype($tag_command, 'array'); @@ -1085,7 +1085,7 @@ class Smarty_Compiler extends Smarty { { $qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\''; - $var_exprs = preg_grep('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); + $var_exprs = preg_grep('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\$?\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); $conf_var_exprs = preg_grep('!^#(\w+)#(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); $sect_prop_exprs = preg_grep('!^%\w+\.\w+%(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); @@ -1119,7 +1119,7 @@ class Smarty_Compiler extends Smarty { $var_ref = $parts[0]; $modifiers = isset($parts[1]) ? $parts[1] : ''; - preg_match_all('!\[\w+(\.\w+)?\]|(->|\.)\w+|^\w+!', $var_ref, $match); + preg_match_all('!\[\w+(\.\w+)?\]|(->|\.)\$?\w+|^\w+!', $var_ref, $match); $indexes = $match[0]; $var_name = array_shift($indexes); @@ -1152,7 +1152,10 @@ class Smarty_Compiler extends Smarty { $output .= "[\$this->_sections['$section']['$section_prop']]"; } } else if ($index{0} == '.') { - $output .= "['" . substr($index, 1) . "']"; + if ($index{1} == '$') + $output .= "[\$this->_tpl_vars['" . substr($index, 2) . "']]"; + else + $output .= "['" . substr($index, 1) . "']"; } else { $output .= $index; } diff --git a/libs/Smarty_Compiler.class.php b/libs/Smarty_Compiler.class.php index 3043736a..9d75fdd0 100644 --- a/libs/Smarty_Compiler.class.php +++ b/libs/Smarty_Compiler.class.php @@ -239,7 +239,7 @@ class Smarty_Compiler extends Smarty { /* If the tag name matches a variable or section property definition, we simply process it. */ - if (preg_match('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command) || // if a variable + if (preg_match('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\$?\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command) || // if a variable preg_match('!^#(\w+)#(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command) || // or a configuration variable preg_match('!^%\w+\.\w+%(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tag_command)) { // or a section property settype($tag_command, 'array'); @@ -1085,7 +1085,7 @@ class Smarty_Compiler extends Smarty { { $qstr_regexp = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\''; - $var_exprs = preg_grep('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); + $var_exprs = preg_grep('!^\$\w+(?>(\[(\d+|\w+(\.\w+)?)\])|((\.|->)\$?\w+))*(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); $conf_var_exprs = preg_grep('!^#(\w+)#(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); $sect_prop_exprs = preg_grep('!^%\w+\.\w+%(?>\|@?\w+(:(?>' . $qstr_regexp . '|[^|]+))*)*$!', $tokens); @@ -1119,7 +1119,7 @@ class Smarty_Compiler extends Smarty { $var_ref = $parts[0]; $modifiers = isset($parts[1]) ? $parts[1] : ''; - preg_match_all('!\[\w+(\.\w+)?\]|(->|\.)\w+|^\w+!', $var_ref, $match); + preg_match_all('!\[\w+(\.\w+)?\]|(->|\.)\$?\w+|^\w+!', $var_ref, $match); $indexes = $match[0]; $var_name = array_shift($indexes); @@ -1152,7 +1152,10 @@ class Smarty_Compiler extends Smarty { $output .= "[\$this->_sections['$section']['$section_prop']]"; } } else if ($index{0} == '.') { - $output .= "['" . substr($index, 1) . "']"; + if ($index{1} == '$') + $output .= "[\$this->_tpl_vars['" . substr($index, 2) . "']]"; + else + $output .= "['" . substr($index, 1) . "']"; } else { $output .= $index; }