[patch] code cleanup

Giovanni Giacobbi <[email protected]> Tue, 29 May 2007 13:16:21 +0200
Newsgroups gmane.comp.php.smarty.devel
Message-ID <[email protected]>
--gj572EiMnwbLXET9
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline


Attached there is a patch mostly of coding style cleanup.

I had to go through Smarty code for implementing a compiler plugin, so it was a good chance to clean up the coding style. You should be more strict about that!

The patch should be audited before commit. It contains no semantic changes with the following exceptions:

Smarty.class.php, get_template_vars():
  changed phpdoc return type to "mixed" (you should change it elsewhere as well)

Smart_Compiler.class.php, _compile_tag(): 
  splitted "strip" and "/strip" handling, i'm not 100% about correctness of this change.

Smart_Compiler.class.php, _smarty_sort_length():
  changed @return type

if you want to reproduce this diff, change all "if(" with "if (" and "else if" with "elseif", trim trailing spaces, and fix indentation where needed.

Regards

-- 
Giovanni Giacobbi

--gj572EiMnwbLXET9
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="smarty-cvs-cleanup.patch"

? smarty-cvs-cleanup.patch
--- Smarty.class.php	8 Mar 2007 19:11:22 -0000	1.529
+++ Smarty.class.php	29 May 2007 10:47:10 -0000
@@ -35,7 +35,7 @@
 /**
  * DIR_SEP isn't used anymore, but third party apps might
  */
-if(!defined('DIR_SEP')) {
+if (!defined('DIR_SEP')) {
     define('DIR_SEP', DIRECTORY_SEPARATOR);
 }
 
@@ -562,6 +562,7 @@
     var $_cache_including = false;
 
     /**#@-*/
+
     /**
      * The class constructor.
      */
@@ -615,10 +616,10 @@
             // $tpl_var is an array, ignore $value
             foreach ($tpl_var as $_key => $_val) {
                 if ($_key != '') {
-                    if(!@is_array($this->_tpl_vars[$_key])) {
+                    if (!@is_array($this->_tpl_vars[$_key])) {
                         settype($this->_tpl_vars[$_key],'array');
                     }
-                    if($merge && is_array($_val)) {
+                    if ($merge && is_array($_val)) {
                         foreach($_val as $_mkey => $_mval) {
                             $this->_tpl_vars[$_key][$_mkey] = $_mval;
                         }
@@ -629,10 +630,10 @@
             }
         } else {
             if ($tpl_var != '' && isset($value)) {
-                if(!@is_array($this->_tpl_vars[$tpl_var])) {
+                if (!@is_array($this->_tpl_vars[$tpl_var])) {
                     settype($this->_tpl_vars[$tpl_var],'array');
                 }
-                if($merge && is_array($value)) {
+                if ($merge && is_array($value)) {
                     foreach($value as $_mkey => $_mval) {
                         $this->_tpl_vars[$tpl_var][$_mkey] = $_mval;
                     }
@@ -652,7 +653,7 @@
     function append_by_ref($tpl_var, &$value, $merge=false)
     {
         if ($tpl_var != '' && isset($value)) {
-            if(!@is_array($this->_tpl_vars[$tpl_var])) {
+            if (!@is_array($this->_tpl_vars[$tpl_var])) {
              settype($this->_tpl_vars[$tpl_var],'array');
             }
             if ($merge && is_array($value)) {
@@ -665,7 +666,6 @@
         }
     }
 
-
     /**
      * clear the given assigned template variable.
      *
@@ -680,7 +680,6 @@
             unset($this->_tpl_vars[$tpl_var]);
     }
 
-
     /**
      * Registers custom function to be used in templates
      *
@@ -960,7 +959,6 @@
 
     }
 
-
     /**
      * clear the entire contents of cache (all templates)
      *
@@ -972,7 +970,6 @@
         return $this->clear_cache(null, null, null, $exp_time);
     }
 
-
     /**
      * test to see if valid cache exists for this template
      *
@@ -998,7 +995,6 @@
         return smarty_core_read_cache_file($_params, $this);
     }
 
-
     /**
      * clear all the assigned template variables.
      *
@@ -1049,18 +1045,18 @@
      *
      * @param string $name
      * @param string $type
-     * @return array
+     * @return mixed
      */
-    function &get_template_vars($name=null)
+    function &get_template_vars($name = null)
     {
-        if(!isset($name)) {
+        if (!isset($name)) {
             return $this->_tpl_vars;
-        } elseif(isset($this->_tpl_vars[$name])) {
+        } elseif (isset($this->_tpl_vars[$name])) {
             return $this->_tpl_vars[$name];
         } else {
             // var non-existant, return valid reference
             $_tmp = null;
-            return $_tmp;   
+            return $_tmp;
         }
     }
 
@@ -1071,11 +1067,11 @@
      * @param string $type
      * @return array
      */
-    function &get_config_vars($name=null)
+    function &get_config_vars($name = null)
     {
-        if(!isset($name) && is_array($this->_config[0])) {
+        if (!isset($name) && is_array($this->_config[0])) {
             return $this->_config[0]['vars'];
-        } else if(isset($this->_config[0]['vars'][$name])) {
+        } elseif (isset($this->_config[0]['vars'][$name])) {
             return $this->_config[0]['vars'][$name];
         } else {
             // var non-existant, return valid reference
@@ -1095,7 +1091,6 @@
         trigger_error("Smarty error: $error_msg", $error_type);
     }
 
-
     /**
      * executes & displays the template results
      *
@@ -1119,7 +1114,7 @@
     function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
     {
         static $_cache_info = array();
-        
+
         $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting)
                ? $this->error_reporting : error_reporting() & ~E_NOTICE);
 
@@ -1347,7 +1342,7 @@
      */
     function clear_config($var = null)
     {
-        if(!isset($var)) {
+        if (!isset($var)) {
             // clear all values
             $this->_config = array(array('vars'  => array(),
                                          'files' => array()));
@@ -1370,7 +1365,7 @@
         return smarty_core_assemble_plugin_filepath($_params, $this);
     }
 
-   /**
+    /**
      * test if resource needs compiling
      *
      * @param string $resource_name
@@ -1403,7 +1398,7 @@
         }
     }
 
-   /**
+    /**
      * compile the template
      *
      * @param string $resource_name
@@ -1439,7 +1434,7 @@
 
     }
 
-   /**
+    /**
      * compile the given source
      *
      * @param string $resource_name
@@ -1529,11 +1524,10 @@
      * @param boolean $quiet
      * @return boolean
      */
-
     function _fetch_resource_info(&$params)
     {
-        if(!isset($params['get_source'])) { $params['get_source'] = true; }
-        if(!isset($params['quiet'])) { $params['quiet'] = false; }
+        if (!isset($params['get_source'])) { $params['get_source'] = true; }
+        if (!isset($params['quiet'])) { $params['quiet'] = false; }
 
         $_return = false;
         $_params = array('resource_name' => $params['resource_name']) ;
@@ -1590,7 +1584,7 @@
             if (!$params['quiet']) {
                 $this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"');
             }
-        } else if ($_return && $this->security) {
+        } elseif ($_return && $this->security) {
             require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
             if (!smarty_core_is_secure($_params, $this)) {
                 if (!$params['quiet'])
@@ -1603,7 +1597,6 @@
         return $_return;
     }
 
-
     /**
      * parse out the type and name from the resource
      *
@@ -1613,7 +1606,6 @@
      * @param string $resource_name
      * @return boolean
      */
-
     function _parse_resource_name(&$params)
     {
 
@@ -1625,7 +1617,7 @@
             $params['resource_type'] = $this->default_resource_type;
             $params['resource_name'] = $_resource_name_parts[0];
         } else {
-            if(strlen($_resource_name_parts[0]) == 1) {
+            if (strlen($_resource_name_parts[0]) == 1) {
                 // 1 char is not resource type, but part of filepath
                 $params['resource_type'] = $this->default_resource_type;
                 $params['resource_name'] = $params['resource_name'];
@@ -1648,7 +1640,7 @@
                     // didn't find the file, try include_path
                     $_params = array('file_path' => $_fullpath);
                     require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
-                    if(smarty_core_get_include_path($_params, $this)) {
+                    if (smarty_core_get_include_path($_params, $this)) {
                         $params['resource_name'] = $_params['new_file_path'];
                         return true;
                     }
@@ -1667,7 +1659,6 @@
         return true;
     }
 
-
     /**
      * Handle modifiers
      *
@@ -1741,14 +1732,14 @@
         $_compile_dir_sep =  $this->use_sub_dirs ? DIRECTORY_SEPARATOR : '^';
         $_return = $auto_base . DIRECTORY_SEPARATOR;
 
-        if(isset($auto_id)) {
+        if (isset($auto_id)) {
             // make auto_id safe for directory names
             $auto_id = str_replace('%7C',$_compile_dir_sep,(urlencode($auto_id)));
             // split into separate directories
             $_return .= $auto_id . $_compile_dir_sep;
         }
 
-        if(isset($auto_source)) {
+        if (isset($auto_source)) {
             // make source name safe for filename
             $_filename = urlencode(basename($auto_source));
             $_crc32 = sprintf('%08X', crc32($auto_source));
@@ -1770,8 +1761,8 @@
      */
     function _unlink($resource, $exp_time = null)
     {
-        if(isset($exp_time)) {
-            if(time() - @filemtime($resource) >= $exp_time) {
+        if (isset($exp_time)) {
+            if (time() - @filemtime($resource) >= $exp_time) {
                 return @unlink($resource);
             }
         } else {
@@ -1789,7 +1780,7 @@
     function _get_auto_id($cache_id=null, $compile_id=null) {
     if (isset($cache_id))
         return (isset($compile_id)) ? $cache_id . '|' . $compile_id  : $cache_id;
-    elseif(isset($compile_id))
+    elseif (isset($compile_id))
         return $compile_id;
     else
         return null;
@@ -1808,7 +1799,7 @@
     function _trigger_fatal_error($error_msg, $tpl_file = null, $tpl_line = null,
             $file = null, $line = null, $error_type = E_USER_ERROR)
     {
-        if(isset($file) && isset($line)) {
+        if (isset($file) && isset($line)) {
             $info = ' ('.basename($file).", line $line)";
         } else {
             $info = '';
--- Smarty_Compiler.class.php	11 May 2007 13:45:36 -0000	1.397
+++ Smarty_Compiler.class.php	29 May 2007 10:47:11 -0000
@@ -162,7 +162,7 @@
                 . '(?:\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 . ')*)?)';
-        
+
         // matches valid modifier syntax:
         // |foo
         // |@foo
@@ -257,7 +257,7 @@
         /* fetch all special blocks */
         $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);
+        preg_match_all($search, $source_content, $match, PREG_SET_ORDER);
         $this->_folded_blocks = $match;
         reset($this->_folded_blocks);
 
@@ -290,10 +290,10 @@
                     if ($this->php_handling == SMARTY_PHP_PASSTHRU) {
                         /* echo php contents */
                         $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) {
+                    } elseif ($this->php_handling == SMARTY_PHP_QUOTE) {
                         /* quote php tags */
                         $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) {
+                    } elseif ($this->php_handling == SMARTY_PHP_REMOVE) {
                         /* remove php tags */
                         $text_blocks[$curr_tb] = str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '', $text_blocks[$curr_tb]);
                     } else {
@@ -304,7 +304,7 @@
                 }
             }
         }
-        
+
         /* Compile the template tags into PHP code. */
         $compiled_tags = array();
         for ($i = 0, $for_max = count($template_tags); $i < $for_max; $i++) {
@@ -312,7 +312,9 @@
             $compiled_tags[] = $this->_compile_tag($template_tags[$i]);
             $this->_current_line_no += substr_count($template_tags[$i], "\n");
         }
-        if (count($this->_tag_stack)>0) {
+
+        /* Stack must now be empty after processing */
+        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;
@@ -349,9 +351,9 @@
             }
         }
         $compiled_content = '';
-        
+
         $tag_guard = '%%%SMARTYOTG' . md5(uniqid(rand(), true)) . '%%%';
-        
+
         /* Interleave the compiled contents and text blocks to get the final result. */
         for ($i = 0, $for_max = count($compiled_tags); $i < $for_max; $i++) {
             if ($compiled_tags[$i] == '') {
@@ -361,7 +363,7 @@
             // replace legit PHP tags with placeholder
             $text_blocks[$i] = str_replace('<?', $tag_guard, $text_blocks[$i]);
             $compiled_tags[$i] = str_replace('<?', $tag_guard, $compiled_tags[$i]);
-            
+
             $compiled_content .= $text_blocks[$i] . $compiled_tags[$i];
         }
         $compiled_content .= str_replace('<?', $tag_guard, $text_blocks[$i]);
@@ -372,7 +374,7 @@
 
         // recover legit tags
         $compiled_content = str_replace($tag_guard, '<?', $compiled_content); 
-        
+
         // remove \n from the end of the file, if any
         if (strlen($compiled_content) && (substr($compiled_content, -1) == "\n") ) {
             $compiled_content = substr($compiled_content, 0, -1);
@@ -437,15 +439,15 @@
         /* Matched comment. */
         if (substr($template_tag, 0, 1) == '*' && substr($template_tag, -1) == '*')
             return '';
-        
+
         /* Split tag into two three parts: command, command modifiers and the arguments. */
-        if(! preg_match('~^(?:(' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp
+        if (!preg_match('~^(?:(' . $this->_num_const_regexp . '|' . $this->_obj_call_regexp . '|' . $this->_var_regexp
                 . '|\/?' . $this->_reg_obj_regexp . '|\/?' . $this->_func_regexp . ')(' . $this->_mod_regexp . '*))
                       (?:\s+(.*))?$
                     ~xs', $template_tag, $match)) {
             $this->_syntax_error("unrecognized tag: $template_tag", E_USER_ERROR, __FILE__, __LINE__);
         }
-        
+
         $tag_command = $match[1];
         $tag_modifier = isset($match[2]) ? $match[2] : null;
         $tag_args = isset($match[3]) ? $match[3] : null;
@@ -511,7 +513,6 @@
             case 'sectionelse':
                 $this->_push_tag('sectionelse');
                 return "<?php endfor; else: ?>";
-                break;
 
             case '/section':
                 $_open_tag = $this->_pop_tag('section');
@@ -523,7 +524,6 @@
             case 'foreach':
                 $this->_push_tag('foreach');
                 return $this->_compile_foreach_start($tag_args);
-                break;
 
             case 'foreachelse':
                 $this->_push_tag('foreachelse');
@@ -535,22 +535,20 @@
                     return "<?php endif; unset(\$_from); ?>";
                 else
                     return "<?php endforeach; endif; unset(\$_from); ?>";
-                break;
 
             case 'strip':
+                $this->_push_tag('strip');
+                if ($this->_strip_depth++ == 0) { /* outermost opening {strip} */
+                    $this->_additional_newline = "";
+                    return '{strip}';
+                }
+                return '';
+
             case '/strip':
-                if (substr($tag_command, 0, 1)=='/') {
-                    $this->_pop_tag('strip');
-                    if (--$this->_strip_depth==0) { /* outermost closing {/strip} */
-                        $this->_additional_newline = "\n";
-                        return '{' . $tag_command . '}';
-                    }
-                } else {
-                    $this->_push_tag('strip');
-                    if ($this->_strip_depth++==0) { /* outermost opening {strip} */
-                        $this->_additional_newline = "";
-                        return '{' . $tag_command . '}';
-                    }
+                $this->_pop_tag('strip');
+                if (--$this->_strip_depth == 0) { /* outermost closing {/strip} */
+                    $this->_additional_newline = "\n";
+                    return '{/strip}';
                 }
                 return '';
 
@@ -582,10 +580,10 @@
             default:
                 if ($this->_compile_compiler_tag($tag_command, $tag_args, $output)) {
                     return $output;
-                } else if ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) {
+                } elseif ($this->_compile_block_tag($tag_command, $tag_args, $tag_modifier, $output)) {
+                    return $output;
+                } elseif ($this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier, $output)) {
                     return $output;
-                } else if ($this->_compile_custom_tag($tag_command, $tag_args, $tag_modifier, $output)) {
-                    return $output;                    
                 } else {
                     $this->_syntax_error("unrecognized tag '$tag_command'", E_USER_ERROR, __FILE__, __LINE__);
                 }
@@ -593,7 +591,6 @@
         }
     }
 
-
     /**
      * compile the custom compiler tag
      *
@@ -624,7 +621,7 @@
          * Otherwise we need to load plugin file and look for the function
          * inside it.
          */
-        else if ($plugin_file = $this->_get_plugin_filepath('compiler', $tag_command)) {
+        elseif ($plugin_file = $this->_get_plugin_filepath('compiler', $tag_command)) {
             $found = true;
 
             include_once $plugin_file;
@@ -647,10 +644,11 @@
         if ($found) {
             if ($have_function) {
                 $output = call_user_func_array($plugin_func, array($tag_args, &$this));
-                if($output != '') {
-                $output = '<?php ' . $this->_push_cacheable_state('compiler', $tag_command)
-                                   . $output
-                                   . $this->_pop_cacheable_state('compiler', $tag_command) . ' ?>';
+                if ($output != '') {
+                    $output = '<?php '
+                        . $this->_push_cacheable_state('compiler', $tag_command)
+                        . $output
+                        . $this->_pop_cacheable_state('compiler', $tag_command) . ' ?>';
                 }
             } else {
                 $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__);
@@ -661,7 +659,6 @@
         }
     }
 
-
     /**
      * compile block function tag
      *
@@ -699,7 +696,7 @@
          * Otherwise we need to load plugin file and look for the function
          * inside it.
          */
-        else if ($plugin_file = $this->_get_plugin_filepath('block', $tag_command)) {
+        elseif ($plugin_file = $this->_get_plugin_filepath('block', $tag_command)) {
             $found = true;
 
             include_once $plugin_file;
@@ -710,13 +707,12 @@
                 $have_function = false;
             } else {
                 $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true);
-
             }
         }
 
         if (!$found) {
             return false;
-        } else if (!$have_function) {
+        } elseif (!$have_function) {
             $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__);
             return true;
         }
@@ -739,7 +735,7 @@
             $_cache_attrs='';
             $arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs);
             $output .= "$_cache_attrs\$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); ';
-            $output .= '$_block_repeat=true;' . $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat);';
+            $output .= '$_block_repeat=true;' . $this->_compile_plugin_call('block', $tag_command) . '($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat);';
             $output .= 'while ($_block_repeat) { ob_start(); ?>';
         } else {
             $output = '<?php $_block_content = ob_get_contents(); ob_end_clean(); ';
@@ -754,7 +750,6 @@
         return true;
     }
 
-
     /**
      * compile custom function tag
      *
@@ -784,7 +779,7 @@
          * Otherwise we need to load plugin file and look for the function
          * inside it.
          */
-        else if ($plugin_file = $this->_get_plugin_filepath('function', $tag_command)) {
+        elseif ($plugin_file = $this->_get_plugin_filepath('function', $tag_command)) {
             $found = true;
 
             include_once $plugin_file;
@@ -801,7 +796,7 @@
 
         if (!$found) {
             return false;
-        } else if (!$have_function) {
+        } elseif (!$have_function) {
             $this->_syntax_error($message, E_USER_WARNING, __FILE__, __LINE__);
             return true;
         }
@@ -816,11 +811,11 @@
         $arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs);
 
         $output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)";
-        if($tag_modifier != '') {
+        if ($tag_modifier != '') {
             $this->_parse_modifiers($output, $tag_modifier);
         }
 
-        if($output != '') {
+        if ($output != '') {
             $output =  '<?php ' . $_cacheable_state . $_cache_attrs . 'echo ' . $output . ';'
                 . $this->_pop_cacheable_state('function', $tag_command) . "?>" . $this->_additional_newline;
         }
@@ -848,10 +843,10 @@
         list($object, $obj_comp) = explode('->', $tag_command);
 
         $arg_list = array();
-        if(count($attrs)) {
+        if (count($attrs)) {
             $_assign_var = false;
             foreach ($attrs as $arg_name => $arg_value) {
-                if($arg_name == 'assign') {
+                if ($arg_name == 'assign') {
                     $_assign_var = $arg_value;
                     unset($attrs['assign']);
                     continue;
@@ -862,7 +857,7 @@
             }
         }
 
-        if($this->_reg_objects[$object][2]) {
+        if ($this->_reg_objects[$object][2]) {
             // smarty object argument format
             $args = "array(".implode(',', (array)$arg_list)."), \$this";
         } else {
@@ -876,13 +871,20 @@
         $prefix = '';
         $postfix = '';
         $newline = '';
-        if(!is_object($this->_reg_objects[$object][0])) {
-            $this->_trigger_fatal_error("registered '$object' is not an object" , $this->_current_file, $this->_current_line_no, __FILE__, __LINE__);
-        } elseif(!empty($this->_reg_objects[$object][1]) && !in_array($obj_comp, $this->_reg_objects[$object][1])) {
-            $this->_trigger_fatal_error("'$obj_comp' is not a registered component of object '$object'", $this->_current_file, $this->_current_line_no, __FILE__, __LINE__);
-        } elseif(method_exists($this->_reg_objects[$object][0], $obj_comp)) {
+        if (!is_object($this->_reg_objects[$object][0])) {
+            $this->_trigger_fatal_error("registered '$object' is not an object",
+                                        $this->_current_file,
+                                        $this->_current_line_no,
+                                        __FILE__, __LINE__);
+        } elseif (!empty($this->_reg_objects[$object][1]) &&
+                  !in_array($obj_comp, $this->_reg_objects[$object][1])) {
+            $this->_trigger_fatal_error("'$obj_comp' is not a registered component of object '$object'",
+                                        $this->_current_file,
+                                        $this->_current_line_no,
+                                        __FILE__, __LINE__);
+        } elseif (method_exists($this->_reg_objects[$object][0], $obj_comp)) {
             // method
-            if(in_array($obj_comp, $this->_reg_objects[$object][3])) {
+            if (in_array($obj_comp, $this->_reg_objects[$object][3])) {
                 // block method
                 if ($start_tag) {
                     $prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); ";
@@ -904,12 +906,12 @@
             $return = "\$this->_reg_objects['$object'][0]->$obj_comp";
         }
 
-        if($return != null) {
-            if($tag_modifier != '') {
+        if ($return != null) {
+            if ($tag_modifier != '') {
                 $this->_parse_modifiers($return, $tag_modifier);
             }
 
-            if(!empty($_assign_var)) {
+            if (!empty($_assign_var)) {
                 $output = "\$this->assign('" . $this->_dequote($_assign_var) ."',  $return);";
             } else {
                 $output = 'echo ' . $return . ';';
@@ -936,7 +938,7 @@
         if (empty($name)) {
             return $this->_syntax_error("missing insert name", E_USER_ERROR, __FILE__, __LINE__);
         }
-        
+
         if (!preg_match('~^\w+$~', $name)) {
             return $this->_syntax_error("'insert: 'name' must be an insert function name", E_USER_ERROR, __FILE__, __LINE__);
         }
@@ -979,7 +981,7 @@
             if ($arg_name == 'file') {
                 $include_file = $arg_value;
                 continue;
-            } else if ($arg_name == 'assign') {
+            } elseif ($arg_name == 'assign') {
                 $assign_var = $arg_value;
                 continue;
             }
@@ -1032,8 +1034,8 @@
 
         $arg_list = array();
         foreach($attrs as $arg_name => $arg_value) {
-            if($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') {
-                if(is_bool($arg_value))
+            if ($arg_name != 'file' AND $arg_name != 'once' AND $arg_name != 'assign') {
+                if (is_bool($arg_value))
                     $arg_value = $arg_value ? 'true' : 'false';
                 $arg_list[] = "'$arg_name' => $arg_value";
             }
@@ -1044,7 +1046,6 @@
         return "<?php require_once(SMARTY_CORE_DIR . 'core.smarty_include_php.php');\nsmarty_core_smarty_include_php($_params, \$this); ?>" . $this->_additional_newline;
     }
 
-
     /**
      * Compile {section ...} tag
      *
@@ -1149,7 +1150,6 @@
         return $output;
     }
 
-
     /**
      * Compile {foreach ...} tag.
      *
@@ -1208,7 +1208,6 @@
         return $output;
     }
 
-
     /**
      * Compile {capture} .. {/capture} tags
      *
@@ -1216,7 +1215,6 @@
      * @param string $tag_args
      * @return string
      */
-
     function _compile_capture_tag($start, $tag_args = '')
     {
         $attrs = $this->_parse_attrs($tag_args);
@@ -1254,7 +1252,6 @@
      */
     function _compile_if_tag($tag_args, $elseif = false)
     {
-
         /* Tokenize args for 'if' tag. */
         preg_match_all('~(?>
                 ' . $this->_obj_call_regexp . '(?:' . $this->_mod_regexp . '*)? | # valid object call
@@ -1266,16 +1263,15 @@
 
         $tokens = $match[0];
 
-        if(empty($tokens)) {
+        if (empty($tokens)) {
             $_error_msg = $elseif ? "'elseif'" : "'if'";
             $_error_msg .= ' statement requires arguments'; 
             $this->_syntax_error($_error_msg, E_USER_ERROR, __FILE__, __LINE__);
         }
-            
-                
+
         // make sure we have balanced parenthesis
         $token_count = array_count_values($tokens);
-        if(isset($token_count['(']) && $token_count['('] != $token_count[')']) {
+        if (isset($token_count['(']) && $token_count['('] != $token_count[')']) {
             $this->_syntax_error("unbalanced parenthesis in if statement", E_USER_ERROR, __FILE__, __LINE__);
         }
 
@@ -1389,19 +1385,19 @@
                     break;
 
                 default:
-                    if(preg_match('~^' . $this->_func_regexp . '$~', $token) ) {
+                    if (preg_match('~^' . $this->_func_regexp . '$~', $token) ) {
                             // function call
-                            if($this->security &&
+                            if ($this->security &&
                                !in_array($token, $this->security_settings['IF_FUNCS'])) {
                                 $this->_syntax_error("(secure mode) '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__);
                             }
-                    } elseif(preg_match('~^' . $this->_var_regexp . '$~', $token) && (strpos('+-*/^%&|', substr($token, -1)) === false) && isset($tokens[$i+1]) && $tokens[$i+1] == '(') {
+                    } elseif (preg_match('~^' . $this->_var_regexp . '$~', $token) && (strpos('+-*/^%&|', substr($token, -1)) === false) && isset($tokens[$i+1]) && $tokens[$i+1] == '(') {
                         // variable function call
                         $this->_syntax_error("variable function call '$token' not allowed in if statement", E_USER_ERROR, __FILE__, __LINE__);                      
-                    } elseif(preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$~', $token)) {
+                    } elseif (preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . '*)$~', $token)) {
                         // object or variable
                         $token = $this->_parse_var_props($token);
-                    } elseif(is_numeric($token)) {
+                    } elseif (is_numeric($token)) {
                         // number, skip it
                     } else {
                         $this->_syntax_error("unidentified token '$token'", E_USER_ERROR, __FILE__, __LINE__);
@@ -1416,7 +1412,15 @@
             return '<?php if ('.implode(' ', $tokens).'): ?>';
     }
 
-
+    /**
+     * compiles an argument list
+     *
+     * @param string $type
+     * @param string $name
+     * @param string $attrs
+     * @param string $cache_code
+     * @return array
+     */
     function _compile_arg_list($type, $name, $attrs, &$cache_code) {
         $arg_list = array();
 
@@ -1511,7 +1515,6 @@
         return $tokens;
     }
 
-
     /**
      * Parse attribute string
      *
@@ -1526,7 +1529,7 @@
                          )+ |
                          [=]
                         ~x', $tag_args, $match);
-        $tokens       = $match[0];
+        $tokens = $match[0];
 
         $attrs = array();
         /* Parse state:
@@ -1563,13 +1566,13 @@
                            boolean value. */
                         if (preg_match('~^(on|yes|true)$~', $token)) {
                             $token = 'true';
-                        } else if (preg_match('~^(off|no|false)$~', $token)) {
+                        } elseif (preg_match('~^(off|no|false)$~', $token)) {
                             $token = 'false';
-                        } else if ($token == 'null') {
+                        } elseif ($token == 'null') {
                             $token = 'null';
-                        } else if (preg_match('~^' . $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) {
+                        } elseif (preg_match('~^' . $this->_num_const_regexp . '|0[xX][0-9a-fA-F]+$~', $token)) {
                             /* treat integer literally */
-                        } else if (!preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$~', $token)) {
+                        } elseif (!preg_match('~^' . $this->_obj_call_regexp . '|' . $this->_var_regexp . '(?:' . $this->_mod_regexp . ')*$~', $token)) {
                             /* treat as a string, double-quote it escaping quotes */
                             $token = '"'.addslashes($token).'"';
                         }
@@ -1583,8 +1586,8 @@
             $last_token = $token;
         }
 
-        if($state != 0) {
-            if($state == 1) {
+        if ($state != 0) {
+            if ($state == 1) {
                 $this->_syntax_error("expecting '=' after attribute name '$last_token'", E_USER_ERROR, __FILE__, __LINE__);
             } else {
                 $this->_syntax_error("missing attribute value", E_USER_ERROR, __FILE__, __LINE__);
@@ -1597,21 +1600,19 @@
     }
 
     /**
-     * compile multiple variables and section properties tokens into
-     * PHP code
+     * compile multiple variables and section properties tokens into PHP code
      *
      * @param array $tokens
      */
     function _parse_vars_props(&$tokens)
     {
-        foreach($tokens as $key => $val) {
+        foreach ($tokens as $key => $val) {
             $tokens[$key] = $this->_parse_var_props($val);
         }
     }
 
     /**
-     * compile single variable and section properties token into
-     * PHP code
+     * compile single variable and section properties token into PHP code
      *
      * @param string $val
      * @param string $tag_attrs
@@ -1621,7 +1622,7 @@
     {
         $val = trim($val);
 
-        if(preg_match('~^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~', $val, $match)) {
+        if (preg_match('~^(' . $this->_obj_call_regexp . '|' . $this->_dvar_regexp . ')(' . $this->_mod_regexp . '*)$~', $val, $match)) {
             // $ variable or object
             $return = $this->_parse_var($match[1]);
             $modifiers = $match[2];
@@ -1632,39 +1633,34 @@
             $this->_parse_modifiers($return, $modifiers);
             return $return;
         } elseif (preg_match('~^' . $this->_db_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
-                // double quoted text
-                preg_match('~^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);
-                $return = $this->_expand_quoted_text($match[1]);
-                if($match[2] != '') {
-                    $this->_parse_modifiers($return, $match[2]);
-                }
-                return $return;
-            }
-        elseif(preg_match('~^' . $this->_num_const_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
-                // numerical constant
-                preg_match('~^(' . $this->_num_const_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);
-                if($match[2] != '') {
-                    $this->_parse_modifiers($match[1], $match[2]);
-                    return $match[1];
-                }
-            }
-        elseif(preg_match('~^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
-                // single quoted text
-                preg_match('~^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);
-                if($match[2] != '') {
-                    $this->_parse_modifiers($match[1], $match[2]);
-                    return $match[1];
-                }
-            }
-        elseif(preg_match('~^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
-                // config var
-                return $this->_parse_conf_var($val);
-            }
-        elseif(preg_match('~^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
-                // section var
-                return $this->_parse_section_prop($val);
+            // double quoted text
+            preg_match('~^(' . $this->_db_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);
+            $return = $this->_expand_quoted_text($match[1]);
+            if ($match[2] != '') {
+                $this->_parse_modifiers($return, $match[2]);
             }
-        elseif(!in_array($val, $this->_permitted_tokens) && !is_numeric($val)) {
+            return $return;
+        } elseif (preg_match('~^' . $this->_num_const_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
+            // numerical constant
+            preg_match('~^(' . $this->_num_const_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);
+            if ($match[2] != '') {
+                $this->_parse_modifiers($match[1], $match[2]);
+                return $match[1];
+            }
+        } elseif (preg_match('~^' . $this->_si_qstr_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
+            // single quoted text
+            preg_match('~^(' . $this->_si_qstr_regexp . ')('. $this->_mod_regexp . '*)$~', $val, $match);
+            if ($match[2] != '') {
+                 $this->_parse_modifiers($match[1], $match[2]);
+                 return $match[1];
+            }
+        } elseif (preg_match('~^' . $this->_cvar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
+            // config var
+            return $this->_parse_conf_var($val);
+        } elseif (preg_match('~^' . $this->_svar_regexp . '(?:' . $this->_mod_regexp . '*)$~', $val)) {
+            // section var
+            return $this->_parse_section_prop($val);
+        } elseif (!in_array($val, $this->_permitted_tokens) && !is_numeric($val)) {
             // literal string
             return $this->_expand_quoted_text('"' . strtr($val, array('\\' => '\\\\', '"' => '\\"')) .'"');
         }
@@ -1680,7 +1676,7 @@
     function _expand_quoted_text($var_expr)
     {
         // if contains unescaped $, expand it
-        if(preg_match_all('~(?:\`(?<!\\\\)\$' . $this->_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?<!\\\\)\$\w+(\[[a-zA-Z0-9]+\])*)~', $var_expr, $_match)) {
+        if (preg_match_all('~(?:\`(?<!\\\\)\$' . $this->_dvar_guts_regexp . '(?:' . $this->_obj_ext_regexp . ')*\`)|(?:(?<!\\\\)\$\w+(\[[a-zA-Z0-9]+\])*)~', $var_expr, $_match)) {
             $_match = $_match[0];
             $_replace = array();
             foreach($_match as $_var) {
@@ -1691,8 +1687,10 @@
         } else {
             $_return = $var_expr;
         }
+
         // replace double quoted literal string with single quotes
         $_return = preg_replace('~^"([\s\w]+)"$~',"'\\1'",$_return);
+
         return $_return;
     }
 
@@ -1708,26 +1706,26 @@
         $_has_math = false;
         $_math_vars = preg_split('~('.$this->_dvar_math_regexp.'|'.$this->_qstr_regexp.')~', $var_expr, -1, PREG_SPLIT_DELIM_CAPTURE);
 
-        if(count($_math_vars) > 1) {
+        if (count($_math_vars) > 1) {
             $_first_var = "";
             $_complete_var = "";
             $_output = "";
             // simple check if there is any math, to stop recursion (due to modifiers with "xx % yy" as parameter)
-            foreach($_math_vars as $_k => $_math_var) {
+            foreach ($_math_vars as $_k => $_math_var) {
                 $_math_var = $_math_vars[$_k];
 
-                if(!empty($_math_var) || is_numeric($_math_var)) {
+                if (!empty($_math_var) || is_numeric($_math_var)) {
                     // hit a math operator, so process the stuff which came before it
-                    if(preg_match('~^' . $this->_dvar_math_regexp . '$~', $_math_var)) {
+                    if (preg_match('~^' . $this->_dvar_math_regexp . '$~', $_math_var)) {
                         $_has_math = true;
-                        if(!empty($_complete_var) || is_numeric($_complete_var)) {
+                        if (!empty($_complete_var) || is_numeric($_complete_var)) {
                             $_output .= $this->_parse_var($_complete_var);
                         }
 
                         // just output the math operator to php
                         $_output .= $_math_var;
 
-                        if(empty($_first_var))
+                        if (empty($_first_var))
                             $_first_var = $_complete_var;
 
                         $_complete_var = "";
@@ -1736,8 +1734,8 @@
                     }
                 }
             }
-            if($_has_math) {
-                if(!empty($_complete_var) || is_numeric($_complete_var))
+            if ($_has_math) {
+                if (!empty($_complete_var) || is_numeric($_complete_var))
                     $_output .= $this->_parse_var($_complete_var);
 
                 // get the modifiers working (only the last var from math + modifier is left)
@@ -1746,16 +1744,16 @@
         }
 
         // prevent cutting of first digit in the number (we _definitly_ got a number if the first char is a digit)
-        if(is_numeric(substr($var_expr, 0, 1)))
+        if (is_numeric(substr($var_expr, 0, 1)))
             $_var_ref = $var_expr;
         else
             $_var_ref = substr($var_expr, 1);
-        
-        if(!$_has_math) {
-            
+
+        if (!$_has_math) {
+
             // get [foo] and .foo and ->foo and (...) pieces
             preg_match_all('~(?:^\w+)|' . $this->_obj_params_regexp . '|(?:' . $this->_var_bracket_regexp . ')|->\$?\w+|\.\$?\w+|\S+~', $_var_ref, $match);
-                        
+
             $_indexes = $match[0];
             $_var_name = array_shift($_indexes);
 
@@ -1772,10 +1770,9 @@
                     $_var_name = substr(array_shift($_indexes), 1);
                     $_output = "\$this->_smarty_vars['$_var_name']";
                 }
-            } elseif(is_numeric($_var_name) && is_numeric(substr($var_expr, 0, 1))) {
+            } elseif (is_numeric($_var_name) && is_numeric(substr($var_expr, 0, 1))) {
                 // because . is the operator for accessing arrays thru inidizes we need to put it together again for floating point numbers
-                if(count($_indexes) > 0)
-                {
+                if (count($_indexes) > 0) {
                     $_var_name .= implode("", $_indexes);
                     $_indexes = array();
                 }
@@ -1801,15 +1798,15 @@
                         $_var_section_prop = isset($_var_parts[1]) ? $_var_parts[1] : 'index';
                         $_output .= "[\$this->_sections['$_var_section']['$_var_section_prop']]";
                     }
-                } else if (substr($_index, 0, 1) == '.') {
+                } elseif (substr($_index, 0, 1) == '.') {
                     if (substr($_index, 1, 1) == '$')
                         $_output .= "[\$this->_tpl_vars['" . substr($_index, 2) . "']]";
                     else
                         $_output .= "['" . substr($_index, 1) . "']";
-                } else if (substr($_index,0,2) == '->') {
-                    if(substr($_index,2,2) == '__') {
+                } elseif (substr($_index,0,2) == '->') {
+                    if (substr($_index,2,2) == '__') {
                         $this->_syntax_error('call to internal object members is not allowed', E_USER_ERROR, __FILE__, __LINE__);
-                    } elseif($this->security && substr($_index, 2, 1) == '_') {
+                    } elseif ($this->security && substr($_index, 2, 1) == '_') {
                         $this->_syntax_error('(secure) call to private object member is not allowed', E_USER_ERROR, __FILE__, __LINE__);
                     } elseif (substr($_index, 2, 1) == '$') {
                         if ($this->security) {
@@ -1893,7 +1890,6 @@
         return $output;
     }
 
-
     /**
      * parse modifier chain into PHP code
      *
@@ -1909,7 +1905,7 @@
         for ($_i = 0, $_for_max = count($_modifiers); $_i < $_for_max; $_i++) {
             $_modifier_name = $_modifiers[$_i];
 
-            if($_modifier_name == 'smarty') {
+            if ($_modifier_name == 'smarty') {
                 // skip smarty modifier
                 continue;
             }
@@ -1937,12 +1933,12 @@
 
             $this->_parse_vars_props($_modifier_args);
 
-            if($_modifier_name == 'default') {
+            if ($_modifier_name == 'default') {
                 // supress notifications of default modifier vars and args
-                if(substr($output, 0, 1) == '$') {
+                if (substr($output, 0, 1) == '$') {
                     $output = '@' . $output;
                 }
-                if(isset($_modifier_args[0]) && substr($_modifier_args[0], 0, 1) == '$') {
+                if (isset($_modifier_args[0]) && substr($_modifier_args[0], 0, 1) == '$') {
                     $_modifier_args[0] = '@' . $_modifier_args[0];
                 }
             }
@@ -1962,7 +1958,6 @@
         }
     }
 
-
     /**
      * add plugin
      *
@@ -1982,7 +1977,6 @@
         }
     }
 
-
     /**
      * Compiles references of type $smarty.foo
      *
@@ -2015,7 +2009,7 @@
                         array_shift($indexes);
                         $compiled_ref = "(\$this->_foreach[$_var]['iteration']-1)";
                         break;
-                        
+
                     case 'first':
                         array_shift($indexes);
                         $compiled_ref = "(\$this->_foreach[$_var]['iteration'] <= 1)";
@@ -2025,12 +2019,12 @@
                         array_shift($indexes);
                         $compiled_ref = "(\$this->_foreach[$_var]['iteration'] == \$this->_foreach[$_var]['total'])";
                         break;
-                        
+
                     case 'show':
                         array_shift($indexes);
                         $compiled_ref = "(\$this->_foreach[$_var]['total'] > 0)";
                         break;
-                        
+
                     default:
                         unset($_max_index);
                         $compiled_ref = "\$this->_foreach[$_var]";
@@ -2121,7 +2115,7 @@
             case 'rdelim':
                 $compiled_ref = "'$this->right_delimiter'";
                 break;
-                
+
             default:
                 $this->_syntax_error('$smarty.' . $_ref . ' is an unknown reference', E_USER_ERROR, __FILE__, __LINE__);
                 break;
@@ -2218,7 +2212,6 @@
         $this->_trigger_fatal_error("syntax error: $error_msg", $this->_current_file, $this->_current_line_no, $file, $line, $error_type);
     }
 
-
     /**
      * check if the compilation changes from cacheable to
      * non-cacheable state with the beginning of the current
@@ -2236,7 +2229,6 @@
         return $_ret;
     }
 
-
     /**
      * check if the compilation changes from non-cacheable to
      * cacheable state with the end of the current plugin return
@@ -2252,7 +2244,6 @@
             . '}\'; endif;';
     }
 
-
     /**
      * push opening tag-name, file-name and line-number on the tag-stack
      * @param string the opening tag's name
@@ -2299,7 +2290,6 @@
         $this->_syntax_error("mismatched tag {/$close_tag}.$message",
                              E_USER_ERROR, __FILE__, __LINE__);
     }
-
 }
 
 /**
@@ -2308,14 +2298,14 @@
  * @access private
  * @param string $a
  * @param string $b
- * @return 0|-1|1
+ * @return int 0|-1|1
  */
 function _smarty_sort_length($a, $b)
 {
-    if($a == $b)
+    if ($a == $b)
         return 0;
 
-    if(strlen($a) == strlen($b))
+    if (strlen($a) == strlen($b))
         return ($a > $b) ? -1 : 1;
 
     return (strlen($a) > strlen($b)) ? -1 : 1;


--gj572EiMnwbLXET9
Content-Type: text/plain; charset=us-ascii

-- 
Smarty Development Mailing List (http://smarty.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--gj572EiMnwbLXET9--