Code

Updated smarty to 3.0 rc4
authorcajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Wed, 6 Oct 2010 10:22:10 +0000 (10:22 +0000)
committercajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Wed, 6 Oct 2010 10:22:10 +0000 (10:22 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19920 594d385d-05f5-0310-b6e9-bd551577e9d8

107 files changed:
gosa-core/include/smarty/Smarty.class.php
gosa-core/include/smarty/plugins/block.php.php
gosa-core/include/smarty/plugins/block.textformat.php
gosa-core/include/smarty/plugins/function.counter.php
gosa-core/include/smarty/plugins/function.cycle.php
gosa-core/include/smarty/plugins/function.fetch.php
gosa-core/include/smarty/plugins/function.html_checkboxes.php
gosa-core/include/smarty/plugins/function.html_image.php
gosa-core/include/smarty/plugins/function.html_options.php
gosa-core/include/smarty/plugins/function.html_radios.php
gosa-core/include/smarty/plugins/function.html_select_date.php
gosa-core/include/smarty/plugins/function.html_select_time.php
gosa-core/include/smarty/plugins/function.html_table.php
gosa-core/include/smarty/plugins/function.mailto.php
gosa-core/include/smarty/plugins/function.math.php
gosa-core/include/smarty/plugins/function.popup.php
gosa-core/include/smarty/plugins/function.popup_init.php
gosa-core/include/smarty/plugins/modifier.capitalize.php
gosa-core/include/smarty/plugins/modifier.date_format.php
gosa-core/include/smarty/plugins/modifier.debug_print_var.php
gosa-core/include/smarty/plugins/modifier.escape.php
gosa-core/include/smarty/plugins/modifier.regex_replace.php
gosa-core/include/smarty/plugins/modifier.replace.php
gosa-core/include/smarty/plugins/modifier.spacify.php
gosa-core/include/smarty/plugins/modifier.truncate.php
gosa-core/include/smarty/plugins/modifiercompiler.cat.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.count_characters.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.count_paragraphs.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.count_sentences.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.count_words.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.default.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.indent.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.lower.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.noprint.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.string_format.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.strip.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.strip_tags.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.upper.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/modifiercompiler.wordwrap.php [new file with mode: 0644]
gosa-core/include/smarty/plugins/outputfilter.trimwhitespace.php
gosa-core/include/smarty/plugins/shared.escape_special_chars.php
gosa-core/include/smarty/plugins/shared.make_timestamp.php
gosa-core/include/smarty/plugins/variablefilter.htmlspecialchars.php
gosa-core/include/smarty/sysplugins/smarty_internal_cache.php
gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_append.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_assign.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_block.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_compile_call.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_capture.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_config_load.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_compile_debug.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_eval.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_for.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_foreach.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_if.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_include.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_include_php.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_insert.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_ldelim.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_nocache.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_function_plugin.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_modifier.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_print_expression.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_special_variable.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_rdelim.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_section.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_while.php
gosa-core/include/smarty/sysplugins/smarty_internal_compilebase.php
gosa-core/include/smarty/sysplugins/smarty_internal_config.php
gosa-core/include/smarty/sysplugins/smarty_internal_config_file_compiler.php
gosa-core/include/smarty/sysplugins/smarty_internal_configfilelexer.php
gosa-core/include/smarty/sysplugins/smarty_internal_configfileparser.php
gosa-core/include/smarty/sysplugins/smarty_internal_data.php
gosa-core/include/smarty/sysplugins/smarty_internal_debug.php
gosa-core/include/smarty/sysplugins/smarty_internal_filter_handler.php
gosa-core/include/smarty/sysplugins/smarty_internal_function_call_handler.php
gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_parsetree.php
gosa-core/include/smarty/sysplugins/smarty_internal_register.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_eval.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_file.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_php.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_registered.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_stream.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_string.php
gosa-core/include/smarty/sysplugins/smarty_internal_security_handler.php
gosa-core/include/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php
gosa-core/include/smarty/sysplugins/smarty_internal_template.php
gosa-core/include/smarty/sysplugins/smarty_internal_templatecompilerbase.php
gosa-core/include/smarty/sysplugins/smarty_internal_templatelexer.php
gosa-core/include/smarty/sysplugins/smarty_internal_templateparser.php
gosa-core/include/smarty/sysplugins/smarty_internal_unregister.php
gosa-core/include/smarty/sysplugins/smarty_internal_utility.php
gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php
gosa-core/include/smarty/sysplugins/smarty_internal_write_file.php
gosa-core/include/smarty/sysplugins/smarty_security.php

index 319debf11060f478de75368037ae8d9ad4275578..1e3ffbd55e08d38a0df472d3ca29e97d659f85e8 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * Project:     Smarty: the PHP compiling template engine
  * File:        Smarty.class.php
- * SVN:         $Id: Smarty.class.php 3557 2010-04-28 20:30:27Z Uwe.Tews $
+ * SVN:         $Id: Smarty.class.php 3669 2010-09-17 18:10:10Z uwe.tews@googlemail.com $
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -108,7 +108,7 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR
  */
 class Smarty extends Smarty_Internal_Data {
     // smarty version
-    const SMARTY_VERSION = 'Smarty-3.0-RC2'; 
+    const SMARTY_VERSION = 'Smarty3rc4'; 
     // auto literal on delimiters with whitspace
     public $auto_literal = true; 
     // display error on not assigned variables
@@ -159,6 +159,7 @@ class Smarty extends Smarty_Internal_Data {
     public $security_policy = null;
     public $security_handler = null;
     public $direct_access_security = true; 
+    public $trusted_dir = array();
     // debug mode
     public $debugging = false;
     public $debugging_ctrl = 'NONE';
@@ -192,8 +193,6 @@ class Smarty extends Smarty_Internal_Data {
     public $properties = array(); 
     // config type
     public $default_config_type = 'file'; 
-    // exception handler: array('ExceptionClass','ExceptionMethod');
-    public $exception_handler = null; 
     // cached template objects
     public $template_objects = null; 
     // check If-Modified-Since headers
@@ -204,6 +203,8 @@ class Smarty extends Smarty_Internal_Data {
     public $plugin_search_order = array('function', 'block', 'compiler', 'class'); 
     // registered objects
     public $registered_objects = array(); 
+    // registered classes
+    public $registered_classes = array(); 
     // registered filters
     public $registered_filters = array(); 
     // autoload filter
@@ -222,11 +223,10 @@ class Smarty extends Smarty_Internal_Data {
     public $_dir_perms = 0771; 
     // smarty object reference
     public $smarty = null; 
-    // block data at template inheritance
-    public $block_data = array();
-    public $block_data_stack = array(); 
     // block tag hierarchy
     public $_tag_stack = array(); 
+    // flag if {block} tag is compiled for template inheritance
+    public $inheritance = false;
     // plugins
     public $_plugins = array(); 
     // generate deprecated function call notices?
@@ -243,10 +243,7 @@ class Smarty extends Smarty_Internal_Data {
         if (is_callable('mb_internal_encoding')) {
             mb_internal_encoding(SMARTY_RESOURCE_CHAR_SET);
         } 
-        $this->start_time = $this->_get_time(); 
-        // set exception handler
-        if (!empty($this->exception_handler))
-            set_exception_handler($this->exception_handler); 
+        $this->start_time = microtime(true); 
         // set default dirs
         $this->template_dir = array('.' . DS . 'templates' . DS);
         $this->compile_dir = '.' . DS . 'templates_c' . DS;
@@ -289,9 +286,6 @@ class Smarty extends Smarty_Internal_Data {
      */
     public function __destruct()
     { 
-        // restore to previous exception handler, if any
-        if (!empty($this->exception_handler))
-            restore_exception_handler();
     } 
 
     /**
@@ -313,8 +307,6 @@ class Smarty extends Smarty_Internal_Data {
             // get default Smarty data object
             $parent = $this;
         } 
-        array_push($this->block_data_stack, $this->block_data);
-        $this->block_data = array(); 
         // create template object if necessary
         ($template instanceof $this->template_class)? $_template = $template :
         $_template = $this->createTemplate ($template, $cache_id, $compile_id, $parent);
@@ -357,11 +349,9 @@ class Smarty extends Smarty_Internal_Data {
             if ($this->debugging) {
                 Smarty_Internal_Debug::display_debug($this);
             } 
-            $this->block_data = array_pop($this->block_data_stack);
             return;
         } else {
             // return fetched content
-            $this->block_data = array_pop($this->block_data_stack);
             return $_output;
         } 
     } 
@@ -464,7 +454,7 @@ class Smarty extends Smarty_Internal_Data {
             $this->security_handler = new Smarty_Internal_Security_Handler($this);
             $this->security = true;
         } else {
-            throw new Exception('Property security_class is not defined');
+            throw new SmartyException('Property security_class is not defined');
         } 
     } 
 
@@ -508,9 +498,13 @@ class Smarty extends Smarty_Internal_Data {
     function templateExists($resource_name)
     { 
         // create template object
+        $save = $this->template_objects;
         $tpl = new $this->template_class($resource_name, $this); 
         // check if it does exists
-        return $tpl->isExisting();
+        $result = $tpl->isExisting();
+        $this->template_objects = $save;
+        unset ($tpl);
+        return $result;
     } 
 
     /**
@@ -531,7 +525,7 @@ class Smarty extends Smarty_Internal_Data {
         $_name_parts = explode('_', $_plugin_name, 3); 
         // class name must have three parts to be valid plugin
         if (count($_name_parts) < 3 || $_name_parts[0] !== 'smarty') {
-            throw new Exception("plugin {$plugin_name} is not a valid name format");
+            throw new SmartyException("plugin {$plugin_name} is not a valid name format");
             return false;
         } 
         // if type is "internal", get plugin from sysplugins
@@ -580,7 +574,7 @@ class Smarty extends Smarty_Internal_Data {
                 return $this->registered_filters[$type][$_filter_name] = $_plugin;
             } 
         } 
-        throw new Exception("{$type}filter \"{$name}\" not callable");
+        throw new SmartyException("{$type}filter \"{$name}\" not callable");
         return false;
     } 
 
@@ -604,7 +598,7 @@ class Smarty extends Smarty_Internal_Data {
      */
     public function trigger_error($error_msg, $error_type = E_USER_WARNING)
     {
-        throw new Exception("Smarty error: $error_msg");
+        throw new SmartyException("Smarty error: $error_msg");
     } 
 
     /**
@@ -670,10 +664,10 @@ class Smarty extends Smarty_Internal_Data {
     function getRegisteredObject($name)
     {
         if (!isset($this->registered_objects[$name]))
-            throw new Exception("'$name' is not a registered object");
+            throw new SmartyException("'$name' is not a registered object");
 
         if (!is_object($this->registered_objects[$name][0]))
-            throw new Exception("registered '$name' is not an object");
+            throw new SmartyException("registered '$name' is not an object");
 
         return $this->registered_objects[$name][0];
     } 
@@ -733,7 +727,7 @@ class Smarty extends Smarty_Internal_Data {
             $camel_func = create_function('$c', 'return "_" . strtolower($c[1]);'); 
         // PHP4 call to constructor?
         if (strtolower($name) == 'smarty') {
-            throw new Exception('Please use parent::__construct() to call parent constuctor');
+            throw new SmartyException('Please use parent::__construct() to call parent constuctor');
             return false;
         } 
         // see if this is a set/get for a property
@@ -745,7 +739,7 @@ class Smarty extends Smarty_Internal_Data {
             // convert camel case to underscored name
             $property_name = preg_replace_callback('/([A-Z])/', $camel_func, $property_name);
             if (!property_exists($this, $property_name)) {
-                throw new Exception("property '$property_name' does not exist.");
+                throw new SmartyException("property '$property_name' does not exist.");
                 return false;
             } 
             if ($first3 == 'get')
@@ -761,6 +755,9 @@ class Smarty extends Smarty_Internal_Data {
     } 
 } 
 
+/**
+ * Autoloader
+ */
 function smartyAutoload($class)
 {
     $_class = strtolower($class);
@@ -769,4 +766,16 @@ function smartyAutoload($class)
     } 
 } 
 
+/**
+ * Smarty exception class
+ */
+Class SmartyException extends Exception {
+}
+
+/**
+ * Smarty compiler exception class
+ */
+Class SmartyCompilerException extends SmartyException  {
+}
+
 ?>
index d1de74002218e3206d0e4ecba47ef7064d6ffe7c..84a0275e07f4231b5869e2b71e2d7fd94e2cf003 100644 (file)
@@ -1,27 +1,28 @@
 <?php
 /**
-* Smarty plugin to execute PHP code
-* 
-* @package Smarty
-* @subpackage PluginsBlock
-* @author Uwe Tews 
-*/
+ * Smarty plugin to execute PHP code
+ 
+ * @package Smarty
+ * @subpackage PluginsBlock
+ * @author Uwe Tews 
+ */
 
 /**
-* Smarty {php}{/php} block plugin
-* 
-* @param string $content contents of the block
-* @param object $smarty Smarty object
-* @param boolean $ &$repeat repeat flag
-* @param object $template template object
-* @return string content re-formatted
-*/
+ * Smarty {php}{/php} block plugin
+ 
+ * @param string $content contents of the block
+ * @param object $smarty Smarty object
+ * @param boolean $ &$repeat repeat flag
+ * @param object $template template object
+ * @return string content re-formatted
+ */
 function smarty_block_php($params, $content, $smarty, &$repeat, $template)
 { 
     if (!$smarty->allow_php_tag) {
-        throw new Exception("{php} is deprecated, set allow_php_tag = true to enable");
+        throw new SmartyException("{php} is deprecated, set allow_php_tag = true to enable");
     } 
     eval($content);
     return '';
 }
-?>
+
+?>
\ No newline at end of file
index f578bfb9b62050f0aa0efe3c7966ebed023a7dd2..733f6e234907d2421de9bb2025fc2673269f754f 100644 (file)
@@ -1,37 +1,37 @@
 <?php
 /**
-* Smarty plugin to format text blocks
-*
-* @package Smarty
-* @subpackage PluginsBlock
-*/
+ * Smarty plugin to format text blocks
+ *
+ * @package Smarty
+ * @subpackage PluginsBlock
+ */
 
 /**
-* Smarty {textformat}{/textformat} block plugin
-* 
-* Type:     block function<br>
-* Name:     textformat<br>
-* Purpose:  format text a certain way with preset styles
-*            or custom wrap/indent settings<br>
-* 
-* @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat}
-       (Smarty online manual)
-* @param array $params parameters
-* <pre>
-* Params:   style: string (email)
-*            indent: integer (0)
-*            wrap: integer (80)
-*            wrap_char string ("\n")
-*            indent_char: string (" ")
-*            wrap_boundary: boolean (true)
-* </pre>
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param string $content contents of the block
-* @param object $smarty Smarty object
-* @param boolean &$repeat repeat flag
-* @param object $template template object
-* @return string content re-formatted
-*/
+ * Smarty {textformat}{/textformat} block plugin
+ 
+ * Type:     block function<br>
+ * Name:     textformat<br>
+ * Purpose:  format text a certain way with preset styles
+ *            or custom wrap/indent settings<br>
+ 
+ * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat}
      (Smarty online manual)
+ * @param array $params parameters
+ * <pre>
+ * Params:   style: string (email)
+ *            indent: integer (0)
+ *            wrap: integer (80)
+ *            wrap_char string ("\n")
+ *            indent_char: string (" ")
+ *            wrap_boundary: boolean (true)
+ * </pre>
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $content contents of the block
+ * @param object $smarty Smarty object
+ * @param boolean &$repeat repeat flag
+ * @param object $template template object
+ * @return string content re-formatted
+ */
 function smarty_block_textformat($params, $content, $smarty, &$repeat, $template)
 {
     if (is_null($content)) {
@@ -100,4 +100,4 @@ function smarty_block_textformat($params, $content, $smarty, &$repeat, $template
     return $assign ? $template->assign($assign, $_output) : $_output;
 } 
 
-?>
+?>
\ No newline at end of file
index 1f6e1cf7c0ab8120ddfe2aa47ac6b0c544d3c327..534e9981bd261949a0d47ecb54f9f776e8db04b1 100644 (file)
@@ -2,10 +2,9 @@
 /**
  * Smarty plugin
  * @package Smarty
- * @subpackage plugins
+ * @subpackage PluginsFunction
  */
 
-
 /**
  * Smarty {counter} function plugin
  *
  *       (Smarty online manual)
  * @param array parameters
  * @param Smarty
+ * @param object $template template object
  * @return string|null
  */
-function smarty_function_counter($params, $smarty)
+function smarty_function_counter($params, $smarty, $template)
 {
     static $counters = array();
 
@@ -43,7 +43,7 @@ function smarty_function_counter($params, $smarty)
     }
 
     if (isset($counter['assign'])) {
-        $smarty->assign($counter['assign'], $counter['count']);
+        $template->assign($counter['assign'], $counter['count']);
     }
     
     if (isset($params['print'])) {
@@ -74,4 +74,5 @@ function smarty_function_counter($params, $smarty)
     return $retval;
     
 }
+
 ?>
\ No newline at end of file
index 509584c97f7dc28187f4ff29bbff779b5960c14b..76ff0c6b02e0d2913671db34162e424f0a37f6d1 100644 (file)
@@ -1,8 +1,9 @@
 <?php
 /**
  * Smarty plugin
+ *
  * @package Smarty
- * @subpackage plugins
+ * @subpackage PluginsFunction
  */
 
 /**
  * @author credit to Jason Sweat <jsweat_php@yahoo.com>
  * @version  1.3
  * @param array
- * @param Smarty
+ * @param object $smarty Smarty object
+ * @param object $template template object
  * @return string|null
  */
-function smarty_function_cycle($params, $smarty)
+
+function smarty_function_cycle($params, $smarty, $template)
 {
     static $cycle_vars;
     
@@ -81,7 +84,7 @@ function smarty_function_cycle($params, $smarty)
     
     if (isset($params['assign'])) {
         $print = false;
-        $smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
+        $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
     }
         
     if($print) {
@@ -100,4 +103,5 @@ function smarty_function_cycle($params, $smarty)
     
     return $retval;
 }
+
 ?>
\ No newline at end of file
index 391ff1bb9ab3d12a2fd8405eec8425149323b8d3..0a511830bcf37ece213b35255b5ece69832bf147 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
  * Smarty plugin
+ *
  * @package Smarty
  * @subpackage PluginsFunction
  */
 
-
 /**
  * Smarty {fetch} plugin
  *
@@ -214,4 +214,4 @@ function smarty_function_fetch($params, $smarty, $template)
     }
 }
 
-?>
+?>
\ No newline at end of file
index ac72f3fdf3f14f1266d555e468508433cd385f9b..328faf448a2ef862e9ec8fd93f1068dfc8e6e928 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
  * Smarty plugin
+ *
  * @package Smarty
  * @subpackage PluginsFunction
  */
 
-
 /**
  * Smarty {html_checkboxes} function plugin
  *
@@ -142,4 +142,4 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
     return $_output;
 }
 
-?>
+?>
\ No newline at end of file
index 3f031dc00ed5ea948aeedd7aa68e10bf3b1a44e2..e2714a67eb3628b49cc2d652e19681b9f369f16b 100644 (file)
@@ -1,39 +1,39 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {html_image} function plugin
-* 
-* Type:     function<br>
-* Name:     html_image<br>
-* Date:     Feb 24, 2003<br>
-* Purpose:  format HTML tags for the image<br>
-* Examples: {html_image file="/images/masthead.gif"}
-* Output:   <img src="/images/masthead.gif" width=400 height=23>
-* 
-* @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image}
-      (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author credits to Duda <duda@big.hu> 
-* @version 1.0
-* @param array $params parameters
-* Input:<br>
-*          - file = file (and path) of image (required)
-*          - height = image height (optional, default actual height)
-*          - width = image width (optional, default actual width)
-*          - basedir = base directory for absolute paths, default
-*                      is environment variable DOCUMENT_ROOT
-*          - path_prefix = prefix for path output (optional, default empty)
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-* @uses smarty_function_escape_special_chars()
-*/
+ * Smarty {html_image} function plugin
+ 
+ * Type:     function<br>
+ * Name:     html_image<br>
+ * Date:     Feb 24, 2003<br>
+ * Purpose:  format HTML tags for the image<br>
+ * Examples: {html_image file="/images/masthead.gif"}
+ * Output:   <img src="/images/masthead.gif" width=400 height=23>
+ 
+ * @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image}
     (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author credits to Duda <duda@big.hu> 
+ * @version 1.0
+ * @param array $params parameters
+ * Input:<br>
+ *          - file = file (and path) of image (required)
+ *          - height = image height (optional, default actual height)
+ *          - width = image width (optional, default actual width)
+ *          - basedir = base directory for absolute paths, default
+ *                      is environment variable DOCUMENT_ROOT
+ *          - path_prefix = prefix for path output (optional, default empty)
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ * @uses smarty_function_escape_special_chars()
+ */
 function smarty_function_html_image($params, $smarty, $template)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -64,7 +64,7 @@ function smarty_function_html_image($params, $smarty, $template)
                 if (!is_array($_val)) {
                     $$_key = smarty_function_escape_special_chars($_val);
                 } else {
-                    throw new Exception ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
+                    throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
                 } 
                 break;
 
@@ -78,7 +78,7 @@ function smarty_function_html_image($params, $smarty, $template)
                 if (!is_array($_val)) {
                     $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                 } else {
-                    throw new Exception ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
+                    throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
                 } 
                 break;
         } 
@@ -136,4 +136,4 @@ function smarty_function_html_image($params, $smarty, $template)
     return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix;
 } 
 
-?>
+?>
\ No newline at end of file
index 85b05f7dce89a5151a2142f6a650773b72231d0b..a4725809aa6a8bec735291f99d68c1cc1d83b2b0 100644 (file)
@@ -1,35 +1,34 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {html_options} function plugin
-* 
-* Type:     function<br>
-* Name:     html_options<br>
-* Purpose:  Prints the list of <option> tags generated from
-*            the passed parameters
-* 
-* @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image}
-      (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param array $params parameters
-* Input:<br>
-*            - name       (optional) - string default "select"
-*            - values     (required if no options supplied) - array
-*            - options    (required if no values supplied) - associative array
-*            - selected   (optional) - string default not set
-*            - output     (required if not options supplied) - array
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-* @uses smarty_function_escape_special_chars()
-*/
-
+ * Smarty {html_options} function plugin
+ * 
+ * Type:     function<br>
+ * Name:     html_options<br>
+ * Purpose:  Prints the list of <option> tags generated from
+ *            the passed parameters
+ * 
+ * @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image}
+ *      (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param array $params parameters
+ * Input:<br>
+ *            - name       (optional) - string default "select"
+ *            - values     (required if no options supplied) - array
+ *            - options    (required if no values supplied) - associative array
+ *            - selected   (optional) - string default not set
+ *            - output     (required if not options supplied) - array
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ * @uses smarty_function_escape_special_chars()
+ */
 function smarty_function_html_options($params, $smarty, $template)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -119,4 +118,4 @@ function smarty_function_html_options_optgroup($key, $values, $selected)
     return $optgroup_html;
 } 
 
-?>
+?>
\ No newline at end of file
index c7f72bf64b39ad038fdc0adf2b54c5affa081b39..39c02330efc1437b82eadbc9d716fe614aa4703b 100644 (file)
@@ -1,45 +1,45 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {html_radios} function plugin
-* 
-* File:       function.html_radios.php<br>
-* Type:       function<br>
-* Name:       html_radios<br>
-* Date:       24.Feb.2003<br>
-* Purpose:    Prints out a list of radio input types<br>
-* Examples:
-* <pre>
-* {html_radios values=$ids output=$names}
-* {html_radios values=$ids name='box' separator='<br>' output=$names}
-* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
-* </pre>
-* 
-* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
-      (Smarty online manual)
-* @author Christopher Kvarme <christopher.kvarme@flashjab.com> 
-* @author credits to Monte Ohrt <monte at ohrt dot com> 
-* @version 1.0
-* @param array $params parameters
-* Input:<br>
-*            - name       (optional) - string default "radio"
-*            - values     (required) - array
-*            - options    (optional) - associative array
-*            - checked    (optional) - array default not set
-*            - separator  (optional) - ie <br> or &nbsp;
-*            - output     (optional) - the output next to each radio button
-*            - assign     (optional) - assign the output as an array to this variable
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-* @uses smarty_function_escape_special_chars()
-*/
+ * Smarty {html_radios} function plugin
+ 
+ * File:       function.html_radios.php<br>
+ * Type:       function<br>
+ * Name:       html_radios<br>
+ * Date:       24.Feb.2003<br>
+ * Purpose:    Prints out a list of radio input types<br>
+ * Examples:
+ * <pre>
+ * {html_radios values=$ids output=$names}
+ * {html_radios values=$ids name='box' separator='<br>' output=$names}
+ * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
+ * </pre>
+ 
+ * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
     (Smarty online manual)
+ * @author Christopher Kvarme <christopher.kvarme@flashjab.com> 
+ * @author credits to Monte Ohrt <monte at ohrt dot com> 
+ * @version 1.0
+ * @param array $params parameters
+ * Input:<br>
+ *            - name       (optional) - string default "radio"
+ *            - values     (required) - array
+ *            - options    (optional) - associative array
+ *            - checked    (optional) - array default not set
+ *            - separator  (optional) - ie <br> or &nbsp;
+ *            - output     (optional) - the output next to each radio button
+ *            - assign     (optional) - assign the output as an array to this variable
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ * @uses smarty_function_escape_special_chars()
+ */
 function smarty_function_html_radios($params, $smarty, $template)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -153,4 +153,4 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
     return $_output;
 } 
 
-?>
+?>
\ No newline at end of file
index 7001f887b135c8fb74ff55290ccaab75dc8b12b5..cd20d689b9821d3a2abe2b6134defcc414bfcc99 100644 (file)
@@ -1,43 +1,43 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {html_select_date} plugin
-* 
-* Type:     function<br>
-* Name:     html_select_date<br>
-* Purpose:  Prints the dropdowns for date selection.
-* 
-* ChangeLog:<br>
-*            - 1.0 initial release
-*            - 1.1 added support for +/- N syntax for begin
-*                 and end year values. (Monte)
-*            - 1.2 added support for yyyy-mm-dd syntax for
-*                 time value. (Jan Rosier)
-*            - 1.3 added support for choosing format for
-*                 month values (Gary Loescher)
-*            - 1.3.1 added support for choosing format for
-*                 day values (Marcus Bointon)
-*            - 1.3.2 support negative timestamps, force year
-*              dropdown to include given date unless explicitly set (Monte)
-*            - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
-*              of 0000-00-00 dates (cybot, boots)
-* 
-* @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date}
-      (Smarty online manual)
-* @version 1.3.4
-* @author Andrei Zmievski 
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param array $params parameters
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-*/
+ * Smarty {html_select_date} plugin
+ 
+ * Type:     function<br>
+ * Name:     html_select_date<br>
+ * Purpose:  Prints the dropdowns for date selection.
+ 
+ * ChangeLog:<br>
+ *            - 1.0 initial release
+ *            - 1.1 added support for +/- N syntax for begin
+ *                 and end year values. (Monte)
+ *            - 1.2 added support for yyyy-mm-dd syntax for
+ *                 time value. (Jan Rosier)
+ *            - 1.3 added support for choosing format for
+ *                 month values (Gary Loescher)
+ *            - 1.3.1 added support for choosing format for
+ *                 day values (Marcus Bointon)
+ *            - 1.3.2 support negative timestamps, force year
+ *              dropdown to include given date unless explicitly set (Monte)
+ *            - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
+ *              of 0000-00-00 dates (cybot, boots)
+ 
+ * @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date}
     (Smarty online manual)
+ * @version 1.3.4
+ * @author Andrei Zmievski 
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param array $params parameters
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ */
 function smarty_function_html_select_date($params, $smarty, $template)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
@@ -329,5 +329,6 @@ function smarty_function_html_select_date($params, $smarty, $template)
     } 
 
     return $html_result;
-} 
-?>
+}
+
+?>
\ No newline at end of file
index 51d307ae27547d13ac48c81f4d604c9e6875202c..e9d95c2fbed93eb83c08747c75681540613ad999 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {html_select_time} function plugin
-* 
-* Type:     function<br>
-* Name:     html_select_time<br>
-* Purpose:  Prints the dropdowns for time selection
-* 
-* @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time}
-          (Smarty online manual)
-* @author Roberto Berto <roberto@berto.net> 
-* @credits Monte Ohrt <monte AT ohrt DOT com>
-* @param array $params parameters
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-* @uses smarty_make_timestamp()
-*/
+ * Smarty {html_select_time} function plugin
+ 
+ * Type:     function<br>
+ * Name:     html_select_time<br>
+ * Purpose:  Prints the dropdowns for time selection
+ 
+ * @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time}
         (Smarty online manual)
+ * @author Roberto Berto <roberto@berto.net> 
+ * @credits Monte Ohrt <monte AT ohrt DOT com>
+ * @param array $params parameters
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ * @uses smarty_make_timestamp()
+ */
 function smarty_function_html_select_time($params, $smarty, $template)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
@@ -194,4 +194,4 @@ function smarty_function_html_select_time($params, $smarty, $template)
     return $html_result;
 } 
 
-?>
+?>
\ No newline at end of file
index 198b03ca07cd77ce515de59f05ce21a9297db39f..f279ad6d970da6ddaa70065a7756c5bee3a34fdc 100644 (file)
@@ -1,53 +1,53 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {html_table} function plugin
-* 
-* Type:     function<br>
-* Name:     html_table<br>
-* Date:     Feb 17, 2003<br>
-* Purpose:  make an html table from an array of data<br>
-* 
-* 
-* Examples:
-* <pre>
-* {table loop=$data}
-* {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
-* {table loop=$data cols="first,second,third" tr_attr=$colors}
-* </pre>
-* 
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author credit to Messju Mohr <messju at lammfellpuschen dot de> 
-* @author credit to boots <boots dot smarty at yahoo dot com> 
-* @version 1.1
-* @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
-          (Smarty online manual)
-* @param array $params parameters
-* Input:<br>
-*          - loop = array to loop through
-*          - cols = number of columns, comma separated list of column names
-*                   or array of column names
-*          - rows = number of rows
-*          - table_attr = table attributes
-*          - th_attr = table heading attributes (arrays are cycled)
-*          - tr_attr = table row attributes (arrays are cycled)
-*          - td_attr = table cell attributes (arrays are cycled)
-*          - trailpad = value to pad trailing cells with
-*          - caption = text for caption element 
-*          - vdir = vertical direction (default: "down", means top-to-bottom)
-*          - hdir = horizontal direction (default: "right", means left-to-right)
-*          - inner = inner loop (default "cols": print $loop line by line,
-*                    $loop will be printed column by column otherwise)
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-*/
+ * Smarty {html_table} function plugin
+ 
+ * Type:     function<br>
+ * Name:     html_table<br>
+ * Date:     Feb 17, 2003<br>
+ * Purpose:  make an html table from an array of data<br>
+ 
+ 
+ * Examples:
+ * <pre>
+ * {table loop=$data}
+ * {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
+ * {table loop=$data cols="first,second,third" tr_attr=$colors}
+ * </pre>
+ 
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author credit to Messju Mohr <messju at lammfellpuschen dot de> 
+ * @author credit to boots <boots dot smarty at yahoo dot com> 
+ * @version 1.1
+ * @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
         (Smarty online manual)
+ * @param array $params parameters
+ * Input:<br>
+ *          - loop = array to loop through
+ *          - cols = number of columns, comma separated list of column names
+ *                   or array of column names
+ *          - rows = number of rows
+ *          - table_attr = table attributes
+ *          - th_attr = table heading attributes (arrays are cycled)
+ *          - tr_attr = table row attributes (arrays are cycled)
+ *          - td_attr = table cell attributes (arrays are cycled)
+ *          - trailpad = value to pad trailing cells with
+ *          - caption = text for caption element 
+ *          - vdir = vertical direction (default: "down", means top-to-bottom)
+ *          - hdir = horizontal direction (default: "right", means left-to-right)
+ *          - inner = inner loop (default "cols": print $loop line by line,
+ *                    $loop will be printed column by column otherwise)
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ */
 function smarty_function_html_table($params, $smarty, $template)
 {
     $table_attr = 'border="1"';
@@ -61,6 +61,7 @@ function smarty_function_html_table($params, $smarty, $template)
     $hdir = 'right';
     $inner = 'cols';
     $caption = '';
+    $loop = null;
 
     if (!isset($params['loop'])) {
         trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING);
@@ -172,5 +173,6 @@ function smarty_function_html_table_cycle($name, $var, $no)
     } 
 
     return ($ret) ? ' ' . $ret : '';
-} 
-?>
+}
+
+?>
\ No newline at end of file
index 29a87c6918099aa2f28cb816d7702d0eb0e976b4..f75dc71bc4d1133806a894508470c4a599651e3f 100644 (file)
@@ -1,54 +1,54 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFunction
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFunction
+ */
 
 /**
-* Smarty {mailto} function plugin
-* 
-* Type:     function<br>
-* Name:     mailto<br>
-* Date:     May 21, 2002
-* Purpose:  automate mailto address link creation, and optionally
-*            encode them.<br>
-* 
-* Examples:
-* <pre>
-* {mailto address="me@domain.com"}
-* {mailto address="me@domain.com" encode="javascript"}
-* {mailto address="me@domain.com" encode="hex"}
-* {mailto address="me@domain.com" subject="Hello to you!"}
-* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
-* {mailto address="me@domain.com" extra='class="mailto"'}
-* </pre>
-* 
-* @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
-          (Smarty online manual)
-* @version 1.2
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author credits to Jason Sweat (added cc, bcc and subject functionality) 
-* @param array $params parameters
-* Input:<br>
-*          - address = e-mail address
-*          - text = (optional) text to display, default is address
-*          - encode = (optional) can be one of:
-*                 * none : no encoding (default)
-*                 * javascript : encode with javascript
-*                 * javascript_charcode : encode with javascript charcode
-*                 * hex : encode with hexidecimal (no javascript)
-*          - cc = (optional) address(es) to carbon copy
-*          - bcc = (optional) address(es) to blind carbon copy
-*          - subject = (optional) e-mail subject
-*          - newsgroups = (optional) newsgroup(s) to post to
-*          - followupto = (optional) address(es) to follow up to
-*          - extra = (optional) extra tags for the href link
-* @param object $smarty Smarty object
-* @param object $template template object
-* @return string 
-*/
+ * Smarty {mailto} function plugin
+ 
+ * Type:     function<br>
+ * Name:     mailto<br>
+ * Date:     May 21, 2002
+ * Purpose:  automate mailto address link creation, and optionally
+ *            encode them.<br>
+ 
+ * Examples:
+ * <pre>
+ * {mailto address="me@domain.com"}
+ * {mailto address="me@domain.com" encode="javascript"}
+ * {mailto address="me@domain.com" encode="hex"}
+ * {mailto address="me@domain.com" subject="Hello to you!"}
+ * {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
+ * {mailto address="me@domain.com" extra='class="mailto"'}
+ * </pre>
+ 
+ * @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
         (Smarty online manual)
+ * @version 1.2
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author credits to Jason Sweat (added cc, bcc and subject functionality) 
+ * @param array $params parameters
+ * Input:<br>
+ *          - address = e-mail address
+ *          - text = (optional) text to display, default is address
+ *          - encode = (optional) can be one of:
+ *                 * none : no encoding (default)
+ *                 * javascript : encode with javascript
+ *                 * javascript_charcode : encode with javascript charcode
+ *                 * hex : encode with hexidecimal (no javascript)
+ *          - cc = (optional) address(es) to carbon copy
+ *          - bcc = (optional) address(es) to blind carbon copy
+ *          - subject = (optional) e-mail subject
+ *          - newsgroups = (optional) newsgroup(s) to post to
+ *          - followupto = (optional) address(es) to follow up to
+ *          - extra = (optional) extra tags for the href link
+ * @param object $smarty Smarty object
+ * @param object $template template object
+ * @return string 
+ */
 function smarty_function_mailto($params, $smarty, $template)
 {
     $extra = '';
@@ -154,4 +154,4 @@ function smarty_function_mailto($params, $smarty, $template)
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 257d2fee1f8203aa056cd4abb5bfa19f0921c901..197f4df1453e922054d349c385747e03a579b694 100644 (file)
@@ -7,7 +7,6 @@
  * @subpackage PluginsFunction
  */
 
-
 /**
  * Smarty {math} function plugin
  *
@@ -64,7 +63,7 @@ function smarty_function_math($params, $smarty, $template)
             $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
         }
     }
-
+    $smarty_math_result = null;
     eval("\$smarty_math_result = ".$equation.";");
 
     if (empty($params['format'])) {
@@ -81,4 +80,5 @@ function smarty_function_math($params, $smarty, $template)
         }
     }
 }
+
 ?>
\ No newline at end of file
index e683556af50802f1fb3f679aec73ebbc06d63897..c646181a45304a97736a34cfc89df97ce92593e6 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
  * Smarty plugin
+ *
  * @package Smarty
  * @subpackage PluginsFunction
  */
 
-
 /**
  * Smarty {popup} function plugin
  *
@@ -115,4 +115,5 @@ function smarty_function_popup($params, $smarty, $template)
 
     return $retval;
 }
-?>
+
+?>
\ No newline at end of file
index dc5bbd7a33d17c9221b5fb97ad742ab308a30462..ba1f9a658f3b00c3654f7974e77da079d56715aa 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 /**
- * Smarty plugin
- * @package Smarty
- * @subpackage PluginsFunction
- */
-
 * Smarty plugin
+  *
+  * @package Smarty
+  * @subpackage PluginsFunction
+  */
 
 /**
- * Smarty {popup_init} function plugin
- *
- * Type:     function<br>
- * Name:     popup_init<br>
- * Purpose:  initialize overlib
- * @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init}
- *          (Smarty online manual)
- * @author   Monte Ohrt <monte at ohrt dot com>
- * @param array $params parameters
- * @param object $smarty Smarty object
- * @param object $template template object
- * @return string 
- */
+  * Smarty {popup_init} function plugin
+  *
+  * Type:     function<br>
+  * Name:     popup_init<br>
+  * Purpose:  initialize overlib
+  * @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init}
+  *          (Smarty online manual)
+  * @author   Monte Ohrt <monte at ohrt dot com>
+  * @param array $params parameters
+  * @param object $smarty Smarty object
+  * @param object $template template object
+  * @return string 
+  */
+
 function smarty_function_popup_init($params, $smarty, $template)
 {
     $zindex = 1000;
@@ -35,4 +36,5 @@ function smarty_function_popup_init($params, $smarty, $template)
         trigger_error("popup_init: missing src parameter",E_USER_WARNING);
     }
 }
+
 ?>
\ No newline at end of file
index acff0bc9dce538003c8fb56c69c9eb2a34df82dc..cd24589d8df3bbc70f9415077a60983fc21d8d8c 100644 (file)
@@ -1,41 +1,37 @@
 <?php
 /**
  * Smarty plugin
+ * 
  * @package Smarty
  * @subpackage PluginsModifier
  */
 
-
 /**
  * Smarty capitalize modifier plugin
- *
+ * 
  * Type:     modifier<br>
  * Name:     capitalize<br>
  * Purpose:  capitalize words in the string
- * @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE
- *      capitalize (Smarty online manual)
- * @author   Monte Ohrt <monte at ohrt dot com>
- * @param string
- * @return string
+ * 
+ * @link 
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $ 
+ * @return string 
  */
 function smarty_modifier_capitalize($string, $uc_digits = false)
-{
-    smarty_modifier_capitalize_ucfirst(null, $uc_digits);
-    return preg_replace_callback('!\'?\b\w(\w|\')*\b!', 'smarty_modifier_capitalize_ucfirst', $string);
-}
+{ 
+    // uppercase with php function ucwords
+    $upper_string = ucwords($string); 
+    // check for any missed hyphenated words
+    $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!ue", "'\\1'.ucfirst('\\2')", $upper_string); 
+    // check uc_digits case
+    if (!$uc_digits) {
+        if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!u", $string, $matches, PREG_OFFSET_CAPTURE)) {
+            foreach($matches[1] as $match)
+            $upper_string = substr_replace($upper_string, $match[0], $match[1], strlen($match[0]));
+        } 
+    } 
+    return $upper_string;
+} 
 
-function smarty_modifier_capitalize_ucfirst($string, $uc_digits = null)
-{
-    static $_uc_digits = false;
-    
-    if(isset($uc_digits)) {
-        $_uc_digits = $uc_digits;
-        return;
-    }
-    
-    if(substr($string[0],0,1) != "'" && !preg_match("!\d!",$string[0]) || $_uc_digits)
-        return ucfirst($string[0]);
-    else
-        return $string[0];
-}
-?>
+?>
\ No newline at end of file
index 950a1958789033b475d9b0ee47b71e36cb62c35d..3656c1c8838af7ffcc5b222c20964872b263cec6 100644 (file)
@@ -1,30 +1,30 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsModifier
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
 
 /**
-* Smarty date_format modifier plugin
-* 
-* Type:     modifier<br>
-* Name:     date_format<br>
-* Purpose:  format datestamps via strftime<br>
-* Input:<br>
-*          - string: input date string
-*          - format: strftime format for output
-*          - default_date: default date if $string is empty
-* 
-* @link http://smarty.php.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param string $ 
-* @param string $ 
-* @param string $ 
-* @return string |void
-* @uses smarty_make_timestamp()
-*/
+ * Smarty date_format modifier plugin
+ 
+ * Type:     modifier<br>
+ * Name:     date_format<br>
+ * Purpose:  format datestamps via strftime<br>
+ * Input:<br>
+ *          - string: input date string
+ *          - format: strftime format for output
+ *          - default_date: default date if $string is empty
+ 
+ * @link http://smarty.php.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $ 
+ * @param string $ 
+ * @param string $ 
+ * @return string |void
+ * @uses smarty_make_timestamp()
+ */
 function smarty_modifier_date_format($string, $format = SMARTY_RESOURCE_DATE_FORMAT, $default_date = '',$formatter='auto')
 {
     /**
@@ -58,4 +58,4 @@ function smarty_modifier_date_format($string, $format = SMARTY_RESOURCE_DATE_FOR
     }
 } 
 
-?>
+?>
\ No newline at end of file
index f0f83d274e3e705c2b329833e33bc9eca4b40136..013337ae0db4157354ad2e1da859e35b121ff64c 100644 (file)
@@ -1,25 +1,25 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage Debug
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage Debug
+ */
 
 /**
-* Smarty debug_print_var modifier plugin
-* 
-* Type:     modifier<br>
-* Name:     debug_print_var<br>
-* Purpose:  formats variable contents for display in the console
-* 
-* @link http://smarty.php.net/manual/en/language.modifier.debug.print.var.php debug_print_var (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param array $ |object
-* @param integer $ 
-* @param integer $ 
-* @return string 
-*/
+ * Smarty debug_print_var modifier plugin
+ 
+ * Type:     modifier<br>
+ * Name:     debug_print_var<br>
+ * Purpose:  formats variable contents for display in the console
+ 
+ * @link http://smarty.php.net/manual/en/language.modifier.debug.print.var.php debug_print_var (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param array $ |object
+ * @param integer $ 
+ * @param integer $ 
+ * @return string 
+ */
 function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
 {
     $_replace = array("\n" => '<i>\n</i>',
@@ -84,4 +84,4 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
     return $results;
 } 
 
-?>
+?>
\ No newline at end of file
index c35e67ae01f4f2615ca067bce4eccedc519935b9..dae5926891a663a5bd36feb1d95acd9173880868 100644 (file)
@@ -1,39 +1,42 @@
 <?php
-
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsModifier
-*/
-
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
 /**
-* Smarty escape modifier plugin
-* 
-* Type:     modifier<br>
-* Name:     escape<br>
-* Purpose:  escape string for output
-* 
-* @link http://smarty.php.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param string $string input string
-* @param string $esc_type escape type
-* @param string $char_set character set
-* @return string escaped input string
-*/
+ * Smarty escape modifier plugin
+ 
+ * Type:     modifier<br>
+ * Name:     escape<br>
+ * Purpose:  escape string for output
+ 
+ * @link http://smarty.php.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $string input string
+ * @param string $esc_type escape type
+ * @param string $char_set character set
+ * @return string escaped input string
+ */
 function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_RESOURCE_CHAR_SET)
 {
-    if (!function_exists('mb_str_replace') && function_exists('mb_strlen')) {
+    if (!function_exists('mb_str_replace')) {
         // simulate the missing PHP mb_str_replace function
-        function mb_str_replace($needle, $replacement, $haystack)
+        function mb_str_replace($needles, $replacements, $haystack)
         {
-            $needle_len = mb_strlen($needle);
-            $replacement_len = mb_strlen($replacement);
-            $pos = mb_strpos($haystack, $needle, 0);
-            while ($pos !== false) {
-                $haystack = mb_substr($haystack, 0, $pos) . $replacement
-                 . mb_substr($haystack, $pos + $needle_len);
-                $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
+            $rep = (array)$replacements;
+            foreach ((array)$needles as $key => $needle) {
+                $replacement = $rep[$key];
+                $needle_len = mb_strlen($needle);
+                $replacement_len = mb_strlen($replacement);
+                $pos = mb_strpos($haystack, $needle, 0);
+                while ($pos !== false) {
+                    $haystack = mb_substr($haystack, 0, $pos) . $replacement
+                     . mb_substr($haystack, $pos + $needle_len);
+                    $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
+                } 
             } 
             return $haystack;
         } 
@@ -83,7 +86,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_
 
         case 'mail': 
             // safe way to display e-mail address on a web page
-            if (function_exists('mb_str_replace')) {
+            if (function_exists('mb_substr')) {
                 return mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
             } else {
                 return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
@@ -108,4 +111,4 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 7c6e6b90f5765e8acefc4dc146d357f9b7ad1ed9..9f148800e98d2e3401769f36ec6c7e37ca223ee5 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
  * Smarty plugin
+ *
  * @package Smarty
- * @subpackage plugins
+ * @subpackage PluginsModifier
  */
 
-
 /**
  * Smarty regex_replace modifier plugin
  *
@@ -42,4 +42,5 @@ function _smarty_regex_replace_check($search)
     }
     return $search;
 }
+
 ?>
\ No newline at end of file
index 5f70979f6d3ba8d1715aba4042fb5b5cd435fe89..98195ffb413548aecfd8d06aaea2e9cb084cf781 100644 (file)
@@ -1,39 +1,42 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsModifier
-*/
+ * Smarty plugin
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
 
 /**
-* Smarty replace modifier plugin
-* 
-* Type:     modifier<br>
-* Name:     replace<br>
-* Purpose:  simple search/replace
-* 
-* @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author Uwe Tews 
-* @param string $ 
-* @param string $ 
-* @param string $ 
-* @return string 
-*/
+ * Smarty replace modifier plugin
+ 
+ * Type:     modifier<br>
+ * Name:     replace<br>
+ * Purpose:  simple search/replace
+ 
+ * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author Uwe Tews 
+ * @param string $ 
+ * @param string $ 
+ * @param string $ 
+ * @return string 
+ */
 function smarty_modifier_replace($string, $search, $replace)
 {
-    if (!function_exists("mb_str_replace")) {
+    if (!function_exists('mb_str_replace')) {
         // simulate the missing PHP mb_str_replace function
-        function mb_str_replace($needle, $replacement, $haystack)
+        function mb_str_replace($needles, $replacements, $haystack)
         {
-            $needle_len = mb_strlen($needle);
-            $replacement_len = mb_strlen($replacement);
-            $pos = mb_strpos($haystack, $needle, 0);
-            while ($pos !== false) {
-                $haystack = mb_substr($haystack, 0, $pos) . $replacement
-                 . mb_substr($haystack, $pos + $needle_len);
-                $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
+            $rep = (array)$replacements;
+            foreach ((array)$needles as $key => $needle) {
+                $replacement = $rep[$key];
+                $needle_len = mb_strlen($needle);
+                $replacement_len = mb_strlen($replacement);
+                $pos = mb_strpos($haystack, $needle, 0);
+                while ($pos !== false) {
+                    $haystack = mb_substr($haystack, 0, $pos) . $replacement
+                     . mb_substr($haystack, $pos + $needle_len);
+                    $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
+                } 
             } 
             return $haystack;
         } 
@@ -45,4 +48,4 @@ function smarty_modifier_replace($string, $search, $replace)
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index d2593ec3eec84908b55ecdeb024b2ef716614e02..f14e026bcfb08d43c6d2f3eaaaa3574eb2077785 100644 (file)
@@ -1,27 +1,37 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsModifier
-*/
+ * Smarty plugin
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
 
 /**
-* Smarty spacify modifier plugin
-* 
-* Type:     modifier<br>
-* Name:     spacify<br>
-* Purpose:  add spaces between characters in a string
-* 
-* @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param string $ 
-* @param string $ 
-* @return string 
-*/
+ * Smarty spacify modifier plugin
+ 
+ * Type:     modifier<br>
+ * Name:     spacify<br>
+ * Purpose:  add spaces between characters in a string
+ 
+ * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $ 
+ * @param string $ 
+ * @return string 
+ */
 function smarty_modifier_spacify($string, $spacify_char = ' ')
-{
-    return implode($spacify_char, preg_split('//', $string, -1));
+{ 
+    // mb_ functions available?
+    if (function_exists('mb_strlen') && mb_detect_encoding($string, 'UTF-8, ISO-8859-1') === 'UTF-8') {
+        $strlen = mb_strlen($string);
+        while ($strlen) {
+            $array[] = mb_substr($string, 0, 1, "UTF-8");
+            $string = mb_substr($string, 1, $strlen, "UTF-8");
+            $strlen = mb_strlen($string);
+        } 
+        return implode($spacify_char, $array);
+    } else {
+        return implode($spacify_char, preg_split('//', $string, -1));
+    } 
 } 
 
-?>
+?>
\ No newline at end of file
index 0ad5f10f8a8320a4aaf7d1fac41ac97b406edff3..0e9d4b9f2124ec935aa953a31cd35250d049d533 100644 (file)
@@ -1,29 +1,29 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsModifier
-*/
-
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
 /**
-* Smarty truncate modifier plugin
-* 
-* Type:     modifier<br>
-* Name:     truncate<br>
-* Purpose:  Truncate a string to a certain length if necessary,
-*             optionally splitting in the middle of a word, and
-*             appending the $etc string or inserting $etc into the middle.
-* 
-* @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @param string $string input string
-* @param integer $length lenght of truncated text
-* @param string $etc end string
-* @param boolean $break_words truncate at word boundary
-* @param boolean $middle truncate in the middle of text
-* @return string truncated string
-*/
+ * Smarty truncate modifier plugin
+ 
+ * Type:     modifier<br>
+ * Name:     truncate<br>
+ * Purpose:  Truncate a string to a certain length if necessary,
+ *               optionally splitting in the middle of a word, and
+ *               appending the $etc string or inserting $etc into the middle.
+ 
+ * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $string input string
+ * @param integer $length lenght of truncated text
+ * @param string $etc end string
+ * @param boolean $break_words truncate at word boundary
+ * @param boolean $middle truncate in the middle of text
+ * @return string truncated string
+ */
 function smarty_modifier_truncate($string, $length = 80, $etc = '...',
     $break_words = false, $middle = false)
 {
@@ -31,34 +31,37 @@ function smarty_modifier_truncate($string, $length = 80, $etc = '...',
         return '';
 
     if (is_callable('mb_strlen')) {
-        if (mb_strlen($string) > $length) {
-            $length -= min($length, mb_strlen($etc));
-            if (!$break_words && !$middle) {
-                $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1));
-            } 
-            if (!$middle) {
-                return mb_substr($string, 0, $length) . $etc;
+        if (mb_detect_encoding($string, 'UTF-8, ISO-8859-1') === 'UTF-8') {
+            // $string has utf-8 encoding
+            if (mb_strlen($string) > $length) {
+                $length -= min($length, mb_strlen($etc));
+                if (!$break_words && !$middle) {
+                    $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1));
+                } 
+                if (!$middle) {
+                    return mb_substr($string, 0, $length) . $etc;
+                } else {
+                    return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2);
+                } 
             } else {
-                return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2);
+                return $string;
             } 
-        } else {
-            return $string;
         } 
-    } else {
-        if (strlen($string) > $length) {
-            $length -= min($length, strlen($etc));
-            if (!$break_words && !$middle) {
-                $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
-            } 
-            if (!$middle) {
-                return substr($string, 0, $length) . $etc;
-            } else {
-                return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
-            } 
+    } 
+    // $string has no utf-8 encoding
+    if (strlen($string) > $length) {
+        $length -= min($length, strlen($etc));
+        if (!$break_words && !$middle) {
+            $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
+        } 
+        if (!$middle) {
+            return substr($string, 0, $length) . $etc;
         } else {
-            return $string;
+            return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
         } 
+    } else {
+        return $string;
     } 
 } 
 
-?>
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.cat.php b/gosa-core/include/smarty/plugins/modifiercompiler.cat.php
new file mode 100644 (file)
index 0000000..37019d7
--- /dev/null
@@ -0,0 +1,29 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty cat modifier plugin\r
+ *\r
+ * Type:     modifier<br>\r
+ * Name:     cat<br>\r
+ * Date:     Feb 24, 2003\r
+ * Purpose:  catenate a value to a variable\r
+ * Input:    string to catenate\r
+ * Example:  {$var|cat:"foo"}\r
+ * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat\r
+ *          (Smarty online manual)\r
+ * @author   Uwe Tews\r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_cat($params, $compiler)\r
+{\r
+    return '('.implode(').(', $params).')';\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.count_characters.php b/gosa-core/include/smarty/plugins/modifiercompiler.count_characters.php
new file mode 100644 (file)
index 0000000..40867f5
--- /dev/null
@@ -0,0 +1,39 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty count_characters modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     count_characteres<br>\r
+ * Purpose:  count the number of characters in a text\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_count_characters($params, $compiler)\r
+{\r
+    // mb_ functions available?\r
+    if (function_exists('mb_strlen')) {\r
+        // count also spaces?\r
+        if (isset($params[1]) && $params[1] == 'true') {\r
+            return '((mb_detect_encoding(' . $params[0] . ', \'UTF-8, ISO-8859-1\') === \'UTF-8\') ? mb_strlen(' . $params[0] . ', SMARTY_RESOURCE_CHAR_SET) : strlen(' . $params[0] . '))';\r
+        } \r
+        return '((mb_detect_encoding(' . $params[0] . ', \'UTF-8, ISO-8859-1\') === \'UTF-8\') ? preg_match_all(\'#[^\s\pZ]#u\', ' . $params[0] . ', $tmp) : preg_match_all(\'/[^\s]/\',' . $params[0] . ', $tmp))';\r
+    } else {\r
+        // count also spaces?\r
+        if (isset($params[1]) && $params[1] == 'true') {\r
+            return 'strlen(' . $params[0] . ')';\r
+        } \r
+        return 'preg_match_all(\'/[^\s]/\',' . $params[0] . ', $tmp)';\r
+    } \r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.count_paragraphs.php b/gosa-core/include/smarty/plugins/modifiercompiler.count_paragraphs.php
new file mode 100644 (file)
index 0000000..09973ef
--- /dev/null
@@ -0,0 +1,27 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty count_paragraphs modifier plugin\r
+ *\r
+ * Type:     modifier<br>\r
+ * Name:     count_paragraphs<br>\r
+ * Purpose:  count the number of paragraphs in a text\r
+ * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php\r
+ *          count_paragraphs (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_count_paragraphs($params, $compiler)\r
+{\r
+    // count \r or \n characters\r
+    return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.count_sentences.php b/gosa-core/include/smarty/plugins/modifiercompiler.count_sentences.php
new file mode 100644 (file)
index 0000000..cde5c46
--- /dev/null
@@ -0,0 +1,27 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty count_sentences modifier plugin\r
+ *\r
+ * Type:     modifier<br>\r
+ * Name:     count_sentences\r
+ * Purpose:  count the number of sentences in a text\r
+ * @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php\r
+ *          count_sentences (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_count_sentences($params, $compiler)\r
+{\r
+    // find periods with a word before but not after.\r
+    return 'preg_match_all(\'/[^\s]\.(?!\w)/\', ' . $params[0] . ', $tmp)';\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.count_words.php b/gosa-core/include/smarty/plugins/modifiercompiler.count_words.php
new file mode 100644 (file)
index 0000000..dbc2f43
--- /dev/null
@@ -0,0 +1,31 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ * \r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty count_words modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     count_words<br>\r
+ * Purpose:  count the number of words in a text\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+*/\r
+function smarty_modifiercompiler_count_words($params, $compiler)\r
+{ \r
+    // mb_ functions available?\r
+    if (function_exists('mb_strlen')) {\r
+        return '((mb_detect_encoding(' . $params[0] . ', \'UTF-8, ISO-8859-1\') === \'UTF-8\') ? preg_match_all(\'#[\w\pL]+#u\', ' . $params[0] . ', $tmp) : preg_match_all(\'#\w+#\',' . $params[0] . ', $tmp))';\r
+    } else {\r
+        return 'str_word_count(' . $params[0] . ')';\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.default.php b/gosa-core/include/smarty/plugins/modifiercompiler.default.php
new file mode 100644 (file)
index 0000000..7bfda8b
--- /dev/null
@@ -0,0 +1,33 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty default modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     default<br>\r
+ * Purpose:  designate default value for empty variables\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.default.php default (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_default ($params, $compiler)\r
+{\r
+    $output = $params[0];\r
+    if (!isset($params[1])) {\r
+        $params[1] = "''";\r
+    } \r
+    for ($i = 1, $cnt = count($params); $i < $cnt; $i++) {\r
+        $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $params[$i] . ' : $tmp)';\r
+    } \r
+    return $output;\r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.indent.php b/gosa-core/include/smarty/plugins/modifiercompiler.indent.php
new file mode 100644 (file)
index 0000000..e62d56c
--- /dev/null
@@ -0,0 +1,32 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty indent modifier plugin\r
+ *\r
+ * Type:     modifier<br>\r
+ * Name:     indent<br>\r
+ * Purpose:  indent lines of text\r
+ * @link http://smarty.php.net/manual/en/language.modifier.indent.php\r
+ *          indent (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+\r
+function smarty_modifiercompiler_indent($params, $compiler)\r
+{\r
+    if (!isset($params[1])) {\r
+        $params[1] = 4;\r
+    } \r
+    if (!isset($params[2])) {\r
+        $params[2] = "' '";\r
+    } \r
+    return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.lower.php b/gosa-core/include/smarty/plugins/modifiercompiler.lower.php
new file mode 100644 (file)
index 0000000..3604994
--- /dev/null
@@ -0,0 +1,31 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty lower modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     lower<br>\r
+ * Purpose:  convert string to lowercase\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.lower.php lower (Smarty online manual)\r
+ * @author Monte Ohrt <monte at ohrt dot com> \r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+\r
+function smarty_modifiercompiler_lower($params, $compiler)\r
+{\r
+    if (function_exists('mb_strtolower')) {\r
+        return '((mb_detect_encoding(' . $params[0] . ', \'UTF-8, ISO-8859-1\') === \'UTF-8\') ? mb_strtolower(' . $params[0] . ',SMARTY_RESOURCE_CHAR_SET) : strtolower(' . $params[0] . '))' ;\r
+    } else {\r
+        return 'strtolower(' . $params[0] . ')';\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.noprint.php b/gosa-core/include/smarty/plugins/modifiercompiler.noprint.php
new file mode 100644 (file)
index 0000000..cd2a663
--- /dev/null
@@ -0,0 +1,24 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty noprint modifier plugin\r
+ *\r
+ * Type:     modifier<br>\r
+ * Name:     noprint<br>\r
+ * Purpose:  return an empty string\r
+ * @author   Uwe Tews\r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_noprint($params, $compiler)\r
+{\r
+    return "''";\r
+}\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.string_format.php b/gosa-core/include/smarty/plugins/modifiercompiler.string_format.php
new file mode 100644 (file)
index 0000000..fd9fd87
--- /dev/null
@@ -0,0 +1,26 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ * \r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty string_format modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     string_format<br>\r
+ * Purpose:  format strings via sprintf\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_string_format($params, $compiler)\r
+{\r
+    return 'sprintf(' . $params[1] . ',' . $params[0] . ')';\r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.strip.php b/gosa-core/include/smarty/plugins/modifiercompiler.strip.php
new file mode 100644 (file)
index 0000000..ab5b768
--- /dev/null
@@ -0,0 +1,33 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty strip modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     strip<br>\r
+ * Purpose:  Replace all repeated spaces, newlines, tabs\r
+ *              with a single space or supplied replacement string.<br>\r
+ * Example:  {$var|strip} {$var|strip:"&nbsp;"}\r
+ * Date:     September 25th, 2002\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.strip.php strip (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+\r
+function smarty_modifiercompiler_strip($params, $compiler)\r
+{\r
+    if (!isset($params[1])) {\r
+        $params[1] = "' '";\r
+    } \r
+    return "preg_replace('!\s+!', {$params[1]},{$params[0]})";\r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.strip_tags.php b/gosa-core/include/smarty/plugins/modifiercompiler.strip_tags.php
new file mode 100644 (file)
index 0000000..5e479b2
--- /dev/null
@@ -0,0 +1,34 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty strip_tags modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     strip_tags<br>\r
+ * Purpose:  strip html tags from text\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+\r
+function smarty_modifiercompiler_strip_tags($params, $compiler)\r
+{\r
+   if (!isset($params[1])) {\r
+        $params[1] = true;\r
+    } \r
+    if ($params[1] === true) {\r
+        return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";\r
+    } else {\r
+        return 'strip_tags(' . $params[0] . ')';\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.upper.php b/gosa-core/include/smarty/plugins/modifiercompiler.upper.php
new file mode 100644 (file)
index 0000000..2869b87
--- /dev/null
@@ -0,0 +1,30 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty upper modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     lower<br>\r
+ * Purpose:  convert string to uppercase\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_upper($params, $compiler)\r
+{\r
+    if (function_exists('mb_strtoupper')) {\r
+        return '((mb_detect_encoding(' . $params[0] . ', \'UTF-8, ISO-8859-1\') === \'UTF-8\') ? mb_strtoupper(' . $params[0] . ',SMARTY_RESOURCE_CHAR_SET) : strtoupper(' . $params[0] . '))' ;\r
+    } else {\r
+        return 'strtoupper(' . $params[0] . ')';\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/plugins/modifiercompiler.wordwrap.php b/gosa-core/include/smarty/plugins/modifiercompiler.wordwrap.php
new file mode 100644 (file)
index 0000000..5b91f64
--- /dev/null
@@ -0,0 +1,35 @@
+<?php\r
+/**\r
+ * Smarty plugin\r
+ *\r
+ * @package Smarty\r
+ * @subpackage PluginsModifierCompiler\r
+ */\r
+\r
+/**\r
+ * Smarty wordwrap modifier plugin\r
+ * \r
+ * Type:     modifier<br>\r
+ * Name:     wordwrap<br>\r
+ * Purpose:  wrap a string of text at a given length\r
+ * \r
+ * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)\r
+ * @author Uwe Tews \r
+ * @param array $params parameters\r
+ * @return string with compiled code\r
+ */\r
+function smarty_modifiercompiler_wordwrap($params, $compiler)\r
+{\r
+    if (!isset($params[1])) {\r
+        $params[1] = 80;\r
+    } \r
+    if (!isset($params[2])) {\r
+        $params[2] = '"\n"';\r
+    } \r
+    if (!isset($params[3])) {\r
+        $params[3] = 'false';\r
+    } \r
+    return 'wordwrap(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';\r
+} \r
+\r
+?>
\ No newline at end of file
index ce5fde985570eac016560fb34a74bdd166dbf827..20e9bb60084f991c11bc149644a8b07bd4b5ad69 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 /**
  * Smarty plugin
+ *
  * @package Smarty
  * @subpackage PluginsFilter
  */
@@ -73,4 +74,4 @@ function smarty_outputfilter_trimwhitespace_replace($search_str, $replace, &$sub
 
 }
 
-?>
+?>
\ No newline at end of file
index 5bd21ef836786fc792af1ff0dc15b69393ac6e43..e36b2c897c1cdb4196df5b4fe6f8739073e5f3c9 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
  * Smarty shared plugin
+ *
  * @package Smarty
  * @subpackage PluginsShared
  */
 
-
 /**
  * escape_special_chars common function
  *
@@ -25,4 +25,5 @@ function smarty_function_escape_special_chars($string)
     }
     return $string;
 }
+
 ?>
\ No newline at end of file
index 4e652ad157e0c8457e23b17bde723c010df23496..832488baecf7b333f85e74f22004730e30f8ca1b 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 /**
  * Smarty shared plugin
+ *
  * @package Smarty
  * @subpackage PluginsShared
  */
 
-
 /**
  * Function: smarty_make_timestamp<br>
  * Purpose:  used by other smarty functions to make a timestamp
  * @param string $string
  * @return string
  */
+
 function smarty_make_timestamp($string)
 {
     if(empty($string)) {
         // use "now":
-        $time = time();
-
+        return time();
+    } elseif ($string instanceof DateTime) {
+        return $string->getTimestamp();
     } elseif (preg_match('/^\d{14}$/', $string)) {
         // it is mysql timestamp format of YYYYMMDDHHMMSS?            
-        $time = mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
+        return mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
                        substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));
-        
     } elseif (is_numeric($string)) {
         // it is a numeric string, we handle it as timestamp
-        $time = (int)$string;
-        
+        return (int)$string;
     } else {
         // strtotime should handle it
         $time = strtotime($string);
         if ($time == -1 || $time === false) {
             // strtotime() was not able to parse $string, use "now":
-            $time = time();
+            return time();
         }
+        return $time;
     }
-    return $time;
-
 }
-?>
+
+?>
\ No newline at end of file
index 5f11b7346f049cc750a1e8328e714329f1e34262..4d3550c04761626496328db47ac3c435af31641a 100644 (file)
@@ -1,18 +1,19 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage PluginsFilter
-*/
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage PluginsFilter
+ */
 
 /**
-* Smarty htmlspecialchars variablefilter plugin
-* 
-* @param string $source input string
-* @param object $ &$smarty Smarty object
-* @return string filtered output
-*/
+ * Smarty htmlspecialchars variablefilter plugin
+ * 
+ * @param string $source input string
+ * @param object $ &$smarty Smarty object
+ * @return string filtered output
+ */
+
 function smarty_variablefilter_htmlspecialchars($source, $smarty)
 {
     return htmlspecialchars($source, ENT_QUOTES);
index cb7ee96e9c2d646818db87573c9a0e788dc05414..6e40c31bffcda954cd8fb7831d6c65de2fbd8832 100644 (file)
@@ -64,7 +64,7 @@ class Smarty_Internal_Cache {
                 return $this->smarty->cache_resource_objects[$type] = new $cache_resource_class($this->smarty);
             } 
             else {
-                throw new Exception("Unable to load cache resource '{$type}'");
+                throw new SmartyException("Unable to load cache resource '{$type}'");
             } 
         } 
     } 
index 6e451038da3cd27e3bf611c4016899c6e6526191..3ce4e8fcd6c1aa7a69c1b3bcaec6aa49edc7e5d0 100644 (file)
@@ -74,12 +74,17 @@ class Smarty_Internal_CacheResource_File {
      * @param object $_template current template
      * @return string |booelan the template content or false if the file does not exist
      */
-    public function getCachedContents($_template)
+    public function getCachedContents($_template, $no_render = false)
     {
         ob_start();
         $_smarty_tpl = $_template;
         include $_template->getCachedFilepath();
-        return ob_get_clean();
+        if ($no_render) {
+               ob_clean();
+               return null;
+        } else {
+          return ob_get_clean();
+        }
     } 
 
     /**
@@ -129,6 +134,11 @@ class Smarty_Internal_CacheResource_File {
         if (isset($_cache_id)) {
             $_cache_id_parts = explode('|', $_cache_id);
             $_cache_id_parts_count = count($_cache_id_parts);
+            if ($this->smarty->use_sub_dirs) {
+                foreach ($_cache_id_parts as $id_part) {
+                    $_dir .= $id_part . DS;
+                } 
+            } 
         } 
         if (isset($resource_name)) {
             $_save_stat = $this->smarty->caching;
@@ -144,45 +154,47 @@ class Smarty_Internal_CacheResource_File {
             } 
         } 
         $_count = 0;
-        $_cacheDirs = new RecursiveDirectoryIterator($_dir);
-        $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
-        foreach ($_cache as $_file) {
-            if (strpos($_file, '.svn') !== false) continue; 
-            // directory ?
-            if ($_file->isDir()) {
-                if (!$_cache->isDot()) {
-                    // delete folder if empty
-                    @rmdir($_file->getPathname());
-                } 
-            } else {
-                $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length)));
-                $_parts_count = count($_parts); 
-                // check name
-                if (isset($resource_name)) {
-                    if ($_parts[$_parts_count-1] != $_resourcename_parts) {
-                        continue;
+        if (file_exists($_dir)) {
+            $_cacheDirs = new RecursiveDirectoryIterator($_dir);
+            $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
+            foreach ($_cache as $_file) {
+                if (strpos($_file, '.svn') !== false) continue; 
+                // directory ?
+                if ($_file->isDir()) {
+                    if (!$_cache->isDot()) {
+                        // delete folder if empty
+                        @rmdir($_file->getPathname());
                     } 
-                } 
-                // check compile id
-                if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
-                    continue;
-                } 
-                // check cache id
-                if (isset($_cache_id)) {
-                    // count of cache id parts
-                    $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset;
-                    if ($_parts_count < $_cache_id_parts_count) {
+                } else {
+                    $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length)));
+                    $_parts_count = count($_parts); 
+                    // check name
+                    if (isset($resource_name)) {
+                        if ($_parts[$_parts_count-1] != $_resourcename_parts) {
+                            continue;
+                        } 
+                    } 
+                    // check compile id
+                    if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
                         continue;
                     } 
-                    for ($i = 0; $i < $_cache_id_parts_count; $i++) {
-                        if ($_parts[$i] != $_cache_id_parts[$i]) continue 2;
+                    // check cache id
+                    if (isset($_cache_id)) {
+                        // count of cache id parts
+                        $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset;
+                        if ($_parts_count < $_cache_id_parts_count) {
+                            continue;
+                        } 
+                        for ($i = 0; $i < $_cache_id_parts_count; $i++) {
+                            if ($_parts[$i] != $_cache_id_parts[$i]) continue 2;
+                        } 
                     } 
+                    // expired ?
+                    if (isset($exp_time) && time() - @filemtime($_file) < $exp_time) {
+                        continue;
+                    } 
+                    $_count += @unlink((string) $_file) ? 1 : 0;
                 } 
-                // expired ?
-                if (isset($exp_time) && time() - @filemtime($_file) < $exp_time) {
-                    continue;
-                } 
-                $_count += @unlink((string) $_file) ? 1 : 0;
             } 
         } 
         return $_count;
index d60d808934517b8f873b6e452e73a1a55beffd61..c9a05c3349465238c4a5736fbfe2c605f5d0e6e5 100644 (file)
@@ -1,17 +1,18 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Append
-* 
-* Compiles the {append} tag
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+  * Smarty Internal Plugin Compile Append
+  * 
+  * Compiles the {append} tag
+  * 
+  * @package Smarty
+  * @subpackage Compiler
+  * @author Uwe Tews 
+  */
+
 /**
-* Smarty Internal Plugin Compile Append Class
-*/
+  * Smarty Internal Plugin Compile Append Class
+  */
 class Smarty_Internal_Compile_Append extends Smarty_Internal_CompileBase {
     /**
     * Compiles code for the {append} tag
@@ -32,20 +33,27 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_CompileBase {
         // it shall not controll caching of the compiled code, but is a parameter
         if (isset($args['nocache'])) {
             if ($args['nocache'] == 'true') {
-                $_nocache = 'true';
-                $_nocache_boolean = true;
+                $this->compiler->tag_nocache = true;
             } 
             unset($args['nocache']);
         } 
+
         // check and get attributes
         $_attr = $this->_get_attributes($args);
 
+        if ($this->compiler->tag_nocache) {
+            $_nocache = 'true'; 
+            // create nocache var to make it know for further compiling
+            $compiler->template->tpl_vars[trim($_attr['var'],"'")] = new Smarty_variable(null, true);
+        } 
+
         if (isset($_attr['scope'])) {
-            if ($_attr['scope'] == '\'parent\'') {
+            $_attr['scope'] = trim($_attr['scope'], "'\"");
+            if ($_attr['scope'] == 'parent') {
                 $_scope = SMARTY_PARENT_SCOPE;
-            } elseif ($_attr['scope'] == '\'root\'') {
+            } elseif ($_attr['scope'] == 'root') {
                 $_scope = SMARTY_ROOT_SCOPE;
-           } elseif ($_attr['scope'] == '\'global\'') {
+           } elseif ($_attr['scope'] == 'global') {
                 $_scope = SMARTY_GLOBAL_SCOPE;
             } 
         } 
@@ -58,4 +66,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 57c4ce7020528e03327a85184b716a3c8693f06b..bdbefae32a49be64ee5b0adf1a95d4459a267618 100644 (file)
@@ -1,30 +1,31 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Assign
-* 
-* Compiles the {assign} tag
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Assign
+ * 
+ * Compiles the {assign} tag
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Assign Class
-*/
+ * Smarty Internal Plugin Compile Assign Class
+ */
 class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {assign} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {assign} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
         $this->required_attributes = array('var', 'value');
-        $this->optional_attributes = array('scope', 'nocache', 'smarty_internal_index');
+        $this->optional_attributes = array('scope', 'nocache', 'smarty_internal_index'); 
 
         $_nocache = 'null';
         $_scope = 'null'; 
@@ -32,34 +33,37 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
         // it shall not controll caching of the compiled code, but is a parameter
         if (isset($args['nocache'])) {
             if ($args['nocache'] == 'true') {
-                $_nocache = 'true';
-                $_nocache_boolean = true;
+                $this->compiler->tag_nocache = true;
             } 
             unset($args['nocache']);
         } 
+
         // check and get attributes
         $_attr = $this->_get_attributes($args);
 
+        if ($this->compiler->tag_nocache) {
+            $_nocache = 'true'; 
+            // create nocache var to make it know for further compiling
+            $compiler->template->tpl_vars[trim($_attr['var'],"'")] = new Smarty_variable(null, true);
+        } 
+
         if (isset($_attr['scope'])) {
-            if ($_attr['scope'] == '\'parent\'') {
+            $_attr['scope'] = trim($_attr['scope'], "'\"");
+            if ($_attr['scope'] == 'parent') {
                 $_scope = SMARTY_PARENT_SCOPE;
-            } elseif ($_attr['scope'] == '\'root\'') {
+            } elseif ($_attr['scope'] == 'root') {
                 $_scope = SMARTY_ROOT_SCOPE;
-           } elseif ($_attr['scope'] == '\'global\'') {
+            } elseif ($_attr['scope'] == 'global') {
                 $_scope = SMARTY_GLOBAL_SCOPE;
             } 
         } 
         // compiled output
         if (isset($_attr['smarty_internal_index'])) {
-            if ($_attr['smarty_internal_index'] == '') {
-                return "<?php \$_smarty_tpl->append($_attr[var],$_attr[value],false,$_nocache,$_scope);?>";
-            } else {
-                return "<?php \$_tmp$_attr[smarty_internal_index] = $_attr[value]; \$_smarty_tpl->append($_attr[var],\$_tmp,true,$_nocache,$_scope); unset (\$_tmp);?>";
-            } 
+            return "<?php if (!isset(\$_smarty_tpl->tpl_vars[$_attr[var]]) || !is_array(\$_smarty_tpl->tpl_vars[$_attr[var]]->value)) \$_smarty_tpl->createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[smarty_internal_index] = $_attr[value];?>";
         } else {
-            return "<?php \$_smarty_tpl->assign($_attr[var],$_attr[value],$_nocache,$_scope);?>";
+            return "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);?>";
         } 
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 0ccce92e21a4d7a4fae3b540e0e9b6935d50d5e3..7e651e4389074ff2612cd35938712f071903ffa2 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Block Class
  */
@@ -26,16 +27,19 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
         $this->optional_attributes = array('assign', 'nocache'); 
         // check and get attributes
         $_attr = $this->_get_attributes($args);
-        $save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code, $this->compiler->nocache);
+        $save = array($_attr, $compiler->parser->current_buffer, $this->compiler->nocache, $this->compiler->smarty->merge_compiled_includes);
         $this->_open_tag('block', $save);
         if (isset($_attr['nocache'])) {
             if ($_attr['nocache'] == 'true') {
                 $compiler->nocache = true;
             } 
-        } 
+        }
+        // set flag for {block} tag
+        $compiler->smarty->inheritance = true;
+        // must merge includes
+        $this->compiler->smarty->merge_compiled_includes = true; 
 
-        $compiler->template->extract_code = true;
-        $compiler->template->extracted_compiled_code = '';
+        $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
         $compiler->has_code = false;
         return true;
     } 
@@ -57,8 +61,6 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
         $this->compiler = $compiler;
         $this->smarty = $compiler->smarty;
         $this->compiler->has_code = true; 
-        // turn off block code extraction
-        $compiler->template->extract_code = false; 
         // check and get attributes
         $this->optional_attributes = array('name');
         $_attr = $this->_get_attributes($args);
@@ -68,10 +70,10 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
             $this->compiler->trigger_template_error('mismatching name attributes "' . $saved_data[0]['name'] . '" and "' . $_attr['name'] . '"');
         } 
         $_name = trim($saved_data[0]['name'], "\"'");
-        if (isset($this->smarty->block_data[$_name])) {
-            $_tpl = $this->smarty->createTemplate('string:' . $this->smarty->block_data[$_name]['source'], null, null, $compiler->template);
+        if (isset($compiler->template->block_data[$_name])) {
+            $_tpl = $this->smarty->createTemplate('eval:' . $compiler->template->block_data[$_name]['source'], null, null, $compiler->template);
             $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
-            $_tpl->template_filepath = $this->smarty->block_data[$_name]['file'];
+            $_tpl->template_filepath = $compiler->template->block_data[$_name]['file'];
             if ($compiler->nocache) {
                 $_tpl->forceNocache = 2;
             } else {
@@ -79,13 +81,13 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
             } 
             $_tpl->suppressHeader = true;
             $_tpl->suppressFileDependency = true;
-            if (strpos($this->smarty->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
-                $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->template->extracted_compiled_code, $_tpl->getCompiledTemplate());
-            } elseif ($this->smarty->block_data[$_name]['mode'] == 'prepend') {
-                $_output = $_tpl->getCompiledTemplate() . $compiler->template->extracted_compiled_code;
-            } elseif ($this->smarty->block_data[$_name]['mode'] == 'append') {
-                $_output = $compiler->template->extracted_compiled_code . $_tpl->getCompiledTemplate();
-            } elseif (!empty($this->smarty->block_data[$_name])) {
+            if (strpos($compiler->template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
+                $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->parser->current_buffer->to_smarty_php(), $_tpl->getCompiledTemplate());
+            } elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') {
+                $_output = $_tpl->getCompiledTemplate() . $compiler->parser->current_buffer->to_smarty_php();
+            } elseif ($compiler->template->block_data[$_name]['mode'] == 'append') {
+                $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->getCompiledTemplate();
+            } elseif (!empty($compiler->template->block_data[$_name])) {
                 $_output = $_tpl->getCompiledTemplate();
             } 
             $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']);
@@ -102,13 +104,15 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
             } 
             unset($_tpl);
         } else {
-            $_output = $compiler->template->extracted_compiled_code;
+            $_output = $compiler->parser->current_buffer->to_smarty_php();
         } 
-        $compiler->template->extracted_compiled_code = $saved_data[1];
-        $compiler->template->extract_code = $saved_data[2];
-        $compiler->nocache = $saved_data[3]; 
+        $compiler->parser->current_buffer = $saved_data[1];
+        $compiler->nocache = $saved_data[2];
+        $compiler->smarty->merge_compiled_includes = $saved_data[3];
         // $_output content has already nocache code processed
         $compiler->suppressNocacheProcessing = true;
+        // reset flag
+        $compiler->smarty->inheritance = false;
         return $_output;
     } 
 } 
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php
new file mode 100644 (file)
index 0000000..60e856d
--- /dev/null
@@ -0,0 +1,56 @@
+<?php\r
+\r
+/**\r
+ * Smarty Internal Plugin Compile Break\r
+ * \r
+ * Compiles the {break} tag\r
+ * \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
+/**\r
+ * Smarty Internal Plugin Compile Break Class\r
+ */\r
+class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {\r
+    /**\r
+     * Compiles code for the {break} tag\r
+     * \r
+     * @param array $args array with attributes from parser\r
+     * @param object $compiler compiler object\r
+     * @return string compiled code\r
+     */\r
+    public function compile($args, $compiler)\r
+    {\r
+        $this->compiler = $compiler;\r
+        $this->smarty = $compiler->smarty;\r
+        $this->optional_attributes = array('levels'); \r
+        // check and get attributes\r
+        $_attr = $this->_get_attributes($args);\r
+\r
+        if (isset($_attr['levels'])) {\r
+            if (!is_numeric($_attr['levels'])) {\r
+                $this->compiler->trigger_template_error('level attribute must be a numeric constant', $this->compiler->lex->taglineno);\r
+            } \r
+            $_levels = $_attr['levels'];\r
+        } else {\r
+            $_levels = 1;\r
+        } \r
+        $level_count = $_levels;\r
+        $stack_count = count($compiler->_tag_stack) - 1;\r
+        while ($level_count > 0 && $stack_count >= 0) {\r
+            if (in_array($compiler->_tag_stack[$stack_count][0], array('for', 'foreach', 'while', 'section'))) {\r
+                $level_count--;\r
+            } \r
+            $stack_count--;\r
+        } \r
+        if ($level_count != 0) {\r
+            $this->compiler->trigger_template_error("cannot break {$_levels} level(s)", $this->compiler->lex->taglineno);\r
+        } \r
+        // this tag does not return compiled code\r
+        $this->compiler->has_code = true;\r
+        return "<?php break {$_levels}?>";\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
index 0f7e521404523e5c2384478a5201e558c538468e..e63bd1c8329877e449ebe10180210c60dc5662af 100644 (file)
@@ -9,6 +9,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Function_Call Class
  */
@@ -71,7 +72,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
             } 
         } 
         $_params = 'array(' . implode(",", $_paramsArray) . ')';
-       $_hash = str_replace('-','_',$compiler->template->properties['nocache_hash']);
+    $_hash = str_replace('-','_',$compiler->template->properties['nocache_hash']);
         // was there an assign attribute
         if (isset($_assign)) {
             if ($compiler->template->caching) {
index 752cb3ae0d41823c540675b1c6624565c823d468..96589cdde70ab3d698c3018f1eba419b29ddbb65 100644 (file)
@@ -1,24 +1,25 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Capture
-* 
-* Compiles the {capture} tag
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Capture
+ * 
+ * Compiles the {capture} tag
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Capture Class
-*/
+ * Smarty Internal Plugin Compile Capture Class
+ */
 class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {capture} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {capture} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -39,16 +40,16 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Captureclose Class
-*/
+ * Smarty Internal Plugin Compile Captureclose Class
+ */
 class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {/capture} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {/capture} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -69,4 +70,4 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 0dd1ba8287f8c3ff361bbd1ce122a417c3d83aae..bb0103ed59efb27e841d497d56538e0fb2c83ec6 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Config Load
-* 
-* Compiles the {config load} tag
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Config Load
+ * 
+ * Compiles the {config load} tag
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Config Load Class
-*/
+ * Smarty Internal Plugin Compile Config Load Class
+ */
 class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {config_load} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {config_load} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -36,13 +37,13 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
         } 
         $scope = '$_smarty_tpl->smarty';
         if (isset($_attr['scope'])) {
-            if ($_attr['scope'] == '\'local\'') {
+            $_attr['scope'] = trim($_attr['scope'], "'\"");
+            if ($_attr['scope'] == 'local') {
                 $scope = '$_smarty_tpl';
-            } elseif ($_attr['scope'] == '\'parent\'') {
+            } elseif ($_attr['scope'] == 'parent') {
                 $scope = '$_smarty_tpl->parent';
             } 
         } 
-
         // create config object
         $_output = "<?php  \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
         $_output .= "\$_config->loadConfigVars($section, $scope); ?>";
@@ -50,4 +51,4 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php
new file mode 100644 (file)
index 0000000..3c15e8f
--- /dev/null
@@ -0,0 +1,56 @@
+<?php\r
+\r
+/**\r
+ * Smarty Internal Plugin Compile Continue\r
+ * \r
+ * Compiles the {continue} tag\r
+ * \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
+/**\r
+ * Smarty Internal Plugin Compile Continue Class\r
+ */\r
+class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {\r
+    /**\r
+     * Compiles code for the {continue} tag\r
+     * \r
+     * @param array $args array with attributes from parser\r
+     * @param object $compiler compiler object\r
+     * @return string compiled code\r
+     */\r
+    public function compile($args, $compiler)\r
+    {\r
+        $this->compiler = $compiler;\r
+        $this->smarty = $compiler->smarty;\r
+        $this->optional_attributes = array('levels'); \r
+        // check and get attributes\r
+        $_attr = $this->_get_attributes($args);\r
+\r
+        if (isset($_attr['levels'])) {\r
+            if (!is_numeric($_attr['levels'])) {\r
+                $this->compiler->trigger_template_error('level attribute must be a numeric constant', $this->compiler->lex->taglineno);\r
+            } \r
+            $_levels = $_attr['levels'];\r
+        } else {\r
+            $_levels = 1;\r
+        } \r
+        $level_count = $_levels;\r
+        $stack_count = count($compiler->_tag_stack) - 1;\r
+        while ($level_count > 0 && $stack_count >= 0) {\r
+            if (in_array($compiler->_tag_stack[$stack_count][0], array('for', 'foreach', 'while', 'section'))) {\r
+                $level_count--;\r
+            } \r
+            $stack_count--;\r
+        } \r
+        if ($level_count != 0) {\r
+            $this->compiler->trigger_template_error("cannot continue {$_levels} level(s)", $this->compiler->lex->taglineno);\r
+        } \r
+        // this tag does not return compiled code\r
+        $this->compiler->has_code = true;\r
+        return "<?php continue {$_levels}?>";\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
index 8ff9671a8ba7b07b0975ad3db19a65d6361fdc4a..d6d8905f9a3c8765ad15aad9221e07d6f792760f 100644 (file)
@@ -1,24 +1,25 @@
 <?php 
 /**
-* Smarty Internal Plugin Compile Debug
-*
-* Compiles the {debug} tag 
-* It opens a window the the Smarty Debugging Console
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Debug
+ *
+ * Compiles the {debug} tag 
+ * It opens a window the the Smarty Debugging Console
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Compile Debug Class
-*/ 
+ * Smarty Internal Plugin Compile Debug Class
+ */ 
 class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {debug} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {debug} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -31,4 +32,4 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 6f17de77a7a5ce0bd884eddd1a23c7526eafef6c..17be1f80c3d643c53e9030b683aa621224381a19 100644 (file)
@@ -1,24 +1,25 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Eval
-*
-* Compiles the {eval} tag 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Eval
+ *
+ * Compiles the {eval} tag 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Compile Eval Class
-*/ 
+ * Smarty Internal Plugin Compile Eval Class
+ */ 
 class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {eval} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {eval} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -32,7 +33,7 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
         }
   
         // create template object
-        $_output = "\$_template = new {$compiler->smarty->template_class}('string:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);"; 
+        $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);"; 
         //was there an assign attribute? 
         if (isset($_assign)) {
             $_output .= "\$_smarty_tpl->assign($_assign,\$_template->getRenderedTemplate());";
@@ -43,4 +44,4 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 3f5997a4d6bbcc1975265a8fa72760e3ebff4ded..245fe9c4e627158fd320477a70e35a08b135100a 100644 (file)
@@ -9,6 +9,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile extend Class
  */
@@ -30,12 +31,16 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
         // check and get attributes
         $_attr = $this->_get_attributes($args);
         $_smarty_tpl = $compiler->template; 
-        // $include_file = '';
+        $include_file = null;
         eval('$include_file = ' . $_attr['file'] . ';'); 
         // create template object
         $_template = new $compiler->smarty->template_class($include_file, $this->smarty, $compiler->template); 
         // save file dependency
-        $compiler->template->properties['file_dependency'][sha1($_template->getTemplateFilepath())] = array($_template->getTemplateFilepath(), $_template->getTemplateTimestamp());
+        $template_sha1 = sha1($_template->getTemplateFilepath());
+        if (isset($compiler->template->properties['file_dependency'][$template_sha1])) {
+            $this->compiler->trigger_template_error("illegal recursive call of \"{$include_file}\"",$compiler->lex->line-1);
+        } 
+        $compiler->template->properties['file_dependency'][$template_sha1] = array($_template->getTemplateFilepath(), $_template->getTemplateTimestamp());
         $_content = $compiler->template->template_source;
         if (preg_match_all("!({$this->_ldl}block\s(.+?){$this->_rdl})!", $_content, $s) !=
                 preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $c)) {
@@ -63,7 +68,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
         $compiler->template->template_source = $_template->getTemplateSource();
         $compiler->template->template_filepath = $_template->getTemplateFilepath();
         $compiler->abort_and_recompile = true;
-        return ' ';
+        return '';
     } 
 
     protected function saveBlockData($block_content, $block_tag, $template)
@@ -71,38 +76,38 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
         if (0 == preg_match("!(.?)(name=)(.*?)(?=(\s|{$this->_rdl}))!", $block_tag, $_match)) {
             $this->compiler->trigger_template_error("\"" . $block_tag . "\" missing name attribute");
         } else {
-            $_name = trim($_match[3], '\'"');
-          // replace {$smarty.block.child} 
+            $_name = trim($_match[3], '\'"'); 
+            // replace {$smarty.block.child}
             if (strpos($block_content, $this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter) !== false) {
-                if (isset($this->smarty->block_data[$_name])) {
+                if (isset($template->block_data[$_name])) {
                     $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
-                        $this->smarty->block_data[$_name]['source'], $block_content);
-                    unset($this->smarty->block_data[$_name]);
+                        $template->block_data[$_name]['source'], $block_content);
+                    unset($template->block_data[$_name]);
                 } else {
                     $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
                         '', $block_content);
                 } 
             } 
-            if (isset($this->smarty->block_data[$_name])) {
-                if (strpos($this->smarty->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
-                    $this->smarty->block_data[$_name]['source'] =
-                    str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $this->smarty->block_data[$_name]['source']);
-                } elseif ($this->smarty->block_data[$_name]['mode'] == 'prepend') {
-                    $this->smarty->block_data[$_name]['source'] .= $block_content;
-                } elseif ($this->smarty->block_data[$_name]['mode'] == 'append') {
-                    $this->smarty->block_data[$_name]['source'] = $block_content . $this->smarty->block_data[$_name]['source'];
+            if (isset($template->block_data[$_name])) {
+                if (strpos($template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
+                    $template->block_data[$_name]['source'] =
+                    str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $template->block_data[$_name]['source']);
+                } elseif ($template->block_data[$_name]['mode'] == 'prepend') {
+                    $template->block_data[$_name]['source'] .= $block_content;
+                } elseif ($template->block_data[$_name]['mode'] == 'append') {
+                    $template->block_data[$_name]['source'] = $block_content . $template->block_data[$_name]['source'];
                 } 
             } else {
-                $this->smarty->block_data[$_name]['source'] = $block_content;
+                $template->block_data[$_name]['source'] = $block_content;
             } 
             if (preg_match('/(.?)(append)(.*)/', $block_tag, $_match) != 0) {
-                $this->smarty->block_data[$_name]['mode'] = 'append';
+                $template->block_data[$_name]['mode'] = 'append';
             } elseif (preg_match('/(.?)(prepend)(.*)/', $block_tag, $_match) != 0) {
-                $this->smarty->block_data[$_name]['mode'] = 'prepend';
+                $template->block_data[$_name]['mode'] = 'prepend';
             } else {
-                $this->smarty->block_data[$_name]['mode'] = 'replace';
+                $template->block_data[$_name]['mode'] = 'replace';
             } 
-            $this->smarty->block_data[$_name]['file'] = $template->getTemplateFilepath();
+            $template->block_data[$_name]['file'] = $template->getTemplateFilepath();
         } 
     } 
 } 
index a848a6f46c91aa13008193ad692c437a1c67eab2..77f196cc853519c22917837e33cfa455583cbaa5 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile For Class
  */
index bfc084dae70689da53bd8824ddbe044c90721a9d..52b78c3341a4012ec912b7c562316a94760d9990 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Foreach Class
  */
@@ -31,6 +32,10 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
         $from = $_attr['from'];
         $item = $_attr['item'];
 
+        if (substr_compare("\$_smarty_tpl->getVariable($item)", $from,0, strlen("\$_smarty_tpl->getVariable($item)")) == 0) {
+            $this->compiler->trigger_template_error("item parameter {$item} may not be the same parameter at 'from'");
+        } 
+
         if (isset($_attr['key'])) {
             $key = $_attr['key'];
         } else {
@@ -80,7 +85,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
         } 
         $output .= " \$_from = $from; if (!is_array(\$_from) && !is_object(\$_from)) { settype(\$_from, 'array');}\n";
         if ($usesPropTotal) {
-            $output .= " \$_smarty_tpl->tpl_vars[$item]->total=count(\$_from);\n";
+            $output .= " \$_smarty_tpl->tpl_vars[$item]->total=(\$_from instanceof Traversable)?iterator_count(\$_from):count(\$_from);\n";
         } 
         if ($usesPropIteration) {
             $output .= " \$_smarty_tpl->tpl_vars[$item]->iteration=0;\n";
index 88eec3db63c8ec00aeb2f483a9bd93350444029f..0080704af8733dd32f82ef4cee70a88f42eddcea 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Function Class
  */
@@ -26,7 +27,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
         $this->optional_attributes = array('_any'); 
         // check and get attributes
         $_attr = $this->_get_attributes($args);
-        $save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code,
+        $save = array($_attr, $compiler->parser->current_buffer,
             $compiler->template->has_nocache_code, $compiler->template->required_plugins);
         $this->_open_tag('function', $save);
         $_name = trim($_attr['name'], "'\"");
@@ -40,14 +41,14 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
             $output = '';
         } else {
             $output = "<?php if (!function_exists('smarty_template_function_{$_name}')) {
-       function smarty_template_function_{$_name}(\$_smarty_tpl,\$params) {
-       \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
-       foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
+    function smarty_template_function_{$_name}(\$_smarty_tpl,\$params) {
+    \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
+    foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
         } 
         // Init temporay context
         $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
-        $compiler->template->extract_code = true;
-        $compiler->template->extracted_compiled_code = $output;
+        $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
+        $compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output));
         $compiler->template->has_nocache_code = false;
         $compiler->has_code = false;
         $compiler->template->properties['function'][$_name]['compiled'] = '';
@@ -95,20 +96,19 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
         // if caching save template function for possible nocache call
         if ($compiler->template->caching) {
             $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string
-             . $compiler->template->extracted_compiled_code;
+             . $compiler->parser->current_buffer->to_smarty_php();
             $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash'];
             $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code;
             $compiler->smarty->template_functions[$_name] = $compiler->template->properties['function'][$_name];
             $compiler->has_code = false;
             $output = true;
         } else {
-            $output = $plugins_string . $compiler->template->extracted_compiled_code . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}}?>\n";
+            $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}}?>\n";
         } 
         // restore old compiler status
-        $compiler->template->extracted_compiled_code = $saved_data[1];
-        $compiler->template->extract_code = $saved_data[2];
-        $compiler->template->has_nocache_code = $compiler->template->has_nocache_code | $saved_data[3];
-        $compiler->template->required_plugins = $saved_data[4];
+        $compiler->parser->current_buffer = $saved_data[1];
+        $compiler->template->has_nocache_code = $compiler->template->has_nocache_code | $saved_data[2];
+        $compiler->template->required_plugins = $saved_data[3];
         return $output;
     } 
 } 
index 9d05f4245ebdb491ecf31c311f2cc7fb815dba5f..4eac8d4b3a5d6e4434a8e1eedc5b6de7fe491c6a 100644 (file)
@@ -1,24 +1,25 @@
 <?php
 /**
-* Smarty Internal Plugin Compile If
-* 
-* Compiles the {if} {else} {elseif} {/if} tags
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile If
+ * 
+ * Compiles the {if} {else} {elseif} {/if} tags
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile If Class
-*/
+ * Smarty Internal Plugin Compile If Class
+ */
 class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {if} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {if} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -37,16 +38,16 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Else Class
-*/
+ * Smarty Internal Plugin Compile Else Class
+ */
 class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {else} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {else} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -58,16 +59,16 @@ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile ElseIf Class
-*/
+ * Smarty Internal Plugin Compile ElseIf Class
+ */
 class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {elseif} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {elseif} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -111,4 +112,4 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index d2f7484a5f77401390ad154d88d51518f7d744b4..fa1d6427742439e16fcccd0f621ad2fe11593cb9 100644 (file)
@@ -9,6 +9,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Include Class
  */
@@ -33,20 +34,21 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
         if ($compiler->smarty->merge_compiled_includes || isset($_attr['inline'])) {
             // check if compiled code can be merged (contains no variable part)
             if (!$compiler->has_variable_string && (substr_count($include_file, '"') == 2 or substr_count($include_file, "'") == 2) and substr_count($include_file, '(') == 0) {
-                eval("\$tmp = $include_file;");
+             $tmp = null;
+           eval("\$tmp = $include_file;");
                 if ($this->compiler->template->template_resource != $tmp) {
-                    $tpl = $compiler->smarty->createTemplate ($tmp, $compiler->template->cache_id, $compiler->template->compile_id, $compiler->template);
+                    $tpl = new $compiler->smarty->template_class ($tmp, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
                     if ($this->compiler->template->caching) {
                         // needs code for cached page but no cache file
                         $tpl->caching = 9999;
                     } 
-                   if ($this->compiler->template->mustCompile) {
+                    if ($this->compiler->template->mustCompile) {
                         // make sure whole chain gest compiled
                         $tpl->mustCompile = true;
                     } 
                     if ($tpl->resource_object->usesCompiler && $tpl->isExisting()) {
                         // get compiled code
-                        $compiled_tpl = $tpl->getCompiledTemplate();
+                        $compiled_tpl = $tpl->getCompiledTemplate(); 
                         // merge compiled code for {function} tags
                         $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']); 
                         // merge filedependency by evaluating header code
@@ -77,17 +79,21 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
 
         $_parent_scope = SMARTY_LOCAL_SCOPE;
         if (isset($_attr['scope'])) {
-            if ($_attr['scope'] == '\'parent\'') {
+            $_attr['scope'] = trim($_attr['scope'], "'\"");
+            if ($_attr['scope'] == 'parent') {
                 $_parent_scope = SMARTY_PARENT_SCOPE;
-            } elseif ($_attr['scope'] == '\'root\'') {
+            } elseif ($_attr['scope'] == 'root') {
                 $_parent_scope = SMARTY_ROOT_SCOPE;
-            } elseif ($_attr['scope'] == '\'global\'') {
+            } elseif ($_attr['scope'] == 'global') {
                 $_parent_scope = SMARTY_GLOBAL_SCOPE;
             } 
         } 
-        $_caching = 'null'; 
+        $_caching = 'null';
+        if ($this->compiler->nocache || $this->compiler->tag_nocache) {
+            $_caching = SMARTY_CACHING_OFF;
+        } 
         // default for included templates
-        if ($this->compiler->template->caching && !$this->compiler->nocache) {
+        if ($this->compiler->template->caching && !$this->compiler->nocache && !$this->compiler->tag_nocache) {
             $_caching = 9999;
         } 
         /*
@@ -102,14 +108,21 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
         } else {
             $_cache_lifetime = 'null';
         } 
+        if (isset($_attr['cache_id'])) {
+            $_cache_id = $_attr['cache_id'];
+            $this->compiler->tag_nocache = true;
+            $_caching = SMARTY_CACHING_LIFETIME_CURRENT;
+        } else {
+            $_cache_id = '$_smarty_tpl->cache_id';
+        } 
         if (isset($_attr['nocache'])) {
-            if ($_attr['nocache'] == 'true') {
+            if (trim($_attr['nocache'], "'\"") == 'true') {
                 $this->compiler->tag_nocache = true;
                 $_caching = SMARTY_CACHING_OFF;
             } 
         } 
         if (isset($_attr['caching'])) {
-            if ($_attr['caching'] == 'true') {
+            if (trim($_attr['caching'], "'\"") == 'true') {
                 $_caching = SMARTY_CACHING_LIFETIME_CURRENT;
             } else {
                 $this->compiler->tag_nocache = true;
@@ -117,9 +130,9 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
             } 
         } 
         // create template object
-        $_output = "<?php \$_template = new {$compiler->smarty->template_class}($include_file, \$_smarty_tpl->smarty, \$_smarty_tpl, \$_smarty_tpl->cache_id, \$_smarty_tpl->compile_id, $_caching, $_cache_lifetime);\n"; 
+        $_output = "<?php \$_template = new {$compiler->smarty->template_class}($include_file, \$_smarty_tpl->smarty, \$_smarty_tpl, $_cache_id, \$_smarty_tpl->compile_id, $_caching, $_cache_lifetime);\n"; 
         // delete {include} standard attributes
-        unset($_attr['file'], $_attr['assign'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']); 
+        unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']); 
         // remaining attributes must be assigned as smarty variable
         if (!empty($_attr)) {
             if ($_parent_scope == SMARTY_LOCAL_SCOPE) {
@@ -128,7 +141,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
                     $_output .= "\$_template->assign('$_key',$_value);";
                 } 
             } else {
-                $this->compiler->trigger_template_error('variable passing not allowed in parent/global scope');
+                $this->compiler->trigger_template_error('variable passing not allowed in parent/global scope', $this->compiler->lex->taglineno);
             } 
         } 
         // was there an assign attribute
@@ -152,4 +165,4 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index e71f978d94dfd410d345e26acae6581298db6ef9..5aa558ddf5378bd7bc8b2879762531957d741908 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Include PHP
-* 
-* Compiles the {include_php} tag
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Include PHP
+ * 
+ * Compiles the {include_php} tag
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Insert Class
-*/
+ * Smarty Internal Plugin Compile Insert Class
+ */
 class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {include_php} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {include_php} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -65,4 +66,4 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index d90a9f2956eb34abb6a8f38b5f694f83dad99c22..f1b5e8ebd903e69404296bfc24f713518fc0c35d 100644 (file)
@@ -9,6 +9,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Insert Class
  */
@@ -31,11 +32,12 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
         $this->compiler->suppressNocacheProcessing = true;
         $this->compiler->tag_nocache = true;
         $_smarty_tpl = $compiler->template;
+        $_name = null;
+        $_script = null;
 
         $_output = '<?php '; 
         // save posible attributes
         eval('$_name = ' . $_attr['name'] . ';');
-        $_function = "insert_{$_name}";
         if (isset($_attr['assign'])) {
             // output will be stored in a smarty variable instead of beind displayed
             $_assign = $_attr['assign']; 
@@ -44,22 +46,47 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
         } 
         if (isset($_attr['script'])) {
             // script which must be included
+            $_function = "smarty_insert_{$_name}";
             $_smarty_tpl = $compiler->template;
+            $_filepath = false;
             eval('$_script = ' . $_attr['script'] . ';');
-            if (!file_exists($_script)) {
-                $this->compiler->trigger_template_error("{insert} missing script file '{$_script}'");
+            if (!$this->compiler->smarty->security && file_exists($_script)) {
+                $_filepath = $_script;
+            } else {
+                if ($this->compiler->smarty->security) {
+                    $_dir = $this->compiler->smarty->security_policy->trusted_dir;
+                } else {
+                    $_dir = $this->compiler->smarty->trusted_dir;
+                } 
+                if (!empty($_dir)) {
+                    foreach((array)$_dir as $_script_dir) {
+                        if (strpos('/\\', substr($_script_dir, -1)) === false) {
+                            $_script_dir .= DS;
+                        } 
+                        if (file_exists($_script_dir . $_script)) {
+                            $_filepath = $_script_dir . $_script;
+                            break;
+                        } 
+                    } 
+                } 
+            } 
+            if ($_filepath == false) {
+                $this->compiler->trigger_template_error("{insert} missing script file '{$_script}'", $this->compiler->lex->taglineno);
             } 
             // code for script file loading
-            $_output .= "require_once '{$_script}' ;";
-            require_once $_script;
+            $_output .= "require_once '{$_filepath}' ;";
+            require_once $_filepath;
             if (!is_callable($_function)) {
-                $this->compiler->trigger_template_error(" {insert} function '{$_name}' is not callable");
+                $this->compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", $this->compiler->lex->taglineno);
             } 
         } else {
-       $_script = 'null';
+            $_filepath = 'null';
+            $_function = "insert_{$_name}"; 
+            // function in PHP script ?
             if (!is_callable($_function)) {
+                // try plugin
                 if (!$_function = $this->compiler->getPlugin($_name, 'insert')) {
-                    $this->compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'");
+                    $this->compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", $this->compiler->lex->taglineno);
                 } 
             } 
         } 
@@ -74,14 +101,14 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
         // call insert
         if (isset($_assign)) {
             if ($_smarty_tpl->caching) {
-                $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_script}',{$_assign});?>";
+                $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>";
             } else {
                 $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl), true);?>";
             } 
         } else {
             $this->compiler->has_output = true;
             if ($_smarty_tpl->caching) {
-                $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_script}');?>";
+                $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>";
             } else {
                 $_output .= "echo {$_function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>";
             } 
index c809990cae151a96ddf7514bf9021a26492b6956..9f6294cab6446de80512b38736ba96b8121d7f43 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Ldelim
-*
-* Compiles the {ldelim} tag 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Ldelim
+ *
+ * Compiles the {ldelim} tag 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Compile Ldelim Class
-*/ 
+ * Smarty Internal Plugin Compile Ldelim Class
+ */ 
 class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {ldelim} tag
-    *
-    * This tag does output the left delimiter 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {ldelim} tag
+     *
+     * This tag does output the left delimiter 
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -28,5 +29,6 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
         $this->compiler->has_code = true;
         return $this->compiler->smarty->left_delimiter;
     } 
-} 
+}
+
 ?>
index ebeef9dd0529fa54a42b77e968c272f15888986d..3a4e113504eb6fad443df53c1014d6a4fd05bcb9 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Nocache
-*
-* Compiles the {nocache} {/nocache} tags 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Nocache
+ *
+ * Compiles the {nocache} {/nocache} tags 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Compile Nocache Class
-*/ 
+ * Smarty Internal Plugin Compile Nocache Class
+ */ 
 class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {nocache} tag
-    *
-    * This tag does not generate compiled output. It only sets a compiler flag 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {nocache} tag
+     *
+     * This tag does not generate compiled output. It only sets a compiler flag 
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -33,17 +34,17 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Nocacheclose Class
-*/ 
+ * Smarty Internal Plugin Compile Nocacheclose Class
+ */ 
 class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {/nocache} tag
-    *
-    * This tag does not generate compiled output. It only sets a compiler flag 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {/nocache} tag
+     *
+     * This tag does not generate compiled output. It only sets a compiler flag 
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -56,4 +57,4 @@ class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 5a9b1140f49394511f8e41de2b0f16f34813f655..79772a12eb116648c559c08189fd7a550ee3fcbe 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Block Plugin
-* 
-* Compiles code for the execution of block plugin
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Block Plugin
+ * 
+ * Compiles code for the execution of block plugin
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Block Plugin Class
-*/
+ * Smarty Internal Plugin Compile Block Plugin Class
+ */
 class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the execution of block plugin
-    * 
-    * @param array $args array with attributes from parser
-    * @param string $tag name of block function
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the execution of block plugin
+     
+     * @param array $args array with attributes from parser
+     * @param string $tag name of block function
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $tag, $function)
     {
         $this->compiler = $compiler;
@@ -44,11 +45,7 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
             // maybe nocache because of nocache variables or nocache plugin
             $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; 
             // compile code
-            if (is_array($function)) {
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func_array(array('{$function[0]}','{$function[1]}'),(array({$_params}, null, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl));while (\$_block_repeat) { ob_start();?>";
-            } else {
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";
-            } 
+            $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";
         } else {
             // must endblock be nocache?
             if ($this->compiler->nocache) {
@@ -59,13 +56,9 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
             // This tag does create output
             $this->compiler->has_output = true; 
             // compile code
-            if (is_array($function)) {
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func_array(array('{$function[0]}','{$function[1]}'),(array({$_params}, \$_block_content, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl)); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
-            } else {
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo {$function}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
-            } 
+            $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo {$function}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
         } 
-        return $output."\n";
+        return $output . "\n";
     } 
 } 
 
index 80cb1bfa1f1a9aae53d2be225348df07a4526739..77f83c0d36c0ceb90440f5bb7e16964577566c91 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Function Plugin
-* 
-* Compiles code for the execution of function plugin
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Function Plugin
+ * 
+ * Compiles code for the execution of function plugin
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Function Plugin Class
-*/
+ * Smarty Internal Plugin Compile Function Plugin Class
+ */
 class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the execution of function plugin
-    * 
-    * @param array $args array with attributes from parser
-    * @param string $tag name of function
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the execution of function plugin
+     
+     * @param array $args array with attributes from parser
+     * @param string $tag name of function
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $tag, $function)
     {
         $this->compiler = $compiler; 
@@ -41,11 +42,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
         } 
         $_params = 'array(' . implode(",", $_paramsArray) . ')'; 
         // compile code
-        if (is_array($function)) {
-            $output = "<?php echo call_user_func(array('{$function[0]}','{$function[1]}'),{$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
-        } else {
-            $output = "<?php echo {$function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
-        } 
+        $output = "<?php echo {$function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
         return $output;
     } 
 } 
index c4fbfa5e2b3fcaf2531d4232c18c354ec705e2d1..06b5a885e4309acf71d8f6e94edc11748ca3f6c8 100644 (file)
@@ -1,59 +1,86 @@
 <?php\r
 /**\r
-* Smarty Internal Plugin Compile Modifier\r
-* \r
-* Compiles code for modifier execution\r
-* \r
-* @package Smarty\r
-* @subpackage Compiler\r
-* @author Uwe Tews \r
-*/\r
+ * Smarty Internal Plugin Compile Modifier\r
+ * \r
+ * Compiles code for modifier execution\r
+ * \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
+\r
 /**\r
-* Smarty Internal Plugin Compile Modifier Class\r
-*/\r
+ * Smarty Internal Plugin Compile Modifier Class\r
+ */\r
 class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase {\r
     /**\r
-    * Compiles code for modifier execution\r
-    * \r
-    * @param array $args array with attributes from parser\r
-    * @param object $compiler compiler object\r
-    * @return string compiled code\r
-    */\r
+     * Compiles code for modifier execution\r
+     \r
+     * @param array $args array with attributes from parser\r
+     * @param object $compiler compiler object\r
+     * @return string compiled code\r
+     */\r
     public function compile($args, $compiler)\r
     {\r
         $this->compiler = $compiler;\r
         $this->smarty = $this->compiler->smarty;\r
-        $this->required_attributes = array('modifier', 'params'); \r
+        $this->required_attributes = array('value', 'modifierlist'); \r
         // check and get attributes\r
-        $_attr = $this->_get_attributes($args); \r
-        // check for registered modifier\r
-        if (isset($compiler->smarty->registered_plugins['modifier'][$_attr['modifier']])) {\r
-            $function = $compiler->smarty->registered_plugins['modifier'][$_attr['modifier']][0];\r
-            if (!is_array($function)) {\r
-                $output = "{$function}({$_attr['params']})";\r
-            } else if (is_object($function[0])) {\r
-                $output = 'call_user_func_array($_smarty_tpl->smarty->registered_plugins[\'modifier\'][\'' . $_attr['modifier'] . '\'][0],array(' . $_attr['params'] . '))';\r
-            } else {\r
-                $output = 'call_user_func_array(array(\'' . $function[0] . '\',\'' . $function[1] . '\'),array(' . $_attr['params'] . '))';\r
+        $_attr = $this->_get_attributes($args);\r
+        $output = $_attr['value']; \r
+        // loop over list of modifiers\r
+        foreach ($_attr['modifierlist'] as $single_modifier) {\r
+            preg_match_all('/(((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^:"]*"[^"\\\\]*(?:\\\\.[^"\\\\]*)*")[^:]*)+|::?|[^:]+)/', $single_modifier, $mod_array);\r
+            $modifier = $mod_array[0][0];\r
+            for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {\r
+                if ($mod_array[0][$i] == ':') {\r
+                    $mod_array[0][$i] = ',';\r
+                } \r
+                if ($mod_array[0][$i] == '::') {\r
+                    $mod_array[0][$i-1] = $mod_array[0][$i-1] . $mod_array[0][$i] . $mod_array[0][$i + 1];\r
+                    unset($mod_array[0][$i], $mod_array[0][$i + 1]);\r
+                    $i++;\r
+                } \r
             } \r
-        // check for plugin modifier\r
-        } else if ($function = $this->compiler->getPlugin($_attr['modifier'], 'modifier')) {\r
-            if (!is_array($function)) {\r
-                $output = "{$function}({$_attr['params']})";\r
+            unset($mod_array[0][0]);\r
+            $params = $output . implode('', $mod_array[0]); \r
+            // check for registered modifier\r
+            if (isset($compiler->smarty->registered_plugins['modifier'][$modifier])) {\r
+                $function = $compiler->smarty->registered_plugins['modifier'][$modifier][0];\r
+                if (!is_array($function)) {\r
+                    $output = "{$function}({$params})";\r
+                } else {\r
+                    if (is_object($function[0])) {\r
+                        $output = '$_smarty_tpl->smarty->registered_plugins[\'modifier\'][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';\r
+                    } else {\r
+                        $output = $function[0] . '::' . $function[1] . '(' . $params . ')';\r
+                    } \r
+                } \r
+                // check for plugin modifiercompiler\r
+            } else if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {\r
+                $plugin = 'smarty_modifiercompiler_' . $modifier;\r
+                foreach($mod_array[0] as $key => $value) {\r
+                    if ($value == ',') {\r
+                        unset ($mod_array[0][$key]);\r
+                    } \r
+                } \r
+                $args = array_merge((array)$output, $mod_array[0]);\r
+                $output = $plugin($args, $compiler); \r
+                // check for plugin modifier\r
+            } else if ($function = $this->compiler->getPlugin($modifier, 'modifier')) {\r
+                $output = "{$function}({$params})"; \r
+                // check if trusted PHP function\r
+            } else if (is_callable($modifier)) {\r
+                // check if modifier allowed\r
+                if (!$this->compiler->template->security || $this->smarty->security_handler->isTrustedModifier($modifier, $this->compiler)) {\r
+                    $output = "{$modifier}({$params})";\r
+                } \r
             } else {\r
-                $output = 'call_user_func_array(array(\'' . $function[0] . '\',\'' . $function[1] . '\'),array(' . $_attr['params'] . '))';\r
-            } \r
-            // check if trusted PHP function\r
-        } else if (is_callable($_attr['modifier'])) {\r
-            // check if modifier allowed\r
-            if (!$this->compiler->template->security || $this->smarty->security_handler->isTrustedModifier($_attr['modifier'], $this->compiler)) {\r
-                $output = "{$_attr['modifier']}({$_attr['params']})";\r
+                $this->compiler->trigger_template_error ("unknown modifier \"" . $modifier . "\"");\r
             } \r
-        } else {\r
-            $this->compiler->trigger_template_error ("unknown modifier \"" . $_attr['modifier'] . "\"");\r
         } \r
         return $output;\r
     } \r
 } \r
 \r
-?>\r
+?>
\ No newline at end of file
index ba4d5000c5e32b2048f4652c1afb12ec4bd208c6..83558bfcd0ed5c8c4d5d85baf1640e604d566c6e 100644 (file)
@@ -1,26 +1,27 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Object Block Function
-* 
-* Compiles code for registered objects as block function
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Object Block Function
+ * 
+ * Compiles code for registered objects as block function
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Object Block Function Class
-*/
+ * Smarty Internal Plugin Compile Object Block Function Class
+ */
 class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the execution of block plugin
-    * 
-    * @param array $args array with attributes from parser
-    * @param string $tag name of block function
-    * @param string $methode name of methode to call
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the execution of block plugin
+     
+     * @param array $args array with attributes from parser
+     * @param string $tag name of block function
+     * @param string $methode name of methode to call
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $tag, $methode)
     {
         $this->compiler = $compiler;
index 3cf90d8e9b0efa3943dfc0d83f9e0fb98d118f5a..32bdbdce224433688d34f05d33c8c422a8597feb 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Object Function Class
  */
@@ -55,8 +56,9 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
             $output = "<?php echo {$return};?>\n";
         } else {
             $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n";
-       }
+    }
         return $output;
     } 
-} 
+}
+
 ?>
\ No newline at end of file
index e72ca46c9d0a27a5b4180af34bfd0943652eb2d4..850917d4b02ae3928053b1340549a5b5c4d34fbe 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Compile Print Expression Class
  */
@@ -23,7 +24,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
     {
         $this->compiler = $compiler;
         $this->required_attributes = array('value');
-        $this->optional_attributes = array('assign', 'nocache', 'filter', 'nofilter'); 
+        $this->optional_attributes = array('assign', 'nocache', 'filter', 'nofilter', 'modifierlist'); 
         // check and get attributes
         $_attr = $this->_get_attributes($args);
 
@@ -47,21 +48,19 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
             $output = '<?php $_smarty_tpl->assign(' . $_attr['assign'] . ',' . $_attr['value'] . ');?>';
         } else {
             // display value
-            $this->compiler->has_output = true;
             if (isset($this->compiler->smarty->registered_filters['variable'])) {
                 $output = 'Smarty_Internal_Filter_Handler::runFilter(\'variable\', ' . $_attr['value'] . ',$_smarty_tpl->smarty, $_smarty_tpl, ' . $_attr['filter'] . ')';
             } else {
                 $output = $_attr['value'];
             } 
             if (!isset($_attr['nofilter']) && isset($this->compiler->smarty->default_modifiers)) {
-                foreach ($this->compiler->smarty->default_modifiers as $default_modifier) {
-                    $mod_array = explode (':', $default_modifier);
-                    $modifier = $mod_array[0];
-                    $mod_array[0] = $output;
-                    $output = $this->compiler->compileTag('private_modifier', array('modifier' => $modifier, 'params' => implode(", ", $mod_array)));
-                } 
+                $output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $this->compiler->smarty->default_modifiers, 'value' => $output));
+            } 
+            if (isset($_attr['modifierlist'])) {
+                $output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $_attr['modifierlist'], 'value' => $output));
             } 
-            $output = '<?php echo ' . $output . ';?>';
+      $this->compiler->has_output = true;
+           $output = '<?php echo ' . $output . ';?>';
         } 
         return $output;
     } 
index e0e7d87f5220acc68307d08fb86408dc0eda91bb..39ad5903e259370975faff1cee49e3a8e5afba90 100644 (file)
@@ -1,25 +1,26 @@
 <?php\r
 /**\r
-* Smarty Internal Plugin Compile Registered Block\r
-* \r
-* Compiles code for the execution of a registered block function\r
-* \r
-* @package Smarty\r
-* @subpackage Compiler\r
-* @author Uwe Tews \r
-*/\r
+ * Smarty Internal Plugin Compile Registered Block\r
+ * \r
+ * Compiles code for the execution of a registered block function\r
+ * \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
+\r
 /**\r
-* Smarty Internal Plugin Compile Registered Block Class\r
-*/\r
+ * Smarty Internal Plugin Compile Registered Block Class\r
+ */\r
 class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase {\r
     /**\r
-    * Compiles code for the execution of a block function\r
-    * \r
-    * @param array $args array with attributes from parser\r
-    * @param string $tag name of block function\r
-    * @param object $compiler compiler object\r
-    * @return string compiled code\r
-    */\r
+     * Compiles code for the execution of a block function\r
+     \r
+     * @param array $args array with attributes from parser\r
+     * @param string $tag name of block function\r
+     * @param object $compiler compiler object\r
+     * @return string compiled code\r
+     */\r
     public function compile($args, $compiler, $tag)\r
     {\r
         $this->compiler = $compiler;\r
@@ -48,9 +49,9 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
             if (!is_array($function)) {\r
                 $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";\r
             } else if (is_object($function[0])) {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func_array(\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0],array({$_params}, null, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl));while (\$_block_repeat) { ob_start();?>";\r
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";\r
             } else {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func_array(array('{$function[0]}','{$function[1]}'),array({$_params}, null, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl));while (\$_block_repeat) { ob_start();?>";\r
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";\r
             } \r
         } else {\r
             // must endblock be nocache?\r
@@ -67,9 +68,9 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
             if (!is_array($function)) {\r
                 $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo {$function}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
             } else if (is_object($function[0])) {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func_array(\$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0],array({$_params}, \$_block_content, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl)); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
             } else {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func_array(array('{$function[0]}','{$function[1]}'),array({$_params}, \$_block_content, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl)); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
             } \r
         } \r
         return $output."\n";\r
index e7d2cd6b6cea54096216cdabb21ebd356fe7c210..3590beac479280688a5454012df36835489dad1f 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler\r
  * @author Uwe Tews \r
  */\r
\r
 /**\r
  * Smarty Internal Plugin Compile Registered Function Class\r
  */\r
@@ -42,15 +43,14 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
             } \r
         } \r
         $_params = 'array(' . implode(",", $_paramsArray) . ')'; \r
-        // compile code\r
         $function = $compiler->smarty->registered_plugins['function'][$tag][0]; \r
         // compile code\r
         if (!is_array($function)) {\r
             $output = "<?php echo {$function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
         } else if (is_object($function[0])) {\r
-            $output = "<?php echo call_user_func(\$_smarty_tpl->smarty->registered_plugins['function']['{$tag}'][0],{$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
+            $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins['function']['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
         } else {\r
-            $output = "<?php echo call_user_func(array('{$function[0]}','{$function[1]}'),{$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
+            $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
         } \r
         return $output;\r
     } \r
index 1f473bc5e5e368193f924c9823e73ab462fa6f34..ec628b05b1c4fdf30ecea7ff7318d37b04bb498b 100644 (file)
@@ -1,24 +1,25 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Special Smarty Variable
-* 
-* Compiles the special $smarty variables
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Special Smarty Variable
+ * 
+ * Compiles the special $smarty variables
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile special Smarty Variable Class
-*/
+ * Smarty Internal Plugin Compile special Smarty Variable Class
+ */
 class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the speical $smarty variables
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the speical $smarty variables
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $_index = explode(',', str_replace(array(']['), array(','), substr($args, 1, strlen($args)-2)));
@@ -55,11 +56,21 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
                 break;
 
             case 'template':
-                $_template_name = basename($compiler->template->getTemplateFilepath());
+                if ($compiler->smarty->inheritance) {
+                       $ptr = $compiler->template->parent;
+                } else {
+                       $ptr = $compiler->template;
+                }
+                $_template_name = $ptr->template_resource;
                 return "'$_template_name'";
 
             case 'current_dir':
-                $_template_dir_name = dirname($compiler->template->getTemplateFilepath());
+                if ($compiler->smarty->inheritance) {
+                       $ptr = $compiler->template->parent;
+                } else {
+                       $ptr = $compiler->template;
+                }
+                $_template_dir_name = dirname($ptr->getTemplateFilepath());
                 return "'$_template_dir_name'";
 
             case 'version':
@@ -97,4 +108,4 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 88c4e1e5ede4bd796dd1c75bdf0073610b2647ad..e8f3eb24ffccc6edd75f056bf166043587911c12 100644 (file)
@@ -1,25 +1,26 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile Rdelim
-*
-* Compiles the {rdelim} tag 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Rdelim
+ *
+ * Compiles the {rdelim} tag 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Compile Rdelim Class
-*/ 
+ * Smarty Internal Plugin Compile Rdelim Class
+ */ 
 class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {rdelim} tag
-    *
-    * This tag does output the right delimiter 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {rdelim} tag
+     *
+     * This tag does output the right delimiter 
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -28,5 +29,6 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
         $this->compiler->has_code = true;
         return $this->compiler->smarty->right_delimiter;
     } 
-} 
-?>
+}
+
+?>
\ No newline at end of file
index 0de506a7498097e179c3ffbfa5a82650d3dc7250..50c8272265cd4610424ae2386d5cb8edf3e1a7f3 100644 (file)
@@ -1,24 +1,25 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Section
-* 
-* Compiles the {section} {sectionelse} {/section} tags
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Section
+ * 
+ * Compiles the {section} {sectionelse} {/section} tags
+ * 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Compile Section Class
-*/
+ * Smarty Internal Plugin Compile Section Class
+ */
 class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {section} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {section} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -28,8 +29,8 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
         $_attr = $this->_get_attributes($args);
 
         $this->_open_tag('section', array('section',$this->compiler->nocache));
-               // maybe nocache because of nocache variables
-               $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache;
+        // maybe nocache because of nocache variables
+        $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache;
 
         $output = "<?php ";
 
@@ -116,12 +117,12 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
 */
 class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {sectionelse} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {sectionelse} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -136,24 +137,24 @@ class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Sectionclose Class
-*/
+ * Smarty Internal Plugin Compile Sectionclose Class
+ */
 class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {/section} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {/section} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
         // check and get attributes
         $_attr = $this->_get_attributes($args);
 
-               // must endblock be nocache?
-               if ($this->compiler->nocache) {
+        // must endblock be nocache?
+        if ($this->compiler->nocache) {
                  $this->compiler->tag_nocache = true;
         }
 
@@ -166,5 +167,4 @@ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
     } 
 } 
 
-
-?>
+?>
\ No newline at end of file
index 6dc18046f4305f5893ce4825bb43d020e85a7750..1a0d8dd429231290fcc23b527ab895bc8583e6c1 100644 (file)
@@ -8,6 +8,7 @@
 * @subpackage Compiler
 * @author Uwe Tews 
 */
+
 /**
 * Smarty Internal Plugin Compile While Class
 */
@@ -28,9 +29,9 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
         $this->_open_tag('while', $this->compiler->nocache);
 
         // maybe nocache because of nocache variables
-               $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache;
+        $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache;
 
-               
+        
         if (is_array($args['if condition'])) {
             $_output = " <?php if (!isset(\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$args['if condition']['var']."] = new Smarty_Variable;\n";
             $_output .= " while (\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."]->value = ".$args['if condition']['value'].") {\n ?>";
@@ -55,12 +56,13 @@ class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
-               // must endblock be nocache?
-               if ($this->compiler->nocache) {
+        // must endblock be nocache?
+        if ($this->compiler->nocache) {
                  $this->compiler->tag_nocache = true;
         }
         $this->compiler->nocache = $this->_close_tag(array('while'));
         return "<?php }?>";
     } 
 } 
-?>
+
+?>
\ No newline at end of file
index 7a398f53ecf2a233327e475433d7dcf01f97ba32..9485eacd71c13d49308a7cfd43aafa9802fed0a3 100644 (file)
@@ -95,9 +95,9 @@ abstract class Smarty_Internal_CompileBase
             return;
         } 
         // wrong nesting of tags
-        $this->compiler->trigger_template_error("unexpected closing tag");
+        $this->compiler->trigger_template_error("unexpected closing tag",$this->compiler->lex->taglineno);
         return;
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 4c10505fe9114d4d89bf7ab60c1cdf02317e3345..5097398ce8926981f94ca8cc8f34730194416887 100644 (file)
@@ -29,7 +29,7 @@ class Smarty_Internal_Config {
         $this->compiler_object = null; 
         // parse config resource name
         if (!$this->parseConfigResourceName ($config_resource)) {
-            throw new Exception ("Unable to parse config resource '{$config_resource}'");
+            throw new SmartyException ("Unable to parse config resource '{$config_resource}'");
         } 
     } 
 
@@ -87,7 +87,7 @@ class Smarty_Internal_Config {
         if (file_exists($this->config_resource_name))
             return $this->config_resource_name; 
         // no tpl file found
-        throw new Exception("Unable to load config file \"{$this->config_resource_name}\"");
+        throw new SmartyException("Unable to load config file \"{$this->config_resource_name}\"");
         return false;
     } 
     /**
@@ -106,7 +106,7 @@ class Smarty_Internal_Config {
     {
         if ($this->config_source === null) {
             if ($this->readConfigSource($this) === false) {
-                throw new Exception("Unable to load config file \"{$this->config_resource_name}\"");
+                throw new SmartyException("Unable to load config file \"{$this->config_resource_name}\"");
             } 
         } 
         return $this->config_source;
@@ -243,6 +243,7 @@ class Smarty_Internal_Config {
         if ($this->mustCompile()) {
             $this->compileConfigSource();
         } 
+        $_config_vars = array();
         include($this->getCompiledFilepath ()); 
         // copy global config vars
         foreach ($_config_vars['vars'] as $variable => $value) {
index 17cfc81ce3e476af50f2ad9d326888cfee640ea0..469dab276dd7af161db19fb7a5991ddc5a2cb2c9 100644 (file)
@@ -10,6 +10,7 @@
  * @subpackage Config
  * @author Uwe Tews 
  */
 /**
  * Main config file compiler class
  */
@@ -98,7 +99,7 @@ class Smarty_Internal_Config_File_Compiler {
             // output parser error message
             $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);
         } 
-        throw new Exception($error_text);
+        throw new SmartyCompilerException($error_text);
     } 
 } 
 
index 50d9fd693193da01fd66091f21bad895be4d532a..3c4249c895b510b3327cc4d5636b373ef34f0488 100644 (file)
@@ -7,6 +7,7 @@
 * @subpackage Config
 * @author Uwe Tews 
 */
+
 /**
 * Smarty Internal Plugin Configfilelexer
 */
@@ -20,10 +21,10 @@ class Smarty_Internal_Configfilelexer
     public $node;
     public $line;
     private $state = 1;
-    public $smarty_token_names = array (               // Text for parser error messages
-                               );
-                               
-                               
+    public $smarty_token_names = array (        // Text for parser error messages
+                );
+                    
+                    
     function __construct($data, $smarty)
     {
         // set instance object
@@ -521,6 +522,6 @@ class Smarty_Internal_Configfilelexer
     $this->yypopstate();
     }
 
-
 }
-?>
+
+?>
\ No newline at end of file
index 3cd3f0f0bf19c56039c359a77b361874dd276e14..d8bb95c2d27adbb3f3782123795f968f6be85359 100644 (file)
@@ -164,7 +164,7 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
 
     private function add_global_vars(Array $vars) {
         if (!isset($this->compiler->config_data['vars'])) {
-           $this->compiler->config_data['vars'] = Array();
+        $this->compiler->config_data['vars'] = Array();
         }
         foreach ($vars as $var) {
             $this->set_var($var, $this->compiler->config_data);
@@ -404,7 +404,7 @@ static public $yy_action = array(
                         $this->yystack[$this->yyidx]->stateno,
                         self::$yyRuleInfo[$yyruleno]['lhs']);
                     if (isset(self::$yyExpectedTokens[$nextstate])) {
-                       $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+                $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
                             if (in_array($token,
                                   self::$yyExpectedTokens[$nextstate], true)) {
                             $this->yyidx = $yyidx;
@@ -439,8 +439,8 @@ static public $yy_action = array(
             }
             break;
         } while (true);
-       $this->yyidx = $yyidx;
-       $this->yystack = $stack;
+    $this->yyidx = $yyidx;
+    $this->yystack = $stack;
         return array_unique($expected);
     }
 
@@ -868,4 +868,5 @@ static public $yy_action = array(
         } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
     }
 }
+
 ?>
\ No newline at end of file
index ec7d0d4fe2f7677eac7f375b54fc46080caab109..95a03c774ab78ddb7e58bede044246fa1dcbea0c 100644 (file)
@@ -1,30 +1,30 @@
 <?php
 
 /**
-* Smarty Internal Plugin Data
-* 
-* This file contains the basic classes and methodes for template and variable creation
-* 
-* @package Smarty
-* @subpackage Templates
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Data
+ 
+ * This file contains the basic classes and methodes for template and variable creation
+ 
+ * @package Smarty
+ * @subpackage Templates
+ * @author Uwe Tews 
+ */
 
 /**
-* Base class with template and variable methodes
-*/
+ * Base class with template and variable methodes
+ */
 class Smarty_Internal_Data {
     // class used for templates
     public $template_class = 'Smarty_Internal_Template';
 
     /**
-    * assigns a Smarty variable
-    * 
-    * @param array $ |string $tpl_var the template variable name(s)
-    * @param mixed $value the value to assign
-    * @param boolean $nocache if true any output of this variable will be not cached
-    * @param boolean $scope the scope the variable will have  (local,parent or root)
-    */
+     * assigns a Smarty variable
+     
+     * @param array $ |string $tpl_var the template variable name(s)
+     * @param mixed $value the value to assign
+     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param boolean $scope the scope the variable will have  (local,parent or root)
+     */
     public function assign($tpl_var, $value = null, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
     {
         if (is_array($tpl_var)) {
@@ -40,12 +40,12 @@ class Smarty_Internal_Data {
         } 
     } 
     /**
-    * assigns a global Smarty variable
-    * 
-    * @param string $varname the global variable name
-    * @param mixed $value the value to assign
-    * @param boolean $nocache if true any output of this variable will be not cached
-    */
+     * assigns a global Smarty variable
+     
+     * @param string $varname the global variable name
+     * @param mixed $value the value to assign
+     * @param boolean $nocache if true any output of this variable will be not cached
+     */
     public function assignGlobal($varname, $value = null, $nocache = false)
     {
         if ($varname != '') {
@@ -53,13 +53,13 @@ class Smarty_Internal_Data {
         } 
     } 
     /**
-    * assigns values to template variables by reference
-    * 
-    * @param string $tpl_var the template variable name
-    * @param mixed $ &$value the referenced value to assign
-    * @param boolean $nocache if true any output of this variable will be not cached
-    * @param boolean $scope the scope the variable will have  (local,parent or root)
-    */
+     * assigns values to template variables by reference
+     
+     * @param string $tpl_var the template variable name
+     * @param mixed $ &$value the referenced value to assign
+     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param boolean $scope the scope the variable will have  (local,parent or root)
+     */
     public function assignByRef($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
     {
         if ($tpl_var != '') {
@@ -68,27 +68,27 @@ class Smarty_Internal_Data {
         } 
     } 
     /**
-    * wrapper function for Smarty 2 BC
-    * 
-    * @param string $tpl_var the template variable name
-    * @param mixed $ &$value the referenced value to assign
-    * @param boolean $nocache if true any output of this variable will be not cached
-    * @param boolean $scope the scope the variable will have  (local,parent or root)
-    */
+     * wrapper function for Smarty 2 BC
+     
+     * @param string $tpl_var the template variable name
+     * @param mixed $ &$value the referenced value to assign
+     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param boolean $scope the scope the variable will have  (local,parent or root)
+     */
     public function assign_by_ref($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
     {
-        trigger_error("function call 'assign_by_ref' is unknown or deprecated, use 'assignByRef'",E_USER_NOTICE);
-       $this->assignByRef($tpl_var,$value,$nocache,$scope);
+        trigger_error("function call 'assign_by_ref' is unknown or deprecated, use 'assignByRef'", E_USER_NOTICE);
+        $this->assignByRef($tpl_var, $value, $nocache, $scope);
     } 
     /**
-    * appends values to template variables
-    * 
-    * @param array $ |string $tpl_var the template variable name(s)
-    * @param mixed $value the value to append
-    * @param boolean $merge flag if array elements shall be merged
-    * @param boolean $nocache if true any output of this variable will be not cached
-    * @param boolean $scope the scope the variable will have  (local,parent or root)
-    */
+     * appends values to template variables
+     
+     * @param array $ |string $tpl_var the template variable name(s)
+     * @param mixed $value the value to append
+     * @param boolean $merge flag if array elements shall be merged
+     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param boolean $scope the scope the variable will have  (local,parent or root)
+     */
     public function append($tpl_var, $value = null, $merge = false, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
     {
         if (is_array($tpl_var)) {
@@ -146,12 +146,12 @@ class Smarty_Internal_Data {
     } 
 
     /**
-    * appends values to template variables by reference
-    * 
-    * @param string $tpl_var the template variable name
-    * @param mixed $ &$value the referenced value to append
-    * @param boolean $merge flag if array elements shall be merged
-    */
+     * appends values to template variables by reference
+     
+     * @param string $tpl_var the template variable name
+     * @param mixed $ &$value the referenced value to append
+     * @param boolean $merge flag if array elements shall be merged
+     */
     public function appendByRef($tpl_var, &$value, $merge = false)
     {
         if ($tpl_var != '' && isset($value)) {
@@ -171,23 +171,23 @@ class Smarty_Internal_Data {
         } 
     } 
     /**
-    * wrapper function for Smarty 2 BC
-    * 
-    * @param string $tpl_var the template variable name
-    * @param mixed $ &$value the referenced value to append
-    * @param boolean $merge flag if array elements shall be merged
-    */
+     * wrapper function for Smarty 2 BC
+     
+     * @param string $tpl_var the template variable name
+     * @param mixed $ &$value the referenced value to append
+     * @param boolean $merge flag if array elements shall be merged
+     */
     public function append_by_ref($tpl_var, &$value, $merge = false)
     {
-        trigger_error("function call 'append_by_ref' is unknown or deprecated, use 'appendByRef'",E_USER_NOTICE);
-        $this->appendByRef($tpl_var,$value,$merge);
-    }
+        trigger_error("function call 'append_by_ref' is unknown or deprecated, use 'appendByRef'", E_USER_NOTICE);
+        $this->appendByRef($tpl_var, $value, $merge);
+    } 
     /**
-    * Returns a single or all template variables
-    * 
-    * @param string $varname variable name or null
-    * @return string variable value or or array of variables
-    */
+     * Returns a single or all template variables
+     
+     * @param string $varname variable name or null
+     * @return string variable value or or array of variables
+     */
     function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
     {
         if (isset($varname)) {
@@ -219,13 +219,13 @@ class Smarty_Internal_Data {
             } 
             return $_result;
         } 
-    }
-    
+    } 
+
     /**
-    * clear the given assigned template variable.
-    * 
-    * @param string $ |array $tpl_var the template variable(s) to clear
-    */
+     * clear the given assigned template variable.
+     
+     * @param string $ |array $tpl_var the template variable(s) to clear
+     */
     public function clearAssign($tpl_var)
     {
         if (is_array($tpl_var)) {
@@ -238,19 +238,19 @@ class Smarty_Internal_Data {
     } 
 
     /**
-    * clear all the assigned template variables.
-    */
+     * clear all the assigned template variables.
+     */
     public function clearAllAssign()
     {
         $this->tpl_vars = array();
     } 
 
     /**
-    * load a config file, optionally load just selected sections
-    * 
-    * @param string $config_file filename
-    * @param mixed $sections array of section names, single section or null
-    */
+     * load a config file, optionally load just selected sections
+     
+     * @param string $config_file filename
+     * @param mixed $sections array of section names, single section or null
+     */
     public function configLoad($config_file, $sections = null)
     { 
         // load Config class
@@ -259,13 +259,13 @@ class Smarty_Internal_Data {
     } 
 
     /**
-    * gets the object of a Smarty variable
-    * 
-    * @param string $variable the name of the Smarty variable
-    * @param object $_ptr optional pointer to data object
-    * @param boolean $search_parents search also in parent data
-    * @return object the object of the variable
-    */
+     * gets the object of a Smarty variable
+     
+     * @param string $variable the name of the Smarty variable
+     * @param object $_ptr optional pointer to data object
+     * @param boolean $search_parents search also in parent data
+     * @return object the object of the variable
+     */
     public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true)
     {
         if ($_ptr === null) {
@@ -287,17 +287,17 @@ class Smarty_Internal_Data {
             return $this->smarty->global_tpl_vars[$variable];
         } 
         if ($this->smarty->error_unassigned && $error_enable) {
-            throw new Exception('Undefined Smarty variable "' . $variable . '"');
+            throw new SmartyException('Undefined Smarty variable "' . $variable . '"');
         } else {
             return new Undefined_Smarty_Variable;
         } 
     } 
     /**
-    * gets  a config variable
-    * 
-    * @param string $variable the name of the config variable
-    * @return mixed the value of the config variable
-    */
+     * gets  a config variable
+     
+     * @param string $variable the name of the config variable
+     * @return mixed the value of the config variable
+     */
     public function getConfigVariable($variable)
     {
         $_ptr = $this;
@@ -310,17 +310,17 @@ class Smarty_Internal_Data {
             $_ptr = $_ptr->parent;
         } 
         if ($this->smarty->error_unassigned) {
-            throw new Exception('Undefined config variable "' . $variable . '"');
+            throw new SmartyException('Undefined config variable "' . $variable . '"');
         } else {
             return '';
         } 
     } 
     /**
-    * gets  a stream variable
-    * 
-    * @param string $variable the stream of the variable
-    * @return mixed the value of the stream variable
-    */
+     * gets  a stream variable
+     
+     * @param string $variable the stream of the variable
+     * @return mixed the value of the stream variable
+     */
     public function getStreamVariable($variable)
     {
         $_result = '';
@@ -332,19 +332,19 @@ class Smarty_Internal_Data {
             return $_result;
         } 
 
-        if ($this->smarty->$error_unassigned) {
-            throw new Exception('Undefined stream variable "' . $variable . '"');
+        if ($this->smarty->error_unassigned) {
+            throw new SmartyException('Undefined stream variable "' . $variable . '"');
         } else {
             return '';
         } 
     } 
 
     /**
-    * Returns a single or all config variables
-    * 
-    * @param string $varname variable name or null
-    * @return string variable value or or array of variables
-    */
+     * Returns a single or all config variables
+     
+     * @param string $varname variable name or null
+     * @return string variable value or or array of variables
+     */
     function getConfigVars($varname = null)
     {
         if (isset($varname)) {
@@ -359,10 +359,10 @@ class Smarty_Internal_Data {
     } 
 
     /**
-    * Deassigns a single or all config variables
-    * 
-    * @param string $varname variable name or null
-    */
+     * Deassigns a single or all config variables
+     
+     * @param string $varname variable name or null
+     */
     function clearConfig($varname = null)
     {
         if (isset($varname)) {
@@ -374,26 +374,15 @@ class Smarty_Internal_Data {
         } 
     } 
 
-    /**
-    * return current time
-    * 
-    * @returns double current time
-    */
-    function _get_time()
-    {
-        $_mtime = microtime();
-        $_mtime = explode(" ", $_mtime);
-        return (double)($_mtime[1]) + (double)($_mtime[0]);
-    } 
 } 
 
 /**
-* class for the Smarty data object
-* 
-* The Smarty data object will hold Smarty variables in the current scope
-* 
-* @param object $parent tpl_vars next higher level of Smarty variables
-*/
+ * class for the Smarty data object
+ 
+ * The Smarty data object will hold Smarty variables in the current scope
+ 
+ * @param object $parent tpl_vars next higher level of Smarty variables
+ */
 class Smarty_Data extends Smarty_Internal_Data {
     // array of variable objects
     public $tpl_vars = array(); 
@@ -404,8 +393,8 @@ class Smarty_Data extends Smarty_Internal_Data {
     // Smarty object
     public $smarty = null;
     /**
-    * create Smarty data object
-    */
+     * create Smarty data object
+     */
     public function __construct ($_parent = null, $smarty = null)
     {
         $this->smarty = $smarty;
@@ -418,40 +407,45 @@ class Smarty_Data extends Smarty_Internal_Data {
                 $this->tpl_vars[$_key] = new Smarty_variable($_val);
             } 
         } elseif ($_parent != null) {
-            throw new Exception("Wrong type for template variables");
+            throw new SmartyException("Wrong type for template variables");
         } 
     } 
 } 
 /**
-* class for the Smarty variable object
-* 
-* This class defines the Smarty variable object
-*/
+ * class for the Smarty variable object
+ 
+ * This class defines the Smarty variable object
+ */
 class Smarty_Variable {
     // template variable
     public $value;
     public $nocache;
     public $scope;
     /**
-    * create Smarty variable object
-    * 
-    * @param mixed $value the value to assign
-    * @param boolean $nocache if true any output of this variable will be not cached
-    * @param boolean $scope the scope the variable will have  (local,parent or root)
-    */
+     * create Smarty variable object
+     
+     * @param mixed $value the value to assign
+     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param boolean $scope the scope the variable will have  (local,parent or root)
+     */
     public function __construct ($value = null, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
     {
         $this->value = $value;
         $this->nocache = $nocache;
         $this->scope = $scope;
     } 
+
+    public function __toString ()
+    {
+        return $this->value;
+    } 
 } 
 
 /**
-* class for undefined variable object
-* 
-* This class defines an object for undefined variable handling
-*/
+ * class for undefined variable object
+ 
+ * This class defines an object for undefined variable handling
+ */
 class Undefined_Smarty_Variable {
     // return always false
     public function __get ($name)
@@ -464,4 +458,4 @@ class Undefined_Smarty_Variable {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 9df0942dd86e5b2ece24b29e2f0b53d91667d439..ad1091b5f6f8ad26e05e1bc88bf5301582ad4f52 100644 (file)
@@ -1,77 +1,78 @@
 <?php
 
 /**
-* Smarty Internal Plugin Debug
-* 
-* Class to collect data for the Smarty Debugging Consol
-* 
-* @package Smarty
-* @subpackage Debug
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Debug
+ * 
+ * Class to collect data for the Smarty Debugging Consol
+ * 
+ * @package Smarty
+ * @subpackage Debug
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Debug Class
-*/
+ * Smarty Internal Plugin Debug Class
+ */
 class Smarty_Internal_Debug extends Smarty_Internal_Data {
     // template data
     static $template_data = array();
 
     /**
-    * Start logging of compile time
-    */
+     * Start logging of compile time
+     */
     public static function start_compile($template)
     {
         $key = self::get_key($template);
-        self::$template_data[$key]['start_time'] = self::get_time();
+        self::$template_data[$key]['start_time'] = microtime(true);
     } 
 
     /**
-    * End logging of compile time
-    */
+     * End logging of compile time
+     */
     public static function end_compile($template)
     {
         $key = self::get_key($template);
-        self::$template_data[$key]['compile_time'] += self::get_time() - self::$template_data[$key]['start_time'];
+        self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time'];
     } 
 
     /**
-    * Start logging of render time
-    */
+     * Start logging of render time
+     */
     public static function start_render($template)
     {
         $key = self::get_key($template);
-        self::$template_data[$key]['start_time'] = self::get_time();
+        self::$template_data[$key]['start_time'] = microtime(true);
     } 
 
     /**
-    * End logging of compile time
-    */
+     * End logging of compile time
+     */
     public static function end_render($template)
     {
         $key = self::get_key($template);
-        self::$template_data[$key]['render_time'] += self::get_time() - self::$template_data[$key]['start_time'];
+        self::$template_data[$key]['render_time'] += microtime(true) - self::$template_data[$key]['start_time'];
     } 
 
     /**
-    * Start logging of cache time
-    */
+     * Start logging of cache time
+     */
     public static function start_cache($template)
     {
         $key = self::get_key($template);
-        self::$template_data[$key]['start_time'] = self::get_time();
+        self::$template_data[$key]['start_time'] = microtime(true);
     } 
 
     /**
-    * End logging of cache time
-    */
+     * End logging of cache time
+     */
     public static function end_cache($template)
     {
         $key = self::get_key($template);
-        self::$template_data[$key]['cache_time'] += self::get_time() - self::$template_data[$key]['start_time'];
+        self::$template_data[$key]['cache_time'] += microtime(true) - self::$template_data[$key]['start_time'];
     } 
     /**
-    * Opens a window for the Smarty Debugging Consol and display the data
-    */
+     * Opens a window for the Smarty Debugging Consol and display the data
+     */
     public static function display_debug($smarty)
     { 
         // prepare information of assigned variables
@@ -79,6 +80,10 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
         ksort($_assigned_vars);
         $_config_vars = $smarty->config_vars;
         ksort($_config_vars);
+        $ldelim = $smarty->left_delimiter;
+        $rdelim = $smarty->right_delimiter;
+        $smarty->left_delimiter = '{';
+        $smarty->right_delimiter = '}';
         $_template = new Smarty_Template ($smarty->debug_tpl, $smarty);
         $_template->caching = false;
         $_template->force_compile = false;
@@ -88,15 +93,17 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
         $_template->assign('template_data', self::$template_data);
         $_template->assign('assigned_vars', $_assigned_vars);
         $_template->assign('config_vars', $_config_vars);
-        $_template->assign('execution_time', $smarty->_get_time() - $smarty->start_time);
+        $_template->assign('execution_time', microtime(true) - $smarty->start_time);
         echo $smarty->fetch($_template);
+        $smarty->left_delimiter = $ldelim;
+        $smarty->right_delimiter = $rdelim;
     } 
 
     /**
-    * get_key
-    */
+     * get_key
+     */
     static function get_key($template)
-    {
+    { 
         // calculate Uid if not already done
         if ($template->templateUid == '') {
             $template->getTemplateFilepath();
@@ -112,18 +119,6 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
             return $key;
         } 
     } 
-
-    /**
-    * return current time
-    * 
-    * @returns double current time
-    */
-    static function get_time()
-    {
-        $_mtime = microtime();
-        $_mtime = explode(" ", $_mtime);
-        return (double)($_mtime[1]) + (double)($_mtime[0]);
-    } 
 } 
 
-?>
+?>
\ No newline at end of file
index 0ab058cbb51143ce7cb6e57ab611832b0f8e3e87..1992b55e9ea96b82c68c787a4bd56f656586c31e 100644 (file)
@@ -44,7 +44,7 @@ class Smarty_Internal_Filter_Handler {
                         } 
                     } else {
                         // nothing found, throw exception
-                        throw new Exception("Unable to load filter {$plugin_name}");
+                        throw new SmartyException("Unable to load filter {$plugin_name}");
                     } 
                 } 
             } 
index 48bee427db57e793fc6ec9b41b1726c1d1456fc3..543c77b4725085b564bca4b9f37343656a34f800 100644 (file)
@@ -6,6 +6,7 @@
  * @subpackage PluginsInternal\r
  * @author Uwe Tews \r
  */\r
+\r
 /**\r
  * This class does call function defined with the {function} tag\r
  */\r
@@ -20,8 +21,8 @@ class Smarty_Internal_Function_Call_Handler extends Smarty_Internal_Template {
         } \r
         if (!is_callable($_function)) {\r
             $_code = "function {$_function}(\$_smarty_tpl,\$params) {\r
-       \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\r
-       foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";\r
+    \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\r
+    foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";\r
             if ($_nocache) {\r
                 $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!",\r
                         "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']);\r
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php b/gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php
new file mode 100644 (file)
index 0000000..ae11a7c
--- /dev/null
@@ -0,0 +1,49 @@
+<?php\r
+\r
+/**\r
+ * Smarty Internal Plugin Nocache Insert\r
+ * \r
+ * Compiles the {insert} tag into the cache file\r
+ * \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
+\r
+/**\r
+ * Smarty Internal Plugin Compile Insert Class\r
+ */\r
+class Smarty_Internal_Nocache_Insert {\r
+    /**\r
+     * Compiles code for the {insert} tag into cache file\r
+     * \r
+     * @param string $_function insert function name\r
+     * @param array $_attr array with paramter\r
+     * @param object $template template object\r
+     * @param string $_script script name to load or 'null'\r
+     * @param string $_assign soptinal variable name\r
+     * @return string compiled code\r
+     */\r
+    static function compile($_function, $_attr, $_template, $_script, $_assign = null)\r
+    {\r
+        $_output = '<?php ';\r
+        if ($_script != 'null') {\r
+            // script which must be included\r
+            // code for script file loading\r
+            $_output .= "require_once '{$_script}';";\r
+        } \r
+        // call insert\r
+        if (isset($_assign)) {\r
+            $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl->smarty,\$_smarty_tpl), true);?>";\r
+        } else {\r
+            $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl->smarty,\$_smarty_tpl);?>";\r
+        } \r
+        $_tpl = $_template;\r
+        while ($_tpl->parent instanceof Smarty_Internal_Template) {\r
+            $_tpl = $_tpl->parent;\r
+        } \r
+        return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
index bba83dbad92f6efb77cad2477f89d8a2b196bb72..d3bcb22db318105a826d1bdcb40b36b0691cd964 100644 (file)
@@ -1,12 +1,24 @@
 <?php\r
-\r
+/**\r
+ * Smarty Internal Plugin Templateparser Parsetrees\r
+ * \r
+ * These are classes to build parsetrees in the template parser\r
+ * \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Thue Kristensen \r
+ * @author Uwe Tews \r
+ */\r
\r
 abstract class _smarty_parsetree {\r
   abstract public function to_smarty_php();\r
 }\r
 \r
-/* A complete smarty tag. */\r
-\r
-class _smarty_tag extends _smarty_parsetree {\r
+/**\r
+ * A complete smarty tag.\r
+ */\r
+class _smarty_tag extends _smarty_parsetree\r
+{\r
     public $parser;\r
     public $data;\r
     public $saved_block_nesting;\r
@@ -31,7 +43,9 @@ class _smarty_tag extends _smarty_parsetree {
     } \r
 } \r
 \r
-/* Code fragment inside a tag. */\r
+/**\r
+ * Code fragment inside a tag.\r
+ */\r
 class _smarty_code extends _smarty_parsetree {\r
     public $parser;\r
     public $data;\r
@@ -47,7 +61,9 @@ class _smarty_code extends _smarty_parsetree {
     } \r
 } \r
 \r
-/* Double quoted string inside a tag. */\r
+/**\r
+ * Double quoted string inside a tag.\r
+ */\r
 class _smarty_doublequoted extends _smarty_parsetree {\r
     public $parser;\r
     public $subtrees = Array();\r
@@ -66,6 +82,8 @@ class _smarty_doublequoted extends _smarty_parsetree {
         if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {\r
             if ($subtree instanceof _smarty_code) {\r
                 $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';\r
+            } elseif ($subtree instanceof _smarty_dq_content) {\r
+                $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';\r
             } else {\r
                 $this->subtrees[$last_subtree]->data .= $subtree->data;\r
             } \r
@@ -96,13 +114,13 @@ class _smarty_doublequoted extends _smarty_parsetree {
                 $this->parser->compiler->has_variable_string = true;\r
             } \r
         } \r
-\r
-//        $code = sprintf("(%s)", $code);\r
         return $code;\r
     } \r
 } \r
 \r
-/* Raw chars as part of a double quoted string. */\r
+/**\r
+ * Raw chars as part of a double quoted string.\r
+ */\r
 class _smarty_dq_content extends _smarty_parsetree {\r
     public $data;\r
     function __construct($parser, $data)\r
@@ -117,5 +135,102 @@ class _smarty_dq_content extends _smarty_parsetree {
     } \r
 } \r
 \r
+/**\r
+ * Template element\r
+ */\r
+class _smarty_template_buffer extends _smarty_parsetree {\r
+    public $subtrees = Array();\r
+    function __construct($parser)\r
+    {\r
+        $this->parser = $parser;\r
+    } \r
+\r
+    function append_subtree(_smarty_parsetree $subtree)\r
+    {\r
+        $this->subtrees[] = $subtree;\r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        $code = '';\r
+        for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {\r
+            if ($key + 2 < $cnt) {\r
+                if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {\r
+                    $key = $key + 1;\r
+                    continue;\r
+                } \r
+                if (substr($this->subtrees[$key]->data, -1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, -1) == '?') {\r
+                    $key = $key + 2;\r
+                    continue;\r
+                } \r
+            } \r
+            if (substr($code, -1) == '<') {\r
+                $subtree = $this->subtrees[$key]->to_smarty_php();\r
+                if (substr($subtree, 0, 1) == '?') {\r
+                    $code = substr($code, 0, strlen($code)-1) . '<<?php ?>?' . substr($subtree, 1);\r
+                } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') {\r
+                    $code = substr($code, 0, strlen($code)-1) . '<<?php ?>%' . substr($subtree, 1);\r
+           } else {\r
+                    $code .= $subtree;\r
+                } \r
+                continue;\r
+            } \r
+            if ($this->parser->asp_tags && substr($code, -1) == '%') {\r
+                $subtree = $this->subtrees[$key]->to_smarty_php();\r
+                if (substr($subtree, 0, 1) == '>') {\r
+                    $code = substr($code, 0, strlen($code)-1) . '%<?php ?>>' . substr($subtree, 1);\r
+           } else {\r
+                    $code .= $subtree;\r
+                } \r
+                continue;\r
+            } \r
+            if (substr($code, -1) == '?') {\r
+                $subtree = $this->subtrees[$key]->to_smarty_php();\r
+                if (substr($subtree, 0, 1) == '>') {\r
+                    $code = substr($code, 0, strlen($code)-1) . '?<?php ?>>' . substr($subtree, 1);\r
+           } else {\r
+                    $code .= $subtree;\r
+                } \r
+                continue;\r
+            } \r
+            $code .= $this->subtrees[$key]->to_smarty_php();\r
+        } \r
+        return $code;\r
+    } \r
+}\r
+\r
+/**\r
+ * template text\r
+ */\r
+class _smarty_text extends _smarty_parsetree {\r
+    public $data;\r
+    function __construct($parser, $data)\r
+    {\r
+        $this->parser = $parser;\r
+        $this->data = $data;\r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        return $this->data;\r
+    } \r
+} \r
+\r
+/**\r
+ * template linebreaks\r
+ */\r
+class _smarty_linebreak extends _smarty_parsetree {\r
+    public $data;\r
+    function __construct($parser, $data)\r
+    {\r
+        $this->parser = $parser;\r
+        $this->data = $data;\r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        return $this->data;\r
+    } \r
+} \r
 \r
 ?>
\ No newline at end of file
index fb43d6fcf0e314f42952a32009f82de9e1c6d4d6..a1e3acd0f287b68be9f59e653ef4736b860200e6 100644 (file)
 <?php
 
 /**
-* Project:     Smarty: the PHP compiling template engine
-* File:        smarty_internal_register.php
-* SVN:         $Id: $
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-* 
-* For questions, help, comments, discussion, etc., please join the
-* Smarty mailing list. Send a blank e-mail to
-* smarty-discussion-subscribe@googlegroups.com
-* 
-* @link http://www.smarty.net/
-* @copyright 2008 New Digital Group, Inc.
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author Uwe Tews 
-* @package Smarty
-* @subpackage PluginsInternal
-* @version 3-SVN$Rev: 3286 $
-*/
+ * Project:     Smarty: the PHP compiling template engine
+ * File:        smarty_internal_register.php
+ * SVN:         $Id: $
+ 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ * For questions, help, comments, discussion, etc., please join the
+ * Smarty mailing list. Send a blank e-mail to
+ * smarty-discussion-subscribe@googlegroups.com
+ 
+ * @link http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author Uwe Tews 
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @version 3-SVN$Rev: 3286 $
+ */
 
 class Smarty_Internal_Register {
-  
     protected $smarty;
 
-    function __construct($smarty) {
-      $this->smarty = $smarty;
-    }
-    
+    function __construct($smarty)
+    {
+        $this->smarty = $smarty;
+    } 
+
     /**
-    * Registers block function to be used in templates
-    * 
-    * @param string $block_tag name of template block
-    * @param string $block_impl PHP function to register
-    * @param boolean $cacheable if true (default) this fuction is cachable
-    * @param array $cache_attr caching attributes if any
-    */
+     * Registers block function to be used in templates
+     
+     * @param string $block_tag name of template block
+     * @param string $block_impl PHP function to register
+     * @param boolean $cacheable if true (default) this fuction is cachable
+     * @param array $cache_attr caching attributes if any
+     */
     function block($block_tag, $block_impl, $cacheable = true, $cache_attr = array())
     {
         if (isset($this->smarty->registered_plugins['block'][$block_tag])) {
-            throw new Exception("Plugin tag \"{$block_tag}\" already registered");
+            throw new SmartyException("Plugin tag \"{$block_tag}\" already registered");
         } elseif (!is_callable($block_impl)) {
-            throw new Exception("Plugin \"{$block_tag}\" not callable");
+            throw new SmartyException("Plugin \"{$block_tag}\" not callable");
         } else {
             $this->smarty->registered_plugins['block'][$block_tag] =
             array($block_impl, $cacheable, $cache_attr);
         } 
-    }
-    
+    } 
+
     /**
-    * Registers compiler function
-    * 
-    * @param string $compiler_tag of template function
-    * @param string $compiler_impl name of PHP function to register
-    * @param boolean $cacheable if true (default) this fuction is cachable
-    */
+     * Registers compiler function
+     
+     * @param string $compiler_tag of template function
+     * @param string $compiler_impl name of PHP function to register
+     * @param boolean $cacheable if true (default) this fuction is cachable
+     */
     function compilerFunction($compiler_tag, $compiler_impl, $cacheable = true)
     {
         if (isset($this->smarty->registered_plugins['compiler'][$compiler_tag])) {
-            throw new Exception("Plugin tag \"{$compiler_tag}\" already registered");
+            throw new SmartyException("Plugin tag \"{$compiler_tag}\" already registered");
         } elseif (!is_callable($compiler_impl)) {
-            throw new Exception("Plugin \"{$compiler_tag}\" not callable");
+            throw new SmartyException("Plugin \"{$compiler_tag}\" not callable");
         } else {
             $this->smarty->registered_plugins['compiler'][$compiler_tag] =
             array($compiler_impl, $cacheable);
         } 
-    }
-    
+    } 
+
     /**
-    * Registers custom function to be used in templates
-    * 
-    * @param string $function_tag the name of the template function
-    * @param string $function_impl the name of the PHP function to register
-    * @param boolean $cacheable if true (default) this fuction is cachable
-    * @param array $cache_attr caching attributes if any
-    */
+     * Registers custom function to be used in templates
+     
+     * @param string $function_tag the name of the template function
+     * @param string $function_impl the name of the PHP function to register
+     * @param boolean $cacheable if true (default) this fuction is cachable
+     * @param array $cache_attr caching attributes if any
+     */
     function templateFunction($function_tag, $function_impl, $cacheable = true, $cache_attr = array())
     {
         if (isset($this->smarty->registered_plugins['function'][$function_tag])) {
-            throw new Exception("Plugin tag \"{$function_tag}\" already registered");
+            throw new SmartyException("Plugin tag \"{$function_tag}\" already registered");
         } elseif (!is_callable($function_impl)) {
-            throw new Exception("Plugin \"{$function_tag}\" not callable");
+            throw new SmartyException("Plugin \"{$function_tag}\" not callable");
         } else {
             $this->smarty->registered_plugins['function'][$function_tag] =
             array($function_impl, $cacheable, $cache_attr);
         } 
-    }
-    
+    } 
+
     /**
-    * Registers modifier to be used in templates
-    * 
-    * @param string $modifier_name name of template modifier
-    * @param string $modifier_impl name of PHP function to register
-    */
+     * Registers modifier to be used in templates
+     
+     * @param string $modifier_name name of template modifier
+     * @param string $modifier_impl name of PHP function to register
+     */
     function modifier($modifier_name, $modifier_impl)
     {
         if (isset($this->smarty->registered_plugins['modifier'][$modifier_name])) {
-            throw new Exception("Plugin \"{$modifier_name}\" already registered");
+            throw new SmartyException("Plugin \"{$modifier_name}\" already registered");
         } elseif (!is_callable($modifier_impl)) {
-            throw new Exception("Plugin \"{$modifier_name}\" not callable");
+            throw new SmartyException("Plugin \"{$modifier_name}\" not callable");
         } else {
             $this->smarty->registered_plugins['modifier'][$modifier_name] =
             array($modifier_impl);
         } 
     } 
-    
+
     /**
-    * Registers object to be used in templates
-    * 
-    * @param string $object name of template object
-    * @param object $ &$object_impl the referenced PHP object to register
-    * @param mixed null | array $allowed list of allowed methods (empty = all)
-    * @param boolean $smarty_args smarty argument format, else traditional
-    * @param mixed null | array $block_functs list of methods that are block format
-    */
+     * Registers object to be used in templates
+     
+     * @param string $object name of template object
+     * @param object $ &$object_impl the referenced PHP object to register
+     * @param mixed $ null | array $allowed list of allowed methods (empty = all)
+     * @param boolean $smarty_args smarty argument format, else traditional
+     * @param mixed $ null | array $block_functs list of methods that are block format
+     */
     function templateObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
     { 
         // test if allowed methodes callable
         if (!empty($allowed)) {
             foreach ((array)$allowed as $method) {
                 if (!is_callable(array($object_impl, $method))) {
-                    throw new Exception("Undefined method '$method' in registered object");
+                    throw new SmartyException("Undefined method '$method' in registered object");
                 } 
             } 
         } 
@@ -140,7 +140,7 @@ class Smarty_Internal_Register {
         if (!empty($block_methods)) {
             foreach ((array)$block_methods as $method) {
                 if (!is_callable(array($object_impl, $method))) {
-                    throw new Exception("Undefined method '$method' in registered object");
+                    throw new SmartyException("Undefined method '$method' in registered object");
                 } 
             } 
         } 
@@ -148,46 +148,62 @@ class Smarty_Internal_Register {
         $this->smarty->registered_objects[$object_name] =
         array($object_impl, (array)$allowed, (boolean)$smarty_args, (array)$block_methods);
     } 
-    
+
     /**
-    * Registers an output filter function to apply
-    * to a template output
-    * 
-    * @param callback $function_name 
-    */
+     * Registers static classes to be used in templates
+     * 
+     * @param string $class name of template class
+     * @param string $class_impl the referenced PHP class to register
+     */
+    function templateClass($class_name, $class_impl)
+    { 
+        // test if exists
+        if (!class_exists($class_impl)) {
+            throw new SmartyException("Undefined class '$class_impl' in register template class");
+        } 
+        // register the class
+        $this->smarty->registered_classes[$class_name] = $class_impl;
+    } 
+
+    /**
+     * Registers an output filter function to apply
+     * to a template output
+     * 
+     * @param callback $function_name 
+     */
     function outputFilter($function_name)
     {
         $this->smarty->registered_filters['output'][$this->smarty->_get_filter_name($function_name)] = $function_name;
-    }
-    
+    } 
+
     /**
-    * Registers a postfilter function to apply
-    * to a compiled template after compilation
-    * 
-    * @param callback $function_name 
-    */
+     * Registers a postfilter function to apply
+     * to a compiled template after compilation
+     
+     * @param callback $function_name 
+     */
     function postFilter($function_name)
     {
         $this->smarty->registered_filters['post'][$this->smarty->_get_filter_name($function_name)] = $function_name;
     } 
-    
+
     /**
-    * Registers a prefilter function to apply
-    * to a template before compiling
-    * 
-    * @param callback $function_name 
-    */
+     * Registers a prefilter function to apply
+     * to a template before compiling
+     
+     * @param callback $function_name 
+     */
     function preFilter($function_name)
     {
         $this->smarty->registered_filters['pre'][$this->smarty->_get_filter_name($function_name)] = $function_name;
-    }    
-    
+    } 
+
     /**
-    * Registers a resource to fetch a template
-    * 
-    * @param string $resource_type name of resource type
-    * @param array $function_names array of functions to handle resource
-    */
+     * Registers a resource to fetch a template
+     
+     * @param string $resource_type name of resource type
+     * @param array $function_names array of functions to handle resource
+     */
     function resource($resource_type, $function_names)
     {
         if (count($function_names) == 4) {
@@ -196,52 +212,53 @@ class Smarty_Internal_Register {
         } elseif (count($function_names) == 5) {
             $this->smarty->_plugins['resource'][$resource_type] =
             array(array(array(&$function_names[0], $function_names[1]),
-              array(&$function_names[0], $function_names[2]),
-              array(&$function_names[0], $function_names[3]),
-              array(&$function_names[0], $function_names[4])),
-              false);
+                    array(&$function_names[0], $function_names[2]),
+                    array(&$function_names[0], $function_names[3]),
+                    array(&$function_names[0], $function_names[4])),
+                false);
         } else {
-            throw new Exception("malformed function-list for '$resource_type' in register_resource");
+            throw new SmartyException("malformed function-list for '$resource_type' in register_resource");
         } 
     } 
-    
+
     /**
-    * Registers an output filter function which
-    * runs over any variable output
-    * 
-    * @param callback $function_name 
-    */
+     * Registers an output filter function which
+     * runs over any variable output
+     
+     * @param callback $function_name 
+     */
     function variableFilter($function_name)
     {
         $this->smarty->registered_filters['variable'][$this->smarty->_get_filter_name($function_name)] = $function_name;
-    }    
-    
+    } 
+
     /**
-    * Registers a default plugin handler
-    * 
-    * @param $function_name mixed string | array $plugin class/methode name
-    */
+     * Registers a default plugin handler
+     
+     * @param  $function_name mixed string | array $plugin class/methode name
+     */
     function defaultPluginHandler($function_name)
     {
         if (is_callable($function_name)) {
             $this->smarty->default_plugin_handler_func = $function_name;
         } else {
-            throw new Exception("Default plugin handler '$function_name' not callable");
+            throw new SmartyException("Default plugin handler '$function_name' not callable");
         } 
-    }     
+    } 
 
     /**
-    * Registers a default template handler
-    * 
-    * @param $function_name mixed string | array class/method name
-    */
+     * Registers a default template handler
+     
+     * @param  $function_name mixed string | array class/method name
+     */
     function defaultTemplateHandler($function_name)
     {
         if (is_callable($function_name)) {
             $this->smarty->default_template_handler_func = $function_name;
         } else {
-            throw new Exception("Default template handler '$function_name' not callable");
+            throw new SmartyException("Default template handler '$function_name' not callable");
         } 
-    }    
-    
+    } 
 }
+
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_eval.php b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_eval.php
new file mode 100644 (file)
index 0000000..2eb2085
--- /dev/null
@@ -0,0 +1,90 @@
+<?php\r
+\r
+/**\r
+ * Smarty Internal Plugin Resource Eval\r
+ * \r
+ * Implements the strings as resource for Smarty template\r
+ * \r
+ * @package Smarty\r
+ * @subpackage TemplateResources\r
+ * @author Uwe Tews \r
+ */\r
\r
+/**\r
+ * Smarty Internal Plugin Resource Eval\r
+ */\r
+class Smarty_Internal_Resource_Eval {\r
+    public function __construct($smarty)\r
+    {\r
+        $this->smarty = $smarty;\r
+    } \r
+    // classes used for compiling Smarty templates from file resource\r
+    public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';\r
+    public $template_lexer_class = 'Smarty_Internal_Templatelexer';\r
+    public $template_parser_class = 'Smarty_Internal_Templateparser';\r
+    // properties\r
+    public $usesCompiler = true;\r
+    public $isEvaluated = true;\r
+\r
+    /**\r
+     * Return flag if template source is existing\r
+     * \r
+     * @return boolean true\r
+     */\r
+    public function isExisting($template)\r
+    {\r
+        return true;\r
+    } \r
+\r
+    /**\r
+     * Get filepath to template source\r
+     * \r
+     * @param object $_template template object\r
+     * @return string return 'string' as template source is not a file\r
+     */\r
+    public function getTemplateFilepath($_template)\r
+    { \r
+        // no filepath for evaluated strings\r
+        // return "string" for compiler error messages\r
+        return 'eval:';\r
+    } \r
+\r
+    /**\r
+     * Get timestamp to template source\r
+     * \r
+     * @param object $_template template object\r
+     * @return boolean false as string resources have no timestamp\r
+     */\r
+    public function getTemplateTimestamp($_template)\r
+    { \r
+        // evaluated strings must always be compiled and have no timestamp\r
+        return false;\r
+    } \r
+\r
+    /**\r
+     * Retuen template source from resource name\r
+     * \r
+     * @param object $_template template object\r
+     * @return string content of template source\r
+     */\r
+    public function getTemplateSource($_template)\r
+    { \r
+        // return template string\r
+        $_template->template_source = $_template->resource_name;\r
+        return true;\r
+    } \r
+\r
+    /**\r
+     * Get filepath to compiled template\r
+     * \r
+     * @param object $_template template object\r
+     * @return boolean return false as compiled template is not stored\r
+     */\r
+    public function getCompiledFilepath($_template)\r
+    { \r
+        // no filepath for strings\r
+        return false;\r
+    } \r
+} \r
+\r
+?>
\ No newline at end of file
index 444907586385611ff71a598b7167ddacfbaa6fde..c263f8ac301a171adac4ac66b6e2d6c1dd25cdc8 100644 (file)
@@ -9,6 +9,7 @@
  * @subpackage TemplateResources
  * @author Uwe Tews 
  */
+
 /**
  * Smarty Internal Plugin Resource Extends
  */
@@ -36,11 +37,13 @@ class Smarty_Internal_Resource_Extends {
      */
     public function isExisting($_template)
     {
-        if ($_template->getTemplateFilepath() === false) {
+         $_template->getTemplateFilepath();
+         foreach ($this->allFilepaths as $_filepath) {
+               if ($_filepath === false) {
             return false;
-        } else {
-            return true;
-        } 
+          }
+        }
+        return true;
     } 
     /**
      * Get filepath to template source
@@ -60,7 +63,7 @@ class Smarty_Internal_Resource_Extends {
                 } 
             } 
             $sha1String .= $_filepath;
-            $this->allFilepaths[] = $_filepath;
+            $this->allFilepaths[$_file] = $_filepath;
         } 
         $_template->templateUid = sha1($sha1String);
         return $_filepath;
@@ -87,17 +90,19 @@ class Smarty_Internal_Resource_Extends {
     {
         $this->template = $_template;
         $_files = array_reverse($this->allFilepaths);
-        foreach ($_files as $_filepath) {
+               $_first = reset($_files);
+               $_last = end($_files);
+        foreach ($_files as $_file => $_filepath) {
+                       if ($_filepath === false) {
+                       throw new SmartyException("Unable to load template 'file : {$_file}'");
+                       }
             // read template file
-            if ($_filepath === false) {
-                throw new Exception("Unable to load template 'file : {$_file}'");
-            } 
-            if ($_filepath != $_files[0]) {
+            if ($_filepath != $_first) {
                 $_template->properties['file_dependency'][sha1($_filepath)] = array($_filepath, filemtime($_filepath));
             } 
             $_template->template_filepath = $_filepath;
             $_content = file_get_contents($_filepath);
-            if ($_filepath != $_files[count($_files)-1]) {
+            if ($_filepath != $_last) {
                 if (preg_match_all("!({$this->_ldl}block\s(.+?){$this->_rdl})!", $_content, $_open) !=
                         preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $_close)) {
                     $this->smarty->trigger_error("unmatched {block} {/block} pairs in file '$_filepath'");
@@ -118,7 +123,7 @@ class Smarty_Internal_Resource_Extends {
                     } 
                     $_block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.parent' . $this->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
                         substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0])));
-                    $this->saveBlockData($_block_content, $_result[0][$_start][0], $_filepath);
+                    $this->saveBlockData($_block_content, $_result[0][$_start][0], $_filepath, $_template);
                     $_start = $_start + $_end + 1;
                 } 
             } else {
@@ -126,45 +131,48 @@ class Smarty_Internal_Resource_Extends {
                 return true;
             } 
         } 
-        // $_template->template_filepath = $saved_filepath;
-    } 
-    protected function saveBlockData($block_content, $block_tag, $_filepath)
+    }
+    
+    /**
+     * saveBlockData
+     */    
+    protected function saveBlockData($block_content, $block_tag, $_filepath, $_template)
     {
         if (0 == preg_match("!(.?)(name=)(.*?)(?=(\s|{$this->_rdl}))!", $block_tag, $_match)) {
             $this->smarty->trigger_error("'{$block_tag}' missing name attribute in file '$_filepath'");
         } else {
             $_name = trim($_match[3], '\'"');
-          // replace {$smarty.block.child} 
+       // replace {$smarty.block.child} 
             if (strpos($block_content, $this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter) !== false) {
-                if (isset($this->smarty->block_data[$_name])) {
+                if (isset($_template->block_data[$_name])) {
                     $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
-                        $this->smarty->block_data[$_name]['source'], $block_content);
-                    unset($this->smarty->block_data[$_name]);
+                        $_template->block_data[$_name]['source'], $block_content);
+                    unset($_template->block_data[$_name]);
                 } else {
                     $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
                         '', $block_content);
                 } 
             } 
-            if (isset($this->smarty->block_data[$_name])) {
-                if (strpos($this->smarty->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
-                    $this->smarty->block_data[$_name]['source'] =
-                    str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $this->smarty->block_data[$_name]['source']);
-                } elseif ($this->smarty->block_data[$_name]['mode'] == 'prepend') {
-                    $this->smarty->block_data[$_name]['source'] .= $block_content;
-                } elseif ($this->smarty->block_data[$_name]['mode'] == 'append') {
-                    $this->smarty->block_data[$_name]['source'] = $block_content . $this->smarty->block_data[$_name]['source'];
+            if (isset($_template->block_data[$_name])) {
+                if (strpos($_template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
+                    $_template->block_data[$_name]['source'] =
+                    str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $_template->block_data[$_name]['source']);
+                } elseif ($_template->block_data[$_name]['mode'] == 'prepend') {
+                    $_template->block_data[$_name]['source'] .= $block_content;
+                } elseif ($_template->block_data[$_name]['mode'] == 'append') {
+                    $_template->block_data[$_name]['source'] = $block_content . $_template->block_data[$_name]['source'];
                 } 
             } else {
-                $this->smarty->block_data[$_name]['source'] = $block_content;
+                $_template->block_data[$_name]['source'] = $block_content;
             } 
             if (preg_match('/(.?)(append)(.*)/', $block_tag, $_match) != 0) {
-                $this->smarty->block_data[$_name]['mode'] = 'append';
+                $_template->block_data[$_name]['mode'] = 'append';
             } elseif (preg_match('/(.?)(prepend)(.*)/', $block_tag, $_match) != 0) {
-                $this->smarty->block_data[$_name]['mode'] = 'prepend';
+                $_template->block_data[$_name]['mode'] = 'prepend';
             } else {
-                $this->smarty->block_data[$_name]['mode'] = 'replace';
+                $_template->block_data[$_name]['mode'] = 'replace';
             } 
-            $this->smarty->block_data[$_name]['file'] = $_filepath;
+            $_template->block_data[$_name]['file'] = $_filepath;
         } 
     } 
 
index b84f5807308ecadacc387183596211ffa2fb206e..abdd6c5a47fd084e3e6effff893ffd02414d0d31 100644 (file)
@@ -1,17 +1,18 @@
 <?php
 
 /**
-* Smarty Internal Plugin Resource File
-* 
-* Implements the file system as resource for Smarty templates
-* 
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews 
-*/
-/**
-* Smarty Internal Plugin Resource File
-*/
+ * Smarty Internal Plugin Resource File
+ * 
+ * Implements the file system as resource for Smarty templates
+ * 
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews 
+ */
+
+/** 
+ * Smarty Internal Plugin Resource File
+ */
 class Smarty_Internal_Resource_File {
     public function __construct($smarty)
     {
@@ -26,10 +27,10 @@ class Smarty_Internal_Resource_File {
     public $isEvaluated = false;
 
     /**
-    * Return flag if template source is existing
-    * 
-    * @return boolean true
-    */
+     * Return flag if template source is existing
+     
+     * @return boolean true
+     */
     public function isExisting($template)
     {
         if ($template->getTemplateFilepath() === false) {
@@ -40,11 +41,11 @@ class Smarty_Internal_Resource_File {
     } 
 
     /**
-    * Get filepath to template source
-    * 
-    * @param object $_template template object
-    * @return string filepath to template source file
-    */
+     * Get filepath to template source
+     
+     * @param object $_template template object
+     * @return string filepath to template source file
+     */
     public function getTemplateFilepath($_template)
     {
         $_filepath = $_template->buildTemplateFilepath ();
@@ -59,22 +60,22 @@ class Smarty_Internal_Resource_File {
     } 
 
     /**
-    * Get timestamp to template source
-    * 
-    * @param object $_template template object
-    * @return integer timestamp of template source file
-    */
+     * Get timestamp to template source
+     
+     * @param object $_template template object
+     * @return integer timestamp of template source file
+     */
     public function getTemplateTimestamp($_template)
     {
         return filemtime($_template->getTemplateFilepath());
     } 
 
     /**
-    * Read template source from file
-    * 
-    * @param object $_template template object
-    * @return string content of template source file
-    */
+     * Read template source from file
+     
+     * @param object $_template template object
+     * @return string content of template source file
+     */
     public function getTemplateSource($_template)
     { 
         // read template file
@@ -87,11 +88,11 @@ class Smarty_Internal_Resource_File {
     } 
 
     /**
-    * Get filepath to compiled template
-    * 
-    * @param object $_template template object
-    * @return string return path to compiled template
-    */
+     * Get filepath to compiled template
+     
+     * @param object $_template template object
+     * @return string return path to compiled template
+     */
     public function getCompiledFilepath($_template)
     {
         $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
@@ -124,4 +125,4 @@ class Smarty_Internal_Resource_File {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 93176c34d36a2aff21e2079ae1a5482dd22fa376..d0d285f659ab112f3883d7203d28a39d04b9ed08 100644 (file)
@@ -1,21 +1,22 @@
 <?php
 
 /**
-* Smarty Internal Plugin Resource PHP
-* 
-* Implements the file system as resource for PHP templates
-* 
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Resource PHP
+ * 
+ * Implements the file system as resource for PHP templates
+ * 
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews 
+ */
+
 /**
-* Smarty Internal Plugin Resource PHP
-*/
+ * Smarty Internal Plugin Resource PHP
+ */
 class Smarty_Internal_Resource_PHP {
     /**
-    * Class constructor, enable short open tags
-    */
+     * Class constructor, enable short open tags
+     */
     public function __construct($smarty)
     {
         $this->smarty = $smarty;
@@ -26,10 +27,10 @@ class Smarty_Internal_Resource_PHP {
     public $isEvaluated = false;
 
     /**
-    * Return flag if template source is existing
-    * 
-    * @return boolean true
-    */
+     * Return flag if template source is existing
+     
+     * @return boolean true
+     */
     public function isExisting($template)
     {
         if ($template->getTemplateFilepath() === false) {
@@ -40,11 +41,11 @@ class Smarty_Internal_Resource_PHP {
     } 
 
     /**
-    * Get filepath to template source
-    * 
-    * @param object $_template template object
-    * @return string filepath to template source file
-    */
+     * Get filepath to template source
+     
+     * @param object $_template template object
+     * @return string filepath to template source file
+     */
     public function getTemplateFilepath($_template)
     {
         $_filepath = $_template->buildTemplateFilepath ();
@@ -57,22 +58,22 @@ class Smarty_Internal_Resource_PHP {
     } 
 
     /**
-    * Get timestamp to template source
-    * 
-    * @param object $_template template object
-    * @return integer timestamp of template source file
-    */
+     * Get timestamp to template source
+     
+     * @param object $_template template object
+     * @return integer timestamp of template source file
+     */
     public function getTemplateTimestamp($_template)
     {
         return filemtime($_template->getTemplateFilepath());
     } 
 
     /**
-    * Read template source from file
-    * 
-    * @param object $_template template object
-    * @return string content of template source file
-    */
+     * Read template source from file
+     
+     * @param object $_template template object
+     * @return string content of template source file
+     */
     public function getTemplateSource($_template)
     {
         if (file_exists($_template->getTemplateFilepath())) {
@@ -83,13 +84,12 @@ class Smarty_Internal_Resource_PHP {
         } 
     } 
 
-
     /**
-    * Get filepath to compiled template
-    * 
-    * @param object $_template template object
-    * @return boolean return false as compiled template is not stored
-    */
+     * Get filepath to compiled template
+     
+     * @param object $_template template object
+     * @return boolean return false as compiled template is not stored
+     */
     public function getCompiledFilepath($_template)
     { 
         // no filepath for PHP templates
@@ -97,15 +97,15 @@ class Smarty_Internal_Resource_PHP {
     } 
 
     /**
-    * renders the PHP template
-    */
+     * renders the PHP template
+     */
     public function renderUncompiled($_smarty_template)
     {
         if (!$this->smarty->allow_php_templates) {
-            throw new Exception("PHP templates are disabled");
+            throw new SmartyException("PHP templates are disabled");
         } 
         if ($this->getTemplateFilepath($_smarty_template) === false) {
-            throw new Exception("Unable to load template \"{$_smarty_template->resource_type} : {$_smarty_template->resource_name}\"");
+            throw new SmartyException("Unable to load template \"{$_smarty_template->resource_type} : {$_smarty_template->resource_name}\"");
         } 
         // prepare variables
         $_smarty_ptr = $_smarty_template;
@@ -124,4 +124,4 @@ class Smarty_Internal_Resource_PHP {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 92347a178a1956912b820310600cdad2da3ecf39..d120d1790fe4c9c10bb5c809f10797addf34ffb6 100644 (file)
@@ -1,18 +1,18 @@
 <?php
 
 /**
-* Smarty Internal Plugin Resource Registered
-* 
-* Implements the registered resource for Smarty template
-* 
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Resource Registered
+ * 
+ * Implements the registered resource for Smarty template
+ * 
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Resource Registered
-*/
-
+ * Smarty Internal Plugin Resource Registered
+ */
 class Smarty_Internal_Resource_Registered {
     public function __construct($smarty)
     {
@@ -27,10 +27,10 @@ class Smarty_Internal_Resource_Registered {
     public $isEvaluated = false;
 
     /**
-    * Return flag if template source is existing
-    * 
-    * @return boolean true
-    */
+     * Return flag if template source is existing
+     
+     * @return boolean true
+     */
     public function isExisting($_template)
     {
         if (is_integer($_template->getTemplateTimestamp())) {
@@ -40,26 +40,24 @@ class Smarty_Internal_Resource_Registered {
         } 
     } 
     /**
-    * Get filepath to template source
-    * 
-    * @param object $_template template object
-    * @return string return 'string' as template source is not a file
-    */
+     * Get filepath to template source
+     
+     * @param object $_template template object
+     * @return string return 'string' as template source is not a file
+     */
     public function getTemplateFilepath($_template)
     { 
-        // no filepath for strings
-        // return "string" for compiler error messages
-           $_filepath = $_template->resource_type .':'.$_template->resource_name;
+        $_filepath = $_template->resource_type .':'.$_template->resource_name;
         $_template->templateUid = sha1($_filepath);
         return $_filepath;
- } 
   
 
     /**
-    * Get timestamp to template source
-    * 
-    * @param object $_template template object
-    * @return boolean false as string resources have no timestamp
-    */
+     * Get timestamp of template source
+     
+     * @param object $_template template object
+     * @return int  timestamp
+     */
     public function getTemplateTimestamp($_template)
     { 
         // return timestamp
@@ -67,13 +65,14 @@ class Smarty_Internal_Resource_Registered {
         call_user_func_array($this->smarty->_plugins['resource'][$_template->resource_type][0][1],
             array($_template->resource_name, &$time_stamp, $this->smarty));
         return is_numeric($time_stamp) ? (int)$time_stamp : $time_stamp;
-    } 
+    }
+     
     /**
-    * Get timestamp to template source by type and name
-    * 
-    * @param object $_template template object
-    * @return boolean false as string resources have no timestamp
-    */
+     * Get timestamp of template source by type and name
+     
+     * @param object $_template template object
+     * @return int  timestamp
+     */
     public function getTemplateTimestampTypeName($_resource_type, $_resource_name)
     { 
         // return timestamp
@@ -84,11 +83,11 @@ class Smarty_Internal_Resource_Registered {
     } 
 
     /**
-    * Retuen template source from resource name
-    * 
-    * @param object $_template template object
-    * @return string content of template source
-    */
+     * Retuen template source from resource name
+     
+     * @param object $_template template object
+     * @return string content of template source
+     */
     public function getTemplateSource($_template)
     { 
         // return template string
@@ -97,11 +96,11 @@ class Smarty_Internal_Resource_Registered {
     } 
 
     /**
-    * Get filepath to compiled template
-    * 
-    * @param object $_template template object
-    * @return boolean return false as compiled template is not stored
-    */
+     * Get filepath to compiled template
+     
+     * @param object $_template template object
+     * @return boolean return false as compiled template is not stored
+     */
     public function getCompiledFilepath($_template)
     { 
         $_compile_id =  isset($_template->compile_id) ? preg_replace('![^\w\|]+!','_',$_template->compile_id) : null;
@@ -134,4 +133,4 @@ class Smarty_Internal_Resource_Registered {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 2024a3a78ba930e08fa3fba869fb4171a35b8a9f..de2996e935dd20a8e2be0462655006e1a0e2824c 100644 (file)
@@ -1,18 +1,18 @@
 <?php
 
 /**
-* Smarty Internal Plugin Resource Stream
-* 
-* Implements the streams as resource for Smarty template
-* 
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Resource Stream
+ * 
+ * Implements the streams as resource for Smarty template
+ * 
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Resource Stream
-*/
-
+ * Smarty Internal Plugin Resource Stream
+ */
 class Smarty_Internal_Resource_Stream {
     public function __construct($smarty)
     {
@@ -27,10 +27,10 @@ class Smarty_Internal_Resource_Stream {
     public $isEvaluated = true;
 
     /**
-    * Return flag if template source is existing
-    * 
-    * @return boolean true
-    */
+     * Return flag if template source is existing
+     
+     * @return boolean true
+     */
     public function isExisting($template)
     {
         if ($template->getTemplateSource() == '') {
@@ -40,11 +40,11 @@ class Smarty_Internal_Resource_Stream {
         } 
     } 
     /**
-    * Get filepath to template source
-    * 
-    * @param object $_template template object
-    * @return string return 'string' as template source is not a file
-    */
+     * Get filepath to template source
+     
+     * @param object $_template template object
+     * @return string return 'string' as template source is not a file
+     */
     public function getTemplateFilepath($_template)
     { 
         // no filepath for strings
@@ -53,11 +53,11 @@ class Smarty_Internal_Resource_Stream {
     } 
 
     /**
-    * Get timestamp to template source
-    * 
-    * @param object $_template template object
-    * @return boolean false as string resources have no timestamp
-    */
+     * Get timestamp to template source
+     
+     * @param object $_template template object
+     * @return boolean false as string resources have no timestamp
+     */
     public function getTemplateTimestamp($_template)
     { 
         // strings must always be compiled and have no timestamp
@@ -65,11 +65,11 @@ class Smarty_Internal_Resource_Stream {
     } 
 
     /**
-    * Retuen template source from resource name
-    * 
-    * @param object $_template template object
-    * @return string content of template source
-    */
+     * Retuen template source from resource name
+     
+     * @param object $_template template object
+     * @return string content of template source
+     */
     public function getTemplateSource($_template)
     { 
         // return template string
@@ -84,11 +84,11 @@ class Smarty_Internal_Resource_Stream {
     } 
 
     /**
-    * Get filepath to compiled template
-    * 
-    * @param object $_template template object
-    * @return boolean return false as compiled template is not stored
-    */
+     * Get filepath to compiled template
+     
+     * @param object $_template template object
+     * @return boolean return false as compiled template is not stored
+     */
     public function getCompiledFilepath($_template)
     { 
         // no filepath for strings
@@ -96,4 +96,4 @@ class Smarty_Internal_Resource_Stream {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index ad519b3886728ebc9b907203c0c76727361df28e..9368f0406289469bad9f1e77c9b78e34ecef366f 100644 (file)
@@ -1,18 +1,18 @@
 <?php
 
 /**
-* Smarty Internal Plugin Resource String
-* 
-* Implements the strings as resource for Smarty template
-* 
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Resource String
+ * 
+ * Implements the strings as resource for Smarty template
+ * 
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Resource String
-*/
-
+ * Smarty Internal Plugin Resource String
+ */
 class Smarty_Internal_Resource_String {
     public function __construct($smarty)
     {
@@ -24,49 +24,67 @@ class Smarty_Internal_Resource_String {
     public $template_parser_class = 'Smarty_Internal_Templateparser';
     // properties
     public $usesCompiler = true;
-    public $isEvaluated = true;
+    public $isEvaluated = false;
 
     /**
-    * Return flag if template source is existing
-    * 
-    * @return boolean true
-    */
+     * Return flag if template source is existing
+     
+     * @return boolean true
+     */
     public function isExisting($template)
     {
         return true;
     } 
 
     /**
-    * Get filepath to template source
-    * 
-    * @param object $_template template object
-    * @return string return 'string' as template source is not a file
-    */
+     * Get filepath to template source
+     
+     * @param object $_template template object
+     * @return string return 'string' as template source is not a file
+     */
     public function getTemplateFilepath($_template)
     { 
+        $_template->templateUid = sha1($_template->resource_name);
         // no filepath for strings
         // return "string" for compiler error messages
-        return 'string';
+        return 'string:';
     } 
 
     /**
-    * Get timestamp to template source
-    * 
-    * @param object $_template template object
-    * @return boolean false as string resources have no timestamp
-    */
+     * Get timestamp to template source
+     
+     * @param object $_template template object
+     * @return boolean false as string resources have no timestamp
+     */
     public function getTemplateTimestamp($_template)
     { 
-        // strings must always be compiled and have no timestamp
-        return false;
+        if ($this->isEvaluated) {
+               //must always be compiled and have no timestamp
+               return false;
+        } else {
+               return 0;
+        }
     } 
 
     /**
-    * Retuen template source from resource name
-    * 
-    * @param object $_template template object
-    * @return string content of template source
-    */
+     * Get timestamp of template source by type and name
+     * 
+     * @param object $_template template object
+     * @return int  timestamp (always 0)
+     */
+    public function getTemplateTimestampTypeName($_resource_type, $_resource_name)
+    { 
+        // return timestamp 0
+        return 0;
+    } 
+
+
+    /**
+     * Retuen template source from resource name
+     * 
+     * @param object $_template template object
+     * @return string content of template source
+     */
     public function getTemplateSource($_template)
     { 
         // return template string
@@ -75,16 +93,41 @@ class Smarty_Internal_Resource_String {
     } 
 
     /**
-    * Get filepath to compiled template
-    * 
-    * @param object $_template template object
-    * @return boolean return false as compiled template is not stored
-    */
+     * Get filepath to compiled template
+     
+     * @param object $_template template object
+     * @return boolean return false as compiled template is not stored
+     */
     public function getCompiledFilepath($_template)
-    { 
-        // no filepath for strings
-        return false;
+    {
+        $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
+        // calculate Uid if not already done
+        if ($_template->templateUid == '') {
+            $_template->getTemplateFilepath();
+        } 
+        $_filepath = $_template->templateUid; 
+        // if use_sub_dirs, break file into directories
+        if ($_template->smarty->use_sub_dirs) {
+            $_filepath = substr($_filepath, 0, 2) . DS
+             . substr($_filepath, 2, 2) . DS
+             . substr($_filepath, 4, 2) . DS
+             . $_filepath;
+        } 
+        $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
+        if (isset($_compile_id)) {
+            $_filepath = $_compile_id . $_compile_dir_sep . $_filepath;
+        } 
+        if ($_template->caching) {
+            $_cache = '.cache';
+        } else {
+            $_cache = '';
+        } 
+        $_compile_dir = $_template->smarty->compile_dir;
+        if (strpos('/\\', substr($_compile_dir, -1)) === false) {
+            $_compile_dir .= DS;
+        } 
+        return $_compile_dir . $_filepath . '.' . $_template->resource_type . $_cache . '.php';
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 1833d4f870b0b1cb416cad4a6a285bd39e3ac2f4..daf567b283e473dd30ea010c7ac0ee22fb0b88d9 100644 (file)
@@ -1,26 +1,27 @@
 <?php
 /**
-* Smarty Internal Plugin Security Handler
-* 
-* @package Smarty
-* @subpackage Security
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Security Handler
+ * 
+ * @package Smarty
+ * @subpackage Security
+ * @author Uwe Tews 
+ */
 /**
-* This class contains all methods for security checking
-*/
+ * This class contains all methods for security checking
+ */
 class Smarty_Internal_Security_Handler {
     function __construct($smarty)
     {
         $this->smarty = $smarty;
     } 
     /**
-    * Check if PHP function is trusted.
-    * 
-    * @param string $function_name 
-    * @param object $compiler compiler object
-    * @return boolean true if function is trusted
-    */
+     * Check if PHP function is trusted.
+     
+     * @param string $function_name 
+     * @param object $compiler compiler object
+     * @return boolean true if function is trusted
+     */
     function isTrustedPhpFunction($function_name, $compiler)
     {
         if (empty($this->smarty->security_policy->php_functions) || in_array($function_name, $this->smarty->security_policy->php_functions)) {
@@ -32,12 +33,12 @@ class Smarty_Internal_Security_Handler {
     } 
 
     /**
-    * Check if static class is trusted.
-    * 
-    * @param string $class_name 
-    * @param object $compiler compiler object
-    * @return boolean true if class is trusted
-    */
+     * Check if static class is trusted.
+     
+     * @param string $class_name 
+     * @param object $compiler compiler object
+     * @return boolean true if class is trusted
+     */
     function isTrustedStaticClass($class_name, $compiler)
     {
         if (empty($this->smarty->security_policy->static_classes) || in_array($class_name, $this->smarty->security_policy->static_classes)) {
@@ -48,12 +49,12 @@ class Smarty_Internal_Security_Handler {
         } 
     } 
     /**
-    * Check if modifier is trusted.
-    * 
-    * @param string $modifier_name 
-    * @param object $compiler compiler object
-    * @return boolean true if modifier is trusted
-    */
+     * Check if modifier is trusted.
+     
+     * @param string $modifier_name 
+     * @param object $compiler compiler object
+     * @return boolean true if modifier is trusted
+     */
     function isTrustedModifier($modifier_name, $compiler)
     {
         if (empty($this->smarty->security_policy->modifiers) || in_array($modifier_name, $this->smarty->security_policy->modifiers)) {
@@ -64,29 +65,29 @@ class Smarty_Internal_Security_Handler {
         } 
     } 
     /**
-    * Check if stream is trusted.
-    * 
-    * @param string $stream_name 
-    * @param object $compiler compiler object
-    * @return boolean true if stream is trusted
-    */
+     * Check if stream is trusted.
+     
+     * @param string $stream_name 
+     * @param object $compiler compiler object
+     * @return boolean true if stream is trusted
+     */
     function isTrustedStream($stream_name)
     {
         if (empty($this->smarty->security_policy->streams) || in_array($stream_name, $this->smarty->security_policy->streams)) {
             return true;
         } else {
-            throw new Exception ("stream '{$stream_name}' not allowed by security setting");
+            throw new SmartyException ("stream '{$stream_name}' not allowed by security setting");
             return false;
         } 
     } 
 
     /**
-    * Check if directory of file resource is trusted.
-    * 
-    * @param string $filepath 
-    * @param object $compiler compiler object
-    * @return boolean true if directory is trusted
-    */
+     * Check if directory of file resource is trusted.
+     
+     * @param string $filepath 
+     * @param object $compiler compiler object
+     * @return boolean true if directory is trusted
+     */
     function isTrustedResourceDir($filepath)
     {
         $_rp = realpath($filepath);
@@ -112,16 +113,17 @@ class Smarty_Internal_Security_Handler {
             } 
         } 
 
-        throw new Exception ("directory '{$_rp}' not allowed by security setting");
+        throw new SmartyException ("directory '{$_rp}' not allowed by security setting");
         return false;
     } 
+    
     /**
-    * Check if directory of file resource is trusted.
-    * 
-    * @param string $filepath 
-    * @param object $compiler compiler object
-    * @return boolean true if directory is trusted
-    */
+     * Check if directory of file resource is trusted.
+     
+     * @param string $filepath 
+     * @param object $compiler compiler object
+     * @return boolean true if directory is trusted
+     */
     function isTrustedPHPDir($filepath)
     {
         $_rp = realpath($filepath);
@@ -138,7 +140,7 @@ class Smarty_Internal_Security_Handler {
             } 
         } 
 
-        throw new Exception ("directory '{$_rp}' not allowed by security setting");
+        throw new SmartyException ("directory '{$_rp}' not allowed by security setting");
         return false;
     } 
 } 
index 25e92d9658c48684afccd6641245a9b4e2fa0a0b..dcc89c6736a473c78cc23e199d9a7e27f1164b8c 100644 (file)
@@ -9,7 +9,9 @@
  * @subpackage Compiler
  * @author Uwe Tews 
  */
+
 require_once("smarty_internal_parsetree.php");
+
 /**
  * Class SmartyTemplateCompiler
  */
index bb334595f0a4536fce23c2d193919c306be9a2de..e8a4e7f80e7d3b5ad32418a781d728113ff418ee 100644 (file)
@@ -44,8 +44,6 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     public $mustCompile = null;
     public $suppressHeader = false;
     public $suppressFileDependency = false;
-    public $extract_code = false;
-    public $extracted_compiled_code = '';
     public $has_nocache_code = false; 
     // Rendered content
     public $rendered_content = null; 
@@ -70,6 +68,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     public $security = false;
     public $saved_modifier = null;
     public $smarty = null;
+    // blocks for template inheritance
+    public $block_data = array();
     /**
      * Create template data object
      * 
@@ -100,12 +100,17 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         $this->template_resource = $template_resource; 
         // parse resource name
         if (!$this->parseResourceName ($template_resource, $this->resource_type, $this->resource_name, $this->resource_object)) {
-            throw new Exception ("Unable to parse resource name \"{$template_resource}\"");
+            throw new SmartyException ("Unable to parse resource name \"{$template_resource}\"");
         } 
         // load cache resource
         if (!$this->resource_object->isEvaluated && ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) {
             $this->cache_resource_object = $this->smarty->cache->loadResource();
-        } 
+        }
+        // copy block data of template inheritance
+        if ($this->parent instanceof Smarty_Template or $this->parent instanceof Smarty_Internal_Template) {
+               $this->block_data = $this->parent->block_data;
+        }
     } 
 
     /**
@@ -147,7 +152,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     {
         if ($this->template_source === null) {
             if (!$this->resource_object->getTemplateSource($this)) {
-                throw new Exception("Unable to read template {$this->resource_type} '{$this->resource_name}'");
+                throw new SmartyException("Unable to read template {$this->resource_type} '{$this->resource_name}'");
             } 
         } 
         return $this->template_source;
@@ -166,7 +171,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             $this->isExisting = $this->resource_object->isExisting($this);
         } 
         if (!$this->isExisting && $error) {
-            throw new Exception("Unable to load template {$this->resource_type} '{$this->resource_name}'");
+            throw new SmartyException("Unable to load template {$this->resource_type} '{$this->resource_name}'");
         } 
         return $this->isExisting;
     } 
@@ -341,7 +346,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             return false;
         } 
         $this->properties['cache_lifetime'] = $this->cache_lifetime;
-        return $this->cache_resource_object->writeCachedContent($this, $this->createPropertyHeader(true) . $content);
+        return $this->cache_resource_object->writeCachedContent($this, $this->createPropertyHeader(true) .$content);
     } 
 
     /**
@@ -351,7 +356,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
      * 
      * @return boolean true if cache is valid
      */
-    public function isCached ()
+    public function isCached ($no_render = true)
     {
         if ($this->isCached === null) {
             $this->isCached = false;
@@ -367,7 +372,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                     if ($this->smarty->debugging) {
                         Smarty_Internal_Debug::start_cache($this);
                     } 
-                    $this->rendered_content = $this->cache_resource_object->getCachedContents($this);
+                    $this->rendered_content = $this->cache_resource_object->getCachedContents($this, $no_render);
                     if ($this->smarty->debugging) {
                         Smarty_Internal_Debug::end_cache($this);
                     } 
@@ -377,10 +382,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                     } 
                     $this->cacheFileChecked = true;
                     if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED && $this->properties['cache_lifetime'] >= 0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) {
+                        $this->tpl_vars = array();
                         $this->rendered_content = null;
                         return $this->isCached;
                     } 
                     if (!empty($this->properties['file_dependency']) && $this->smarty->compile_check) {
+                        $resource_type = null;
+                        $resource_name = null;
                         foreach ($this->properties['file_dependency'] as $_file_to_check) {
                             $this->getResourceTypeName($_file_to_check[0], $resource_type, $resource_name);
                             If ($resource_type == 'file') {
@@ -391,6 +399,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                             } 
                             // If ($mtime > $this->getCachedTimestamp()) {
                             If ($mtime > $_file_to_check[1]) {
+                                $this->tpl_vars = array();
                                 $this->rendered_content = null;
                                 return $this->isCached;
                             } 
@@ -429,6 +438,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                 if ($this->smarty->compile_check) {
                     if (!empty($this->properties['file_dependency'])) {
                         $this->mustCompile = false;
+                        $resource_type = null;
+                        $resource_name = null;
                         foreach ($this->properties['file_dependency'] as $_file_to_check) {
                             $this->getResourceTypeName($_file_to_check[0], $resource_type, $resource_name);
                             If ($resource_type == 'file') {
@@ -461,7 +472,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                 ob_start();
                 $this->resource_object->renderUncompiled($this);
             } else {
-                throw new Exception("Resource '$this->resource_type' must have 'renderUncompiled' methode");
+                throw new SmartyException("Resource '$this->resource_type' must have 'renderUncompiled' methode");
             } 
         } 
         $this->rendered_content = ob_get_clean();
@@ -508,7 +519,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             eval("?>" . $output);
             $this->rendered_content = ob_get_clean(); 
             // write cache file content
-            $this->writeCachedContent($output);
+            $this->writeCachedContent('<?php if (!$no_render) {?>'. $output. '<?php } ?>');
             if ($this->smarty->debugging) {
                 Smarty_Internal_Debug::end_cache($this);
             } 
@@ -539,9 +550,23 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         // checks if template exists
         $this->isExisting(true); 
         // read from cache or render
-        if ($this->rendered_content === null && !$this->isCached()) {
+        if ($this->rendered_content === null) {
+               if ($this->isCached) {
+                       if ($this->smarty->debugging) {
+               Smarty_Internal_Debug::start_cache($this);
+            } 
+            $this->rendered_content = $this->cache_resource_object->getCachedContents($this, false);
+            if ($this->smarty->debugging) {
+               Smarty_Internal_Debug::end_cache($this);
+            }
+          } 
+          if ($this->isCached === null) { 
+            $this->isCached(false); 
+          }
+          if (!$this->isCached) {          
             // render template (not loaded and not in cache)
             $this->renderTemplate();
+          }
         } 
         $this->updateParentVariables();
         $this->isCached = null;
@@ -564,9 +589,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         $this->getResourceTypeName($template_resource, $resource_type, $resource_name);
         $resource_handler = $this->loadTemplateResourceHandler($resource_type); 
         // cache template object under a unique ID
-        // do not cache string resources
-        // *****        if ($resource_type != 'string' && $this->smarty->caching) {
-        if ($resource_type != 'string') {
+        // do not cache eval resources
+        if ($resource_type != 'eval') {
             $this->smarty->template_objects[crc32($this->template_resource . $this->cache_id . $this->compile_id)] = $this;
         } 
         return true;
@@ -593,7 +617,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         // no tpl file found
         if (!empty($this->smarty->default_template_handler_func)) {
             if (!is_callable($this->smarty->default_template_handler_func)) {
-                throw new Exception("Default template handler not callable");
+                throw new SmartyException("Default template handler not callable");
             } else {
                 $_return = call_user_func_array($this->smarty->default_template_handler_func,
                     array($this->resource_type, $this->resource_name, &$this->template_source, &$this->template_timestamp, $this));
@@ -604,7 +628,6 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                 } 
             } 
         } 
-        // throw new Exception("Unable to load template \"{$file}\"");
         return false;
     } 
 
@@ -702,12 +725,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             return new Smarty_Internal_Resource_Registered($this->smarty);
         } else {
             // try sysplugins dir
-            if (in_array($resource_type, array('file', 'string', 'extends', 'php', 'registered', 'stream'))) {
-                $_resource_class = 'Smarty_Internal_Resource_' . $resource_type;
+            if (in_array($resource_type, array('file', 'string', 'extends', 'php', 'registered', 'stream', 'eval'))) {
+                $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($resource_type);
                 return new $_resource_class($this->smarty);
             } else {
                 // try plugins dir
-                $_resource_class = 'Smarty_Resource_' . $resource_type;
+                $_resource_class = 'Smarty_Resource_' . ucfirst($resource_type);
                 if ($this->smarty->loadPlugin($_resource_class)) {
                     if (class_exists($_resource_class, false)) {
                         return new $_resource_class($this->smarty);
@@ -729,7 +752,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                         } 
                         return new Smarty_Internal_Resource_Stream($this->smarty);
                     } else {
-                        throw new Exception('Unkown resource type \'' . $resource_type . '\'');
+                        throw new SmartyException('Unkown resource type \'' . $resource_type . '\'');
                     } 
                 } 
             } 
@@ -806,6 +829,26 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         } 
     } 
 
+    /**
+     * creates a loacal Smarty variable for array assihgments
+     */
+    public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
+    {
+        if (!isset($this->tpl_vars[$tpl_var])) {
+            $tpl_var_inst = $this->getVariable($tpl_var, null, true, false);
+            if ($tpl_var_inst instanceof Undefined_Smarty_Variable) {
+                $this->tpl_vars[$tpl_var] = new Smarty_variable(array(), $nocache, $scope);
+            } else {
+                $this->tpl_vars[$tpl_var] = clone $tpl_var_inst;
+                if ($scope != SMARTY_LOCAL_SCOPE) {
+                    $this->tpl_vars[$tpl_var]->scope = $scope;
+                } 
+            } 
+        } 
+        if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) {
+            settype($this->tpl_vars[$tpl_var]->value, 'array');
+        } 
+    } 
     /**
      * wrapper for display
      */
@@ -863,7 +906,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             // convert camel case to underscored name
             $property_name = preg_replace_callback('/([A-Z])/', $camel_func, $property_name);
             if (!property_exists($this, $property_name)) {
-                throw new Exception("property '$property_name' does not exist.");
+                throw new SmartyException("property '$property_name' does not exist.");
                 return false;
             } 
             if ($first3 == 'get')
index 91ed88866e27292497e9da173d6fd79fa9e35acc..0a0218c2cfbf499cd83a2c045bd159ee6ad2c27a 100644 (file)
@@ -8,6 +8,7 @@
  * @subpackage Compiler\r
  * @author Uwe Tews \r
  */\r
+\r
 /**\r
  * Main compiler class\r
  */\r
@@ -155,7 +156,14 @@ class Smarty_Internal_TemplateCompilerBase {
                             if (!$this->smarty->registered_plugins[$type][$tag][1]) {\r
                                 $this->tag_nocache = true;\r
                             } \r
-                            return call_user_func_array($this->smarty->registered_plugins[$type][$tag][0], array($args, $this));\r
+                            $function = $this->smarty->registered_plugins[$type][$tag][0];\r
+                            if (!is_array($function)) {\r
+                                return $function($args, $this);\r
+                            } else if (is_object($function[0])) {\r
+                                return $this->smarty->registered_plugins[$type][$tag][0][0]->$function[1]($args, $this);\r
+                            } else {\r
+                                return call_user_func_array($this->smarty->registered_plugins[$type][$tag][0], array($args, $this));\r
+                            } \r
                         } \r
                         // compile registered function or block function\r
                         if ($type == 'function' || $type == 'block') {\r
@@ -176,7 +184,7 @@ class Smarty_Internal_TemplateCompilerBase {
                                 return $plugin_object->compile($args, $this);\r
                             } \r
                         } \r
-                        throw new Exception("Plugin \"{$tag}\" not callable");\r
+                        throw new SmartyException("Plugin \"{$tag}\" not callable");\r
                     } else {\r
                         if ($function = $this->getPlugin($tag, $plugin_type)) {\r
                             return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $tag, $function);\r
@@ -215,7 +223,7 @@ class Smarty_Internal_TemplateCompilerBase {
                             return $plugin_object->compile($args, $this);\r
                         } \r
                     } \r
-                    throw new Exception("Plugin \"{$tag}\" not callable");\r
+                    throw new SmartyException("Plugin \"{$tag}\" not callable");\r
                 } \r
             } \r
             $this->trigger_template_error ("unknown tag \"" . $tag . "\"", $this->lex->taglineno);\r
@@ -286,23 +294,6 @@ class Smarty_Internal_TemplateCompilerBase {
             } \r
             return $function;\r
         } \r
-        /**\r
-         * if (isset($this->template->required_plugins_call[$plugin_name][$type])) {\r
-         * if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-         * if (isset($this->template->required_plugins['compiled'][$plugin_name])) {\r
-         * $this->template->required_plugins['cache'][$plugin_name] = $this->template->required_plugins['compiled'][$plugin_name];\r
-         * } \r
-         * } else {\r
-         * if (isset($this->template->required_plugins['cache'][$plugin_name])) {\r
-         * $this->template->required_plugins['compiled'][$plugin_name] = $this->template->required_plugins['cache'][$plugin_name];\r
-         * } \r
-         * } \r
-         * if ($type == 'modifier') {\r
-         * $this->template->saved_modifier[$plugin_name] = true;\r
-         * } \r
-         * return $this->template->required_plugins_call[$plugin_name][$type];\r
-         * }\r
-         */\r
         // loop through plugin dirs and find the plugin\r
         $function = 'smarty_' . $type . '_' . $plugin_name;\r
         $found = false;\r
@@ -315,7 +306,6 @@ class Smarty_Internal_TemplateCompilerBase {
             } \r
         } \r
         if ($found) {\r
-            // if (is_callable($plugin)) {\r
             if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
                 $this->template->required_plugins['nocache'][$plugin_name][$type]['file'] = $file;\r
                 $this->template->required_plugins['nocache'][$plugin_name][$type]['function'] = $function;\r
@@ -323,16 +313,6 @@ class Smarty_Internal_TemplateCompilerBase {
                 $this->template->required_plugins['compiled'][$plugin_name][$type]['file'] = $file;\r
                 $this->template->required_plugins['compiled'][$plugin_name][$type]['function'] = $function;\r
             } \r
-            /**\r
-             * $this->template->required_plugins_call[$plugin_name][$type] = $plugin;\r
-             * if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-             * $this->template->required_plugins['cache'][$plugin_name]['file'] = $file;\r
-             * $this->template->required_plugins['cache'][$plugin_name]['type'] = $type;\r
-             * } else {\r
-             * $this->template->required_plugins['compiled'][$plugin_name]['file'] = $file;\r
-             * $this->template->required_plugins['compiled'][$plugin_name]['type'] = $type;\r
-             * }\r
-             */\r
             if ($type == 'modifier') {\r
                 $this->template->saved_modifier[$plugin_name] = true;\r
             } \r
@@ -421,8 +401,7 @@ class Smarty_Internal_TemplateCompilerBase {
             // output parser error message\r
             $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);\r
         } \r
-        throw new Exception($error_text);\r
+        throw new SmartyCompilerException($error_text);\r
     } \r
-} \r
-\r
+}\r
 ?>
\ No newline at end of file
index 629909a850faa8e53c18c6ae71b3839c31204679..50decb9e44aa652d69decd792cc1045ad50dcee2 100644 (file)
@@ -63,6 +63,7 @@ class Smarty_Internal_Templatelexer
                                'QMARK'         => '"?"',
                                'ID'                    => 'identifier',
                                'OTHER'         => 'text',
+                               'LINEBREAK'             => 'newline',
                                'FAKEPHPSTARTTAG'       => 'Fake PHP start tag',
                                'PHPSTARTTAG'   => 'PHP start tag',
                                'PHPENDTAG'     => 'PHP end tag',
@@ -146,13 +147,17 @@ class Smarty_Internal_Templatelexer
               15 => 0,
               16 => 0,
               17 => 0,
-              18 => 2,
+              18 => 0,
+              19 => 0,
+              20 => 0,
               21 => 0,
+              22 => 2,
+              25 => 0,
             );
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^(\\{\\})|^(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^([\t ]*[\r\n]+[\t ]*)|^(".$this->ldel."strip".$this->rdel.")|^(".$this->ldel."\/strip".$this->rdel.")|^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s*(if|elseif|else if|while)(?![^\s]))|^(".$this->ldel."\\s*for(?![^\s]))|^(".$this->ldel."\\s*foreach(?![^\s]))|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(([\S\s]*?)(?=([\t ]*[\r\n]+[\t ]*|".$this->ldel."|<\\?|\\?>)))|^([\S\s]+)/";
+        $yy_global_pattern = "/^(\\{\\})|^(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|^([\t ]*[\r\n]+[\t ]*)|^(".$this->ldel."strip".$this->rdel.")|^(".$this->ldel."\\s{1,}strip\\s{1,}".$this->rdel.")|^(".$this->ldel."\/strip".$this->rdel.")|^(".$this->ldel."\\s{1,}\/strip\\s{1,}".$this->rdel.")|^(".$this->ldel."\\s*literal\\s*".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s*(if|elseif|else if|while)(?![^\s]))|^(".$this->ldel."\\s*for(?![^\s]))|^(".$this->ldel."\\s*foreach(?![^\s]))|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^(<%)|^(%>)|^(([\S\s]*?)(?=([\t ]*[\r\n]+[\t ]*|".$this->ldel."|<\\?|\\?>|<%|%>)))|^([\S\s]+)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -215,40 +220,43 @@ class Smarty_Internal_Templatelexer
     function yy_r1_4($yy_subpatterns)
     {
 
-  if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
-    $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
-  } elseif ($this->value == '<?xml') {
-      $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
+  if ($this->strip) {
+     return false;
   } else {
-    $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
-    $this->value = substr($this->value, 0, 2);
+     $this->token = Smarty_Internal_Templateparser::TP_LINEBREAK;
   }
-     }
+    }
     function yy_r1_5($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
+  $this->strip = true;
+  return false;
     }
     function yy_r1_6($yy_subpatterns)
     {
 
-  if ($this->strip) {
-     return false;
-  } else {
+  if ($this->smarty->auto_literal) {
      $this->token = Smarty_Internal_Templateparser::TP_OTHER;
+  } else {
+    $this->strip = true;
+    return false;
   }
     }
     function yy_r1_7($yy_subpatterns)
     {
 
-  $this->strip = true;
+  $this->strip = false;
   return false;
     }
     function yy_r1_8($yy_subpatterns)
     {
 
-  $this->strip = false;
-  return false;
+  if ($this->smarty->auto_literal) {
+     $this->token = Smarty_Internal_Templateparser::TP_OTHER;
+  } else {
+    $this->strip = false;
+    return false;
+  }
     }
     function yy_r1_9($yy_subpatterns)
     {
@@ -328,11 +336,38 @@ class Smarty_Internal_Templatelexer
     function yy_r1_18($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_OTHER;
+  if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
+    $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
+  } elseif ($this->value == '<?xml') {
+      $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
+  } else {
+    $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
+    $this->value = substr($this->value, 0, 2);
+  }
+     }
+    function yy_r1_19($yy_subpatterns)
+    {
+
+  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
+    }
+    function yy_r1_20($yy_subpatterns)
+    {
+
+  $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
     }
     function yy_r1_21($yy_subpatterns)
     {
 
+  $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
+    }
+    function yy_r1_22($yy_subpatterns)
+    {
+
+  $this->token = Smarty_Internal_Templateparser::TP_OTHER;
+    }
+    function yy_r1_25($yy_subpatterns)
+    {
+
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
     }
 
@@ -411,7 +446,7 @@ class Smarty_Internal_Templatelexer
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s*(if|elseif|else if|while)(?![^\s]))|^(".$this->ldel."\\s*for(?![^\s]))|^(".$this->ldel."\\s*foreach(?![^\s]))|^(".$this->ldel."\\s{1,})|^(\\s{1,}".$this->rdel.")|^(".$this->ldel."\/)|^(".$this->ldel.")|^(".$this->rdel.")|^(\\s+is\\s+in\\s+)|^(\\s+(AS|as)\\s+)|^(\\s+(to)\\s+)|^(\\s+(step)\\s+)|^(\\s+instanceof\\s+)|^(\\s*===\\s*)|^(\\s*!==\\s*)|^(\\s*==\\s*|\\s+(EQ|eq)\\s+)|^(\\s*!=\\s*|\\s*<>\\s*|\\s+(NE|NEQ|ne|neq)\\s+)|^(\\s*>=\\s*|\\s+(GE|GTE|ge|gte)\\s+)|^(\\s*<=\\s*|\\s+(LE|LTE|le|lte)\\s+)|^(\\s*>\\s*|\\s+(GT|gt)\\s+)|^(\\s*<\\s*|\\s+(LT|lt)\\s+)|^(\\s+(MOD|mod)\\s+)|^(!\\s*|(NOT|not)\\s+)|^(\\s*&&\\s*|\\s*(AND|and)\\s+)|^(\\s*\\|\\|\\s*|\\s*(OR|or)\\s+)|^(\\s*(XOR|xor)\\s+)|^(\\s+is\\s+odd\\s+by\\s+)|^(\\s+is\\s+not\\s+odd\\s+by\\s+)|^(\\s+is\\s+odd)|^(\\s+is\\s+not\\s+odd)|^(\\s+is\\s+even\\s+by\\s+)|^(\\s+is\\s+not\\s+even\\s+by\\s+)|^(\\s+is\\s+even)|^(\\s+is\\s+not\\s+even)|^(\\s+is\\s+div\\s+by\\s+)|^(\\s+is\\s+not\\s+div\\s+by\\s+)|^(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\))|^(\\(\\s*)|^(\\s*\\))|^(\\[\\s*)|^(\\s*\\])|^(\\s*->\\s*)|^(\\s*=>\\s*)|^(\\s*=\\s*)|^((\\+\\+|--)\\s*)|^(\\s*(\\+|-)\\s*)|^(\\s*(\\*|\/|%)\\s*)|^(\\$)|^(\\s*;)|^(::)|^(\\s*:\\s*)|^(@)|^(#)|^(\")|^(`)|^(\\|)|^(\\.)|^(\\s*,\\s*)|^(\\s*&\\s*)|^(\\s*\\?\\s*)|^(0[xX][0-9a-fA-F]+)|^([0-9]*[a-zA-Z_]\\w*)|^(\\d+)|^(\\s+)|^(.)/";
+        $yy_global_pattern = "/^('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s*(if|elseif|else if|while)(?![^\s]))|^(".$this->ldel."\\s*for(?![^\s]))|^(".$this->ldel."\\s*foreach(?![^\s]))|^(".$this->ldel."\\s{1,})|^(\\s{1,}".$this->rdel.")|^(".$this->ldel."\/)|^(".$this->ldel.")|^(".$this->rdel.")|^(\\s+is\\s+in\\s+)|^(\\s+(AS|as)\\s+)|^(\\s+(to)\\s+)|^(\\s+(step)\\s+)|^(\\s+instanceof\\s+)|^(\\s*===\\s*)|^(\\s*!==\\s*)|^(\\s*==\\s*|\\s+(EQ|eq)\\s+)|^(\\s*!=\\s*|\\s*<>\\s*|\\s+(NE|NEQ|ne|neq)\\s+)|^(\\s*>=\\s*|\\s+(GE|GTE|ge|gte)\\s+)|^(\\s*<=\\s*|\\s+(LE|LTE|le|lte)\\s+)|^(\\s*>\\s*|\\s+(GT|gt)\\s+)|^(\\s*<\\s*|\\s+(LT|lt)\\s+)|^(\\s+(MOD|mod)\\s+)|^(!\\s*|(NOT|not)\\s+)|^(\\s*&&\\s*|\\s*(AND|and)\\s+)|^(\\s*\\|\\|\\s*|\\s*(OR|or)\\s+)|^(\\s*(XOR|xor)\\s+)|^(\\s+is\\s+odd\\s+by\\s+)|^(\\s+is\\s+not\\s+odd\\s+by\\s+)|^(\\s+is\\s+odd)|^(\\s+is\\s+not\\s+odd)|^(\\s+is\\s+even\\s+by\\s+)|^(\\s+is\\s+not\\s+even\\s+by\\s+)|^(\\s+is\\s+even)|^(\\s+is\\s+not\\s+even)|^(\\s+is\\s+div\\s+by\\s+)|^(\\s+is\\s+not\\s+div\\s+by\\s+)|^(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|^(\\(\\s*)|^(\\s*\\))|^(\\[\\s*)|^(\\s*\\])|^(\\s*->\\s*)|^(\\s*=>\\s*)|^(\\s*=\\s*)|^((\\+\\+|--)\\s*)|^(\\s*(\\+|-)\\s*)|^(\\s*(\\*|\/|%)\\s*)|^(\\$)|^(\\s*;)|^(::)|^(\\s*:\\s*)|^(@)|^(#)|^(\")|^(`)|^(\\|)|^(\\.)|^(\\s*,\\s*)|^(\\s*&\\s*)|^(\\s*\\?\\s*)|^(0[xX][0-9a-fA-F]+)|^([0-9]*[a-zA-Z_]\\w*)|^(\\d+)|^(\\s+)|^(.)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -849,13 +884,15 @@ class Smarty_Internal_Templatelexer
               3 => 0,
               4 => 0,
               5 => 0,
-              6 => 2,
-              9 => 0,
+              6 => 0,
+              7 => 0,
+              8 => 2,
+              11 => 0,
             );
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^([\t ]*[\r\n]+[\t ]*)|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^(([\S\s]*?)(?=([\t ]*[\r\n]+[\t ]*|".$this->ldel."\/?literal".$this->rdel."|<\\?)))|^([\S\s]+)/";
+        $yy_global_pattern = "/^(".$this->ldel."\\s*literal\\s*".$this->rdel.")|^(".$this->ldel."\\s*\/literal\\s*".$this->rdel.")|^([\t ]*[\r\n]+[\t ]*)|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^(<%)|^(%>)|^(([\S\s]*?)(?=([\t ]*[\r\n]+[\t ]*|".$this->ldel."\/?literal".$this->rdel."|<\\?|<%)))|^([\S\s]+)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -935,14 +972,24 @@ class Smarty_Internal_Templatelexer
     function yy_r3_5($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
     }
     function yy_r3_6($yy_subpatterns)
     {
 
+  $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
+    }
+    function yy_r3_7($yy_subpatterns)
+    {
+
+  $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
+    }
+    function yy_r3_8($yy_subpatterns)
+    {
+
   $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
     }
-    function yy_r3_9($yy_subpatterns)
+    function yy_r3_11($yy_subpatterns)
     {
 
   $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
@@ -1124,4 +1171,4 @@ class Smarty_Internal_Templatelexer
     }
 
 }
-?>
+?>
\ No newline at end of file
index befb100d168b10892c5eb93d794ef74ff82b713f..03aa34825b7ae246e1add0baae1ec1d4ca959132 100644 (file)
-<?php\r
-/**\r
-* Smarty Internal Plugin Templateparser\r
-*\r
-* This is the template parser.\r
-* It is generated from the internal.templateparser.y file\r
-* @package Smarty\r
-* @subpackage Compiler\r
-* @author Uwe Tews\r
-*/\r
-\r
-class TP_yyToken implements ArrayAccess\r
-{\r
-    public $string = '';\r
-    public $metadata = array();\r
-\r
-    function __construct($s, $m = array())\r
-    {\r
-        if ($s instanceof TP_yyToken) {\r
-            $this->string = $s->string;\r
-            $this->metadata = $s->metadata;\r
-        } else {\r
-            $this->string = (string) $s;\r
-            if ($m instanceof TP_yyToken) {\r
-                $this->metadata = $m->metadata;\r
-            } elseif (is_array($m)) {\r
-                $this->metadata = $m;\r
-            }\r
-        }\r
-    }\r
-\r
-    function __toString()\r
-    {\r
-        return $this->_string;\r
-    }\r
-\r
-    function offsetExists($offset)\r
-    {\r
-        return isset($this->metadata[$offset]);\r
-    }\r
-\r
-    function offsetGet($offset)\r
-    {\r
-        return $this->metadata[$offset];\r
-    }\r
-\r
-    function offsetSet($offset, $value)\r
-    {\r
-        if ($offset === null) {\r
-            if (isset($value[0])) {\r
-                $x = ($value instanceof TP_yyToken) ?\r
-                    $value->metadata : $value;\r
-                $this->metadata = array_merge($this->metadata, $x);\r
-                return;\r
-            }\r
-            $offset = count($this->metadata);\r
-        }\r
-        if ($value === null) {\r
-            return;\r
-        }\r
-        if ($value instanceof TP_yyToken) {\r
-            if ($value->metadata) {\r
-                $this->metadata[$offset] = $value->metadata;\r
-            }\r
-        } elseif ($value) {\r
-            $this->metadata[$offset] = $value;\r
-        }\r
-    }\r
-\r
-    function offsetUnset($offset)\r
-    {\r
-        unset($this->metadata[$offset]);\r
-    }\r
-}\r
-\r
-class TP_yyStackEntry\r
-{\r
-    public $stateno;       /* The state-number */\r
-    public $major;         /* The major token value.  This is the code\r
-                     ** number for the token at this stack level */\r
-    public $minor; /* The user-supplied minor token value.  This\r
-                     ** is the value of the token  */\r
-};\r
-\r
-\r
-#line 12 "smarty_internal_templateparser.y"\r
-class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php"\r
-{\r
-#line 14 "smarty_internal_templateparser.y"\r
-\r
-    // states whether the parse was successful or not\r
-    public $successful = true;\r
-    public $retvalue = 0;\r
-    private $lex;\r
-    private $internalError = false;\r
-\r
-    function __construct($lex, $compiler) {\r
-        // set instance object\r
-        self::instance($this); \r
-        $this->lex = $lex;\r
-        $this->compiler = $compiler;\r
-        $this->smarty = $this->compiler->smarty;\r
-        $this->template = $this->compiler->template;\r
-        if ($this->template->security && isset($this->smarty->security_handler)) {\r
-              $this->sec_obj = $this->smarty->security_policy;\r
-        } else {\r
-              $this->sec_obj = $this->smarty;\r
-        }\r
-        $this->compiler->has_variable_string = false;\r
-                               $this->compiler->prefix_code = array();\r
-                               $this->prefix_number = 0;\r
-                               $this->block_nesting_level = 0;\r
-                               $this->is_xml = false;\r
-    }\r
-    public static function &instance($new_instance = null)\r
-    {\r
-        static $instance = null;\r
-        if (isset($new_instance) && is_object($new_instance))\r
-            $instance = $new_instance;\r
-        return $instance;\r
-    }\r
-\r
-    public static function escape_start_tag($tag_text) {\r
-       $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -1 , $count); //Escape tag\r
-       assert($tag !== false && $count === 1);\r
-       return $tag;\r
-    }\r
-\r
-    public static function escape_end_tag($tag_text) {\r
-       assert($tag_text === '?>');\r
-       return '?<?php ?>>';\r
-    }\r
-\r
-    \r
-#line 128 "smarty_internal_templateparser.php"\r
-\r
-    const TP_VERT                           =  1;\r
-    const TP_COLON                          =  2;\r
-    const TP_COMMENT                        =  3;\r
-    const TP_PHPSTARTTAG                    =  4;\r
-    const TP_PHPENDTAG                      =  5;\r
-    const TP_FAKEPHPSTARTTAG                =  6;\r
-    const TP_XMLTAG                         =  7;\r
-    const TP_OTHER                          =  8;\r
-    const TP_LITERALSTART                   =  9;\r
-    const TP_LITERALEND                     = 10;\r
-    const TP_LITERAL                        = 11;\r
-    const TP_LDEL                           = 12;\r
-    const TP_RDEL                           = 13;\r
-    const TP_DOLLAR                         = 14;\r
-    const TP_ID                             = 15;\r
-    const TP_EQUAL                          = 16;\r
-    const TP_PTR                            = 17;\r
-    const TP_LDELIF                         = 18;\r
-    const TP_SPACE                          = 19;\r
-    const TP_LDELFOR                        = 20;\r
-    const TP_SEMICOLON                      = 21;\r
-    const TP_INCDEC                         = 22;\r
-    const TP_TO                             = 23;\r
-    const TP_STEP                           = 24;\r
-    const TP_LDELFOREACH                    = 25;\r
-    const TP_AS                             = 26;\r
-    const TP_APTR                           = 27;\r
-    const TP_LDELSLASH                      = 28;\r
-    const TP_INTEGER                        = 29;\r
-    const TP_COMMA                          = 30;\r
-    const TP_MATH                           = 31;\r
-    const TP_UNIMATH                        = 32;\r
-    const TP_ANDSYM                         = 33;\r
-    const TP_ISIN                           = 34;\r
-    const TP_ISDIVBY                        = 35;\r
-    const TP_ISNOTDIVBY                     = 36;\r
-    const TP_ISEVEN                         = 37;\r
-    const TP_ISNOTEVEN                      = 38;\r
-    const TP_ISEVENBY                       = 39;\r
-    const TP_ISNOTEVENBY                    = 40;\r
-    const TP_ISODD                          = 41;\r
-    const TP_ISNOTODD                       = 42;\r
-    const TP_ISODDBY                        = 43;\r
-    const TP_ISNOTODDBY                     = 44;\r
-    const TP_INSTANCEOF                     = 45;\r
-    const TP_OPENP                          = 46;\r
-    const TP_CLOSEP                         = 47;\r
-    const TP_QMARK                          = 48;\r
-    const TP_NOT                            = 49;\r
-    const TP_TYPECAST                       = 50;\r
-    const TP_HEX                            = 51;\r
-    const TP_DOT                            = 52;\r
-    const TP_SINGLEQUOTESTRING              = 53;\r
-    const TP_DOUBLECOLON                    = 54;\r
-    const TP_AT                             = 55;\r
-    const TP_HATCH                          = 56;\r
-    const TP_OPENB                          = 57;\r
-    const TP_CLOSEB                         = 58;\r
-    const TP_EQUALS                         = 59;\r
-    const TP_NOTEQUALS                      = 60;\r
-    const TP_GREATERTHAN                    = 61;\r
-    const TP_LESSTHAN                       = 62;\r
-    const TP_GREATEREQUAL                   = 63;\r
-    const TP_LESSEQUAL                      = 64;\r
-    const TP_IDENTITY                       = 65;\r
-    const TP_NONEIDENTITY                   = 66;\r
-    const TP_MOD                            = 67;\r
-    const TP_LAND                           = 68;\r
-    const TP_LOR                            = 69;\r
-    const TP_LXOR                           = 70;\r
-    const TP_QUOTE                          = 71;\r
-    const TP_BACKTICK                       = 72;\r
-    const TP_DOLLARID                       = 73;\r
-    const YY_NO_ACTION = 546;\r
-    const YY_ACCEPT_ACTION = 545;\r
-    const YY_ERROR_ACTION = 544;\r
-\r
-    const YY_SZ_ACTTAB = 2037;\r
-static public $yy_action = array(\r
- /*     0 */   175,  239,  238,  246,  248,  235,  234,  230,  266,  273,\r
- /*    10 */   158,  223,  291,    7,   29,  170,   12,  290,  179,  205,\r
- /*    20 */    13,  202,  200,  179,  114,    5,  124,  117,  233,  192,\r
- /*    30 */    42,   43,   45,   40,   21,   22,  281,  299,   26,   27,\r
- /*    40 */   278,  256,   31,   30,  263,  279,  251,   35,    8,  158,\r
- /*    50 */   265,  271,  545,   83,  241,  238,  246,  136,  306,  307,\r
- /*    60 */   308,  305,  304,  301,  302,  303,  309,  310,  316,  317,\r
- /*    70 */   175,  315,  289,  175,  132,  268,  113,  219,  179,  166,\r
- /*    80 */   105,  152,  296,  221,  175,  319,  168,  284,  179,  206,\r
- /*    90 */   128,  179,  358,  351,  284,  314,  331,  216,  183,  110,\r
- /*   100 */    42,   43,   45,   40,   21,   22,  281,  299,   26,   27,\r
- /*   110 */   278,  256,   31,   30,   42,   43,   45,   40,   21,   22,\r
- /*   120 */   281,  299,   26,   27,  278,  256,   31,   30,  306,  307,\r
- /*   130 */   308,  305,  304,  301,  302,  303,  309,  310,  316,  317,\r
- /*   140 */   175,    4,  306,  307,  308,  305,  304,  301,  302,  303,\r
- /*   150 */   309,  310,  316,  317,  175,   33,   32,  311,  179,  346,\r
- /*   160 */    17,   32,  348,   38,  346,  345,  253,  156,  343,  338,\r
- /*   170 */    42,   43,   45,   40,   21,   22,  281,  299,   26,   27,\r
- /*   180 */   278,  256,   31,   30,   42,   43,   45,   40,   21,   22,\r
- /*   190 */   281,  299,   26,   27,  278,  256,   31,   30,  306,  307,\r
- /*   200 */   308,  305,  304,  301,  302,  303,  309,  310,  316,  317,\r
- /*   210 */   175,  212,  306,  307,  308,  305,  304,  301,  302,  303,\r
- /*   220 */   309,  310,  316,  317,  175,  220,   32,  259,  179,  346,\r
- /*   230 */    32,  157,  343,  346,   34,  146,  252,  347,  107,  203,\r
- /*   240 */    42,   43,   45,   40,   21,   22,  281,  299,   26,   27,\r
- /*   250 */   278,  256,   31,   30,   42,   43,   45,   40,   21,   22,\r
- /*   260 */   281,  299,   26,   27,  278,  256,   31,   30,  306,  307,\r
- /*   270 */   308,  305,  304,  301,  302,  303,  309,  310,  316,  317,\r
- /*   280 */    87,  323,  306,  307,  308,  305,  304,  301,  302,  303,\r
- /*   290 */   309,  310,  316,  317,  175,  315,  153,  201,  347,  222,\r
- /*   300 */   122,  219,   53,  119,  105,  283,  164,   36,  175,  103,\r
- /*   310 */   137,  179,  318,  165,  288,  314,  358,  351,  262,  314,\r
- /*   320 */   258,  189,   24,   23,   42,   43,   45,   40,   21,   22,\r
- /*   330 */   281,  299,   26,   27,  278,  256,   31,   30,   42,   43,\r
- /*   340 */    45,   40,   21,   22,  281,  299,   26,   27,  278,  256,\r
- /*   350 */    31,   30,  306,  307,  308,  305,  304,  301,  302,  303,\r
- /*   360 */   309,  310,  316,  317,  175,  225,  306,  307,  308,  305,\r
- /*   370 */   304,  301,  302,  303,  309,  310,  316,  317,  175,  414,\r
- /*   380 */   320,  282,  199,  298,  162,  179,  179,  179,  288,  179,\r
- /*   390 */   229,  161,  343,  347,   42,   43,   45,   40,   21,   22,\r
- /*   400 */   281,  299,   26,   27,  278,  256,   31,   30,   42,   43,\r
- /*   410 */    45,   40,   21,   22,  281,  299,   26,   27,  278,  256,\r
- /*   420 */    31,   30,  306,  307,  308,  305,  304,  301,  302,  303,\r
- /*   430 */   309,  310,  316,  317,    2,  128,  306,  307,  308,  305,\r
- /*   440 */   304,  301,  302,  303,  309,  310,  316,  317,  175,  315,\r
- /*   450 */   154,  175,   86,  100,  155,   98,   52,  121,   99,  159,\r
- /*   460 */   167,   32,  260,  357,  346,  128,  318,  196,  288,  179,\r
- /*   470 */   358,  351,  102,  314,   32,  240,  187,  346,   42,   43,\r
- /*   480 */    45,   40,   21,   22,  281,  299,   26,   27,  278,  256,\r
- /*   490 */    31,   30,  175,  194,   32,  116,   12,  346,   34,   32,\r
- /*   500 */   170,   20,  346,  280,  114,   13,  306,  307,  308,  305,\r
- /*   510 */   304,  301,  302,  303,  309,  310,  316,  317,  321,   46,\r
- /*   520 */   191,  217,   42,   43,   45,   40,   21,   22,  281,  299,\r
- /*   530 */    26,   27,  278,  256,   31,   30,  175,  224,  250,  328,\r
- /*   540 */    32,   32,  224,  346,  214,   25,  175,  104,  243,  280,\r
- /*   550 */   306,  307,  308,  305,  304,  301,  302,  303,  309,  310,\r
- /*   560 */   316,  317,  261,   15,  179,  297,   42,   43,   45,   40,\r
- /*   570 */    21,   22,  281,  299,   26,   27,  278,  256,   31,   30,\r
- /*   580 */   175,  295,   12,  209,   93,  330,   32,  179,   32,  211,\r
- /*   590 */   114,  182,  269,  134,  306,  307,  308,  305,  304,  301,\r
- /*   600 */   302,  303,  309,  310,  316,  317,  284,  324,  347,  292,\r
- /*   610 */    42,   43,   45,   40,   21,   22,  281,  299,   26,   27,\r
- /*   620 */   278,  256,   31,   30,  175,  342,  293,   12,  339,  247,\r
- /*   630 */   228,  179,  179,  179,  179,  114,  179,  149,  306,  307,\r
- /*   640 */   308,  305,  304,  301,  302,  303,  309,  310,  316,  317,\r
- /*   650 */   284,  109,   39,    3,   42,   43,   45,   40,   21,   22,\r
- /*   660 */   281,  299,   26,   27,  278,  256,   31,   30,  175,  356,\r
- /*   670 */   349,  355,  341,  352,  236,  179,  179,  179,  179,  179,\r
- /*   680 */   179,  294,  306,  307,  308,  305,  304,  301,  302,  303,\r
- /*   690 */   309,  310,  316,  317,   46,  336,  111,  267,   42,   43,\r
- /*   700 */    45,   40,   21,   22,  281,  299,   26,   27,  278,  256,\r
- /*   710 */    31,   30,  175,   46,  213,  354,  245,  350,  277,  128,\r
- /*   720 */   288,   11,   41,    9,  120,  139,  306,  307,  308,  305,\r
- /*   730 */   304,  301,  302,  303,  309,  310,  316,  317,  284,  179,\r
- /*   740 */   221,  223,   42,   43,   45,   40,   21,   22,  281,  299,\r
- /*   750 */    26,   27,  278,  256,   31,   30,  102,  415,    8,  255,\r
- /*   760 */   207,  417,   14,  415,  198,   37,  353,  417,  333,  143,\r
- /*   770 */   306,  307,  308,  305,  304,  301,  302,  303,  309,  310,\r
- /*   780 */   316,  317,  284,    7,  232,  115,  169,  226,  315,  205,\r
- /*   790 */    12,  202,  222,   46,  219,   59,  124,  105,  114,  192,\r
- /*   800 */   215,   32,  344,   44,  346,  318,  130,  325,   35,  358,\r
- /*   810 */   351,  270,  314,  147,  120,   10,  195,   16,  237,  208,\r
- /*   820 */    48,   47,  313,  204,  340,   97,  284,   87,    1,  227,\r
- /*   830 */     7,  249,  112,   85,  123,  150,  205,  237,  202,  141,\r
- /*   840 */   285,  329,   84,  124,  126,    6,  192,  215,  284,  244,\r
- /*   850 */    44,  205,  284,  202,   90,  179,  237,  188,  124,  142,\r
- /*   860 */   148,  192,  285,   88,   28,  163,  285,   48,   47,  313,\r
- /*   870 */   204,  340,  284,  284,   87,    1,   96,    7,  315,  115,\r
- /*   880 */   178,   46,  186,  205,  219,  202,  131,  105,  237,   84,\r
- /*   890 */   124,   95,  312,  192,  215,  190,  106,   44,  237,  358,\r
- /*   900 */   351,  125,  314,  237,  327,   18,  322,  140,  237,   19,\r
- /*   910 */   275,   16,  264,  237,   48,   47,  313,  204,  340,    9,\r
- /*   920 */   284,   87,    1,   41,    7,  345,  115,  178,   94,  458,\r
- /*   930 */   205,  127,  202,  254,  129,  329,   84,  124,  285,    6,\r
- /*   940 */   192,  215,   89,  237,   44,  205,  237,  202,  138,   12,\r
- /*   950 */    91,   92,  124,  144,  301,  192,  197,  114,   28,  160,\r
- /*   960 */   301,   48,   47,  313,  204,  340,  301,  301,   87,    1,\r
- /*   970 */   301,    7,  315,  115,  174,  301,  337,  205,  219,  202,\r
- /*   980 */   301,  105,  301,   84,  124,  301,  301,  192,  215,  332,\r
- /*   990 */   301,   44,  301,  358,  351,  301,  314,  301,  326,   18,\r
- /*  1000 */   322,  301,  301,  301,  301,   16,  301,  301,   48,   47,\r
- /*  1010 */   313,  204,  340,  301,  301,   87,    1,  301,    7,  315,\r
- /*  1020 */   107,  172,  301,  276,  205,  219,  202,  301,  105,  301,\r
- /*  1030 */    84,  124,  301,  301,  192,  180,  274,  301,   44,  301,\r
- /*  1040 */   358,  351,  301,  314,  301,  301,  301,  301,  301,  301,\r
- /*  1050 */   301,  301,   16,  301,  301,   48,   47,  313,  204,  340,\r
- /*  1060 */   301,  301,   87,    1,  301,    7,  315,  107,  178,  301,\r
- /*  1070 */   257,  205,  219,  202,  301,  105,  301,   84,  124,  301,\r
- /*  1080 */   301,  192,  215,  301,  301,   44,  301,  358,  351,  301,\r
- /*  1090 */   314,  301,  301,  301,  301,  301,  301,  301,  301,   16,\r
- /*  1100 */   301,  301,   48,   47,  313,  204,  340,  301,  301,   87,\r
- /*  1110 */     1,  301,    7,  315,  108,  178,  301,  231,  205,  219,\r
- /*  1120 */   202,  301,  105,  301,   84,  124,  301,  301,  192,  215,\r
- /*  1130 */   301,  301,   44,  301,  358,  351,  301,  314,  301,  301,\r
- /*  1140 */   301,  301,  301,  301,  301,  301,   16,  301,  301,   48,\r
- /*  1150 */    47,  313,  204,  340,  301,  301,   87,    1,  301,    7,\r
- /*  1160 */   315,  115,  171,  301,  286,  205,  219,  202,  301,  105,\r
- /*  1170 */   301,   84,  124,  301,  301,  192,  215,  301,  301,   44,\r
- /*  1180 */   301,  358,  351,  301,  314,  301,  301,  301,  301,  301,\r
- /*  1190 */   301,  301,  301,   28,  301,  301,   48,   47,  313,  204,\r
- /*  1200 */   340,  301,  301,   87,    1,  301,    7,  315,  107,  178,\r
- /*  1210 */   301,  300,  205,  219,  202,  301,  105,  301,   84,  124,\r
- /*  1220 */   301,  301,  192,  215,  301,  301,   44,  301,  358,  351,\r
- /*  1230 */   315,  314,  301,  301,  287,  301,  219,  301,  301,  105,\r
- /*  1240 */    16,  301,  301,   48,   47,  313,  204,  340,  301,  301,\r
- /*  1250 */    87,  358,  351,    7,  314,  107,  176,  301,  301,  205,\r
- /*  1260 */   301,  202,  301,  133,  301,   84,  124,  301,  165,  192,\r
- /*  1270 */   215,  301,  301,   44,  301,  301,  284,   24,   23,  315,\r
- /*  1280 */   301,  301,  301,  177,  301,  219,   82,   16,  105,  301,\r
- /*  1290 */    48,   47,  313,  204,  340,  301,  318,   87,  315,  301,\r
- /*  1300 */   358,  351,  177,  314,  219,   82,  301,  105,  301,  301,\r
- /*  1310 */   301,  301,   84,  335,  301,  318,  301,  301,  301,  358,\r
- /*  1320 */   351,  301,  314,  301,  301,  301,  301,  301,  301,  315,\r
- /*  1330 */   301,  184,  334,  100,  301,  101,   51,  121,   99,  301,\r
- /*  1340 */   301,  301,  301,  301,  301,  301,  318,  301,  315,  301,\r
- /*  1350 */   358,  351,  181,  314,  219,   49,  118,  105,  301,  301,\r
- /*  1360 */   301,  301,  301,  301,  301,  318,  301,  315,  301,  358,\r
- /*  1370 */   351,  173,  314,  219,   71,  242,  105,  301,  301,  301,\r
- /*  1380 */   301,  301,  301,  301,  318,  301,  315,  301,  358,  351,\r
- /*  1390 */   222,  314,  219,   59,  301,  105,  301,  301,  301,  301,\r
- /*  1400 */   301,  301,  301,  318,  301,  301,  301,  358,  351,  301,\r
- /*  1410 */   314,  301,  315,  301,  301,  301,  222,  193,  219,   56,\r
- /*  1420 */   301,  105,  301,  301,  218,  301,  301,  301,  301,  318,\r
- /*  1430 */   301,  315,  301,  358,  351,  222,  314,  219,   59,  301,\r
- /*  1440 */   105,  301,  301,  301,  301,  301,  301,  301,  318,  301,\r
- /*  1450 */   315,  301,  358,  351,  222,  314,  219,   59,  301,  105,\r
- /*  1460 */   301,  301,  210,  301,  301,  301,  301,  318,  301,  315,\r
- /*  1470 */   301,  358,  351,  222,  314,  219,   77,  301,  105,  301,\r
- /*  1480 */   301,  359,  301,  301,  301,  301,  318,  301,  301,  301,\r
- /*  1490 */   358,  351,  145,  314,  301,  315,  301,  165,  301,  222,\r
- /*  1500 */   301,  219,   81,  301,  105,  284,   24,   23,  301,  301,\r
- /*  1510 */   301,  301,  318,  301,  315,  301,  358,  351,  222,  314,\r
- /*  1520 */   219,   62,  301,  105,  301,  301,  301,  301,  301,  301,\r
- /*  1530 */   301,  318,  301,  315,  301,  358,  351,  222,  314,  219,\r
- /*  1540 */    54,  301,  105,  301,  301,  301,  301,  301,  301,  301,\r
- /*  1550 */   318,  301,  315,  301,  358,  351,  222,  314,  219,   79,\r
- /*  1560 */   301,  105,  301,  301,  301,  301,  301,  301,  301,  318,\r
- /*  1570 */   301,  301,  301,  358,  351,  135,  314,  301,  315,  301,\r
- /*  1580 */   165,  301,  222,  301,  219,   60,  301,  105,  284,   24,\r
- /*  1590 */    23,  301,  301,  301,  301,  318,  301,  315,  301,  358,\r
- /*  1600 */   351,  222,  314,  219,   65,  301,  105,  301,  301,  301,\r
- /*  1610 */   301,  301,  301,  301,  318,  301,  315,  301,  358,  351,\r
- /*  1620 */   222,  314,  219,   55,  301,  105,  301,  301,  301,  301,\r
- /*  1630 */   301,  301,  301,  318,  301,  315,  301,  358,  351,  222,\r
- /*  1640 */   314,  219,   58,  301,  105,  301,  301,  301,  301,  301,\r
- /*  1650 */   301,  301,  318,  301,  301,  301,  358,  351,  151,  314,\r
- /*  1660 */   301,  315,  301,  165,  301,  222,  301,  219,   75,  301,\r
- /*  1670 */   105,  284,   24,   23,  301,  301,  301,  301,  318,  301,\r
- /*  1680 */   315,  301,  358,  351,  222,  314,  219,   63,  301,  105,\r
- /*  1690 */   301,  301,  301,  301,  301,  301,  301,  318,  301,  315,\r
- /*  1700 */   301,  358,  351,  222,  314,  219,   72,  301,  105,  301,\r
- /*  1710 */   301,  301,  301,  301,  301,  301,  318,  301,  315,  301,\r
- /*  1720 */   358,  351,  222,  314,  219,   69,  301,  105,  301,  301,\r
- /*  1730 */   301,  301,  301,  301,  301,  318,  301,  301,  301,  358,\r
- /*  1740 */   351,  301,  314,  301,  315,  301,  301,  301,  222,  301,\r
- /*  1750 */   185,   61,  301,  105,  301,  301,  301,  301,  301,  301,\r
- /*  1760 */   301,  318,  301,  315,  301,  358,  351,  222,  314,  219,\r
- /*  1770 */    67,  301,  105,  301,  301,  301,  301,  301,  301,  301,\r
- /*  1780 */   318,  301,  315,  301,  358,  351,  222,  314,  219,   74,\r
- /*  1790 */   301,  105,  301,  301,  301,  301,  301,  301,  301,  318,\r
- /*  1800 */   301,  315,  301,  358,  351,  222,  314,  219,   80,  301,\r
- /*  1810 */   105,  301,  301,  301,  301,  301,  301,  301,  318,  301,\r
- /*  1820 */   301,  301,  358,  351,  301,  314,  301,  315,  301,  301,\r
- /*  1830 */   301,  222,  301,  219,   66,  301,  105,  301,  301,  301,\r
- /*  1840 */   301,  301,  301,  301,  318,  301,  315,  301,  358,  351,\r
- /*  1850 */   222,  314,  219,   70,  301,  105,  301,  301,  301,  301,\r
- /*  1860 */   301,  301,  301,  318,  301,  315,  301,  358,  351,  222,\r
- /*  1870 */   314,  219,   76,  301,  105,  301,  301,  301,  301,  301,\r
- /*  1880 */   301,  301,  318,  301,  315,  301,  358,  351,  222,  314,\r
- /*  1890 */   219,   64,  301,  105,  301,  301,  301,  301,  301,  301,\r
- /*  1900 */   301,  318,  301,  301,  301,  358,  351,  301,  314,  301,\r
- /*  1910 */   315,  301,  301,  301,  222,  301,  219,   57,  301,  105,\r
- /*  1920 */   301,  301,  301,  301,  301,  301,  301,  318,  301,  315,\r
- /*  1930 */   301,  358,  351,  222,  314,  219,   50,  301,  105,  301,\r
- /*  1940 */   301,  301,  301,  301,  301,  301,  318,  301,  315,  301,\r
- /*  1950 */   358,  351,  222,  314,  219,   78,  301,  105,  301,  301,\r
- /*  1960 */   301,  301,  301,  301,  301,  318,  301,  315,  301,  358,\r
- /*  1970 */   351,  222,  314,  219,   68,  301,  105,  301,  301,  301,\r
- /*  1980 */   301,  301,  301,  301,  318,  301,  301,  301,  358,  351,\r
- /*  1990 */   301,  314,  301,  315,  301,  301,  301,  222,  301,  219,\r
- /*  2000 */    73,  301,  105,  301,  301,  301,  301,  301,  301,  301,\r
- /*  2010 */   318,  301,  315,  301,  358,  351,  272,  314,  219,  301,\r
- /*  2020 */   301,  105,  301,  301,  301,  301,  301,  301,  301,  301,\r
- /*  2030 */   301,  301,  301,  358,  351,  301,  314,\r
-    );\r
-    static public $yy_lookahead = array(\r
- /*     0 */     1,   77,   78,   79,    3,    4,    5,    6,    7,    8,\r
- /*    10 */     9,    2,   13,   12,   12,   52,   46,   13,   19,   18,\r
- /*    20 */    57,   20,   52,   19,   54,   16,   25,   14,   58,   28,\r
- /*    30 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
- /*    40 */    41,   42,   43,   44,    4,    5,    6,   16,   46,    9,\r
- /*    50 */    10,   11,   75,   76,   77,   78,   79,  103,   59,   60,\r
- /*    60 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,\r
- /*    70 */     1,   78,   13,    1,   83,   82,   14,   84,   19,   88,\r
- /*    80 */    87,   83,   13,   52,    1,   13,   88,   96,   19,   17,\r
- /*    90 */    17,   19,   99,  100,   96,  102,   13,   90,   91,   14,\r
- /*   100 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
- /*   110 */    41,   42,   43,   44,   31,   32,   33,   34,   35,   36,\r
- /*   120 */    37,   38,   39,   40,   41,   42,   43,   44,   59,   60,\r
- /*   130 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,\r
- /*   140 */     1,   30,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   150 */    67,   68,   69,   70,    1,    2,   12,   15,   19,   15,\r
- /*   160 */    16,   12,   13,   24,   15,  104,   22,  106,  107,   58,\r
- /*   170 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
- /*   180 */    41,   42,   43,   44,   31,   32,   33,   34,   35,   36,\r
- /*   190 */    37,   38,   39,   40,   41,   42,   43,   44,   59,   60,\r
- /*   200 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,\r
- /*   210 */     1,   15,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   220 */    67,   68,   69,   70,    1,   29,   12,   13,   19,   15,\r
- /*   230 */    12,  106,  107,   15,   16,  103,   13,  105,   14,   15,\r
- /*   240 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
- /*   250 */    41,   42,   43,   44,   31,   32,   33,   34,   35,   36,\r
- /*   260 */    37,   38,   39,   40,   41,   42,   43,   44,   59,   60,\r
- /*   270 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,\r
- /*   280 */    56,   15,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   290 */    67,   68,   69,   70,    1,   78,  103,   84,  105,   82,\r
- /*   300 */    87,   84,   85,   86,   87,   13,   13,   12,    1,   14,\r
- /*   310 */    15,   19,   95,   88,   22,  102,   99,  100,   79,  102,\r
- /*   320 */    81,   55,   97,   98,   31,   32,   33,   34,   35,   36,\r
- /*   330 */    37,   38,   39,   40,   41,   42,   43,   44,   31,   32,\r
- /*   340 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
- /*   350 */    43,   44,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   360 */    67,   68,   69,   70,    1,   58,   59,   60,   61,   62,\r
- /*   370 */    63,   64,   65,   66,   67,   68,   69,   70,    1,   13,\r
- /*   380 */    13,   13,   94,   13,   21,   19,   19,   19,   22,   19,\r
- /*   390 */    13,  106,  107,  105,   31,   32,   33,   34,   35,   36,\r
- /*   400 */    37,   38,   39,   40,   41,   42,   43,   44,   31,   32,\r
- /*   410 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
- /*   420 */    43,   44,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   430 */    67,   68,   69,   70,   16,   17,   59,   60,   61,   62,\r
- /*   440 */    63,   64,   65,   66,   67,   68,   69,   70,    1,   78,\r
- /*   450 */    21,    1,   15,   82,   15,   84,   85,   86,   87,   30,\r
- /*   460 */    13,   12,   13,   13,   15,   17,   95,   17,   22,   19,\r
- /*   470 */    99,  100,   54,  102,   12,   47,   27,   15,   31,   32,\r
- /*   480 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
- /*   490 */    43,   44,    1,   26,   12,   14,   46,   15,   16,   12,\r
- /*   500 */    52,   27,   15,   78,   54,   57,   59,   60,   61,   62,\r
- /*   510 */    63,   64,   65,   66,   67,   68,   69,   70,   72,   45,\r
- /*   520 */    14,   15,   31,   32,   33,   34,   35,   36,   37,   38,\r
- /*   530 */    39,   40,   41,   42,   43,   44,    1,   55,   47,  114,\r
- /*   540 */    12,   12,   55,   15,   15,   12,    1,   14,   15,   78,\r
- /*   550 */    59,   60,   61,   62,   63,   64,   65,   66,   67,   68,\r
- /*   560 */    69,   70,   29,   27,   19,   15,   31,   32,   33,   34,\r
- /*   570 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,\r
- /*   580 */     1,   13,   46,   55,  113,  114,   12,   19,   12,   15,\r
- /*   590 */    54,   15,   13,   83,   59,   60,   61,   62,   63,   64,\r
- /*   600 */    65,   66,   67,   68,   69,   70,   96,   72,  105,   15,\r
- /*   610 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
- /*   620 */    41,   42,   43,   44,    1,   13,   13,   46,   13,  108,\r
- /*   630 */    13,   19,   19,   19,   19,   54,   19,   83,   59,   60,\r
- /*   640 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,\r
- /*   650 */    96,   14,   19,   30,   31,   32,   33,   34,   35,   36,\r
- /*   660 */    37,   38,   39,   40,   41,   42,   43,   44,    1,   13,\r
- /*   670 */    13,   13,   13,   13,   13,   19,   19,   19,   19,   19,\r
- /*   680 */    19,   13,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   690 */    67,   68,   69,   70,   45,   29,   14,   47,   31,   32,\r
- /*   700 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
- /*   710 */    43,   44,    1,   45,   47,   15,   13,  101,   47,   17,\r
- /*   720 */    22,   46,    2,   16,  108,   83,   59,   60,   61,   62,\r
- /*   730 */    63,   64,   65,   66,   67,   68,   69,   70,   96,   19,\r
- /*   740 */    52,    2,   31,   32,   33,   34,   35,   36,   37,   38,\r
- /*   750 */    39,   40,   41,   42,   43,   44,   54,   13,   46,   13,\r
- /*   760 */    15,   13,   48,   19,   15,   23,   13,   19,   96,   83,\r
- /*   770 */    59,   60,   61,   62,   63,   64,   65,   66,   67,   68,\r
- /*   780 */    69,   70,   96,   12,   58,   14,   15,   56,   78,   18,\r
- /*   790 */    46,   20,   82,   45,   84,   85,   25,   87,   54,   28,\r
- /*   800 */    29,   12,   13,   32,   15,   95,   93,  101,   16,   99,\r
- /*   810 */   100,   29,  102,   83,  108,   19,   27,   46,  105,  109,\r
- /*   820 */    49,   50,   51,   52,   53,   93,   96,   56,   57,   58,\r
- /*   830 */    12,   56,   14,   15,   19,   83,   18,  105,   20,   83,\r
- /*   840 */   110,    8,   71,   25,   93,   12,   28,   29,   96,   13,\r
- /*   850 */    32,   18,   96,   20,   15,   19,  105,   26,   25,   83,\r
- /*   860 */    83,   28,  110,  103,   46,   88,  110,   49,   50,   51,\r
- /*   870 */    52,   53,   96,   96,   56,   57,   93,   12,   78,   14,\r
- /*   880 */    15,   45,   82,   18,   84,   20,   93,   87,  105,   71,\r
- /*   890 */    25,   93,  107,   28,   29,   95,   93,   32,  105,   99,\r
- /*   900 */   100,   93,  102,  105,   71,   72,   73,   83,  105,   92,\r
- /*   910 */    10,   46,   90,  105,   49,   50,   51,   52,   53,   16,\r
- /*   920 */    96,   56,   57,    2,   12,  104,   14,   15,   80,   26,\r
- /*   930 */    18,   93,   20,   19,   93,    8,   71,   25,  110,   12,\r
- /*   940 */    28,   29,   89,  105,   32,   18,  105,   20,  103,   46,\r
- /*   950 */    89,   89,   25,  103,  115,   28,   92,   54,   46,   89,\r
- /*   960 */   115,   49,   50,   51,   52,   53,  115,  115,   56,   57,\r
- /*   970 */   115,   12,   78,   14,   15,  115,   82,   18,   84,   20,\r
- /*   980 */   115,   87,  115,   71,   25,  115,  115,   28,   29,   95,\r
- /*   990 */   115,   32,  115,   99,  100,  115,  102,  115,   71,   72,\r
- /*  1000 */    73,  115,  115,  115,  115,   46,  115,  115,   49,   50,\r
- /*  1010 */    51,   52,   53,  115,  115,   56,   57,  115,   12,   78,\r
- /*  1020 */    14,   15,  115,   82,   18,   84,   20,  115,   87,  115,\r
- /*  1030 */    71,   25,  115,  115,   28,   29,   95,  115,   32,  115,\r
- /*  1040 */    99,  100,  115,  102,  115,  115,  115,  115,  115,  115,\r
- /*  1050 */   115,  115,   46,  115,  115,   49,   50,   51,   52,   53,\r
- /*  1060 */   115,  115,   56,   57,  115,   12,   78,   14,   15,  115,\r
- /*  1070 */    82,   18,   84,   20,  115,   87,  115,   71,   25,  115,\r
- /*  1080 */   115,   28,   29,  115,  115,   32,  115,   99,  100,  115,\r
- /*  1090 */   102,  115,  115,  115,  115,  115,  115,  115,  115,   46,\r
- /*  1100 */   115,  115,   49,   50,   51,   52,   53,  115,  115,   56,\r
- /*  1110 */    57,  115,   12,   78,   14,   15,  115,   82,   18,   84,\r
- /*  1120 */    20,  115,   87,  115,   71,   25,  115,  115,   28,   29,\r
- /*  1130 */   115,  115,   32,  115,   99,  100,  115,  102,  115,  115,\r
- /*  1140 */   115,  115,  115,  115,  115,  115,   46,  115,  115,   49,\r
- /*  1150 */    50,   51,   52,   53,  115,  115,   56,   57,  115,   12,\r
- /*  1160 */    78,   14,   15,  115,   82,   18,   84,   20,  115,   87,\r
- /*  1170 */   115,   71,   25,  115,  115,   28,   29,  115,  115,   32,\r
- /*  1180 */   115,   99,  100,  115,  102,  115,  115,  115,  115,  115,\r
- /*  1190 */   115,  115,  115,   46,  115,  115,   49,   50,   51,   52,\r
- /*  1200 */    53,  115,  115,   56,   57,  115,   12,   78,   14,   15,\r
- /*  1210 */   115,   82,   18,   84,   20,  115,   87,  115,   71,   25,\r
- /*  1220 */   115,  115,   28,   29,  115,  115,   32,  115,   99,  100,\r
- /*  1230 */    78,  102,  115,  115,   82,  115,   84,  115,  115,   87,\r
- /*  1240 */    46,  115,  115,   49,   50,   51,   52,   53,  115,  115,\r
- /*  1250 */    56,   99,  100,   12,  102,   14,   15,  115,  115,   18,\r
- /*  1260 */   115,   20,  115,   83,  115,   71,   25,  115,   88,   28,\r
- /*  1270 */    29,  115,  115,   32,  115,  115,   96,   97,   98,   78,\r
- /*  1280 */   115,  115,  115,   82,  115,   84,   85,   46,   87,  115,\r
- /*  1290 */    49,   50,   51,   52,   53,  115,   95,   56,   78,  115,\r
- /*  1300 */    99,  100,   82,  102,   84,   85,  115,   87,  115,  115,\r
- /*  1310 */   115,  115,   71,  112,  115,   95,  115,  115,  115,   99,\r
- /*  1320 */   100,  115,  102,  115,  115,  115,  115,  115,  115,   78,\r
- /*  1330 */   115,  111,  112,   82,  115,   84,   85,   86,   87,  115,\r
- /*  1340 */   115,  115,  115,  115,  115,  115,   95,  115,   78,  115,\r
- /*  1350 */    99,  100,   82,  102,   84,   85,   86,   87,  115,  115,\r
- /*  1360 */   115,  115,  115,  115,  115,   95,  115,   78,  115,   99,\r
- /*  1370 */   100,   82,  102,   84,   85,   86,   87,  115,  115,  115,\r
- /*  1380 */   115,  115,  115,  115,   95,  115,   78,  115,   99,  100,\r
- /*  1390 */    82,  102,   84,   85,  115,   87,  115,  115,  115,  115,\r
- /*  1400 */   115,  115,  115,   95,  115,  115,  115,   99,  100,  115,\r
- /*  1410 */   102,  115,   78,  115,  115,  115,   82,  109,   84,   85,\r
- /*  1420 */   115,   87,  115,  115,   90,  115,  115,  115,  115,   95,\r
- /*  1430 */   115,   78,  115,   99,  100,   82,  102,   84,   85,  115,\r
- /*  1440 */    87,  115,  115,  115,  115,  115,  115,  115,   95,  115,\r
- /*  1450 */    78,  115,   99,  100,   82,  102,   84,   85,  115,   87,\r
- /*  1460 */   115,  115,  109,  115,  115,  115,  115,   95,  115,   78,\r
- /*  1470 */   115,   99,  100,   82,  102,   84,   85,  115,   87,  115,\r
- /*  1480 */   115,  109,  115,  115,  115,  115,   95,  115,  115,  115,\r
- /*  1490 */    99,  100,   83,  102,  115,   78,  115,   88,  115,   82,\r
- /*  1500 */   115,   84,   85,  115,   87,   96,   97,   98,  115,  115,\r
- /*  1510 */   115,  115,   95,  115,   78,  115,   99,  100,   82,  102,\r
- /*  1520 */    84,   85,  115,   87,  115,  115,  115,  115,  115,  115,\r
- /*  1530 */   115,   95,  115,   78,  115,   99,  100,   82,  102,   84,\r
- /*  1540 */    85,  115,   87,  115,  115,  115,  115,  115,  115,  115,\r
- /*  1550 */    95,  115,   78,  115,   99,  100,   82,  102,   84,   85,\r
- /*  1560 */   115,   87,  115,  115,  115,  115,  115,  115,  115,   95,\r
- /*  1570 */   115,  115,  115,   99,  100,   83,  102,  115,   78,  115,\r
- /*  1580 */    88,  115,   82,  115,   84,   85,  115,   87,   96,   97,\r
- /*  1590 */    98,  115,  115,  115,  115,   95,  115,   78,  115,   99,\r
- /*  1600 */   100,   82,  102,   84,   85,  115,   87,  115,  115,  115,\r
- /*  1610 */   115,  115,  115,  115,   95,  115,   78,  115,   99,  100,\r
- /*  1620 */    82,  102,   84,   85,  115,   87,  115,  115,  115,  115,\r
- /*  1630 */   115,  115,  115,   95,  115,   78,  115,   99,  100,   82,\r
- /*  1640 */   102,   84,   85,  115,   87,  115,  115,  115,  115,  115,\r
- /*  1650 */   115,  115,   95,  115,  115,  115,   99,  100,   83,  102,\r
- /*  1660 */   115,   78,  115,   88,  115,   82,  115,   84,   85,  115,\r
- /*  1670 */    87,   96,   97,   98,  115,  115,  115,  115,   95,  115,\r
- /*  1680 */    78,  115,   99,  100,   82,  102,   84,   85,  115,   87,\r
- /*  1690 */   115,  115,  115,  115,  115,  115,  115,   95,  115,   78,\r
- /*  1700 */   115,   99,  100,   82,  102,   84,   85,  115,   87,  115,\r
- /*  1710 */   115,  115,  115,  115,  115,  115,   95,  115,   78,  115,\r
- /*  1720 */    99,  100,   82,  102,   84,   85,  115,   87,  115,  115,\r
- /*  1730 */   115,  115,  115,  115,  115,   95,  115,  115,  115,   99,\r
- /*  1740 */   100,  115,  102,  115,   78,  115,  115,  115,   82,  115,\r
- /*  1750 */    84,   85,  115,   87,  115,  115,  115,  115,  115,  115,\r
- /*  1760 */   115,   95,  115,   78,  115,   99,  100,   82,  102,   84,\r
- /*  1770 */    85,  115,   87,  115,  115,  115,  115,  115,  115,  115,\r
- /*  1780 */    95,  115,   78,  115,   99,  100,   82,  102,   84,   85,\r
- /*  1790 */   115,   87,  115,  115,  115,  115,  115,  115,  115,   95,\r
- /*  1800 */   115,   78,  115,   99,  100,   82,  102,   84,   85,  115,\r
- /*  1810 */    87,  115,  115,  115,  115,  115,  115,  115,   95,  115,\r
- /*  1820 */   115,  115,   99,  100,  115,  102,  115,   78,  115,  115,\r
- /*  1830 */   115,   82,  115,   84,   85,  115,   87,  115,  115,  115,\r
- /*  1840 */   115,  115,  115,  115,   95,  115,   78,  115,   99,  100,\r
- /*  1850 */    82,  102,   84,   85,  115,   87,  115,  115,  115,  115,\r
- /*  1860 */   115,  115,  115,   95,  115,   78,  115,   99,  100,   82,\r
- /*  1870 */   102,   84,   85,  115,   87,  115,  115,  115,  115,  115,\r
- /*  1880 */   115,  115,   95,  115,   78,  115,   99,  100,   82,  102,\r
- /*  1890 */    84,   85,  115,   87,  115,  115,  115,  115,  115,  115,\r
- /*  1900 */   115,   95,  115,  115,  115,   99,  100,  115,  102,  115,\r
- /*  1910 */    78,  115,  115,  115,   82,  115,   84,   85,  115,   87,\r
- /*  1920 */   115,  115,  115,  115,  115,  115,  115,   95,  115,   78,\r
- /*  1930 */   115,   99,  100,   82,  102,   84,   85,  115,   87,  115,\r
- /*  1940 */   115,  115,  115,  115,  115,  115,   95,  115,   78,  115,\r
- /*  1950 */    99,  100,   82,  102,   84,   85,  115,   87,  115,  115,\r
- /*  1960 */   115,  115,  115,  115,  115,   95,  115,   78,  115,   99,\r
- /*  1970 */   100,   82,  102,   84,   85,  115,   87,  115,  115,  115,\r
- /*  1980 */   115,  115,  115,  115,   95,  115,  115,  115,   99,  100,\r
- /*  1990 */   115,  102,  115,   78,  115,  115,  115,   82,  115,   84,\r
- /*  2000 */    85,  115,   87,  115,  115,  115,  115,  115,  115,  115,\r
- /*  2010 */    95,  115,   78,  115,   99,  100,   82,  102,   84,  115,\r
- /*  2020 */   115,   87,  115,  115,  115,  115,  115,  115,  115,  115,\r
- /*  2030 */   115,  115,  115,   99,  100,  115,  102,\r
-);\r
-    const YY_SHIFT_USE_DFLT = -38;\r
-    const YY_SHIFT_MAX = 224;\r
-    static public $yy_shift_ofst = array(\r
- /*     0 */     1,  959,  912,  865,  959,  912,  818,  818,  865, 1147,\r
- /*    10 */  1100,  865,  865,  771,  865,  865,  865,  865,  865,  865,\r
- /*    20 */   865,  865,  865,  865,  865,  865,  865,  865,  865,  865,\r
- /*    30 */   865,  865,  865,  865,  865,  865,  865,  865,  865, 1006,\r
- /*    40 */  1053, 1053, 1194, 1194, 1194, 1194, 1241, 1194, 1194,   -1,\r
- /*    50 */   139,   69,  209,  209,  293,  153,   83,  223,  307,  623,\r
- /*    60 */   667,  535,  579,  491,  447,  363,  377,  711,  711,  711,\r
- /*    70 */   711,  711,  711,  711,  711,  711,  711,  711,  711,  711,\r
- /*    80 */   711,  711,  711,    1,  927,  450,   72,  224,  448,  720,\r
- /*    90 */   545,  720,  720,  833,   40,  482,  144,  487,  366,  418,\r
- /*   100 */   836,  292,  506,  574,  462,  702,  462,  462,  529,  462,\r
- /*   110 */   462,  462,  576,  462,  506,  529,  462,  462,  614,  614,\r
- /*   120 */    73,  614,   73,  481,  633,  449,  789,  218,  295,  214,\r
- /*   130 */   528,  149,  568,  613,  370,    4,  -37,    2,  -37,  368,\r
- /*   140 */   367,   59,  612,  661,  -37,  617,  -37,  615,  656,  657,\r
- /*   150 */   660,  659,  658,  -37,  914,  675,   73,   73,  900,  481,\r
- /*   160 */   921,   73,  914,  -38,  -38,  -38,  -38,  -38,  -38,  -30,\r
- /*   170 */   533,  744,  903,  748,  536,  266,  581,  474,  581,  196,\r
- /*   180 */    31,  668,    9,  429,  111,  446,  831,   13,   85,  142,\r
- /*   190 */   467,  439,  437,  428,   62,  637,  839,  682,  726,  753,\r
- /*   200 */   749,  731,  815,  775,  782,  796,  745,  746,  671,  700,\r
- /*   210 */   650,  675,  707,  714,  739,  688,  742,  712,  703,  698,\r
- /*   220 */   792,  666,  649,  550,  594,\r
-);\r
-    const YY_REDUCE_USE_DFLT = -77;\r
-    const YY_REDUCE_MAX = 168;\r
-    static public $yy_reduce_ofst = array(\r
- /*     0 */   -23, 1220,  217, 1372, 1201, 1270, 1251,  371,  710, 1289,\r
- /*    10 */  1334, 1308, 1353, 1557, 1538, 1583, 1602, 1685, 1666, 1519,\r
- /*    20 */  1640, 1621, 1704, 1417, 1391, 1436, 1474, 1723, 1500, 1455,\r
- /*    30 */  1889, 1915, 1832, 1870, 1787, 1768, 1806, 1851, 1749,  800,\r
- /*    40 */   894,  941, 1035,  988, 1152,   -7, 1934, 1129, 1082, 1180,\r
- /*    50 */  1409, 1492, 1492, 1575,  225,  225,  225,  225,  225,  225,\r
- /*    60 */   225,  225,  225,  225,  225,  225,  225,  225,  225,  225,\r
- /*    70 */   225,  225,  225,  225,  225,  225,  225,  225,  225,  225,\r
- /*    80 */   225,  225,  225,  -76,  471,  777,   -9,  213,   61,  730,\r
- /*    90 */    -2,  756,  752,  425,  239,  193,  288,  193,  642,  285,\r
- /*   100 */   686,  642,  616,  803,  713,  285,  132,  732,  798,  793,\r
- /*   110 */   751,  783,  732,  808,  706,  732,  838,  841,  824,  776,\r
- /*   120 */   125,  510,  285,    7,  554,  503,  503,  503,  521,  503,\r
- /*   130 */   503,  503,  672,  672,  672,  672,  821,  -46,  821,  672,\r
- /*   140 */   672,  672,  672,  672,  821,  672,  821,  672,  672,  672,\r
- /*   150 */   672,  672,  672,  821,  817,  760,  785,  785,  848,  822,\r
- /*   160 */   828,  785,  864,  853,  845,  870,  861,  850,  862,\r
-);\r
-    static public $yyExpectedTokens = array(\r
-        /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 12, 18, 20, 25, 28, ),\r
-        /* 1 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 2 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 3 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 4 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 5 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 6 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 7 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 8 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 9 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 10 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 11 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 12 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 13 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 58, 71, ),\r
-        /* 14 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 15 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 16 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 17 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 18 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 19 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 20 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 21 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 22 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 23 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 24 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 25 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 26 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 27 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 28 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 29 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 30 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 31 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 32 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 33 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 34 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 35 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 36 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 37 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 38 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 39 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 40 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 41 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 57, 71, ),\r
-        /* 42 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 43 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 44 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 45 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 46 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 47 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 48 */ array(12, 14, 15, 18, 20, 25, 28, 29, 32, 46, 49, 50, 51, 52, 53, 56, 71, ),\r
-        /* 49 */ array(1, 13, 19, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 50 */ array(1, 19, 24, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 51 */ array(1, 13, 19, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 52 */ array(1, 19, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 53 */ array(1, 19, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 54 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 55 */ array(1, 2, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 56 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 57 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 58 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 59 */ array(1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 60 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 61 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 72, ),\r
-        /* 62 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 63 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 64 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 65 */ array(1, 21, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 66 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 67 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 68 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 69 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 70 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 71 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 72 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 73 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 74 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 75 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 76 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 77 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 78 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 79 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 80 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 81 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 82 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ),\r
-        /* 83 */ array(3, 4, 5, 6, 7, 8, 9, 12, 18, 20, 25, 28, ),\r
-        /* 84 */ array(8, 12, 18, 20, 25, 28, 71, 72, 73, ),\r
-        /* 85 */ array(1, 13, 17, 19, 46, 54, ),\r
-        /* 86 */ array(1, 13, 17, 19, ),\r
-        /* 87 */ array(14, 15, 56, ),\r
-        /* 88 */ array(17, 52, 57, ),\r
-        /* 89 */ array(2, 19, ),\r
-        /* 90 */ array(1, 19, ),\r
-        /* 91 */ array(2, 19, ),\r
-        /* 92 */ array(2, 19, ),\r
-        /* 93 */ array(8, 12, 18, 20, 25, 28, 71, 72, 73, ),\r
-        /* 94 */ array(4, 5, 6, 9, 10, 11, ),\r
-        /* 95 */ array(12, 15, 16, 55, ),\r
-        /* 96 */ array(12, 15, 16, 22, ),\r
-        /* 97 */ array(12, 15, 55, ),\r
-        /* 98 */ array(13, 19, 22, ),\r
-        /* 99 */ array(16, 17, 54, ),\r
-        /* 100 */ array(13, 19, 45, ),\r
-        /* 101 */ array(13, 19, 22, ),\r
-        /* 102 */ array(14, 15, ),\r
-        /* 103 */ array(12, 15, ),\r
-        /* 104 */ array(12, 15, ),\r
-        /* 105 */ array(17, 54, ),\r
-        /* 106 */ array(12, 15, ),\r
-        /* 107 */ array(12, 15, ),\r
-        /* 108 */ array(12, 15, ),\r
-        /* 109 */ array(12, 15, ),\r
-        /* 110 */ array(12, 15, ),\r
-        /* 111 */ array(12, 15, ),\r
-        /* 112 */ array(12, 15, ),\r
-        /* 113 */ array(12, 15, ),\r
-        /* 114 */ array(14, 15, ),\r
-        /* 115 */ array(12, 15, ),\r
-        /* 116 */ array(12, 15, ),\r
-        /* 117 */ array(12, 15, ),\r
-        /* 118 */ array(19, ),\r
-        /* 119 */ array(19, ),\r
-        /* 120 */ array(17, ),\r
-        /* 121 */ array(19, ),\r
-        /* 122 */ array(17, ),\r
-        /* 123 */ array(14, ),\r
-        /* 124 */ array(19, ),\r
-        /* 125 */ array(12, 13, 15, 27, ),\r
-        /* 126 */ array(12, 13, 15, 27, ),\r
-        /* 127 */ array(12, 15, 16, ),\r
-        /* 128 */ array(12, 14, 15, ),\r
-        /* 129 */ array(12, 13, 15, ),\r
-        /* 130 */ array(12, 15, 55, ),\r
-        /* 131 */ array(12, 13, 15, ),\r
-        /* 132 */ array(13, 19, ),\r
-        /* 133 */ array(13, 19, ),\r
-        /* 134 */ array(13, 19, ),\r
-        /* 135 */ array(13, 19, ),\r
-        /* 136 */ array(52, 57, ),\r
-        /* 137 */ array(12, 46, ),\r
-        /* 138 */ array(52, 57, ),\r
-        /* 139 */ array(13, 19, ),\r
-        /* 140 */ array(13, 19, ),\r
-        /* 141 */ array(13, 19, ),\r
-        /* 142 */ array(13, 19, ),\r
-        /* 143 */ array(13, 19, ),\r
-        /* 144 */ array(52, 57, ),\r
-        /* 145 */ array(13, 19, ),\r
-        /* 146 */ array(52, 57, ),\r
-        /* 147 */ array(13, 19, ),\r
-        /* 148 */ array(13, 19, ),\r
-        /* 149 */ array(13, 19, ),\r
-        /* 150 */ array(13, 19, ),\r
-        /* 151 */ array(13, 19, ),\r
-        /* 152 */ array(13, 19, ),\r
-        /* 153 */ array(52, 57, ),\r
-        /* 154 */ array(19, ),\r
-        /* 155 */ array(46, ),\r
-        /* 156 */ array(17, ),\r
-        /* 157 */ array(17, ),\r
-        /* 158 */ array(10, ),\r
-        /* 159 */ array(14, ),\r
-        /* 160 */ array(2, ),\r
-        /* 161 */ array(17, ),\r
-        /* 162 */ array(19, ),\r
-        /* 163 */ array(),\r
-        /* 164 */ array(),\r
-        /* 165 */ array(),\r
-        /* 166 */ array(),\r
-        /* 167 */ array(),\r
-        /* 168 */ array(),\r
-        /* 169 */ array(46, 52, 54, 58, ),\r
-        /* 170 */ array(12, 14, 15, 29, ),\r
-        /* 171 */ array(13, 19, 46, 54, ),\r
-        /* 172 */ array(16, 26, 46, 54, ),\r
-        /* 173 */ array(13, 19, 45, ),\r
-        /* 174 */ array(27, 46, 54, ),\r
-        /* 175 */ array(15, 55, ),\r
-        /* 176 */ array(46, 54, ),\r
-        /* 177 */ array(27, 45, ),\r
-        /* 178 */ array(46, 54, ),\r
-        /* 179 */ array(15, 29, ),\r
-        /* 180 */ array(16, 52, ),\r
-        /* 181 */ array(13, 45, ),\r
-        /* 182 */ array(2, 16, ),\r
-        /* 183 */ array(21, 30, ),\r
-        /* 184 */ array(30, 58, ),\r
-        /* 185 */ array(22, 72, ),\r
-        /* 186 */ array(26, ),\r
-        /* 187 */ array(14, ),\r
-        /* 188 */ array(14, ),\r
-        /* 189 */ array(15, ),\r
-        /* 190 */ array(26, ),\r
-        /* 191 */ array(15, ),\r
-        /* 192 */ array(15, ),\r
-        /* 193 */ array(47, ),\r
-        /* 194 */ array(14, ),\r
-        /* 195 */ array(14, ),\r
-        /* 196 */ array(15, ),\r
-        /* 197 */ array(14, ),\r
-        /* 198 */ array(58, ),\r
-        /* 199 */ array(13, ),\r
-        /* 200 */ array(15, ),\r
-        /* 201 */ array(56, ),\r
-        /* 202 */ array(19, ),\r
-        /* 203 */ array(56, ),\r
-        /* 204 */ array(29, ),\r
-        /* 205 */ array(19, ),\r
-        /* 206 */ array(15, ),\r
-        /* 207 */ array(13, ),\r
-        /* 208 */ array(47, ),\r
-        /* 209 */ array(15, ),\r
-        /* 210 */ array(47, ),\r
-        /* 211 */ array(46, ),\r
-        /* 212 */ array(16, ),\r
-        /* 213 */ array(48, ),\r
-        /* 214 */ array(2, ),\r
-        /* 215 */ array(52, ),\r
-        /* 216 */ array(23, ),\r
-        /* 217 */ array(46, ),\r
-        /* 218 */ array(13, ),\r
-        /* 219 */ array(22, ),\r
-        /* 220 */ array(16, ),\r
-        /* 221 */ array(29, ),\r
-        /* 222 */ array(45, ),\r
-        /* 223 */ array(15, ),\r
-        /* 224 */ array(15, ),\r
-        /* 225 */ array(),\r
-        /* 226 */ array(),\r
-        /* 227 */ array(),\r
-        /* 228 */ array(),\r
-        /* 229 */ array(),\r
-        /* 230 */ array(),\r
-        /* 231 */ array(),\r
-        /* 232 */ array(),\r
-        /* 233 */ array(),\r
-        /* 234 */ array(),\r
-        /* 235 */ array(),\r
-        /* 236 */ array(),\r
-        /* 237 */ array(),\r
-        /* 238 */ array(),\r
-        /* 239 */ array(),\r
-        /* 240 */ array(),\r
-        /* 241 */ array(),\r
-        /* 242 */ array(),\r
-        /* 243 */ array(),\r
-        /* 244 */ array(),\r
-        /* 245 */ array(),\r
-        /* 246 */ array(),\r
-        /* 247 */ array(),\r
-        /* 248 */ array(),\r
-        /* 249 */ array(),\r
-        /* 250 */ array(),\r
-        /* 251 */ array(),\r
-        /* 252 */ array(),\r
-        /* 253 */ array(),\r
-        /* 254 */ array(),\r
-        /* 255 */ array(),\r
-        /* 256 */ array(),\r
-        /* 257 */ array(),\r
-        /* 258 */ array(),\r
-        /* 259 */ array(),\r
-        /* 260 */ array(),\r
-        /* 261 */ array(),\r
-        /* 262 */ array(),\r
-        /* 263 */ array(),\r
-        /* 264 */ array(),\r
-        /* 265 */ array(),\r
-        /* 266 */ array(),\r
-        /* 267 */ array(),\r
-        /* 268 */ array(),\r
-        /* 269 */ array(),\r
-        /* 270 */ array(),\r
-        /* 271 */ array(),\r
-        /* 272 */ array(),\r
-        /* 273 */ array(),\r
-        /* 274 */ array(),\r
-        /* 275 */ array(),\r
-        /* 276 */ array(),\r
-        /* 277 */ array(),\r
-        /* 278 */ array(),\r
-        /* 279 */ array(),\r
-        /* 280 */ array(),\r
-        /* 281 */ array(),\r
-        /* 282 */ array(),\r
-        /* 283 */ array(),\r
-        /* 284 */ array(),\r
-        /* 285 */ array(),\r
-        /* 286 */ array(),\r
-        /* 287 */ array(),\r
-        /* 288 */ array(),\r
-        /* 289 */ array(),\r
-        /* 290 */ array(),\r
-        /* 291 */ array(),\r
-        /* 292 */ array(),\r
-        /* 293 */ array(),\r
-        /* 294 */ array(),\r
-        /* 295 */ array(),\r
-        /* 296 */ array(),\r
-        /* 297 */ array(),\r
-        /* 298 */ array(),\r
-        /* 299 */ array(),\r
-        /* 300 */ array(),\r
-        /* 301 */ array(),\r
-        /* 302 */ array(),\r
-        /* 303 */ array(),\r
-        /* 304 */ array(),\r
-        /* 305 */ array(),\r
-        /* 306 */ array(),\r
-        /* 307 */ array(),\r
-        /* 308 */ array(),\r
-        /* 309 */ array(),\r
-        /* 310 */ array(),\r
-        /* 311 */ array(),\r
-        /* 312 */ array(),\r
-        /* 313 */ array(),\r
-        /* 314 */ array(),\r
-        /* 315 */ array(),\r
-        /* 316 */ array(),\r
-        /* 317 */ array(),\r
-        /* 318 */ array(),\r
-        /* 319 */ array(),\r
-        /* 320 */ array(),\r
-        /* 321 */ array(),\r
-        /* 322 */ array(),\r
-        /* 323 */ array(),\r
-        /* 324 */ array(),\r
-        /* 325 */ array(),\r
-        /* 326 */ array(),\r
-        /* 327 */ array(),\r
-        /* 328 */ array(),\r
-        /* 329 */ array(),\r
-        /* 330 */ array(),\r
-        /* 331 */ array(),\r
-        /* 332 */ array(),\r
-        /* 333 */ array(),\r
-        /* 334 */ array(),\r
-        /* 335 */ array(),\r
-        /* 336 */ array(),\r
-        /* 337 */ array(),\r
-        /* 338 */ array(),\r
-        /* 339 */ array(),\r
-        /* 340 */ array(),\r
-        /* 341 */ array(),\r
-        /* 342 */ array(),\r
-        /* 343 */ array(),\r
-        /* 344 */ array(),\r
-        /* 345 */ array(),\r
-        /* 346 */ array(),\r
-        /* 347 */ array(),\r
-        /* 348 */ array(),\r
-        /* 349 */ array(),\r
-        /* 350 */ array(),\r
-        /* 351 */ array(),\r
-        /* 352 */ array(),\r
-        /* 353 */ array(),\r
-        /* 354 */ array(),\r
-        /* 355 */ array(),\r
-        /* 356 */ array(),\r
-        /* 357 */ array(),\r
-        /* 358 */ array(),\r
-        /* 359 */ array(),\r
-);\r
-    static public $yy_default = array(\r
- /*     0 */   544,  527,  544,  500,  544,  544,  544,  544,  500,  544,\r
- /*    10 */   544,  500,  500,  544,  544,  544,  544,  544,  544,  544,\r
- /*    20 */   544,  544,  544,  544,  544,  544,  544,  544,  544,  544,\r
- /*    30 */   544,  544,  544,  544,  544,  544,  544,  544,  544,  544,\r
- /*    40 */   544,  544,  544,  544,  544,  544,  544,  544,  544,  544,\r
- /*    50 */   414,  544,  414,  414,  544,  544,  544,  544,  544,  499,\r
- /*    60 */   544,  544,  544,  544,  544,  544,  544,  399,  444,  528,\r
- /*    70 */   420,  416,  435,  443,  436,  529,  423,  431,  447,  439,\r
- /*    80 */   440,  434,  530,  360,  544,  458,  544,  544,  506,  414,\r
- /*    90 */   414,  414,  414,  544,  544,  473,  544,  473,  448,  466,\r
- /*   100 */   424,  448,  544,  544,  544,  466,  473,  544,  544,  544,\r
- /*   110 */   544,  544,  544,  544,  544,  544,  544,  544,  414,  414,\r
- /*   120 */   503,  414,  466,  544,  414,  544,  544,  544,  544,  544,\r
- /*   130 */   474,  544,  544,  544,  544,  544,  490,  473,  493,  544,\r
- /*   140 */   544,  544,  544,  544,  492,  544,  491,  544,  544,  544,\r
- /*   150 */   544,  544,  544,  471,  543,  473,  507,  504,  374,  544,\r
- /*   160 */   430,  487,  543,  509,  473,  509,  509,  473,  509,  458,\r
- /*   170 */   544,  458,  419,  424,  458,  544,  445,  424,  458,  544,\r
- /*   180 */   454,  424,  485,  544,  544,  448,  544,  544,  544,  544,\r
- /*   190 */   544,  544,  544,  544,  544,  544,  544,  544,  544,  544,\r
- /*   200 */   544,  544,  544,  544,  544,  544,  544,  544,  544,  544,\r
- /*   210 */   544,  485,  419,  460,  485,  454,  421,  505,  544,  448,\r
- /*   220 */   544,  456,  424,  544,  544,  481,  470,  482,  401,  402,\r
- /*   230 */   368,  426,  480,  479,  367,  366,  381,  483,  363,  362,\r
- /*   240 */   497,  361,  418,  476,  380,  397,  365,  494,  364,  469,\r
- /*   250 */   460,  378,  486,  400,  542,  411,  442,  427,  373,  407,\r
- /*   260 */   406,  477,  375,  377,  422,  372,  369,  495,  428,  478,\r
- /*   270 */   457,  376,  446,  370,  511,  371,  510,  496,  441,  379,\r
- /*   280 */   540,  437,  382,  538,  413,  508,  450,  449,  452,  410,\r
- /*   290 */   383,  386,  467,  387,  385,  409,  539,  425,  384,  438,\r
- /*   300 */   451,  517,  518,  519,  516,  515,  512,  513,  514,  520,\r
- /*   310 */   521,  501,  489,  453,  468,  465,  522,  523,  429,  408,\r
- /*   320 */   388,  535,  537,  502,  536,  463,  531,  532,  533,  541,\r
- /*   330 */   534,  396,  432,  412,  525,  526,  455,  433,  524,  394,\r
- /*   340 */   461,  389,  390,  488,  404,  472,  485,  484,  405,  403,\r
- /*   350 */   464,  462,  395,  398,  475,  393,  391,  392,  459,  498,\r
-);\r
-    const YYNOCODE = 116;\r
-    const YYSTACKDEPTH = 100;\r
-    const YYNSTATE = 360;\r
-    const YYNRULE = 184;\r
-    const YYERRORSYMBOL = 74;\r
-    const YYERRSYMDT = 'yy0';\r
-    const YYFALLBACK = 0;\r
-    static public $yyFallback = array(\r
-    );\r
-    static function Trace($TraceFILE, $zTracePrompt)\r
-    {\r
-        if (!$TraceFILE) {\r
-            $zTracePrompt = 0;\r
-        } elseif (!$zTracePrompt) {\r
-            $TraceFILE = 0;\r
-        }\r
-        self::$yyTraceFILE = $TraceFILE;\r
-        self::$yyTracePrompt = $zTracePrompt;\r
-    }\r
-\r
-    static function PrintTrace()\r
-    {\r
-        self::$yyTraceFILE = fopen('php://output', 'w');\r
-        self::$yyTracePrompt = '<br>';\r
-    }\r
-\r
-    static public $yyTraceFILE;\r
-    static public $yyTracePrompt;\r
-    public $yyidx;                    /* Index of top element in stack */\r
-    public $yyerrcnt;                 /* Shifts left before out of the error */\r
-    public $yystack = array();  /* The parser's stack */\r
-\r
-    public $yyTokenName = array( \r
-  '$',             'VERT',          'COLON',         'COMMENT',     \r
-  'PHPSTARTTAG',   'PHPENDTAG',     'FAKEPHPSTARTTAG',  'XMLTAG',      \r
-  'OTHER',         'LITERALSTART',  'LITERALEND',    'LITERAL',     \r
-  'LDEL',          'RDEL',          'DOLLAR',        'ID',          \r
-  'EQUAL',         'PTR',           'LDELIF',        'SPACE',       \r
-  'LDELFOR',       'SEMICOLON',     'INCDEC',        'TO',          \r
-  'STEP',          'LDELFOREACH',   'AS',            'APTR',        \r
-  'LDELSLASH',     'INTEGER',       'COMMA',         'MATH',        \r
-  'UNIMATH',       'ANDSYM',        'ISIN',          'ISDIVBY',     \r
-  'ISNOTDIVBY',    'ISEVEN',        'ISNOTEVEN',     'ISEVENBY',    \r
-  'ISNOTEVENBY',   'ISODD',         'ISNOTODD',      'ISODDBY',     \r
-  'ISNOTODDBY',    'INSTANCEOF',    'OPENP',         'CLOSEP',      \r
-  'QMARK',         'NOT',           'TYPECAST',      'HEX',         \r
-  'DOT',           'SINGLEQUOTESTRING',  'DOUBLECOLON',   'AT',          \r
-  'HATCH',         'OPENB',         'CLOSEB',        'EQUALS',      \r
-  'NOTEQUALS',     'GREATERTHAN',   'LESSTHAN',      'GREATEREQUAL',\r
-  'LESSEQUAL',     'IDENTITY',      'NONEIDENTITY',  'MOD',         \r
-  'LAND',          'LOR',           'LXOR',          'QUOTE',       \r
-  'BACKTICK',      'DOLLARID',      'error',         'start',       \r
-  'template',      'template_element',  'smartytag',     'literal',     \r
-  'literal_elements',  'literal_element',  'value',         'attributes',  \r
-  'variable',      'expr',          'ternary',       'varindexed',  \r
-  'modifier',      'modparameters',  'statement',     'statements',  \r
-  'optspace',      'varvar',        'foraction',     'array',       \r
-  'attribute',     'ifcond',        'lop',           'function',    \r
-  'doublequoted_with_quotes',  'static_class_access',  'object',        'arrayindex',  \r
-  'indexdef',      'varvarele',     'objectchain',   'objectelement',\r
-  'method',        'params',        'modparameter',  'arrayelements',\r
-  'arrayelement',  'doublequoted',  'doublequotedcontent',\r
-    );\r
-\r
-    static public $yyRuleName = array(\r
- /*   0 */ "start ::= template",\r
- /*   1 */ "template ::= template_element",\r
- /*   2 */ "template ::= template template_element",\r
- /*   3 */ "template_element ::= smartytag",\r
- /*   4 */ "template_element ::= COMMENT",\r
- /*   5 */ "template_element ::= literal",\r
- /*   6 */ "template_element ::= PHPSTARTTAG",\r
- /*   7 */ "template_element ::= PHPENDTAG",\r
- /*   8 */ "template_element ::= FAKEPHPSTARTTAG",\r
- /*   9 */ "template_element ::= XMLTAG",\r
- /*  10 */ "template_element ::= OTHER",\r
- /*  11 */ "literal ::= LITERALSTART LITERALEND",\r
- /*  12 */ "literal ::= LITERALSTART literal_elements LITERALEND",\r
- /*  13 */ "literal_elements ::= literal_elements literal_element",\r
- /*  14 */ "literal_elements ::=",\r
- /*  15 */ "literal_element ::= literal",\r
- /*  16 */ "literal_element ::= LITERAL",\r
- /*  17 */ "literal_element ::= PHPSTARTTAG",\r
- /*  18 */ "literal_element ::= FAKEPHPSTARTTAG",\r
- /*  19 */ "literal_element ::= PHPENDTAG",\r
- /*  20 */ "smartytag ::= LDEL value RDEL",\r
- /*  21 */ "smartytag ::= LDEL value attributes RDEL",\r
- /*  22 */ "smartytag ::= LDEL variable attributes RDEL",\r
- /*  23 */ "smartytag ::= LDEL expr attributes RDEL",\r
- /*  24 */ "smartytag ::= LDEL ternary attributes RDEL",\r
- /*  25 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",\r
- /*  26 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",\r
- /*  27 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",\r
- /*  28 */ "smartytag ::= LDEL DOLLAR ID EQUAL ternary attributes RDEL",\r
- /*  29 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",\r
- /*  30 */ "smartytag ::= LDEL varindexed EQUAL ternary attributes RDEL",\r
- /*  31 */ "smartytag ::= LDEL ID attributes RDEL",\r
- /*  32 */ "smartytag ::= LDEL ID RDEL",\r
- /*  33 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",\r
- /*  34 */ "smartytag ::= LDEL ID modifier modparameters attributes RDEL",\r
- /*  35 */ "smartytag ::= LDEL ID PTR ID modifier modparameters attributes RDEL",\r
- /*  36 */ "smartytag ::= LDELIF SPACE expr RDEL",\r
- /*  37 */ "smartytag ::= LDELIF SPACE statement RDEL",\r
- /*  38 */ "smartytag ::= LDELFOR SPACE statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction RDEL",\r
- /*  39 */ "foraction ::= EQUAL expr",\r
- /*  40 */ "foraction ::= INCDEC",\r
- /*  41 */ "smartytag ::= LDELFOR SPACE statement TO expr attributes RDEL",\r
- /*  42 */ "smartytag ::= LDELFOR SPACE statement TO expr STEP expr RDEL",\r
- /*  43 */ "smartytag ::= LDELFOREACH attributes RDEL",\r
- /*  44 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar RDEL",\r
- /*  45 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
- /*  46 */ "smartytag ::= LDELFOREACH SPACE array AS DOLLAR varvar RDEL",\r
- /*  47 */ "smartytag ::= LDELFOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
- /*  48 */ "smartytag ::= LDELSLASH ID RDEL",\r
- /*  49 */ "smartytag ::= LDELSLASH ID attributes RDEL",\r
- /*  50 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL",\r
- /*  51 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",\r
- /*  52 */ "attributes ::= attributes attribute",\r
- /*  53 */ "attributes ::= attribute",\r
- /*  54 */ "attributes ::=",\r
- /*  55 */ "attribute ::= SPACE ID EQUAL ID",\r
- /*  56 */ "attribute ::= SPACE ID EQUAL expr",\r
- /*  57 */ "attribute ::= SPACE ID EQUAL value",\r
- /*  58 */ "attribute ::= SPACE ID EQUAL ternary",\r
- /*  59 */ "attribute ::= SPACE ID",\r
- /*  60 */ "attribute ::= SPACE INTEGER EQUAL expr",\r
- /*  61 */ "statements ::= statement",\r
- /*  62 */ "statements ::= statements COMMA statement",\r
- /*  63 */ "statement ::= DOLLAR varvar EQUAL expr",\r
- /*  64 */ "expr ::= value",\r
- /*  65 */ "expr ::= DOLLAR ID COLON ID",\r
- /*  66 */ "expr ::= expr MATH value",\r
- /*  67 */ "expr ::= expr UNIMATH value",\r
- /*  68 */ "expr ::= expr ANDSYM value",\r
- /*  69 */ "expr ::= array",\r
- /*  70 */ "expr ::= expr modifier modparameters",\r
- /*  71 */ "expr ::= expr ifcond expr",\r
- /*  72 */ "expr ::= expr ISIN array",\r
- /*  73 */ "expr ::= expr ISIN value",\r
- /*  74 */ "expr ::= expr lop expr",\r
- /*  75 */ "expr ::= expr ISDIVBY expr",\r
- /*  76 */ "expr ::= expr ISNOTDIVBY expr",\r
- /*  77 */ "expr ::= expr ISEVEN",\r
- /*  78 */ "expr ::= expr ISNOTEVEN",\r
- /*  79 */ "expr ::= expr ISEVENBY expr",\r
- /*  80 */ "expr ::= expr ISNOTEVENBY expr",\r
- /*  81 */ "expr ::= expr ISODD",\r
- /*  82 */ "expr ::= expr ISNOTODD",\r
- /*  83 */ "expr ::= expr ISODDBY expr",\r
- /*  84 */ "expr ::= expr ISNOTODDBY expr",\r
- /*  85 */ "expr ::= value INSTANCEOF ID",\r
- /*  86 */ "expr ::= value INSTANCEOF value",\r
- /*  87 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",\r
- /*  88 */ "value ::= variable",\r
- /*  89 */ "value ::= UNIMATH value",\r
- /*  90 */ "value ::= NOT value",\r
- /*  91 */ "value ::= TYPECAST value",\r
- /*  92 */ "value ::= variable INCDEC",\r
- /*  93 */ "value ::= HEX",\r
- /*  94 */ "value ::= INTEGER",\r
- /*  95 */ "value ::= INTEGER DOT INTEGER",\r
- /*  96 */ "value ::= INTEGER DOT",\r
- /*  97 */ "value ::= DOT INTEGER",\r
- /*  98 */ "value ::= ID",\r
- /*  99 */ "value ::= function",\r
- /* 100 */ "value ::= OPENP expr CLOSEP",\r
- /* 101 */ "value ::= SINGLEQUOTESTRING",\r
- /* 102 */ "value ::= doublequoted_with_quotes",\r
- /* 103 */ "value ::= ID DOUBLECOLON static_class_access",\r
- /* 104 */ "value ::= varindexed DOUBLECOLON static_class_access",\r
- /* 105 */ "value ::= smartytag",\r
- /* 106 */ "variable ::= varindexed",\r
- /* 107 */ "variable ::= DOLLAR varvar AT ID",\r
- /* 108 */ "variable ::= object",\r
- /* 109 */ "variable ::= HATCH ID HATCH",\r
- /* 110 */ "variable ::= HATCH variable HATCH",\r
- /* 111 */ "varindexed ::= DOLLAR varvar arrayindex",\r
- /* 112 */ "arrayindex ::= arrayindex indexdef",\r
- /* 113 */ "arrayindex ::=",\r
- /* 114 */ "indexdef ::= DOT DOLLAR varvar",\r
- /* 115 */ "indexdef ::= DOT DOLLAR varvar AT ID",\r
- /* 116 */ "indexdef ::= DOT ID",\r
- /* 117 */ "indexdef ::= DOT INTEGER",\r
- /* 118 */ "indexdef ::= DOT LDEL expr RDEL",\r
- /* 119 */ "indexdef ::= OPENB ID CLOSEB",\r
- /* 120 */ "indexdef ::= OPENB ID DOT ID CLOSEB",\r
- /* 121 */ "indexdef ::= OPENB expr CLOSEB",\r
- /* 122 */ "indexdef ::= OPENB CLOSEB",\r
- /* 123 */ "varvar ::= varvarele",\r
- /* 124 */ "varvar ::= varvar varvarele",\r
- /* 125 */ "varvarele ::= ID",\r
- /* 126 */ "varvarele ::= LDEL expr RDEL",\r
- /* 127 */ "object ::= varindexed objectchain",\r
- /* 128 */ "objectchain ::= objectelement",\r
- /* 129 */ "objectchain ::= objectchain objectelement",\r
- /* 130 */ "objectelement ::= PTR ID arrayindex",\r
- /* 131 */ "objectelement ::= PTR DOLLAR varvar arrayindex",\r
- /* 132 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",\r
- /* 133 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",\r
- /* 134 */ "objectelement ::= PTR method",\r
- /* 135 */ "function ::= ID OPENP params CLOSEP",\r
- /* 136 */ "method ::= ID OPENP params CLOSEP",\r
- /* 137 */ "method ::= DOLLAR ID OPENP params CLOSEP",\r
- /* 138 */ "params ::= expr COMMA params",\r
- /* 139 */ "params ::= expr",\r
- /* 140 */ "params ::=",\r
- /* 141 */ "modifier ::= VERT AT ID",\r
- /* 142 */ "modifier ::= VERT ID",\r
- /* 143 */ "static_class_access ::= method",\r
- /* 144 */ "static_class_access ::= method objectchain",\r
- /* 145 */ "static_class_access ::= ID",\r
- /* 146 */ "static_class_access ::= DOLLAR ID arrayindex",\r
- /* 147 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",\r
- /* 148 */ "modparameters ::= modparameters modparameter",\r
- /* 149 */ "modparameters ::=",\r
- /* 150 */ "modparameter ::= COLON value",\r
- /* 151 */ "modparameter ::= COLON array",\r
- /* 152 */ "ifcond ::= EQUALS",\r
- /* 153 */ "ifcond ::= NOTEQUALS",\r
- /* 154 */ "ifcond ::= GREATERTHAN",\r
- /* 155 */ "ifcond ::= LESSTHAN",\r
- /* 156 */ "ifcond ::= GREATEREQUAL",\r
- /* 157 */ "ifcond ::= LESSEQUAL",\r
- /* 158 */ "ifcond ::= IDENTITY",\r
- /* 159 */ "ifcond ::= NONEIDENTITY",\r
- /* 160 */ "ifcond ::= MOD",\r
- /* 161 */ "lop ::= LAND",\r
- /* 162 */ "lop ::= LOR",\r
- /* 163 */ "lop ::= LXOR",\r
- /* 164 */ "array ::= OPENB arrayelements CLOSEB",\r
- /* 165 */ "arrayelements ::= arrayelement",\r
- /* 166 */ "arrayelements ::= arrayelements COMMA arrayelement",\r
- /* 167 */ "arrayelements ::=",\r
- /* 168 */ "arrayelement ::= value APTR expr",\r
- /* 169 */ "arrayelement ::= ID APTR expr",\r
- /* 170 */ "arrayelement ::= expr",\r
- /* 171 */ "doublequoted_with_quotes ::= QUOTE QUOTE",\r
- /* 172 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",\r
- /* 173 */ "doublequoted ::= doublequoted doublequotedcontent",\r
- /* 174 */ "doublequoted ::= doublequotedcontent",\r
- /* 175 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",\r
- /* 176 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",\r
- /* 177 */ "doublequotedcontent ::= DOLLARID",\r
- /* 178 */ "doublequotedcontent ::= LDEL variable RDEL",\r
- /* 179 */ "doublequotedcontent ::= LDEL expr RDEL",\r
- /* 180 */ "doublequotedcontent ::= smartytag",\r
- /* 181 */ "doublequotedcontent ::= OTHER",\r
- /* 182 */ "optspace ::= SPACE",\r
- /* 183 */ "optspace ::=",\r
-    );\r
-\r
-    function tokenName($tokenType)\r
-    {\r
-        if ($tokenType === 0) {\r
-            return 'End of Input';\r
-        }\r
-        if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {\r
-            return $this->yyTokenName[$tokenType];\r
-        } else {\r
-            return "Unknown";\r
-        }\r
-    }\r
-\r
-    static function yy_destructor($yymajor, $yypminor)\r
-    {\r
-        switch ($yymajor) {\r
-            default:  break;   /* If no destructor action specified: do nothing */\r
-        }\r
-    }\r
-\r
-    function yy_pop_parser_stack()\r
-    {\r
-        if (!count($this->yystack)) {\r
-            return;\r
-        }\r
-        $yytos = array_pop($this->yystack);\r
-        if (self::$yyTraceFILE && $this->yyidx >= 0) {\r
-            fwrite(self::$yyTraceFILE,\r
-                self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .\r
-                    "\n");\r
-        }\r
-        $yymajor = $yytos->major;\r
-        self::yy_destructor($yymajor, $yytos->minor);\r
-        $this->yyidx--;\r
-        return $yymajor;\r
-    }\r
-\r
-    function __destruct()\r
-    {\r
-        while ($this->yystack !== Array()) {\r
-            $this->yy_pop_parser_stack();\r
-        }\r
-        if (is_resource(self::$yyTraceFILE)) {\r
-            fclose(self::$yyTraceFILE);\r
-        }\r
-    }\r
-\r
-    function yy_get_expected_tokens($token)\r
-    {\r
-        $state = $this->yystack[$this->yyidx]->stateno;\r
-        $expected = self::$yyExpectedTokens[$state];\r
-        if (in_array($token, self::$yyExpectedTokens[$state], true)) {\r
-            return $expected;\r
-        }\r
-        $stack = $this->yystack;\r
-        $yyidx = $this->yyidx;\r
-        do {\r
-            $yyact = $this->yy_find_shift_action($token);\r
-            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {\r
-                // reduce action\r
-                $done = 0;\r
-                do {\r
-                    if ($done++ == 100) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        // too much recursion prevents proper detection\r
-                        // so give up\r
-                        return array_unique($expected);\r
-                    }\r
-                    $yyruleno = $yyact - self::YYNSTATE;\r
-                    $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];\r
-                    $nextstate = $this->yy_find_reduce_action(\r
-                        $this->yystack[$this->yyidx]->stateno,\r
-                        self::$yyRuleInfo[$yyruleno]['lhs']);\r
-                    if (isset(self::$yyExpectedTokens[$nextstate])) {\r
-                       $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);\r
-                            if (in_array($token,\r
-                                  self::$yyExpectedTokens[$nextstate], true)) {\r
-                            $this->yyidx = $yyidx;\r
-                            $this->yystack = $stack;\r
-                            return array_unique($expected);\r
-                        }\r
-                    }\r
-                    if ($nextstate < self::YYNSTATE) {\r
-                        // we need to shift a non-terminal\r
-                        $this->yyidx++;\r
-                        $x = new TP_yyStackEntry;\r
-                        $x->stateno = $nextstate;\r
-                        $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];\r
-                        $this->yystack[$this->yyidx] = $x;\r
-                        continue 2;\r
-                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        // the last token was just ignored, we can't accept\r
-                        // by ignoring input, this is in essence ignoring a\r
-                        // syntax error!\r
-                        return array_unique($expected);\r
-                    } elseif ($nextstate === self::YY_NO_ACTION) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        // input accepted, but not shifted (I guess)\r
-                        return $expected;\r
-                    } else {\r
-                        $yyact = $nextstate;\r
-                    }\r
-                } while (true);\r
-            }\r
-            break;\r
-        } while (true);\r
-       $this->yyidx = $yyidx;\r
-       $this->yystack = $stack;\r
-        return array_unique($expected);\r
-    }\r
-\r
-    function yy_is_expected_token($token)\r
-    {\r
-        if ($token === 0) {\r
-            return true; // 0 is not part of this\r
-        }\r
-        $state = $this->yystack[$this->yyidx]->stateno;\r
-        if (in_array($token, self::$yyExpectedTokens[$state], true)) {\r
-            return true;\r
-        }\r
-        $stack = $this->yystack;\r
-        $yyidx = $this->yyidx;\r
-        do {\r
-            $yyact = $this->yy_find_shift_action($token);\r
-            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {\r
-                // reduce action\r
-                $done = 0;\r
-                do {\r
-                    if ($done++ == 100) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        // too much recursion prevents proper detection\r
-                        // so give up\r
-                        return true;\r
-                    }\r
-                    $yyruleno = $yyact - self::YYNSTATE;\r
-                    $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];\r
-                    $nextstate = $this->yy_find_reduce_action(\r
-                        $this->yystack[$this->yyidx]->stateno,\r
-                        self::$yyRuleInfo[$yyruleno]['lhs']);\r
-                    if (isset(self::$yyExpectedTokens[$nextstate]) &&\r
-                          in_array($token, self::$yyExpectedTokens[$nextstate], true)) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        return true;\r
-                    }\r
-                    if ($nextstate < self::YYNSTATE) {\r
-                        // we need to shift a non-terminal\r
-                        $this->yyidx++;\r
-                        $x = new TP_yyStackEntry;\r
-                        $x->stateno = $nextstate;\r
-                        $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];\r
-                        $this->yystack[$this->yyidx] = $x;\r
-                        continue 2;\r
-                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        if (!$token) {\r
-                            // end of input: this is valid\r
-                            return true;\r
-                        }\r
-                        // the last token was just ignored, we can't accept\r
-                        // by ignoring input, this is in essence ignoring a\r
-                        // syntax error!\r
-                        return false;\r
-                    } elseif ($nextstate === self::YY_NO_ACTION) {\r
-                        $this->yyidx = $yyidx;\r
-                        $this->yystack = $stack;\r
-                        // input accepted, but not shifted (I guess)\r
-                        return true;\r
-                    } else {\r
-                        $yyact = $nextstate;\r
-                    }\r
-                } while (true);\r
-            }\r
-            break;\r
-        } while (true);\r
-        $this->yyidx = $yyidx;\r
-        $this->yystack = $stack;\r
-        return true;\r
-    }\r
-\r
-   function yy_find_shift_action($iLookAhead)\r
-    {\r
-        $stateno = $this->yystack[$this->yyidx]->stateno;\r
-     \r
-        /* if ($this->yyidx < 0) return self::YY_NO_ACTION;  */\r
-        if (!isset(self::$yy_shift_ofst[$stateno])) {\r
-            // no shift actions\r
-            return self::$yy_default[$stateno];\r
-        }\r
-        $i = self::$yy_shift_ofst[$stateno];\r
-        if ($i === self::YY_SHIFT_USE_DFLT) {\r
-            return self::$yy_default[$stateno];\r
-        }\r
-        if ($iLookAhead == self::YYNOCODE) {\r
-            return self::YY_NO_ACTION;\r
-        }\r
-        $i += $iLookAhead;\r
-        if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||\r
-              self::$yy_lookahead[$i] != $iLookAhead) {\r
-            if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)\r
-                   && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {\r
-                if (self::$yyTraceFILE) {\r
-                    fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .\r
-                        $this->yyTokenName[$iLookAhead] . " => " .\r
-                        $this->yyTokenName[$iFallback] . "\n");\r
-                }\r
-                return $this->yy_find_shift_action($iFallback);\r
-            }\r
-            return self::$yy_default[$stateno];\r
-        } else {\r
-            return self::$yy_action[$i];\r
-        }\r
-    }\r
-\r
-    function yy_find_reduce_action($stateno, $iLookAhead)\r
-    {\r
-        /* $stateno = $this->yystack[$this->yyidx]->stateno; */\r
-\r
-        if (!isset(self::$yy_reduce_ofst[$stateno])) {\r
-            return self::$yy_default[$stateno];\r
-        }\r
-        $i = self::$yy_reduce_ofst[$stateno];\r
-        if ($i == self::YY_REDUCE_USE_DFLT) {\r
-            return self::$yy_default[$stateno];\r
-        }\r
-        if ($iLookAhead == self::YYNOCODE) {\r
-            return self::YY_NO_ACTION;\r
-        }\r
-        $i += $iLookAhead;\r
-        if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||\r
-              self::$yy_lookahead[$i] != $iLookAhead) {\r
-            return self::$yy_default[$stateno];\r
-        } else {\r
-            return self::$yy_action[$i];\r
-        }\r
-    }\r
-\r
-    function yy_shift($yyNewState, $yyMajor, $yypMinor)\r
-    {\r
-        $this->yyidx++;\r
-        if ($this->yyidx >= self::YYSTACKDEPTH) {\r
-            $this->yyidx--;\r
-            if (self::$yyTraceFILE) {\r
-                fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);\r
-            }\r
-            while ($this->yyidx >= 0) {\r
-                $this->yy_pop_parser_stack();\r
-            }\r
-#line 80 "smarty_internal_templateparser.y"\r
-\r
-    $this->internalError = true;\r
-    $this->compiler->trigger_template_error("Stack overflow in template parser");\r
-#line 1579 "smarty_internal_templateparser.php"\r
-            return;\r
-        }\r
-        $yytos = new TP_yyStackEntry;\r
-        $yytos->stateno = $yyNewState;\r
-        $yytos->major = $yyMajor;\r
-        $yytos->minor = $yypMinor;\r
-        array_push($this->yystack, $yytos);\r
-        if (self::$yyTraceFILE && $this->yyidx > 0) {\r
-            fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,\r
-                $yyNewState);\r
-            fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);\r
-            for($i = 1; $i <= $this->yyidx; $i++) {\r
-                fprintf(self::$yyTraceFILE, " %s",\r
-                    $this->yyTokenName[$this->yystack[$i]->major]);\r
-            }\r
-            fwrite(self::$yyTraceFILE,"\n");\r
-        }\r
-    }\r
-\r
-    static public $yyRuleInfo = array(\r
-  array( 'lhs' => 75, 'rhs' => 1 ),\r
-  array( 'lhs' => 76, 'rhs' => 1 ),\r
-  array( 'lhs' => 76, 'rhs' => 2 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 77, 'rhs' => 1 ),\r
-  array( 'lhs' => 79, 'rhs' => 2 ),\r
-  array( 'lhs' => 79, 'rhs' => 3 ),\r
-  array( 'lhs' => 80, 'rhs' => 2 ),\r
-  array( 'lhs' => 80, 'rhs' => 0 ),\r
-  array( 'lhs' => 81, 'rhs' => 1 ),\r
-  array( 'lhs' => 81, 'rhs' => 1 ),\r
-  array( 'lhs' => 81, 'rhs' => 1 ),\r
-  array( 'lhs' => 81, 'rhs' => 1 ),\r
-  array( 'lhs' => 81, 'rhs' => 1 ),\r
-  array( 'lhs' => 78, 'rhs' => 3 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 7 ),\r
-  array( 'lhs' => 78, 'rhs' => 7 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 3 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 8 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 12 ),\r
-  array( 'lhs' => 94, 'rhs' => 2 ),\r
-  array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 78, 'rhs' => 7 ),\r
-  array( 'lhs' => 78, 'rhs' => 8 ),\r
-  array( 'lhs' => 78, 'rhs' => 3 ),\r
-  array( 'lhs' => 78, 'rhs' => 7 ),\r
-  array( 'lhs' => 78, 'rhs' => 10 ),\r
-  array( 'lhs' => 78, 'rhs' => 7 ),\r
-  array( 'lhs' => 78, 'rhs' => 10 ),\r
-  array( 'lhs' => 78, 'rhs' => 3 ),\r
-  array( 'lhs' => 78, 'rhs' => 4 ),\r
-  array( 'lhs' => 78, 'rhs' => 6 ),\r
-  array( 'lhs' => 78, 'rhs' => 5 ),\r
-  array( 'lhs' => 83, 'rhs' => 2 ),\r
-  array( 'lhs' => 83, 'rhs' => 1 ),\r
-  array( 'lhs' => 83, 'rhs' => 0 ),\r
-  array( 'lhs' => 96, 'rhs' => 4 ),\r
-  array( 'lhs' => 96, 'rhs' => 4 ),\r
-  array( 'lhs' => 96, 'rhs' => 4 ),\r
-  array( 'lhs' => 96, 'rhs' => 4 ),\r
-  array( 'lhs' => 96, 'rhs' => 2 ),\r
-  array( 'lhs' => 96, 'rhs' => 4 ),\r
-  array( 'lhs' => 91, 'rhs' => 1 ),\r
-  array( 'lhs' => 91, 'rhs' => 3 ),\r
-  array( 'lhs' => 90, 'rhs' => 4 ),\r
-  array( 'lhs' => 85, 'rhs' => 1 ),\r
-  array( 'lhs' => 85, 'rhs' => 4 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 1 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 2 ),\r
-  array( 'lhs' => 85, 'rhs' => 2 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 2 ),\r
-  array( 'lhs' => 85, 'rhs' => 2 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 85, 'rhs' => 3 ),\r
-  array( 'lhs' => 86, 'rhs' => 7 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 2 ),\r
-  array( 'lhs' => 82, 'rhs' => 2 ),\r
-  array( 'lhs' => 82, 'rhs' => 2 ),\r
-  array( 'lhs' => 82, 'rhs' => 2 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 3 ),\r
-  array( 'lhs' => 82, 'rhs' => 2 ),\r
-  array( 'lhs' => 82, 'rhs' => 2 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 3 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 82, 'rhs' => 3 ),\r
-  array( 'lhs' => 82, 'rhs' => 3 ),\r
-  array( 'lhs' => 82, 'rhs' => 1 ),\r
-  array( 'lhs' => 84, 'rhs' => 1 ),\r
-  array( 'lhs' => 84, 'rhs' => 4 ),\r
-  array( 'lhs' => 84, 'rhs' => 1 ),\r
-  array( 'lhs' => 84, 'rhs' => 3 ),\r
-  array( 'lhs' => 84, 'rhs' => 3 ),\r
-  array( 'lhs' => 87, 'rhs' => 3 ),\r
-  array( 'lhs' => 103, 'rhs' => 2 ),\r
-  array( 'lhs' => 103, 'rhs' => 0 ),\r
-  array( 'lhs' => 104, 'rhs' => 3 ),\r
-  array( 'lhs' => 104, 'rhs' => 5 ),\r
-  array( 'lhs' => 104, 'rhs' => 2 ),\r
-  array( 'lhs' => 104, 'rhs' => 2 ),\r
-  array( 'lhs' => 104, 'rhs' => 4 ),\r
-  array( 'lhs' => 104, 'rhs' => 3 ),\r
-  array( 'lhs' => 104, 'rhs' => 5 ),\r
-  array( 'lhs' => 104, 'rhs' => 3 ),\r
-  array( 'lhs' => 104, 'rhs' => 2 ),\r
-  array( 'lhs' => 93, 'rhs' => 1 ),\r
-  array( 'lhs' => 93, 'rhs' => 2 ),\r
-  array( 'lhs' => 105, 'rhs' => 1 ),\r
-  array( 'lhs' => 105, 'rhs' => 3 ),\r
-  array( 'lhs' => 102, 'rhs' => 2 ),\r
-  array( 'lhs' => 106, 'rhs' => 1 ),\r
-  array( 'lhs' => 106, 'rhs' => 2 ),\r
-  array( 'lhs' => 107, 'rhs' => 3 ),\r
-  array( 'lhs' => 107, 'rhs' => 4 ),\r
-  array( 'lhs' => 107, 'rhs' => 5 ),\r
-  array( 'lhs' => 107, 'rhs' => 6 ),\r
-  array( 'lhs' => 107, 'rhs' => 2 ),\r
-  array( 'lhs' => 99, 'rhs' => 4 ),\r
-  array( 'lhs' => 108, 'rhs' => 4 ),\r
-  array( 'lhs' => 108, 'rhs' => 5 ),\r
-  array( 'lhs' => 109, 'rhs' => 3 ),\r
-  array( 'lhs' => 109, 'rhs' => 1 ),\r
-  array( 'lhs' => 109, 'rhs' => 0 ),\r
-  array( 'lhs' => 88, 'rhs' => 3 ),\r
-  array( 'lhs' => 88, 'rhs' => 2 ),\r
-  array( 'lhs' => 101, 'rhs' => 1 ),\r
-  array( 'lhs' => 101, 'rhs' => 2 ),\r
-  array( 'lhs' => 101, 'rhs' => 1 ),\r
-  array( 'lhs' => 101, 'rhs' => 3 ),\r
-  array( 'lhs' => 101, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 2 ),\r
-  array( 'lhs' => 89, 'rhs' => 0 ),\r
-  array( 'lhs' => 110, 'rhs' => 2 ),\r
-  array( 'lhs' => 110, 'rhs' => 2 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 98, 'rhs' => 1 ),\r
-  array( 'lhs' => 98, 'rhs' => 1 ),\r
-  array( 'lhs' => 98, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 3 ),\r
-  array( 'lhs' => 111, 'rhs' => 1 ),\r
-  array( 'lhs' => 111, 'rhs' => 3 ),\r
-  array( 'lhs' => 111, 'rhs' => 0 ),\r
-  array( 'lhs' => 112, 'rhs' => 3 ),\r
-  array( 'lhs' => 112, 'rhs' => 3 ),\r
-  array( 'lhs' => 112, 'rhs' => 1 ),\r
-  array( 'lhs' => 100, 'rhs' => 2 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 113, 'rhs' => 2 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 114, 'rhs' => 3 ),\r
-  array( 'lhs' => 114, 'rhs' => 3 ),\r
-  array( 'lhs' => 114, 'rhs' => 1 ),\r
-  array( 'lhs' => 114, 'rhs' => 3 ),\r
-  array( 'lhs' => 114, 'rhs' => 3 ),\r
-  array( 'lhs' => 114, 'rhs' => 1 ),\r
-  array( 'lhs' => 114, 'rhs' => 1 ),\r
-  array( 'lhs' => 92, 'rhs' => 1 ),\r
-  array( 'lhs' => 92, 'rhs' => 0 ),\r
-    );\r
-\r
-    static public $yyReduceMap = array(\r
-        0 => 0,\r
-        5 => 0,\r
-        15 => 0,\r
-        16 => 0,\r
-        64 => 0,\r
-        88 => 0,\r
-        93 => 0,\r
-        94 => 0,\r
-        99 => 0,\r
-        101 => 0,\r
-        102 => 0,\r
-        108 => 0,\r
-        143 => 0,\r
-        165 => 0,\r
-        1 => 1,\r
-        2 => 2,\r
-        3 => 3,\r
-        4 => 4,\r
-        6 => 6,\r
-        7 => 7,\r
-        8 => 8,\r
-        9 => 9,\r
-        10 => 10,\r
-        11 => 11,\r
-        14 => 11,\r
-        12 => 12,\r
-        13 => 13,\r
-        89 => 13,\r
-        91 => 13,\r
-        92 => 13,\r
-        144 => 13,\r
-        17 => 17,\r
-        18 => 17,\r
-        19 => 19,\r
-        20 => 20,\r
-        21 => 21,\r
-        22 => 21,\r
-        23 => 21,\r
-        24 => 21,\r
-        25 => 25,\r
-        26 => 25,\r
-        27 => 27,\r
-        28 => 27,\r
-        29 => 29,\r
-        30 => 29,\r
-        31 => 31,\r
-        32 => 32,\r
-        33 => 33,\r
-        34 => 34,\r
-        35 => 35,\r
-        36 => 36,\r
-        37 => 36,\r
-        38 => 38,\r
-        39 => 39,\r
-        40 => 40,\r
-        53 => 40,\r
-        139 => 40,\r
-        145 => 40,\r
-        170 => 40,\r
-        41 => 41,\r
-        42 => 42,\r
-        43 => 43,\r
-        44 => 44,\r
-        45 => 45,\r
-        46 => 46,\r
-        47 => 47,\r
-        48 => 48,\r
-        49 => 49,\r
-        50 => 50,\r
-        51 => 51,\r
-        52 => 52,\r
-        54 => 54,\r
-        55 => 55,\r
-        56 => 56,\r
-        57 => 56,\r
-        58 => 56,\r
-        59 => 59,\r
-        60 => 60,\r
-        61 => 61,\r
-        62 => 62,\r
-        63 => 63,\r
-        65 => 65,\r
-        66 => 66,\r
-        67 => 66,\r
-        68 => 66,\r
-        69 => 69,\r
-        123 => 69,\r
-        182 => 69,\r
-        70 => 70,\r
-        71 => 71,\r
-        74 => 71,\r
-        85 => 71,\r
-        72 => 72,\r
-        73 => 73,\r
-        75 => 75,\r
-        76 => 76,\r
-        77 => 77,\r
-        82 => 77,\r
-        78 => 78,\r
-        81 => 78,\r
-        79 => 79,\r
-        84 => 79,\r
-        80 => 80,\r
-        83 => 80,\r
-        86 => 86,\r
-        87 => 87,\r
-        90 => 90,\r
-        95 => 95,\r
-        96 => 96,\r
-        97 => 97,\r
-        98 => 98,\r
-        100 => 100,\r
-        103 => 103,\r
-        104 => 104,\r
-        105 => 105,\r
-        106 => 106,\r
-        107 => 107,\r
-        109 => 109,\r
-        110 => 110,\r
-        111 => 111,\r
-        112 => 112,\r
-        113 => 113,\r
-        149 => 113,\r
-        114 => 114,\r
-        115 => 115,\r
-        116 => 116,\r
-        117 => 117,\r
-        118 => 118,\r
-        121 => 118,\r
-        119 => 119,\r
-        120 => 120,\r
-        122 => 122,\r
-        183 => 122,\r
-        124 => 124,\r
-        125 => 125,\r
-        126 => 126,\r
-        127 => 127,\r
-        128 => 128,\r
-        129 => 129,\r
-        130 => 130,\r
-        131 => 131,\r
-        132 => 132,\r
-        133 => 133,\r
-        134 => 134,\r
-        135 => 135,\r
-        136 => 136,\r
-        137 => 137,\r
-        138 => 138,\r
-        140 => 140,\r
-        141 => 141,\r
-        142 => 141,\r
-        146 => 146,\r
-        147 => 147,\r
-        148 => 148,\r
-        150 => 150,\r
-        151 => 150,\r
-        152 => 152,\r
-        153 => 153,\r
-        154 => 154,\r
-        155 => 155,\r
-        156 => 156,\r
-        157 => 157,\r
-        158 => 158,\r
-        159 => 159,\r
-        160 => 160,\r
-        161 => 161,\r
-        162 => 162,\r
-        163 => 163,\r
-        164 => 164,\r
-        166 => 166,\r
-        167 => 167,\r
-        168 => 168,\r
-        169 => 169,\r
-        171 => 171,\r
-        172 => 172,\r
-        173 => 173,\r
-        174 => 174,\r
-        175 => 175,\r
-        176 => 175,\r
-        178 => 175,\r
-        177 => 177,\r
-        179 => 179,\r
-        180 => 180,\r
-        181 => 181,\r
-    );\r
-#line 91 "smarty_internal_templateparser.y"\r
-    function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 1974 "smarty_internal_templateparser.php"\r
-#line 97 "smarty_internal_templateparser.y"\r
-    function yy_r1(){if ($this->template->extract_code == false) {\r
-                                                  $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;\r
-                                               } else {\r
-                                                 // store code in extract buffer\r
-                                                  $this->template->extracted_compiled_code .= $this->yystack[$this->yyidx + 0]->minor;\r
-                                               } \r
-                                                 }\r
-#line 1983 "smarty_internal_templateparser.php"\r
-#line 105 "smarty_internal_templateparser.y"\r
-    function yy_r2(){if ($this->template->extract_code == false) {\r
-                                                             $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;\r
-                                                           } else {\r
-                                                             // store code in extract buffer\r
-                                                             $this->template->extracted_compiled_code .= $this->yystack[$this->yyidx + 0]->minor;\r
-                                                             $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;\r
-                                                           } \r
-                                                              }\r
-#line 1993 "smarty_internal_templateparser.php"\r
-#line 118 "smarty_internal_templateparser.y"\r
-    function yy_r3(){\r
-                                          if ($this->compiler->has_code) {\r
-                                            $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();\r
-                                            $this->_retvalue = $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true);\r
-                                         } else { \r
-                                           $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;\r
-                                         }  \r
-                                         $this->compiler->has_variable_string = false;\r
-                                         $this->block_nesting_level = count($this->compiler->_tag_stack);\r
-                                            }\r
-#line 2005 "smarty_internal_templateparser.php"\r
-#line 130 "smarty_internal_templateparser.y"\r
-    function yy_r4(){ $this->_retvalue = '';    }\r
-#line 2008 "smarty_internal_templateparser.php"\r
-#line 136 "smarty_internal_templateparser.y"\r
-    function yy_r6(){\r
-                                      if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {\r
-                                                                    $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);\r
-                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {\r
-                                       $this->_retvalue = $this->compiler->processNocacheCode(htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES),false);\r
-                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {\r
-                                       $this->_retvalue = $this->compiler->processNocacheCode('<?php', true);\r
-                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {\r
-                                       $this->_retvalue = '';\r
-                                      }\r
-                                         }\r
-#line 2021 "smarty_internal_templateparser.php"\r
-#line 148 "smarty_internal_templateparser.y"\r
-    function yy_r7(){if ($this->is_xml) {\r
-                                       $this->compiler->tag_nocache = true; \r
-                                       $this->is_xml = true; \r
-                                       $this->_retvalue = $this->compiler->processNocacheCode("<?php echo '?>';?>", $this->compiler, true);\r
-                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {\r
-                                                                    $this->_retvalue = '?<??>>';\r
-                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {\r
-                                       $this->_retvalue = $this->compiler->processNocacheCode(htmlspecialchars('?>', ENT_QUOTES), false);\r
-                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {\r
-                                       $this->_retvalue = $this->compiler->processNocacheCode('?>', true);\r
-                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {\r
-                                       $this->_retvalue = '';\r
-                                      }\r
-                                         }\r
-#line 2037 "smarty_internal_templateparser.php"\r
-#line 163 "smarty_internal_templateparser.y"\r
-    function yy_r8(){if ($this->lex->strip) {\r
-                                       $this->_retvalue = preg_replace('![\$this->yystack[$this->yyidx + 0]->minor ]*[\r\n]+[\$this->yystack[$this->yyidx + 0]->minor ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));      \r
-                                     } else {\r
-                                       $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     \r
-                                     }\r
-                                        }\r
-#line 2045 "smarty_internal_templateparser.php"\r
-#line 171 "smarty_internal_templateparser.y"\r
-    function yy_r9(){ $this->compiler->tag_nocache = true; $this->is_xml = true; $this->_retvalue = $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true);    }\r
-#line 2048 "smarty_internal_templateparser.php"\r
-#line 174 "smarty_internal_templateparser.y"\r
-    function yy_r10(){if ($this->lex->strip) {\r
-                                       $this->_retvalue = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor);  \r
-                                     } else {\r
-                                       $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     \r
-                                     }\r
-                                        }\r
-#line 2056 "smarty_internal_templateparser.php"\r
-#line 182 "smarty_internal_templateparser.y"\r
-    function yy_r11(){ $this->_retvalue = '';     }\r
-#line 2059 "smarty_internal_templateparser.php"\r
-#line 183 "smarty_internal_templateparser.y"\r
-    function yy_r12(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
-#line 2062 "smarty_internal_templateparser.php"\r
-#line 185 "smarty_internal_templateparser.y"\r
-    function yy_r13(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2065 "smarty_internal_templateparser.php"\r
-#line 190 "smarty_internal_templateparser.y"\r
-    function yy_r17(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2068 "smarty_internal_templateparser.php"\r
-#line 192 "smarty_internal_templateparser.y"\r
-    function yy_r19(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2071 "smarty_internal_templateparser.php"\r
-#line 200 "smarty_internal_templateparser.y"\r
-    function yy_r20(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2074 "smarty_internal_templateparser.php"\r
-#line 201 "smarty_internal_templateparser.y"\r
-    function yy_r21(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2077 "smarty_internal_templateparser.php"\r
-#line 212 "smarty_internal_templateparser.y"\r
-    function yy_r25(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"));    }\r
-#line 2080 "smarty_internal_templateparser.php"\r
-#line 214 "smarty_internal_templateparser.y"\r
-    function yy_r27(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor,'var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'"),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2083 "smarty_internal_templateparser.php"\r
-#line 216 "smarty_internal_templateparser.y"\r
-    function yy_r29(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2086 "smarty_internal_templateparser.php"\r
-#line 219 "smarty_internal_templateparser.y"\r
-    function yy_r31(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);    }\r
-#line 2089 "smarty_internal_templateparser.php"\r
-#line 220 "smarty_internal_templateparser.y"\r
-    function yy_r32(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());    }\r
-#line 2092 "smarty_internal_templateparser.php"\r
-#line 222 "smarty_internal_templateparser.y"\r
-    function yy_r33(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2095 "smarty_internal_templateparser.php"\r
-#line 224 "smarty_internal_templateparser.y"\r
-    function yy_r34(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\r
-                                                                                    $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';\r
-                                                                                     }\r
-#line 2100 "smarty_internal_templateparser.php"\r
-#line 228 "smarty_internal_templateparser.y"\r
-    function yy_r35(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -4]->minor),$this->yystack[$this->yyidx + -1]->minor)).'<?php echo ';\r
-                                                                                               $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';\r
-                                                                                                }\r
-#line 2105 "smarty_internal_templateparser.php"\r
-#line 232 "smarty_internal_templateparser.y"\r
-    function yy_r36(){ $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2108 "smarty_internal_templateparser.php"\r
-#line 235 "smarty_internal_templateparser.y"\r
-    function yy_r38(){\r
-                                                             $this->_retvalue = $this->compiler->compileTag('for',array('start'=>$this->yystack[$this->yyidx + -9]->minor,'ifexp'=>$this->yystack[$this->yyidx + -6]->minor,'varloop'=>$this->yystack[$this->yyidx + -2]->minor,'loop'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2112 "smarty_internal_templateparser.php"\r
-#line 238 "smarty_internal_templateparser.y"\r
-    function yy_r39(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2115 "smarty_internal_templateparser.php"\r
-#line 239 "smarty_internal_templateparser.y"\r
-    function yy_r40(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2118 "smarty_internal_templateparser.php"\r
-#line 240 "smarty_internal_templateparser.y"\r
-    function yy_r41(){ $this->_retvalue = $this->compiler->compileTag('for',array_merge(array('start'=>$this->yystack[$this->yyidx + -4]->minor,'to'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2121 "smarty_internal_templateparser.php"\r
-#line 241 "smarty_internal_templateparser.y"\r
-    function yy_r42(){ $this->_retvalue = $this->compiler->compileTag('for',array('start'=>$this->yystack[$this->yyidx + -5]->minor,'to'=>$this->yystack[$this->yyidx + -3]->minor,'step'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2124 "smarty_internal_templateparser.php"\r
-#line 243 "smarty_internal_templateparser.y"\r
-    function yy_r43(){ $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor);    }\r
-#line 2127 "smarty_internal_templateparser.php"\r
-#line 245 "smarty_internal_templateparser.y"\r
-    function yy_r44(){\r
-                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2131 "smarty_internal_templateparser.php"\r
-#line 247 "smarty_internal_templateparser.y"\r
-    function yy_r45(){\r
-                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor));    }\r
-#line 2135 "smarty_internal_templateparser.php"\r
-#line 249 "smarty_internal_templateparser.y"\r
-    function yy_r46(){ \r
-                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2139 "smarty_internal_templateparser.php"\r
-#line 251 "smarty_internal_templateparser.y"\r
-    function yy_r47(){ \r
-                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor));    }\r
-#line 2143 "smarty_internal_templateparser.php"\r
-#line 255 "smarty_internal_templateparser.y"\r
-    function yy_r48(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());    }\r
-#line 2146 "smarty_internal_templateparser.php"\r
-#line 256 "smarty_internal_templateparser.y"\r
-    function yy_r49(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor);    }\r
-#line 2149 "smarty_internal_templateparser.php"\r
-#line 257 "smarty_internal_templateparser.y"\r
-    function yy_r50(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\r
-                                                                                         $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';\r
-                                                                                          }\r
-#line 2154 "smarty_internal_templateparser.php"\r
-#line 261 "smarty_internal_templateparser.y"\r
-    function yy_r51(){  $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2157 "smarty_internal_templateparser.php"\r
-#line 268 "smarty_internal_templateparser.y"\r
-    function yy_r52(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[key($this->yystack[$this->yyidx + 0]->minor)] = $this->yystack[$this->yyidx + 0]->minor[key($this->yystack[$this->yyidx + 0]->minor)];    }\r
-#line 2160 "smarty_internal_templateparser.php"\r
-#line 272 "smarty_internal_templateparser.y"\r
-    function yy_r54(){ $this->_retvalue = array();    }\r
-#line 2163 "smarty_internal_templateparser.php"\r
-#line 275 "smarty_internal_templateparser.y"\r
-    function yy_r55(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
-                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true');\r
-                                                 } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
-                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'false');\r
-                                                 } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
-                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'null');\r
-                                                 } else\r
-                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");    }\r
-#line 2173 "smarty_internal_templateparser.php"\r
-#line 283 "smarty_internal_templateparser.y"\r
-    function yy_r56(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2176 "smarty_internal_templateparser.php"\r
-#line 286 "smarty_internal_templateparser.y"\r
-    function yy_r59(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true');    }\r
-#line 2179 "smarty_internal_templateparser.php"\r
-#line 287 "smarty_internal_templateparser.y"\r
-    function yy_r60(){$this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2182 "smarty_internal_templateparser.php"\r
-#line 293 "smarty_internal_templateparser.y"\r
-    function yy_r61(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2185 "smarty_internal_templateparser.php"\r
-#line 294 "smarty_internal_templateparser.y"\r
-    function yy_r62(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;    }\r
-#line 2188 "smarty_internal_templateparser.php"\r
-#line 296 "smarty_internal_templateparser.y"\r
-    function yy_r63(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2191 "smarty_internal_templateparser.php"\r
-#line 305 "smarty_internal_templateparser.y"\r
-    function yy_r65(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';    }\r
-#line 2194 "smarty_internal_templateparser.php"\r
-#line 307 "smarty_internal_templateparser.y"\r
-    function yy_r66(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2197 "smarty_internal_templateparser.php"\r
-#line 313 "smarty_internal_templateparser.y"\r
-    function yy_r69(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2200 "smarty_internal_templateparser.php"\r
-#line 316 "smarty_internal_templateparser.y"\r
-    function yy_r70(){  $this->_retvalue = $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -1]->minor,'params'=>$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor));     }\r
-#line 2203 "smarty_internal_templateparser.php"\r
-#line 320 "smarty_internal_templateparser.y"\r
-    function yy_r71(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2206 "smarty_internal_templateparser.php"\r
-#line 321 "smarty_internal_templateparser.y"\r
-    function yy_r72(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2209 "smarty_internal_templateparser.php"\r
-#line 322 "smarty_internal_templateparser.y"\r
-    function yy_r73(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2212 "smarty_internal_templateparser.php"\r
-#line 324 "smarty_internal_templateparser.y"\r
-    function yy_r75(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2215 "smarty_internal_templateparser.php"\r
-#line 325 "smarty_internal_templateparser.y"\r
-    function yy_r76(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2218 "smarty_internal_templateparser.php"\r
-#line 326 "smarty_internal_templateparser.y"\r
-    function yy_r77(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2221 "smarty_internal_templateparser.php"\r
-#line 327 "smarty_internal_templateparser.y"\r
-    function yy_r78(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2224 "smarty_internal_templateparser.php"\r
-#line 328 "smarty_internal_templateparser.y"\r
-    function yy_r79(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2227 "smarty_internal_templateparser.php"\r
-#line 329 "smarty_internal_templateparser.y"\r
-    function yy_r80(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2230 "smarty_internal_templateparser.php"\r
-#line 335 "smarty_internal_templateparser.y"\r
-    function yy_r86(){$this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>'; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;    }\r
-#line 2233 "smarty_internal_templateparser.php"\r
-#line 341 "smarty_internal_templateparser.y"\r
-    function yy_r87(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2236 "smarty_internal_templateparser.php"\r
-#line 348 "smarty_internal_templateparser.y"\r
-    function yy_r90(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2239 "smarty_internal_templateparser.php"\r
-#line 354 "smarty_internal_templateparser.y"\r
-    function yy_r95(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2242 "smarty_internal_templateparser.php"\r
-#line 355 "smarty_internal_templateparser.y"\r
-    function yy_r96(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';     }\r
-#line 2245 "smarty_internal_templateparser.php"\r
-#line 356 "smarty_internal_templateparser.y"\r
-    function yy_r97(){ $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2248 "smarty_internal_templateparser.php"\r
-#line 358 "smarty_internal_templateparser.y"\r
-    function yy_r98(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
-                                $this->_retvalue = 'true';\r
-                               } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
-                                $this->_retvalue = 'false';\r
-                               } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
-                                $this->_retvalue = 'null';\r
-                               } else\r
-                               $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";     }\r
-#line 2258 "smarty_internal_templateparser.php"\r
-#line 369 "smarty_internal_templateparser.y"\r
-    function yy_r100(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";     }\r
-#line 2261 "smarty_internal_templateparser.php"\r
-#line 375 "smarty_internal_templateparser.y"\r
-    function yy_r103(){if (!$this->template->security || $this->smarty->security_handler->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) {\r
-                                                                  $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor; \r
-                                                                }    }\r
-#line 2266 "smarty_internal_templateparser.php"\r
-#line 378 "smarty_internal_templateparser.y"\r
-    function yy_r104(){ if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;} else {\r
-                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor['var'],"'"), null, true, false)->nocache;}    }\r
-#line 2270 "smarty_internal_templateparser.php"\r
-#line 381 "smarty_internal_templateparser.y"\r
-    function yy_r105(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '$_tmp'.$this->prefix_number;     }\r
-#line 2273 "smarty_internal_templateparser.php"\r
-#line 390 "smarty_internal_templateparser.y"\r
-    function yy_r106(){if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);\r
-                                      } else {\r
-                                      if (isset($this->compiler->local_var[$this->yystack[$this->yyidx + 0]->minor['var']])) {\r
-                                          $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + 0]->minor['var'] .']->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];\r
-                                         } else {\r
-                                          $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];\r
-                                         }\r
-                                       $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor['var'],"'"), null, true, false)->nocache;}    }\r
-#line 2283 "smarty_internal_templateparser.php"\r
-#line 399 "smarty_internal_templateparser.y"\r
-    function yy_r107(){if (isset($this->compiler->local_var[$this->yystack[$this->yyidx + -2]->minor])) {\r
-                                                  $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;\r
-                                                 } else {\r
-                                                  $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor;\r
-                                                 }\r
-                                                  $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }\r
-#line 2291 "smarty_internal_templateparser.php"\r
-#line 408 "smarty_internal_templateparser.y"\r
-    function yy_r109(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';    }\r
-#line 2294 "smarty_internal_templateparser.php"\r
-#line 409 "smarty_internal_templateparser.y"\r
-    function yy_r110(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';    }\r
-#line 2297 "smarty_internal_templateparser.php"\r
-#line 412 "smarty_internal_templateparser.y"\r
-    function yy_r111(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2300 "smarty_internal_templateparser.php"\r
-#line 418 "smarty_internal_templateparser.y"\r
-    function yy_r112(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2303 "smarty_internal_templateparser.php"\r
-#line 420 "smarty_internal_templateparser.y"\r
-    function yy_r113(){return;    }\r
-#line 2306 "smarty_internal_templateparser.php"\r
-#line 424 "smarty_internal_templateparser.y"\r
-    function yy_r114(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor .')->value]'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable('$this->yystack[$this->yyidx + 0]->minor', null, true, false)->nocache;    }\r
-#line 2309 "smarty_internal_templateparser.php"\r
-#line 425 "smarty_internal_templateparser.y"\r
-    function yy_r115(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor.']'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }\r
-#line 2312 "smarty_internal_templateparser.php"\r
-#line 426 "smarty_internal_templateparser.y"\r
-    function yy_r116(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";    }\r
-#line 2315 "smarty_internal_templateparser.php"\r
-#line 427 "smarty_internal_templateparser.y"\r
-    function yy_r117(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";    }\r
-#line 2318 "smarty_internal_templateparser.php"\r
-#line 428 "smarty_internal_templateparser.y"\r
-    function yy_r118(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";    }\r
-#line 2321 "smarty_internal_templateparser.php"\r
-#line 430 "smarty_internal_templateparser.y"\r
-    function yy_r119(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';    }\r
-#line 2324 "smarty_internal_templateparser.php"\r
-#line 431 "smarty_internal_templateparser.y"\r
-    function yy_r120(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';    }\r
-#line 2327 "smarty_internal_templateparser.php"\r
-#line 435 "smarty_internal_templateparser.y"\r
-    function yy_r122(){$this->_retvalue = '';    }\r
-#line 2330 "smarty_internal_templateparser.php"\r
-#line 443 "smarty_internal_templateparser.y"\r
-    function yy_r124(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2333 "smarty_internal_templateparser.php"\r
-#line 445 "smarty_internal_templateparser.y"\r
-    function yy_r125(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }\r
-#line 2336 "smarty_internal_templateparser.php"\r
-#line 447 "smarty_internal_templateparser.y"\r
-    function yy_r126(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2339 "smarty_internal_templateparser.php"\r
-#line 452 "smarty_internal_templateparser.y"\r
-    function yy_r127(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;} else {\r
-                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -1]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -1]->minor['var'],"'"), null, true, false)->nocache;}    }\r
-#line 2343 "smarty_internal_templateparser.php"\r
-#line 455 "smarty_internal_templateparser.y"\r
-    function yy_r128(){$this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2346 "smarty_internal_templateparser.php"\r
-#line 457 "smarty_internal_templateparser.y"\r
-    function yy_r129(){$this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2349 "smarty_internal_templateparser.php"\r
-#line 459 "smarty_internal_templateparser.y"\r
-    function yy_r130(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2352 "smarty_internal_templateparser.php"\r
-#line 460 "smarty_internal_templateparser.y"\r
-    function yy_r131(){ $this->_retvalue = '->{$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -1]->minor .')->value'.$this->yystack[$this->yyidx + 0]->minor.'}'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -1]->minor,"'"), null, true, false)->nocache;    }\r
-#line 2355 "smarty_internal_templateparser.php"\r
-#line 461 "smarty_internal_templateparser.y"\r
-    function yy_r132(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2358 "smarty_internal_templateparser.php"\r
-#line 462 "smarty_internal_templateparser.y"\r
-    function yy_r133(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2361 "smarty_internal_templateparser.php"\r
-#line 464 "smarty_internal_templateparser.y"\r
-    function yy_r134(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2364 "smarty_internal_templateparser.php"\r
-#line 470 "smarty_internal_templateparser.y"\r
-    function yy_r135(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {\r
-                                                                                                                                                                                   if ($this->yystack[$this->yyidx + -3]->minor == 'isset' || $this->yystack[$this->yyidx + -3]->minor == 'empty' || $this->yystack[$this->yyidx + -3]->minor == 'array' || is_callable($this->yystack[$this->yyidx + -3]->minor)) {\r
-                                                                                                                                                                                       $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";\r
-                                                                                                                                                                                   } else {\r
-                                                       $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\"");\r
-                                                      }\r
-                                                    }    }\r
-#line 2373 "smarty_internal_templateparser.php"\r
-#line 481 "smarty_internal_templateparser.y"\r
-    function yy_r136(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";    }\r
-#line 2376 "smarty_internal_templateparser.php"\r
-#line 482 "smarty_internal_templateparser.y"\r
-    function yy_r137(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = '$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')';    }\r
-#line 2379 "smarty_internal_templateparser.php"\r
-#line 486 "smarty_internal_templateparser.y"\r
-    function yy_r138(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2382 "smarty_internal_templateparser.php"\r
-#line 490 "smarty_internal_templateparser.y"\r
-    function yy_r140(){ return;    }\r
-#line 2385 "smarty_internal_templateparser.php"\r
-#line 495 "smarty_internal_templateparser.y"\r
-    function yy_r141(){ $this->_retvalue =  $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2388 "smarty_internal_templateparser.php"\r
-#line 505 "smarty_internal_templateparser.y"\r
-    function yy_r146(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2391 "smarty_internal_templateparser.php"\r
-#line 507 "smarty_internal_templateparser.y"\r
-    function yy_r147(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2394 "smarty_internal_templateparser.php"\r
-#line 518 "smarty_internal_templateparser.y"\r
-    function yy_r148(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2397 "smarty_internal_templateparser.php"\r
-#line 522 "smarty_internal_templateparser.y"\r
-    function yy_r150(){$this->_retvalue = ','.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2400 "smarty_internal_templateparser.php"\r
-#line 526 "smarty_internal_templateparser.y"\r
-    function yy_r152(){$this->_retvalue = '==';    }\r
-#line 2403 "smarty_internal_templateparser.php"\r
-#line 527 "smarty_internal_templateparser.y"\r
-    function yy_r153(){$this->_retvalue = '!=';    }\r
-#line 2406 "smarty_internal_templateparser.php"\r
-#line 528 "smarty_internal_templateparser.y"\r
-    function yy_r154(){$this->_retvalue = '>';    }\r
-#line 2409 "smarty_internal_templateparser.php"\r
-#line 529 "smarty_internal_templateparser.y"\r
-    function yy_r155(){$this->_retvalue = '<';    }\r
-#line 2412 "smarty_internal_templateparser.php"\r
-#line 530 "smarty_internal_templateparser.y"\r
-    function yy_r156(){$this->_retvalue = '>=';    }\r
-#line 2415 "smarty_internal_templateparser.php"\r
-#line 531 "smarty_internal_templateparser.y"\r
-    function yy_r157(){$this->_retvalue = '<=';    }\r
-#line 2418 "smarty_internal_templateparser.php"\r
-#line 532 "smarty_internal_templateparser.y"\r
-    function yy_r158(){$this->_retvalue = '===';    }\r
-#line 2421 "smarty_internal_templateparser.php"\r
-#line 533 "smarty_internal_templateparser.y"\r
-    function yy_r159(){$this->_retvalue = '!==';    }\r
-#line 2424 "smarty_internal_templateparser.php"\r
-#line 534 "smarty_internal_templateparser.y"\r
-    function yy_r160(){$this->_retvalue = '%';    }\r
-#line 2427 "smarty_internal_templateparser.php"\r
-#line 536 "smarty_internal_templateparser.y"\r
-    function yy_r161(){$this->_retvalue = '&&';    }\r
-#line 2430 "smarty_internal_templateparser.php"\r
-#line 537 "smarty_internal_templateparser.y"\r
-    function yy_r162(){$this->_retvalue = '||';    }\r
-#line 2433 "smarty_internal_templateparser.php"\r
-#line 538 "smarty_internal_templateparser.y"\r
-    function yy_r163(){$this->_retvalue = ' XOR ';    }\r
-#line 2436 "smarty_internal_templateparser.php"\r
-#line 543 "smarty_internal_templateparser.y"\r
-    function yy_r164(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2439 "smarty_internal_templateparser.php"\r
-#line 545 "smarty_internal_templateparser.y"\r
-    function yy_r166(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2442 "smarty_internal_templateparser.php"\r
-#line 546 "smarty_internal_templateparser.y"\r
-    function yy_r167(){ return;     }\r
-#line 2445 "smarty_internal_templateparser.php"\r
-#line 547 "smarty_internal_templateparser.y"\r
-    function yy_r168(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2448 "smarty_internal_templateparser.php"\r
-#line 548 "smarty_internal_templateparser.y"\r
-    function yy_r169(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2451 "smarty_internal_templateparser.php"\r
-#line 555 "smarty_internal_templateparser.y"\r
-    function yy_r171(){ $this->_retvalue = "''";     }\r
-#line 2454 "smarty_internal_templateparser.php"\r
-#line 556 "smarty_internal_templateparser.y"\r
-    function yy_r172(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();     }\r
-#line 2457 "smarty_internal_templateparser.php"\r
-#line 558 "smarty_internal_templateparser.y"\r
-    function yy_r173(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
-#line 2460 "smarty_internal_templateparser.php"\r
-#line 559 "smarty_internal_templateparser.y"\r
-    function yy_r174(){ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2463 "smarty_internal_templateparser.php"\r
-#line 561 "smarty_internal_templateparser.y"\r
-    function yy_r175(){ $this->_retvalue = new _smarty_code($this, $this->yystack[$this->yyidx + -1]->minor);     }\r
-#line 2466 "smarty_internal_templateparser.php"\r
-#line 563 "smarty_internal_templateparser.y"\r
-    function yy_r177(){if (isset($this->compiler->local_var["'".substr($this->yystack[$this->yyidx + 0]->minor,1)."'"])) {\r
-                                                       $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');\r
-                                                      } else {\r
-                                                       $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->value');\r
-                                                      }\r
-                                                      $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor,"'"), null, true, false)->nocache;\r
-      }\r
-#line 2475 "smarty_internal_templateparser.php"\r
-#line 571 "smarty_internal_templateparser.y"\r
-    function yy_r179(){ $this->_retvalue = new _smarty_code($this, '('.$this->yystack[$this->yyidx + -1]->minor.')');     }\r
-#line 2478 "smarty_internal_templateparser.php"\r
-#line 572 "smarty_internal_templateparser.y"\r
-    function yy_r180(){\r
-   $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);\r
-      }\r
-#line 2483 "smarty_internal_templateparser.php"\r
-#line 575 "smarty_internal_templateparser.y"\r
-    function yy_r181(){ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2486 "smarty_internal_templateparser.php"\r
-\r
-    private $_retvalue;\r
-\r
-    function yy_reduce($yyruleno)\r
-    {\r
-        $yymsp = $this->yystack[$this->yyidx];\r
-        if (self::$yyTraceFILE && $yyruleno >= 0 \r
-              && $yyruleno < count(self::$yyRuleName)) {\r
-            fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",\r
-                self::$yyTracePrompt, $yyruleno,\r
-                self::$yyRuleName[$yyruleno]);\r
-        }\r
-\r
-        $this->_retvalue = $yy_lefthand_side = null;\r
-        if (array_key_exists($yyruleno, self::$yyReduceMap)) {\r
-            // call the action\r
-            $this->_retvalue = null;\r
-            $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();\r
-            $yy_lefthand_side = $this->_retvalue;\r
-        }\r
-        $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];\r
-        $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];\r
-        $this->yyidx -= $yysize;\r
-        for($i = $yysize; $i; $i--) {\r
-            // pop all of the right-hand side parameters\r
-            array_pop($this->yystack);\r
-        }\r
-        $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);\r
-        if ($yyact < self::YYNSTATE) {\r
-            if (!self::$yyTraceFILE && $yysize) {\r
-                $this->yyidx++;\r
-                $x = new TP_yyStackEntry;\r
-                $x->stateno = $yyact;\r
-                $x->major = $yygoto;\r
-                $x->minor = $yy_lefthand_side;\r
-                $this->yystack[$this->yyidx] = $x;\r
-            } else {\r
-                $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);\r
-            }\r
-        } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) {\r
-            $this->yy_accept();\r
-        }\r
-    }\r
-\r
-    function yy_parse_failed()\r
-    {\r
-        if (self::$yyTraceFILE) {\r
-            fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);\r
-        }\r
-        while ($this->yyidx >= 0) {\r
-            $this->yy_pop_parser_stack();\r
-        }\r
-    }\r
-\r
-    function yy_syntax_error($yymajor, $TOKEN)\r
-    {\r
-#line 73 "smarty_internal_templateparser.y"\r
-\r
-    $this->internalError = true;\r
-    $this->yymajor = $yymajor;\r
-    $this->compiler->trigger_template_error();\r
-#line 2549 "smarty_internal_templateparser.php"\r
-    }\r
-\r
-    function yy_accept()\r
-    {\r
-        if (self::$yyTraceFILE) {\r
-            fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);\r
-        }\r
-        while ($this->yyidx >= 0) {\r
-            $stack = $this->yy_pop_parser_stack();\r
-        }\r
-#line 65 "smarty_internal_templateparser.y"\r
-\r
-    $this->successful = !$this->internalError;\r
-    $this->internalError = false;\r
-    $this->retvalue = $this->_retvalue;\r
-    //echo $this->retvalue."\n\n";\r
-#line 2567 "smarty_internal_templateparser.php"\r
-    }\r
-\r
-    function doParse($yymajor, $yytokenvalue)\r
-    {\r
-        $yyerrorhit = 0;   /* True if yymajor has invoked an error */\r
-        \r
-        if ($this->yyidx === null || $this->yyidx < 0) {\r
-            $this->yyidx = 0;\r
-            $this->yyerrcnt = -1;\r
-            $x = new TP_yyStackEntry;\r
-            $x->stateno = 0;\r
-            $x->major = 0;\r
-            $this->yystack = array();\r
-            array_push($this->yystack, $x);\r
-        }\r
-        $yyendofinput = ($yymajor==0);\r
-        \r
-        if (self::$yyTraceFILE) {\r
-            fprintf(self::$yyTraceFILE, "%sInput %s\n",\r
-                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);\r
-        }\r
-        \r
-        do {\r
-            $yyact = $this->yy_find_shift_action($yymajor);\r
-            if ($yymajor < self::YYERRORSYMBOL &&\r
-                  !$this->yy_is_expected_token($yymajor)) {\r
-                // force a syntax error\r
-                $yyact = self::YY_ERROR_ACTION;\r
-            }\r
-            if ($yyact < self::YYNSTATE) {\r
-                $this->yy_shift($yyact, $yymajor, $yytokenvalue);\r
-                $this->yyerrcnt--;\r
-                if ($yyendofinput && $this->yyidx >= 0) {\r
-                    $yymajor = 0;\r
-                } else {\r
-                    $yymajor = self::YYNOCODE;\r
-                }\r
-            } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {\r
-                $this->yy_reduce($yyact - self::YYNSTATE);\r
-            } elseif ($yyact == self::YY_ERROR_ACTION) {\r
-                if (self::$yyTraceFILE) {\r
-                    fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",\r
-                        self::$yyTracePrompt);\r
-                }\r
-                if (self::YYERRORSYMBOL) {\r
-                    if ($this->yyerrcnt < 0) {\r
-                        $this->yy_syntax_error($yymajor, $yytokenvalue);\r
-                    }\r
-                    $yymx = $this->yystack[$this->yyidx]->major;\r
-                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){\r
-                        if (self::$yyTraceFILE) {\r
-                            fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",\r
-                                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);\r
-                        }\r
-                        $this->yy_destructor($yymajor, $yytokenvalue);\r
-                        $yymajor = self::YYNOCODE;\r
-                    } else {\r
-                        while ($this->yyidx >= 0 &&\r
-                                 $yymx != self::YYERRORSYMBOL &&\r
-        ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE\r
-                              ){\r
-                            $this->yy_pop_parser_stack();\r
-                        }\r
-                        if ($this->yyidx < 0 || $yymajor==0) {\r
-                            $this->yy_destructor($yymajor, $yytokenvalue);\r
-                            $this->yy_parse_failed();\r
-                            $yymajor = self::YYNOCODE;\r
-                        } elseif ($yymx != self::YYERRORSYMBOL) {\r
-                            $u2 = 0;\r
-                            $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);\r
-                        }\r
-                    }\r
-                    $this->yyerrcnt = 3;\r
-                    $yyerrorhit = 1;\r
-                } else {\r
-                    if ($this->yyerrcnt <= 0) {\r
-                        $this->yy_syntax_error($yymajor, $yytokenvalue);\r
-                    }\r
-                    $this->yyerrcnt = 3;\r
-                    $this->yy_destructor($yymajor, $yytokenvalue);\r
-                    if ($yyendofinput) {\r
-                        $this->yy_parse_failed();\r
-                    }\r
-                    $yymajor = self::YYNOCODE;\r
-                }\r
-            } else {\r
-                $this->yy_accept();\r
-                $yymajor = self::YYNOCODE;\r
-            }            \r
-        } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);\r
-    }\r
-}\r
+<?php
+/**
+* Smarty Internal Plugin Templateparser
+*
+* This is the template parser.
+* It is generated from the internal.templateparser.y file
+* @package Smarty
+* @subpackage Compiler
+* @author Uwe Tews
+*/
+
+class TP_yyToken implements ArrayAccess
+{
+    public $string = '';
+    public $metadata = array();
+
+    function __construct($s, $m = array())
+    {
+        if ($s instanceof TP_yyToken) {
+            $this->string = $s->string;
+            $this->metadata = $s->metadata;
+        } else {
+            $this->string = (string) $s;
+            if ($m instanceof TP_yyToken) {
+                $this->metadata = $m->metadata;
+            } elseif (is_array($m)) {
+                $this->metadata = $m;
+            }
+        }
+    }
+
+    function __toString()
+    {
+        return $this->_string;
+    }
+
+    function offsetExists($offset)
+    {
+        return isset($this->metadata[$offset]);
+    }
+
+    function offsetGet($offset)
+    {
+        return $this->metadata[$offset];
+    }
+
+    function offsetSet($offset, $value)
+    {
+        if ($offset === null) {
+            if (isset($value[0])) {
+                $x = ($value instanceof TP_yyToken) ?
+                    $value->metadata : $value;
+                $this->metadata = array_merge($this->metadata, $x);
+                return;
+            }
+            $offset = count($this->metadata);
+        }
+        if ($value === null) {
+            return;
+        }
+        if ($value instanceof TP_yyToken) {
+            if ($value->metadata) {
+                $this->metadata[$offset] = $value->metadata;
+            }
+        } elseif ($value) {
+            $this->metadata[$offset] = $value;
+        }
+    }
+
+    function offsetUnset($offset)
+    {
+        unset($this->metadata[$offset]);
+    }
+}
+
+class TP_yyStackEntry
+{
+    public $stateno;       /* The state-number */
+    public $major;         /* The major token value.  This is the code
+                     ** number for the token at this stack level */
+    public $minor; /* The user-supplied minor token value.  This
+                     ** is the value of the token  */
+};
+
+
+#line 12 "smarty_internal_templateparser.y"
+class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php"
+{
+#line 14 "smarty_internal_templateparser.y"
+
+    // states whether the parse was successful or not
+    public $successful = true;
+    public $retvalue = 0;
+    private $lex;
+    private $internalError = false;
+
+    function __construct($lex, $compiler) {
+        // set instance object
+        self::instance($this); 
+        $this->lex = $lex;
+        $this->compiler = $compiler;
+        $this->smarty = $this->compiler->smarty;
+        $this->template = $this->compiler->template;
+        if ($this->template->security && isset($this->smarty->security_handler)) {
+              $this->sec_obj = $this->smarty->security_policy;
+        } else {
+              $this->sec_obj = $this->smarty;
+        }
+        $this->compiler->has_variable_string = false;
+                               $this->compiler->prefix_code = array();
+                               $this->prefix_number = 0;
+                               $this->block_nesting_level = 0;
+                               $this->is_xml = false;
+                               $this->asp_tags = (ini_get('asp_tags') != '0');
+                               $this->current_buffer = $this->root_buffer = new _smarty_template_buffer($this);
+    }
+    public static function &instance($new_instance = null)
+    {
+        static $instance = null;
+        if (isset($new_instance) && is_object($new_instance))
+            $instance = $new_instance;
+        return $instance;
+    }
+
+    public static function escape_start_tag($tag_text) {
+       $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -1 , $count); //Escape tag
+       assert($tag !== false && $count === 1);
+       return $tag;
+    }
+
+    public static function escape_end_tag($tag_text) {
+       assert($tag_text === '?>');
+       return '?<?php ?>>';
+    }
+
+    
+#line 130 "smarty_internal_templateparser.php"
+
+    const TP_VERT                           =  1;
+    const TP_COLON                          =  2;
+    const TP_COMMENT                        =  3;
+    const TP_PHPSTARTTAG                    =  4;
+    const TP_PHPENDTAG                      =  5;
+    const TP_ASPSTARTTAG                    =  6;
+    const TP_ASPENDTAG                      =  7;
+    const TP_FAKEPHPSTARTTAG                =  8;
+    const TP_XMLTAG                         =  9;
+    const TP_OTHER                          = 10;
+    const TP_LINEBREAK                      = 11;
+    const TP_LITERALSTART                   = 12;
+    const TP_LITERALEND                     = 13;
+    const TP_LITERAL                        = 14;
+    const TP_LDEL                           = 15;
+    const TP_RDEL                           = 16;
+    const TP_DOLLAR                         = 17;
+    const TP_ID                             = 18;
+    const TP_EQUAL                          = 19;
+    const TP_PTR                            = 20;
+    const TP_LDELIF                         = 21;
+    const TP_SPACE                          = 22;
+    const TP_LDELFOR                        = 23;
+    const TP_SEMICOLON                      = 24;
+    const TP_INCDEC                         = 25;
+    const TP_TO                             = 26;
+    const TP_STEP                           = 27;
+    const TP_LDELFOREACH                    = 28;
+    const TP_AS                             = 29;
+    const TP_APTR                           = 30;
+    const TP_LDELSLASH                      = 31;
+    const TP_INTEGER                        = 32;
+    const TP_COMMA                          = 33;
+    const TP_MATH                           = 34;
+    const TP_UNIMATH                        = 35;
+    const TP_ANDSYM                         = 36;
+    const TP_ISIN                           = 37;
+    const TP_ISDIVBY                        = 38;
+    const TP_ISNOTDIVBY                     = 39;
+    const TP_ISEVEN                         = 40;
+    const TP_ISNOTEVEN                      = 41;
+    const TP_ISEVENBY                       = 42;
+    const TP_ISNOTEVENBY                    = 43;
+    const TP_ISODD                          = 44;
+    const TP_ISNOTODD                       = 45;
+    const TP_ISODDBY                        = 46;
+    const TP_ISNOTODDBY                     = 47;
+    const TP_INSTANCEOF                     = 48;
+    const TP_OPENP                          = 49;
+    const TP_CLOSEP                         = 50;
+    const TP_QMARK                          = 51;
+    const TP_NOT                            = 52;
+    const TP_TYPECAST                       = 53;
+    const TP_HEX                            = 54;
+    const TP_DOT                            = 55;
+    const TP_SINGLEQUOTESTRING              = 56;
+    const TP_DOUBLECOLON                    = 57;
+    const TP_AT                             = 58;
+    const TP_HATCH                          = 59;
+    const TP_OPENB                          = 60;
+    const TP_CLOSEB                         = 61;
+    const TP_EQUALS                         = 62;
+    const TP_NOTEQUALS                      = 63;
+    const TP_GREATERTHAN                    = 64;
+    const TP_LESSTHAN                       = 65;
+    const TP_GREATEREQUAL                   = 66;
+    const TP_LESSEQUAL                      = 67;
+    const TP_IDENTITY                       = 68;
+    const TP_NONEIDENTITY                   = 69;
+    const TP_MOD                            = 70;
+    const TP_LAND                           = 71;
+    const TP_LOR                            = 72;
+    const TP_LXOR                           = 73;
+    const TP_QUOTE                          = 74;
+    const TP_BACKTICK                       = 75;
+    const TP_DOLLARID                       = 76;
+    const YY_NO_ACTION = 564;
+    const YY_ACCEPT_ACTION = 563;
+    const YY_ERROR_ACTION = 562;
+
+    const YY_SZ_ACTTAB = 2088;
+static public $yy_action = array(
+ /*     0 */   182,   20,    8,  140,  302,  299,  298,  294,  293,  295,
+ /*    10 */   296,  297,  304,  160,  163,  323,    2,  270,  161,  341,
+ /*    20 */     4,  188,  195,  168,  208,   27,   26,   38,  114,  124,
+ /*    30 */   265,  271,  204,   48,   47,   44,   39,   32,   30,  348,
+ /*    40 */   349,   28,   15,  356,  357,   16,   18,  312,  307,  306,
+ /*    50 */   308,  311,  431,    7,  130,  160,  313,  316,  431,    6,
+ /*    60 */   322,  364,  365,  366,  367,  363,  362,  358,  359,  360,
+ /*    70 */   361,  344,  343,  182,  326,  300,  301,  303,  194,   12,
+ /*    80 */   210,   53,  174,  120,  106,    4,  141,   13,  319,  163,
+ /*    90 */   266,  104,   43,  114,  188,  240,  353,  345,  168,  327,
+ /*   100 */   270,   26,   38,  217,  193,  133,   48,   47,   44,   39,
+ /*   110 */    32,   30,  348,  349,   28,   15,  356,  357,   16,   18,
+ /*   120 */   563,   85,  229,  301,  303,   33,   24,  110,  136,  272,
+ /*   130 */    36,   94,  237,   84,  364,  365,  366,  367,  363,  362,
+ /*   140 */   358,  359,  360,  361,  344,  343,  182,  182,  326,  145,
+ /*   150 */    24,  276,  176,  272,  210,   77,   24,  231,  106,  272,
+ /*   160 */    36,  167,  338,  270,  266,  199,  189,  188,  188,  216,
+ /*   170 */   353,  345,   34,  327,   24,  256,  197,  272,   92,   48,
+ /*   180 */    47,   44,   39,   32,   30,  348,  349,   28,   15,  356,
+ /*   190 */   357,   16,   18,    9,  278,    4,   24,   23,   24,  272,
+ /*   200 */    21,  272,   40,  114,  103,  223,  258,  364,  365,  366,
+ /*   210 */   367,  363,  362,  358,  359,  360,  361,  344,  343,  182,
+ /*   220 */   326,  135,  188,  164,   98,   24,   99,   50,  272,  123,
+ /*   230 */   100,  325,  166,  211,  170,  155,  266,  188,   90,  130,
+ /*   240 */   278,  216,  353,  345,  230,  327,   88,  168,  197,  270,
+ /*   250 */    26,   38,   48,   47,   44,   39,   32,   30,  348,  349,
+ /*   260 */    28,   15,  356,  357,   16,   18,  182,  430,  224,   24,
+ /*   270 */   277,    6,  272,  188,  174,   35,  278,  105,  317,   13,
+ /*   280 */   364,  365,  366,  367,  363,  362,  358,  359,  360,  361,
+ /*   290 */   344,  343,  318,  282,  286,  156,  341,  182,    5,   48,
+ /*   300 */    47,   44,   39,   32,   30,  348,  349,   28,   15,  356,
+ /*   310 */   357,   16,   18,  182,  150,  339,  273,  331,  188,  275,
+ /*   320 */    43,  188,  214,  188,  182,  188,  121,  364,  365,  366,
+ /*   330 */   367,  363,  362,  358,  359,  360,  361,  344,  343,  430,
+ /*   340 */    24,  327,  206,  272,   87,  188,   48,   47,   44,   39,
+ /*   350 */    32,   30,  348,  349,   28,   15,  356,  357,   16,   18,
+ /*   360 */   182,   25,  330,  321,  269,  340,  158,  341,  188,  188,
+ /*   370 */   188,  188,  192,  248,  364,  365,  366,  367,  363,  362,
+ /*   380 */   358,  359,  360,  361,  344,  343,  220,   24,   10,   24,
+ /*   390 */   196,   31,  207,   48,   47,   44,   39,   32,   30,  348,
+ /*   400 */   349,   28,   15,  356,  357,   16,   18,    4,  320,   43,
+ /*   410 */   309,  433,  234,  218,  188,  114,  188,  433,  188,  247,
+ /*   420 */   219,  364,  365,  366,  367,  363,  362,  358,  359,  360,
+ /*   430 */   361,  344,  343,  182,  326,   23,  243,  139,  194,  126,
+ /*   440 */   210,   66,   43,   43,  106,  213,  138,    4,  233,  163,
+ /*   450 */   266,  270,  188,  284,   10,  114,  353,  345,  168,  327,
+ /*   460 */   270,   26,   38,  315,  474,  314,   48,   47,   44,   39,
+ /*   470 */    32,   30,  348,  349,   28,   15,  356,  357,   16,   18,
+ /*   480 */   165,  355,  240,  329,    4,  337,  153,  332,  273,  188,
+ /*   490 */   130,  188,  114,  188,  364,  365,  366,  367,  363,  362,
+ /*   500 */   358,  359,  360,  361,  344,  343,  182,  182,  326,  285,
+ /*   510 */    24,  255,   98,  272,  102,   52,  125,  123,  100,  336,
+ /*   520 */   147,  221,  268,  163,  266,  209,  222,  104,  188,  162,
+ /*   530 */   353,  345,  168,  327,  270,   26,   38,  225,  183,   48,
+ /*   540 */    47,   44,   39,   32,   30,  348,  349,   28,   15,  356,
+ /*   550 */   357,   16,   18,  182,  347,  280,  333,  310,  324,  246,
+ /*   560 */   249,  125,  188,  188,  188,  142,  137,  364,  365,  366,
+ /*   570 */   367,  363,  362,  358,  359,  360,  361,  344,  343,  270,
+ /*   580 */   270,   24,  354,  212,  181,  254,   48,   47,   44,   39,
+ /*   590 */    32,   30,  348,  349,   28,   15,  356,  357,   16,   18,
+ /*   600 */   201,   37,  250,  267,  342,  202,  239,  283,  251,  188,
+ /*   610 */   188,  157,  274,  273,  364,  365,  366,  367,  363,  362,
+ /*   620 */   358,  359,  360,  361,  344,  343,  182,  368,  326,  109,
+ /*   630 */   115,  127,  178,  211,  210,   51,   29,  122,  106,  290,
+ /*   640 */   144,  128,  263,   93,  266,  284,  111,  188,  278,  113,
+ /*   650 */   353,  345,  168,  327,  270,  284,  119,    3,  281,   48,
+ /*   660 */    47,   44,   39,   32,   30,  348,  349,   28,   15,  356,
+ /*   670 */   357,   16,   18,  112,  292,  282,   40,  130,  118,  328,
+ /*   680 */   273,   41,  260,  271,  134,  232,  305,  364,  365,  366,
+ /*   690 */   367,  363,  362,  358,  359,  360,  361,  344,  343,  182,
+ /*   700 */   326,  159,  182,   95,  194,  326,  210,   80,  235,  194,
+ /*   710 */   106,  210,   62,  167,  264,  106,  266,  108,   89,  314,
+ /*   720 */   314,  266,  353,  345,  200,  327,  314,  353,  345,   14,
+ /*   730 */   327,  284,   48,   47,   44,   39,   32,   30,  348,  349,
+ /*   740 */    28,   15,  356,  357,   16,   18,  182,  314,  314,  314,
+ /*   750 */   314,  314,  314,  314,  314,  314,  314,  314,   96,   97,
+ /*   760 */   364,  365,  366,  367,  363,  362,  358,  359,  360,  361,
+ /*   770 */   344,  343,  284,  284,  314,  314,  314,  314,  314,   48,
+ /*   780 */    47,   44,   39,   32,   30,  348,  349,   28,   15,  356,
+ /*   790 */   357,   16,   18,  314,  314,  205,  314,  314,  314,  314,
+ /*   800 */   314,  314,  314,  314,  314,  314,  314,  364,  365,  366,
+ /*   810 */   367,  363,  362,  358,  359,  360,  361,  344,  343,  182,
+ /*   820 */   326,  314,  314,  129,  194,  326,  210,   63,  314,  194,
+ /*   830 */   106,  210,   75,  314,  245,  106,  266,  284,  314,  314,
+ /*   840 */   314,  266,  353,  345,  314,  327,  314,  353,  345,  314,
+ /*   850 */   327,  314,   48,   47,   44,   39,   32,   30,  348,  349,
+ /*   860 */    28,   15,  356,  357,   16,   18,  314,  314,  314,  314,
+ /*   870 */   314,  314,  314,  314,  314,  314,  314,  314,  314,  154,
+ /*   880 */   364,  365,  366,  367,  363,  362,  358,  359,  360,  361,
+ /*   890 */   344,  343,  182,  270,  314,  326,  314,  314,  151,  194,
+ /*   900 */   314,  210,   65,  238,  314,  106,  314,  171,   11,  314,
+ /*   910 */   169,  266,  270,  314,  195,  314,  208,  353,  345,  314,
+ /*   920 */   327,  124,  314,  314,  204,   48,   47,   44,   39,   32,
+ /*   930 */    30,  348,  349,   28,   15,  356,  357,   16,   18,  182,
+ /*   940 */   314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+ /*   950 */   314,  131,  101,  364,  365,  366,  367,  363,  362,  358,
+ /*   960 */   359,  360,  361,  344,  343,  284,  284,  335,   19,  228,
+ /*   970 */   314,  314,   48,   47,   44,   39,   32,   30,  348,  349,
+ /*   980 */    28,   15,  356,  357,   16,   18,  314,  314,  244,  314,
+ /*   990 */   314,  314,  314,  314,  314,  314,  314,  314,  314,  143,
+ /*  1000 */   364,  365,  366,  367,  363,  362,  358,  359,  360,  361,
+ /*  1010 */   344,  343,  182,  270,  314,  326,  314,  314,  152,  194,
+ /*  1020 */   314,  210,   71,  238,  314,  106,  314,  291,   11,  314,
+ /*  1030 */   167,  266,  270,  314,  195,  314,  208,  353,  345,  314,
+ /*  1040 */   327,  124,  314,  314,  204,   48,   47,   44,   39,   32,
+ /*  1050 */    30,  348,  349,   28,   15,  356,  357,   16,   18,  182,
+ /*  1060 */   314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+ /*  1070 */   314,  149,  132,  364,  365,  366,  367,  363,  362,  358,
+ /*  1080 */   359,  360,  361,  344,  343,  270,  284,  334,   19,  228,
+ /*  1090 */   314,  314,   48,   47,   44,   39,   32,   30,  348,  349,
+ /*  1100 */    28,   15,  356,  357,   16,   18,  314,  314,  314,  314,
+ /*  1110 */   314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+ /*  1120 */   364,  365,  366,  367,  363,  362,  358,  359,  360,  361,
+ /*  1130 */   344,  343,  314,  146,  148,  314,    2,   91,  116,  175,
+ /*  1140 */   314,  314,  195,  314,  208,  167,  168,  270,  270,  124,
+ /*  1150 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1160 */   314,  314,  326,  314,  314,  314,  179,  314,  210,   74,
+ /*  1170 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1180 */    88,    1,  242,  314,  353,  345,    2,  327,  116,  184,
+ /*  1190 */   314,  314,  195,  314,  208,   86,  180,  241,  314,  124,
+ /*  1200 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1210 */   314,  314,  326,  314,  314,  314,  179,  314,  210,   74,
+ /*  1220 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1230 */    88,    1,  314,  314,  353,  345,    2,  327,  103,  173,
+ /*  1240 */   314,  314,  195,  314,  208,   86,  314,  259,  314,  124,
+ /*  1250 */   314,  314,  204,  187,  314,  314,   45,  314,  314,  314,
+ /*  1260 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   67,
+ /*  1270 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1280 */    88,    1,  314,  314,  353,  345,    2,  327,  103,  184,
+ /*  1290 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1300 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1310 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   68,
+ /*  1320 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1330 */    88,    1,  314,  314,  353,  345,    2,  327,  117,   83,
+ /*  1340 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1350 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1360 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   81,
+ /*  1370 */    22,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1380 */    88,    1,  314,  314,  353,  345,    2,  327,  116,  177,
+ /*  1390 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1400 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1410 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   64,
+ /*  1420 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1430 */    88,    1,  314,  314,  353,  345,    2,  327,  116,  184,
+ /*  1440 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1450 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1460 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   72,
+ /*  1470 */    22,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1480 */    88,    1,  314,  314,  353,  345,    2,  327,  107,  184,
+ /*  1490 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1500 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1510 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   69,
+ /*  1520 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1530 */    88,    1,  314,  314,  353,  345,    2,  327,  116,  172,
+ /*  1540 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1550 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1560 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   54,
+ /*  1570 */    22,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1580 */    88,    1,  314,  314,  353,  345,    2,  327,  103,  184,
+ /*  1590 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1600 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1610 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   57,
+ /*  1620 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1630 */    88,  314,  314,  314,  353,  345,    2,  327,  103,  186,
+ /*  1640 */   314,  314,  195,  314,  208,   86,  314,  314,  314,  124,
+ /*  1650 */   314,  314,  204,  198,  314,  314,   45,  314,  314,  314,
+ /*  1660 */   314,  314,  326,  314,  314,  314,  194,  314,  210,   60,
+ /*  1670 */    17,  314,  106,   42,   46,  289,  190,  346,  266,  314,
+ /*  1680 */    88,  314,  314,  314,  353,  345,  314,  327,  314,  314,
+ /*  1690 */   314,  314,  314,  314,  226,   86,  314,  314,  314,  314,
+ /*  1700 */   326,  314,  314,  314,  194,  326,  210,   76,  314,  194,
+ /*  1710 */   106,  210,   60,  314,  314,  106,  266,  314,  314,  314,
+ /*  1720 */   314,  266,  353,  345,  314,  327,  314,  353,  345,  314,
+ /*  1730 */   327,  314,  314,  314,  326,  314,  314,  227,  194,  314,
+ /*  1740 */   210,   60,  314,  314,  106,  314,  314,  314,  326,  314,
+ /*  1750 */   266,  314,  194,  314,  210,   60,  353,  345,  106,  327,
+ /*  1760 */   314,  314,  314,  314,  266,  314,  252,  314,  314,  314,
+ /*  1770 */   353,  345,  314,  327,  314,  314,  314,  326,  314,  314,
+ /*  1780 */   215,  194,  326,  210,   61,  314,  194,  106,  210,   59,
+ /*  1790 */   314,  314,  106,  266,  314,  314,  314,  314,  266,  353,
+ /*  1800 */   345,  314,  327,  314,  353,  345,  314,  327,  314,  326,
+ /*  1810 */   314,  314,  314,  194,  314,  210,   78,  314,  314,  106,
+ /*  1820 */   326,  314,  314,  314,  194,  266,  210,   82,  314,  314,
+ /*  1830 */   106,  353,  345,  314,  327,  314,  266,  314,  314,  314,
+ /*  1840 */   326,  314,  353,  345,  194,  327,  210,   58,  326,  314,
+ /*  1850 */   106,  314,  194,  314,  210,   49,  266,  314,  106,  314,
+ /*  1860 */   314,  314,  353,  345,  266,  327,  314,  314,  326,  314,
+ /*  1870 */   353,  345,  194,  327,  210,   70,  314,  314,  106,  314,
+ /*  1880 */   314,  314,  326,  314,  266,  314,  194,  314,  185,   55,
+ /*  1890 */   353,  345,  106,  327,  314,  314,  314,  314,  266,  314,
+ /*  1900 */   314,  314,  326,  314,  353,  345,  194,  327,  210,   73,
+ /*  1910 */   314,  314,  106,  326,  314,  314,  314,  194,  266,  210,
+ /*  1920 */    56,  314,  314,  106,  353,  345,  314,  327,  314,  266,
+ /*  1930 */   314,  314,  314,  314,  314,  353,  345,  326,  327,  314,
+ /*  1940 */   314,  194,  314,  210,   79,  326,  314,  106,  314,  203,
+ /*  1950 */   314,  210,  314,  266,  314,  106,  314,  314,  314,  353,
+ /*  1960 */   345,  191,  327,  314,  314,  314,  314,  353,  345,  314,
+ /*  1970 */   327,  326,  314,  314,  314,  350,  314,  210,  314,  314,
+ /*  1980 */   326,  106,  314,  314,  288,  314,  210,  351,  314,  314,
+ /*  1990 */   106,  326,  314,  353,  345,  261,  327,  210,  314,  314,
+ /*  2000 */   326,  106,  353,  345,  253,  327,  210,  262,  314,  314,
+ /*  2010 */   106,  326,  314,  353,  345,  287,  327,  210,  314,  314,
+ /*  2020 */   326,  106,  353,  345,  352,  327,  210,  314,  314,  314,
+ /*  2030 */   106,  326,  314,  353,  345,  279,  327,  210,  314,  314,
+ /*  2040 */   314,  106,  353,  345,  314,  327,  314,  314,  314,  314,
+ /*  2050 */   314,  314,  314,  353,  345,  314,  327,  326,  314,  314,
+ /*  2060 */   314,  236,  326,  210,  314,  314,  257,  106,  210,  314,
+ /*  2070 */   314,  314,  106,  314,  314,  314,  314,  314,  314,  353,
+ /*  2080 */   345,  314,  327,  314,  353,  345,  314,  327,
+    );
+    static public $yy_lookahead = array(
+ /*     0 */     1,   30,   33,   86,    3,    4,    5,    6,    7,    8,
+ /*    10 */     9,   10,   11,   12,   89,   16,   15,  100,  110,  111,
+ /*    20 */    49,   22,   21,   98,   23,   15,  101,  102,   57,   28,
+ /*    30 */    61,  114,   31,   34,   35,   36,   37,   38,   39,   40,
+ /*    40 */    41,   42,   43,   44,   45,   46,   47,    4,    5,    6,
+ /*    50 */     7,    8,   16,   19,   20,   12,   13,   14,   22,   49,
+ /*    60 */    16,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*    70 */    71,   72,   73,    1,   81,   80,   81,   82,   85,   22,
+ /*    80 */    87,   88,   55,   90,   91,   49,   86,   60,   16,   89,
+ /*    90 */    97,   57,   48,   57,   22,   81,  103,  104,   98,  106,
+ /*   100 */   100,  101,  102,   17,   18,  107,   34,   35,   36,   37,
+ /*   110 */    38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+ /*   120 */    78,   79,   80,   81,   82,   15,   15,   17,   18,   18,
+ /*   130 */    19,  117,  118,   18,   62,   63,   64,   65,   66,   67,
+ /*   140 */    68,   69,   70,   71,   72,   73,    1,    1,   81,   86,
+ /*   150 */    15,   16,   85,   18,   87,   88,   15,   90,   91,   18,
+ /*   160 */    19,   98,   16,  100,   97,   30,   20,   22,   22,   58,
+ /*   170 */   103,  104,   27,  106,   15,   16,    2,   18,   99,   34,
+ /*   180 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+ /*   190 */    45,   46,   47,   19,   25,   49,   15,   19,   15,   18,
+ /*   200 */    19,   18,    2,   57,   17,   18,   25,   62,   63,   64,
+ /*   210 */    65,   66,   67,   68,   69,   70,   71,   72,   73,    1,
+ /*   220 */    81,  107,   22,   24,   85,   15,   87,   88,   18,   90,
+ /*   230 */    91,   16,   33,   55,   16,   86,   97,   22,   89,   20,
+ /*   240 */    25,   58,  103,  104,   75,  106,   59,   98,    2,  100,
+ /*   250 */   101,  102,   34,   35,   36,   37,   38,   39,   40,   41,
+ /*   260 */    42,   43,   44,   45,   46,   47,    1,   16,   58,   15,
+ /*   270 */    16,   49,   18,   22,   55,   15,   25,   17,   18,   60,
+ /*   280 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*   290 */    72,   73,   32,  108,   32,  110,  111,    1,   33,   34,
+ /*   300 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+ /*   310 */    45,   46,   47,    1,  107,   16,  109,   16,   22,   16,
+ /*   320 */    48,   22,   87,   22,    1,   22,   91,   62,   63,   64,
+ /*   330 */    65,   66,   67,   68,   69,   70,   71,   72,   73,   16,
+ /*   340 */    15,  106,   29,   18,   18,   22,   34,   35,   36,   37,
+ /*   350 */    38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+ /*   360 */     1,    2,   16,   16,   16,   16,  110,  111,   22,   22,
+ /*   370 */    22,   22,   18,   61,   62,   63,   64,   65,   66,   67,
+ /*   380 */    68,   69,   70,   71,   72,   73,   32,   15,   19,   15,
+ /*   390 */    18,   30,   18,   34,   35,   36,   37,   38,   39,   40,
+ /*   400 */    41,   42,   43,   44,   45,   46,   47,   49,   16,   48,
+ /*   410 */    16,   16,   16,   55,   22,   57,   22,   22,   22,   61,
+ /*   420 */    18,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   430 */    71,   72,   73,    1,   81,   19,   61,   86,   85,   95,
+ /*   440 */    87,   88,   48,   48,   91,   92,   86,   49,   16,   89,
+ /*   450 */    97,  100,   22,  109,   19,   57,  103,  104,   98,  106,
+ /*   460 */   100,  101,  102,   82,   29,   84,   34,   35,   36,   37,
+ /*   470 */    38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+ /*   480 */    18,   18,   81,   16,   49,   16,  107,   16,  109,   22,
+ /*   490 */    20,   22,   57,   22,   62,   63,   64,   65,   66,   67,
+ /*   500 */    68,   69,   70,   71,   72,   73,    1,    1,   81,  105,
+ /*   510 */    15,   16,   85,   18,   87,   88,  112,   90,   91,  118,
+ /*   520 */    86,   58,   16,   89,   97,   30,   20,   57,   22,   24,
+ /*   530 */   103,  104,   98,  106,  100,  101,  102,   92,   93,   34,
+ /*   540 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+ /*   550 */    45,   46,   47,    1,  105,   18,   16,   16,   16,   50,
+ /*   560 */    50,  112,   22,   22,   22,   86,   86,   62,   63,   64,
+ /*   570 */    65,   66,   67,   68,   69,   70,   71,   72,   73,  100,
+ /*   580 */   100,   15,   18,   18,   18,   50,   34,   35,   36,   37,
+ /*   590 */    38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+ /*   600 */    96,   26,   59,   16,   16,   29,   16,   18,   59,   22,
+ /*   610 */    22,   99,   16,  109,   62,   63,   64,   65,   66,   67,
+ /*   620 */    68,   69,   70,   71,   72,   73,    1,   75,   81,   17,
+ /*   630 */    17,   95,   85,   55,   87,   88,   51,   90,   91,   32,
+ /*   640 */    86,   95,   16,   89,   97,  109,   17,   22,   25,   17,
+ /*   650 */   103,  104,   98,  106,  100,  109,   22,   49,   18,   34,
+ /*   660 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+ /*   670 */    45,   46,   47,   17,  100,  108,    2,   20,   17,  111,
+ /*   680 */   109,   22,  112,  114,  107,   92,   13,   62,   63,   64,
+ /*   690 */    65,   66,   67,   68,   69,   70,   71,   72,   73,    1,
+ /*   700 */    81,   99,    1,   83,   85,   81,   87,   88,   22,   85,
+ /*   710 */    91,   87,   88,   98,   16,   91,   97,   95,  107,  119,
+ /*   720 */   119,   97,  103,  104,   94,  106,  119,  103,  104,   94,
+ /*   730 */   106,  109,   34,   35,   36,   37,   38,   39,   40,   41,
+ /*   740 */    42,   43,   44,   45,   46,   47,    1,  119,  119,  119,
+ /*   750 */   119,  119,  119,  119,  119,  119,  119,  119,   95,   95,
+ /*   760 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*   770 */    72,   73,  109,  109,  119,  119,  119,  119,  119,   34,
+ /*   780 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+ /*   790 */    45,   46,   47,  119,  119,   50,  119,  119,  119,  119,
+ /*   800 */   119,  119,  119,  119,  119,  119,  119,   62,   63,   64,
+ /*   810 */    65,   66,   67,   68,   69,   70,   71,   72,   73,    1,
+ /*   820 */    81,  119,  119,   95,   85,   81,   87,   88,  119,   85,
+ /*   830 */    91,   87,   88,  119,   16,   91,   97,  109,  119,  119,
+ /*   840 */   119,   97,  103,  104,  119,  106,  119,  103,  104,  119,
+ /*   850 */   106,  119,   34,   35,   36,   37,   38,   39,   40,   41,
+ /*   860 */    42,   43,   44,   45,   46,   47,  119,  119,  119,  119,
+ /*   870 */   119,  119,  119,  119,  119,  119,  119,  119,  119,   86,
+ /*   880 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*   890 */    72,   73,    1,  100,  119,   81,  119,  119,   86,   85,
+ /*   900 */   119,   87,   88,   10,  119,   91,  119,   16,   15,  119,
+ /*   910 */    98,   97,  100,  119,   21,  119,   23,  103,  104,  119,
+ /*   920 */   106,   28,  119,  119,   31,   34,   35,   36,   37,   38,
+ /*   930 */    39,   40,   41,   42,   43,   44,   45,   46,   47,    1,
+ /*   940 */   119,  119,  119,  119,  119,  119,  119,  119,  119,  119,
+ /*   950 */   119,   95,   95,   62,   63,   64,   65,   66,   67,   68,
+ /*   960 */    69,   70,   71,   72,   73,  109,  109,   74,   75,   76,
+ /*   970 */   119,  119,   34,   35,   36,   37,   38,   39,   40,   41,
+ /*   980 */    42,   43,   44,   45,   46,   47,  119,  119,   50,  119,
+ /*   990 */   119,  119,  119,  119,  119,  119,  119,  119,  119,   86,
+ /*  1000 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*  1010 */    72,   73,    1,  100,  119,   81,  119,  119,   86,   85,
+ /*  1020 */   119,   87,   88,   10,  119,   91,  119,   16,   15,  119,
+ /*  1030 */    98,   97,  100,  119,   21,  119,   23,  103,  104,  119,
+ /*  1040 */   106,   28,  119,  119,   31,   34,   35,   36,   37,   38,
+ /*  1050 */    39,   40,   41,   42,   43,   44,   45,   46,   47,    1,
+ /*  1060 */   119,  119,  119,  119,  119,  119,  119,  119,  119,  119,
+ /*  1070 */   119,   86,   95,   62,   63,   64,   65,   66,   67,   68,
+ /*  1080 */    69,   70,   71,   72,   73,  100,  109,   74,   75,   76,
+ /*  1090 */   119,  119,   34,   35,   36,   37,   38,   39,   40,   41,
+ /*  1100 */    42,   43,   44,   45,   46,   47,  119,  119,  119,  119,
+ /*  1110 */   119,  119,  119,  119,  119,  119,  119,  119,  119,  119,
+ /*  1120 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*  1130 */    72,   73,  119,   86,   86,  119,   15,   89,   17,   18,
+ /*  1140 */   119,  119,   21,  119,   23,   98,   98,  100,  100,   28,
+ /*  1150 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1160 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1170 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1180 */    59,   60,   61,  119,  103,  104,   15,  106,   17,   18,
+ /*  1190 */   119,  119,   21,  119,   23,   74,  115,  116,  119,   28,
+ /*  1200 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1210 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1220 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1230 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1240 */   119,  119,   21,  119,   23,   74,  119,  116,  119,   28,
+ /*  1250 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1260 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1270 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1280 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1290 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1300 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1310 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1320 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1330 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1340 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1350 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1360 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1370 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1380 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1390 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1400 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1410 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1420 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1430 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1440 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1450 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1460 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1470 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1480 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1490 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1500 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1510 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1520 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1530 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1540 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1550 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1560 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1570 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1580 */    59,   60,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1590 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1600 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1610 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1620 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1630 */    59,  119,  119,  119,  103,  104,   15,  106,   17,   18,
+ /*  1640 */   119,  119,   21,  119,   23,   74,  119,  119,  119,   28,
+ /*  1650 */   119,  119,   31,   32,  119,  119,   35,  119,  119,  119,
+ /*  1660 */   119,  119,   81,  119,  119,  119,   85,  119,   87,   88,
+ /*  1670 */    49,  119,   91,   52,   53,   54,   55,   56,   97,  119,
+ /*  1680 */    59,  119,  119,  119,  103,  104,  119,  106,  119,  119,
+ /*  1690 */   119,  119,  119,  119,  113,   74,  119,  119,  119,  119,
+ /*  1700 */    81,  119,  119,  119,   85,   81,   87,   88,  119,   85,
+ /*  1710 */    91,   87,   88,  119,  119,   91,   97,  119,  119,  119,
+ /*  1720 */   119,   97,  103,  104,  119,  106,  119,  103,  104,  119,
+ /*  1730 */   106,  119,  119,  119,   81,  119,  119,  113,   85,  119,
+ /*  1740 */    87,   88,  119,  119,   91,  119,  119,  119,   81,  119,
+ /*  1750 */    97,  119,   85,  119,   87,   88,  103,  104,   91,  106,
+ /*  1760 */   119,  119,  119,  119,   97,  119,  113,  119,  119,  119,
+ /*  1770 */   103,  104,  119,  106,  119,  119,  119,   81,  119,  119,
+ /*  1780 */   113,   85,   81,   87,   88,  119,   85,   91,   87,   88,
+ /*  1790 */   119,  119,   91,   97,  119,  119,  119,  119,   97,  103,
+ /*  1800 */   104,  119,  106,  119,  103,  104,  119,  106,  119,   81,
+ /*  1810 */   119,  119,  119,   85,  119,   87,   88,  119,  119,   91,
+ /*  1820 */    81,  119,  119,  119,   85,   97,   87,   88,  119,  119,
+ /*  1830 */    91,  103,  104,  119,  106,  119,   97,  119,  119,  119,
+ /*  1840 */    81,  119,  103,  104,   85,  106,   87,   88,   81,  119,
+ /*  1850 */    91,  119,   85,  119,   87,   88,   97,  119,   91,  119,
+ /*  1860 */   119,  119,  103,  104,   97,  106,  119,  119,   81,  119,
+ /*  1870 */   103,  104,   85,  106,   87,   88,  119,  119,   91,  119,
+ /*  1880 */   119,  119,   81,  119,   97,  119,   85,  119,   87,   88,
+ /*  1890 */   103,  104,   91,  106,  119,  119,  119,  119,   97,  119,
+ /*  1900 */   119,  119,   81,  119,  103,  104,   85,  106,   87,   88,
+ /*  1910 */   119,  119,   91,   81,  119,  119,  119,   85,   97,   87,
+ /*  1920 */    88,  119,  119,   91,  103,  104,  119,  106,  119,   97,
+ /*  1930 */   119,  119,  119,  119,  119,  103,  104,   81,  106,  119,
+ /*  1940 */   119,   85,  119,   87,   88,   81,  119,   91,  119,   85,
+ /*  1950 */   119,   87,  119,   97,  119,   91,  119,  119,  119,  103,
+ /*  1960 */   104,   97,  106,  119,  119,  119,  119,  103,  104,  119,
+ /*  1970 */   106,   81,  119,  119,  119,   85,  119,   87,  119,  119,
+ /*  1980 */    81,   91,  119,  119,   85,  119,   87,   97,  119,  119,
+ /*  1990 */    91,   81,  119,  103,  104,   85,  106,   87,  119,  119,
+ /*  2000 */    81,   91,  103,  104,   85,  106,   87,   97,  119,  119,
+ /*  2010 */    91,   81,  119,  103,  104,   85,  106,   87,  119,  119,
+ /*  2020 */    81,   91,  103,  104,   85,  106,   87,  119,  119,  119,
+ /*  2030 */    91,   81,  119,  103,  104,   85,  106,   87,  119,  119,
+ /*  2040 */   119,   91,  103,  104,  119,  106,  119,  119,  119,  119,
+ /*  2050 */   119,  119,  119,  103,  104,  119,  106,   81,  119,  119,
+ /*  2060 */   119,   85,   81,   87,  119,  119,   85,   91,   87,  119,
+ /*  2070 */   119,  119,   91,  119,  119,  119,  119,  119,  119,  103,
+ /*  2080 */   104,  119,  106,  119,  103,  104,  119,  106,
+);
+    const YY_SHIFT_USE_DFLT = -32;
+    const YY_SHIFT_MAX = 227;
+    static public $yy_shift_ofst = array(
+ /*     0 */     1, 1371, 1321, 1171, 1171, 1171, 1171, 1421, 1371, 1421,
+ /*    10 */  1521, 1321, 1471, 1121, 1171, 1171, 1171, 1171, 1171, 1171,
+ /*    20 */  1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+ /*    30 */  1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1271,
+ /*    40 */  1271, 1221, 1571, 1621, 1571, 1571, 1571, 1571, 1571,  145,
+ /*    50 */    72,   -1,  625,  625,  698,  552,  818,  891,  938,  432,
+ /*    60 */   265,  218,  312,  505,  359,  745, 1011, 1058, 1058, 1058,
+ /*    70 */  1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058,
+ /*    80 */  1058, 1058, 1058,  146,  296,    1, 1013,  506,  187,  219,
+ /*    90 */   323,  296,  200,  296,  893,   43,  111,  181,  394,  215,
+ /*   100 */    34,  183,  251,  325,   86,  325,  470,  372,  325,  325,
+ /*   110 */   374,  325,  325,  325,   86,  325,  372,  566,  325,  661,
+ /*   120 */   430,  657,  430,  430,  659,  657,  135,  495,  159,  210,
+ /*   130 */   110,  141,  254,   27,   27,   27,   10,  301,  299,  303,
+ /*   140 */   348,  346,  347,  349,  588,  540,  471,  396,  469,  541,
+ /*   150 */    27,  587,  542,   27,  467,  392,  657,  674,  657,  674,
+ /*   160 */   673,  657,  686,  701,  686,  608,  661,  -32,  -32,  -32,
+ /*   170 */   -32,  -32,   36,  435,  260,  358,  395,  -29,   44,  361,
+ /*   180 */   -31,  174,  463,  199,  398,  169,  398,  178,  354,  115,
+ /*   190 */   262,  313,  369,  222,  272,   57,  246,  640,  578,  613,
+ /*   200 */   612,  596,  656,  576,  326,  585,  629,  608,  634,  632,
+ /*   210 */   623,  607,  626,  590,  549,  509,  537,  462,  402,  375,
+ /*   220 */   416,  564,  565,  543,  589,  575,  535,  510,
+);
+    const YY_REDUCE_USE_DFLT = -93;
+    const YY_REDUCE_MAX = 171;
+    static public $yy_reduce_ofst = array(
+ /*     0 */    42, 1081,  427, 1624, 1667, 1653, 1581,   -7, 1131,  547,
+ /*    10 */    67,  139,  353,  624,  739,  744, 1728, 1759, 1739, 1801,
+ /*    20 */  1821, 1281,  814, 1381, 1481,  619, 1431, 1531, 1619, 1331,
+ /*    30 */   934, 1181, 1231, 1696, 1701, 1832, 1856, 1767, 1787, 1890,
+ /*    40 */  1910, 1864, 1930, 1919, 1939, 1950, 1899, 1981, 1976,  434,
+ /*    50 */   149,    0,  149,  360,  -75,  -75,  -75,  -75,  -75,  -75,
+ /*    60 */   -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,
+ /*    70 */   -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,
+ /*    80 */   -75,  -75,  -75,  554, 1048,   -5,   14,  812,  235,  185,
+ /*    90 */   932,   63,  -83, 1047,  401,  381,  379,  504,  985,  793,
+ /*   100 */   256,  379,  793,  857,  449,  728,  256,  663,  207,  664,
+ /*   110 */   622,  536,  344,  546,  404,  977,  857,  857,  856,  445,
+ /*   120 */   913,  256,  480,  479,  351,  -92,  571,  571,  571,  571,
+ /*   130 */   570,  571,  571,  567,  567,  567,  577,  574,  574,  574,
+ /*   140 */   574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
+ /*   150 */   567,  574,  574,  567,  574,  574,  568,  569,  568,  569,
+ /*   160 */   620,  568,  630,  615,  635,  611,  593,  602,  512,   79,
+ /*   170 */    -2,  114,
+);
+    static public $yyExpectedTokens = array(
+        /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 21, 23, 28, 31, ),
+        /* 1 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 2 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 3 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 4 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 5 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 6 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 7 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 8 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 9 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 10 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 11 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 12 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 13 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 61, 74, ),
+        /* 14 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 15 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 16 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 17 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 18 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 19 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 20 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 21 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 22 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 23 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 24 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 25 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 26 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 27 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 28 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 29 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 30 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 31 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 32 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 33 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 34 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 35 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 36 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 37 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 38 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 39 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 40 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 41 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 60, 74, ),
+        /* 42 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 43 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 44 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 45 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 46 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 47 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 48 */ array(15, 17, 18, 21, 23, 28, 31, 32, 35, 49, 52, 53, 54, 55, 56, 59, 74, ),
+        /* 49 */ array(1, 22, 27, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 50 */ array(1, 16, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 51 */ array(1, 16, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 52 */ array(1, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 53 */ array(1, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 54 */ array(1, 16, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 55 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 75, ),
+        /* 56 */ array(1, 16, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 57 */ array(1, 16, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 58 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 59 */ array(1, 16, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 60 */ array(1, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 61 */ array(1, 16, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 62 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 63 */ array(1, 24, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 64 */ array(1, 2, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 65 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 66 */ array(1, 16, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 67 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 68 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 69 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 70 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 71 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 72 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 73 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 74 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 75 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 76 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 77 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 78 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 79 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 80 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 81 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 82 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, ),
+        /* 83 */ array(1, 16, 20, 22, 49, 57, ),
+        /* 84 */ array(1, 22, ),
+        /* 85 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 21, 23, 28, 31, ),
+        /* 86 */ array(10, 15, 21, 23, 28, 31, 74, 75, 76, ),
+        /* 87 */ array(1, 16, 20, 22, ),
+        /* 88 */ array(17, 18, 59, ),
+        /* 89 */ array(20, 55, 60, ),
+        /* 90 */ array(1, 16, 22, ),
+        /* 91 */ array(1, 22, ),
+        /* 92 */ array(2, 22, ),
+        /* 93 */ array(1, 22, ),
+        /* 94 */ array(10, 15, 21, 23, 28, 31, 74, 75, 76, ),
+        /* 95 */ array(4, 5, 6, 7, 8, 12, 13, 14, ),
+        /* 96 */ array(15, 18, 19, 58, ),
+        /* 97 */ array(15, 18, 19, 25, ),
+        /* 98 */ array(16, 22, 48, ),
+        /* 99 */ array(16, 22, 25, ),
+        /* 100 */ array(19, 20, 57, ),
+        /* 101 */ array(15, 18, 58, ),
+        /* 102 */ array(16, 22, 25, ),
+        /* 103 */ array(15, 18, ),
+        /* 104 */ array(17, 18, ),
+        /* 105 */ array(15, 18, ),
+        /* 106 */ array(20, 57, ),
+        /* 107 */ array(15, 18, ),
+        /* 108 */ array(15, 18, ),
+        /* 109 */ array(15, 18, ),
+        /* 110 */ array(15, 18, ),
+        /* 111 */ array(15, 18, ),
+        /* 112 */ array(15, 18, ),
+        /* 113 */ array(15, 18, ),
+        /* 114 */ array(17, 18, ),
+        /* 115 */ array(15, 18, ),
+        /* 116 */ array(15, 18, ),
+        /* 117 */ array(15, 18, ),
+        /* 118 */ array(15, 18, ),
+        /* 119 */ array(17, ),
+        /* 120 */ array(22, ),
+        /* 121 */ array(20, ),
+        /* 122 */ array(22, ),
+        /* 123 */ array(22, ),
+        /* 124 */ array(22, ),
+        /* 125 */ array(20, ),
+        /* 126 */ array(15, 16, 18, 30, ),
+        /* 127 */ array(15, 16, 18, 30, ),
+        /* 128 */ array(15, 16, 18, ),
+        /* 129 */ array(15, 18, 58, ),
+        /* 130 */ array(15, 17, 18, ),
+        /* 131 */ array(15, 18, 19, ),
+        /* 132 */ array(15, 16, 18, ),
+        /* 133 */ array(55, 60, ),
+        /* 134 */ array(55, 60, ),
+        /* 135 */ array(55, 60, ),
+        /* 136 */ array(15, 49, ),
+        /* 137 */ array(16, 22, ),
+        /* 138 */ array(16, 22, ),
+        /* 139 */ array(16, 22, ),
+        /* 140 */ array(16, 22, ),
+        /* 141 */ array(16, 22, ),
+        /* 142 */ array(16, 22, ),
+        /* 143 */ array(16, 22, ),
+        /* 144 */ array(16, 22, ),
+        /* 145 */ array(16, 22, ),
+        /* 146 */ array(16, 22, ),
+        /* 147 */ array(16, 22, ),
+        /* 148 */ array(16, 22, ),
+        /* 149 */ array(16, 22, ),
+        /* 150 */ array(55, 60, ),
+        /* 151 */ array(16, 22, ),
+        /* 152 */ array(16, 22, ),
+        /* 153 */ array(55, 60, ),
+        /* 154 */ array(16, 22, ),
+        /* 155 */ array(16, 22, ),
+        /* 156 */ array(20, ),
+        /* 157 */ array(2, ),
+        /* 158 */ array(20, ),
+        /* 159 */ array(2, ),
+        /* 160 */ array(13, ),
+        /* 161 */ array(20, ),
+        /* 162 */ array(22, ),
+        /* 163 */ array(1, ),
+        /* 164 */ array(22, ),
+        /* 165 */ array(49, ),
+        /* 166 */ array(17, ),
+        /* 167 */ array(),
+        /* 168 */ array(),
+        /* 169 */ array(),
+        /* 170 */ array(),
+        /* 171 */ array(),
+        /* 172 */ array(16, 22, 49, 57, ),
+        /* 173 */ array(19, 29, 49, 57, ),
+        /* 174 */ array(15, 17, 18, 32, ),
+        /* 175 */ array(49, 55, 57, 61, ),
+        /* 176 */ array(16, 22, 48, ),
+        /* 177 */ array(30, 49, 57, ),
+        /* 178 */ array(16, 48, ),
+        /* 179 */ array(30, 48, ),
+        /* 180 */ array(33, 61, ),
+        /* 181 */ array(2, 19, ),
+        /* 182 */ array(18, 58, ),
+        /* 183 */ array(24, 33, ),
+        /* 184 */ array(49, 57, ),
+        /* 185 */ array(25, 75, ),
+        /* 186 */ array(49, 57, ),
+        /* 187 */ array(19, 55, ),
+        /* 188 */ array(18, 32, ),
+        /* 189 */ array(18, ),
+        /* 190 */ array(32, ),
+        /* 191 */ array(29, ),
+        /* 192 */ array(19, ),
+        /* 193 */ array(49, ),
+        /* 194 */ array(48, ),
+        /* 195 */ array(22, ),
+        /* 196 */ array(2, ),
+        /* 197 */ array(18, ),
+        /* 198 */ array(55, ),
+        /* 199 */ array(17, ),
+        /* 200 */ array(17, ),
+        /* 201 */ array(16, ),
+        /* 202 */ array(17, ),
+        /* 203 */ array(29, ),
+        /* 204 */ array(18, ),
+        /* 205 */ array(51, ),
+        /* 206 */ array(17, ),
+        /* 207 */ array(49, ),
+        /* 208 */ array(22, ),
+        /* 209 */ array(17, ),
+        /* 210 */ array(25, ),
+        /* 211 */ array(32, ),
+        /* 212 */ array(16, ),
+        /* 213 */ array(16, ),
+        /* 214 */ array(59, ),
+        /* 215 */ array(50, ),
+        /* 216 */ array(18, ),
+        /* 217 */ array(18, ),
+        /* 218 */ array(18, ),
+        /* 219 */ array(61, ),
+        /* 220 */ array(19, ),
+        /* 221 */ array(18, ),
+        /* 222 */ array(18, ),
+        /* 223 */ array(59, ),
+        /* 224 */ array(18, ),
+        /* 225 */ array(26, ),
+        /* 226 */ array(50, ),
+        /* 227 */ array(50, ),
+        /* 228 */ array(),
+        /* 229 */ array(),
+        /* 230 */ array(),
+        /* 231 */ array(),
+        /* 232 */ array(),
+        /* 233 */ array(),
+        /* 234 */ array(),
+        /* 235 */ array(),
+        /* 236 */ array(),
+        /* 237 */ array(),
+        /* 238 */ array(),
+        /* 239 */ array(),
+        /* 240 */ array(),
+        /* 241 */ array(),
+        /* 242 */ array(),
+        /* 243 */ array(),
+        /* 244 */ array(),
+        /* 245 */ array(),
+        /* 246 */ array(),
+        /* 247 */ array(),
+        /* 248 */ array(),
+        /* 249 */ array(),
+        /* 250 */ array(),
+        /* 251 */ array(),
+        /* 252 */ array(),
+        /* 253 */ array(),
+        /* 254 */ array(),
+        /* 255 */ array(),
+        /* 256 */ array(),
+        /* 257 */ array(),
+        /* 258 */ array(),
+        /* 259 */ array(),
+        /* 260 */ array(),
+        /* 261 */ array(),
+        /* 262 */ array(),
+        /* 263 */ array(),
+        /* 264 */ array(),
+        /* 265 */ array(),
+        /* 266 */ array(),
+        /* 267 */ array(),
+        /* 268 */ array(),
+        /* 269 */ array(),
+        /* 270 */ array(),
+        /* 271 */ array(),
+        /* 272 */ array(),
+        /* 273 */ array(),
+        /* 274 */ array(),
+        /* 275 */ array(),
+        /* 276 */ array(),
+        /* 277 */ array(),
+        /* 278 */ array(),
+        /* 279 */ array(),
+        /* 280 */ array(),
+        /* 281 */ array(),
+        /* 282 */ array(),
+        /* 283 */ array(),
+        /* 284 */ array(),
+        /* 285 */ array(),
+        /* 286 */ array(),
+        /* 287 */ array(),
+        /* 288 */ array(),
+        /* 289 */ array(),
+        /* 290 */ array(),
+        /* 291 */ array(),
+        /* 292 */ array(),
+        /* 293 */ array(),
+        /* 294 */ array(),
+        /* 295 */ array(),
+        /* 296 */ array(),
+        /* 297 */ array(),
+        /* 298 */ array(),
+        /* 299 */ array(),
+        /* 300 */ array(),
+        /* 301 */ array(),
+        /* 302 */ array(),
+        /* 303 */ array(),
+        /* 304 */ array(),
+        /* 305 */ array(),
+        /* 306 */ array(),
+        /* 307 */ array(),
+        /* 308 */ array(),
+        /* 309 */ array(),
+        /* 310 */ array(),
+        /* 311 */ array(),
+        /* 312 */ array(),
+        /* 313 */ array(),
+        /* 314 */ array(),
+        /* 315 */ array(),
+        /* 316 */ array(),
+        /* 317 */ array(),
+        /* 318 */ array(),
+        /* 319 */ array(),
+        /* 320 */ array(),
+        /* 321 */ array(),
+        /* 322 */ array(),
+        /* 323 */ array(),
+        /* 324 */ array(),
+        /* 325 */ array(),
+        /* 326 */ array(),
+        /* 327 */ array(),
+        /* 328 */ array(),
+        /* 329 */ array(),
+        /* 330 */ array(),
+        /* 331 */ array(),
+        /* 332 */ array(),
+        /* 333 */ array(),
+        /* 334 */ array(),
+        /* 335 */ array(),
+        /* 336 */ array(),
+        /* 337 */ array(),
+        /* 338 */ array(),
+        /* 339 */ array(),
+        /* 340 */ array(),
+        /* 341 */ array(),
+        /* 342 */ array(),
+        /* 343 */ array(),
+        /* 344 */ array(),
+        /* 345 */ array(),
+        /* 346 */ array(),
+        /* 347 */ array(),
+        /* 348 */ array(),
+        /* 349 */ array(),
+        /* 350 */ array(),
+        /* 351 */ array(),
+        /* 352 */ array(),
+        /* 353 */ array(),
+        /* 354 */ array(),
+        /* 355 */ array(),
+        /* 356 */ array(),
+        /* 357 */ array(),
+        /* 358 */ array(),
+        /* 359 */ array(),
+        /* 360 */ array(),
+        /* 361 */ array(),
+        /* 362 */ array(),
+        /* 363 */ array(),
+        /* 364 */ array(),
+        /* 365 */ array(),
+        /* 366 */ array(),
+        /* 367 */ array(),
+        /* 368 */ array(),
+);
+    static public $yy_default = array(
+ /*     0 */   372,  545,  562,  516,  516,  516,  516,  562,  562,  562,
+ /*    10 */   562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+ /*    20 */   562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+ /*    30 */   562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+ /*    40 */   562,  562,  562,  562,  562,  562,  562,  562,  562,  430,
+ /*    50 */   562,  562,  430,  430,  562,  562,  562,  562,  562,  562,
+ /*    60 */   515,  562,  562,  562,  562,  562,  562,  546,  451,  447,
+ /*    70 */   450,  452,  436,  547,  548,  456,  455,  432,  459,  439,
+ /*    80 */   463,  415,  460,  474,  430,  369,  562,  562,  562,  528,
+ /*    90 */   446,  430,  430,  430,  562,  562,  489,  562,  440,  464,
+ /*   100 */   482,  489,  464,  562,  562,  562,  482,  562,  489,  562,
+ /*   110 */   562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+ /*   120 */   430,  482,  430,  430,  430,  525,  562,  562,  562,  490,
+ /*   130 */   562,  562,  562,  508,  506,  509,  489,  562,  562,  562,
+ /*   140 */   562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+ /*   150 */   507,  562,  562,  487,  562,  562,  529,  518,  503,  517,
+ /*   160 */   387,  526,  561,  446,  561,  489,  562,  522,  522,  522,
+ /*   170 */   489,  489,  474,  435,  562,  474,  440,  474,  440,  440,
+ /*   180 */   562,  501,  562,  562,  474,  464,  461,  470,  562,  562,
+ /*   190 */   562,  562,  435,  527,  440,  562,  501,  562,  470,  562,
+ /*   200 */   562,  562,  562,  562,  562,  476,  562,  501,  562,  562,
+ /*   210 */   464,  472,  562,  562,  562,  562,  562,  562,  562,  562,
+ /*   220 */   562,  562,  562,  562,  562,  437,  562,  562,  555,  370,
+ /*   230 */   553,  434,  438,  418,  417,  560,  442,  552,  559,  413,
+ /*   240 */   558,  543,  498,  496,  476,  494,  511,  495,  497,  513,
+ /*   250 */   485,  486,  514,  462,  512,  422,  423,  443,  416,  544,
+ /*   260 */   510,  523,  524,  427,  502,  542,  445,  425,  424,  426,
+ /*   270 */   429,  521,  501,  500,  414,  419,  420,  421,  468,  465,
+ /*   280 */   483,  441,  488,  491,  499,  479,  473,  466,  467,  469,
+ /*   290 */   471,  412,  428,  379,  378,  380,  381,  382,  377,  376,
+ /*   300 */   371,  373,  374,  375,  383,  384,  393,  392,  394,  395,
+ /*   310 */   396,  391,  390,  385,  386,  388,  389,  492,  493,  557,
+ /*   320 */   399,  400,  401,  402,  398,  556,  481,  484,  505,  397,
+ /*   330 */   403,  404,  410,  411,  549,  550,  551,  409,  408,  405,
+ /*   340 */   406,  504,  407,  541,  540,  478,  477,  480,  453,  454,
+ /*   350 */   449,  448,  444,  475,  519,  520,  457,  458,  536,  537,
+ /*   360 */   538,  539,  535,  534,  530,  531,  532,  533,  554,
+);
+    const YYNOCODE = 120;
+    const YYSTACKDEPTH = 100;
+    const YYNSTATE = 369;
+    const YYNRULE = 193;
+    const YYERRORSYMBOL = 77;
+    const YYERRSYMDT = 'yy0';
+    const YYFALLBACK = 0;
+    static public $yyFallback = array(
+    );
+    static function Trace($TraceFILE, $zTracePrompt)
+    {
+        if (!$TraceFILE) {
+            $zTracePrompt = 0;
+        } elseif (!$zTracePrompt) {
+            $TraceFILE = 0;
+        }
+        self::$yyTraceFILE = $TraceFILE;
+        self::$yyTracePrompt = $zTracePrompt;
+    }
+
+    static function PrintTrace()
+    {
+        self::$yyTraceFILE = fopen('php://output', 'w');
+        self::$yyTracePrompt = '<br>';
+    }
+
+    static public $yyTraceFILE;
+    static public $yyTracePrompt;
+    public $yyidx;                    /* Index of top element in stack */
+    public $yyerrcnt;                 /* Shifts left before out of the error */
+    public $yystack = array();  /* The parser's stack */
+
+    public $yyTokenName = array( 
+  '$',             'VERT',          'COLON',         'COMMENT',     
+  'PHPSTARTTAG',   'PHPENDTAG',     'ASPSTARTTAG',   'ASPENDTAG',   
+  'FAKEPHPSTARTTAG',  'XMLTAG',        'OTHER',         'LINEBREAK',   
+  'LITERALSTART',  'LITERALEND',    'LITERAL',       'LDEL',        
+  'RDEL',          'DOLLAR',        'ID',            'EQUAL',       
+  'PTR',           'LDELIF',        'SPACE',         'LDELFOR',     
+  'SEMICOLON',     'INCDEC',        'TO',            'STEP',        
+  'LDELFOREACH',   'AS',            'APTR',          'LDELSLASH',   
+  'INTEGER',       'COMMA',         'MATH',          'UNIMATH',     
+  'ANDSYM',        'ISIN',          'ISDIVBY',       'ISNOTDIVBY',  
+  'ISEVEN',        'ISNOTEVEN',     'ISEVENBY',      'ISNOTEVENBY', 
+  'ISODD',         'ISNOTODD',      'ISODDBY',       'ISNOTODDBY',  
+  'INSTANCEOF',    'OPENP',         'CLOSEP',        'QMARK',       
+  'NOT',           'TYPECAST',      'HEX',           'DOT',         
+  'SINGLEQUOTESTRING',  'DOUBLECOLON',   'AT',            'HATCH',       
+  'OPENB',         'CLOSEB',        'EQUALS',        'NOTEQUALS',   
+  'GREATERTHAN',   'LESSTHAN',      'GREATEREQUAL',  'LESSEQUAL',   
+  'IDENTITY',      'NONEIDENTITY',  'MOD',           'LAND',        
+  'LOR',           'LXOR',          'QUOTE',         'BACKTICK',    
+  'DOLLARID',      'error',         'start',         'template',    
+  'template_element',  'smartytag',     'literal',       'literal_elements',
+  'literal_element',  'value',         'attributes',    'variable',    
+  'expr',          'modifierlist',  'ternary',       'varindexed',  
+  'statement',     'statements',    'optspace',      'varvar',      
+  'foraction',     'array',         'modifier',      'modparameters',
+  'attribute',     'ifcond',        'lop',           'function',    
+  'doublequoted_with_quotes',  'static_class_access',  'object',        'arrayindex',  
+  'indexdef',      'varvarele',     'objectchain',   'objectelement',
+  'method',        'params',        'modparameter',  'arrayelements',
+  'arrayelement',  'doublequoted',  'doublequotedcontent',
+    );
+
+    static public $yyRuleName = array(
+ /*   0 */ "start ::= template",
+ /*   1 */ "template ::= template_element",
+ /*   2 */ "template ::= template template_element",
+ /*   3 */ "template ::=",
+ /*   4 */ "template_element ::= smartytag",
+ /*   5 */ "template_element ::= COMMENT",
+ /*   6 */ "template_element ::= literal",
+ /*   7 */ "template_element ::= PHPSTARTTAG",
+ /*   8 */ "template_element ::= PHPENDTAG",
+ /*   9 */ "template_element ::= ASPSTARTTAG",
+ /*  10 */ "template_element ::= ASPENDTAG",
+ /*  11 */ "template_element ::= FAKEPHPSTARTTAG",
+ /*  12 */ "template_element ::= XMLTAG",
+ /*  13 */ "template_element ::= OTHER",
+ /*  14 */ "template_element ::= LINEBREAK",
+ /*  15 */ "literal ::= LITERALSTART LITERALEND",
+ /*  16 */ "literal ::= LITERALSTART literal_elements LITERALEND",
+ /*  17 */ "literal_elements ::= literal_elements literal_element",
+ /*  18 */ "literal_elements ::=",
+ /*  19 */ "literal_element ::= literal",
+ /*  20 */ "literal_element ::= LITERAL",
+ /*  21 */ "literal_element ::= PHPSTARTTAG",
+ /*  22 */ "literal_element ::= FAKEPHPSTARTTAG",
+ /*  23 */ "literal_element ::= PHPENDTAG",
+ /*  24 */ "literal_element ::= ASPSTARTTAG",
+ /*  25 */ "literal_element ::= ASPENDTAG",
+ /*  26 */ "smartytag ::= LDEL value RDEL",
+ /*  27 */ "smartytag ::= LDEL value attributes RDEL",
+ /*  28 */ "smartytag ::= LDEL variable attributes RDEL",
+ /*  29 */ "smartytag ::= LDEL expr modifierlist attributes RDEL",
+ /*  30 */ "smartytag ::= LDEL expr attributes RDEL",
+ /*  31 */ "smartytag ::= LDEL ternary attributes RDEL",
+ /*  32 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",
+ /*  33 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",
+ /*  34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",
+ /*  35 */ "smartytag ::= LDEL DOLLAR ID EQUAL ternary attributes RDEL",
+ /*  36 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",
+ /*  37 */ "smartytag ::= LDEL varindexed EQUAL ternary attributes RDEL",
+ /*  38 */ "smartytag ::= LDEL ID attributes RDEL",
+ /*  39 */ "smartytag ::= LDEL ID RDEL",
+ /*  40 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",
+ /*  41 */ "smartytag ::= LDEL ID modifierlist attributes RDEL",
+ /*  42 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes RDEL",
+ /*  43 */ "smartytag ::= LDELIF SPACE expr RDEL",
+ /*  44 */ "smartytag ::= LDELIF SPACE statement RDEL",
+ /*  45 */ "smartytag ::= LDELFOR SPACE statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction RDEL",
+ /*  46 */ "foraction ::= EQUAL expr",
+ /*  47 */ "foraction ::= INCDEC",
+ /*  48 */ "smartytag ::= LDELFOR SPACE statement TO expr attributes RDEL",
+ /*  49 */ "smartytag ::= LDELFOR SPACE statement TO expr STEP expr RDEL",
+ /*  50 */ "smartytag ::= LDELFOREACH attributes RDEL",
+ /*  51 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar RDEL",
+ /*  52 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL",
+ /*  53 */ "smartytag ::= LDELFOREACH SPACE array AS DOLLAR varvar RDEL",
+ /*  54 */ "smartytag ::= LDELFOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL",
+ /*  55 */ "smartytag ::= LDELSLASH ID RDEL",
+ /*  56 */ "smartytag ::= LDELSLASH ID attributes RDEL",
+ /*  57 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL",
+ /*  58 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",
+ /*  59 */ "attributes ::= attributes attribute",
+ /*  60 */ "attributes ::= attribute",
+ /*  61 */ "attributes ::=",
+ /*  62 */ "attribute ::= SPACE ID EQUAL ID",
+ /*  63 */ "attribute ::= SPACE ID EQUAL expr",
+ /*  64 */ "attribute ::= SPACE ID EQUAL value",
+ /*  65 */ "attribute ::= SPACE ID EQUAL ternary",
+ /*  66 */ "attribute ::= SPACE ID",
+ /*  67 */ "attribute ::= SPACE INTEGER EQUAL expr",
+ /*  68 */ "statements ::= statement",
+ /*  69 */ "statements ::= statements COMMA statement",
+ /*  70 */ "statement ::= DOLLAR varvar EQUAL expr",
+ /*  71 */ "expr ::= value",
+ /*  72 */ "expr ::= DOLLAR ID COLON ID",
+ /*  73 */ "expr ::= expr MATH value",
+ /*  74 */ "expr ::= expr UNIMATH value",
+ /*  75 */ "expr ::= expr ANDSYM value",
+ /*  76 */ "expr ::= array",
+ /*  77 */ "expr ::= expr modifierlist",
+ /*  78 */ "expr ::= expr ifcond expr",
+ /*  79 */ "expr ::= expr ISIN array",
+ /*  80 */ "expr ::= expr ISIN value",
+ /*  81 */ "expr ::= expr lop expr",
+ /*  82 */ "expr ::= expr ISDIVBY expr",
+ /*  83 */ "expr ::= expr ISNOTDIVBY expr",
+ /*  84 */ "expr ::= expr ISEVEN",
+ /*  85 */ "expr ::= expr ISNOTEVEN",
+ /*  86 */ "expr ::= expr ISEVENBY expr",
+ /*  87 */ "expr ::= expr ISNOTEVENBY expr",
+ /*  88 */ "expr ::= expr ISODD",
+ /*  89 */ "expr ::= expr ISNOTODD",
+ /*  90 */ "expr ::= expr ISODDBY expr",
+ /*  91 */ "expr ::= expr ISNOTODDBY expr",
+ /*  92 */ "expr ::= value INSTANCEOF ID",
+ /*  93 */ "expr ::= value INSTANCEOF value",
+ /*  94 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",
+ /*  95 */ "value ::= variable",
+ /*  96 */ "value ::= UNIMATH value",
+ /*  97 */ "value ::= NOT value",
+ /*  98 */ "value ::= TYPECAST value",
+ /*  99 */ "value ::= variable INCDEC",
+ /* 100 */ "value ::= HEX",
+ /* 101 */ "value ::= INTEGER",
+ /* 102 */ "value ::= INTEGER DOT INTEGER",
+ /* 103 */ "value ::= INTEGER DOT",
+ /* 104 */ "value ::= DOT INTEGER",
+ /* 105 */ "value ::= ID",
+ /* 106 */ "value ::= function",
+ /* 107 */ "value ::= OPENP expr CLOSEP",
+ /* 108 */ "value ::= SINGLEQUOTESTRING",
+ /* 109 */ "value ::= doublequoted_with_quotes",
+ /* 110 */ "value ::= ID DOUBLECOLON static_class_access",
+ /* 111 */ "value ::= varindexed DOUBLECOLON static_class_access",
+ /* 112 */ "value ::= smartytag",
+ /* 113 */ "variable ::= varindexed",
+ /* 114 */ "variable ::= DOLLAR varvar AT ID",
+ /* 115 */ "variable ::= object",
+ /* 116 */ "variable ::= HATCH ID HATCH",
+ /* 117 */ "variable ::= HATCH variable HATCH",
+ /* 118 */ "varindexed ::= DOLLAR varvar arrayindex",
+ /* 119 */ "arrayindex ::= arrayindex indexdef",
+ /* 120 */ "arrayindex ::=",
+ /* 121 */ "indexdef ::= DOT DOLLAR varvar",
+ /* 122 */ "indexdef ::= DOT DOLLAR varvar AT ID",
+ /* 123 */ "indexdef ::= DOT ID",
+ /* 124 */ "indexdef ::= DOT INTEGER",
+ /* 125 */ "indexdef ::= DOT LDEL expr RDEL",
+ /* 126 */ "indexdef ::= OPENB ID CLOSEB",
+ /* 127 */ "indexdef ::= OPENB ID DOT ID CLOSEB",
+ /* 128 */ "indexdef ::= OPENB expr CLOSEB",
+ /* 129 */ "indexdef ::= OPENB CLOSEB",
+ /* 130 */ "varvar ::= varvarele",
+ /* 131 */ "varvar ::= varvar varvarele",
+ /* 132 */ "varvarele ::= ID",
+ /* 133 */ "varvarele ::= LDEL expr RDEL",
+ /* 134 */ "object ::= varindexed objectchain",
+ /* 135 */ "objectchain ::= objectelement",
+ /* 136 */ "objectchain ::= objectchain objectelement",
+ /* 137 */ "objectelement ::= PTR ID arrayindex",
+ /* 138 */ "objectelement ::= PTR DOLLAR varvar arrayindex",
+ /* 139 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",
+ /* 140 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",
+ /* 141 */ "objectelement ::= PTR method",
+ /* 142 */ "function ::= ID OPENP params CLOSEP",
+ /* 143 */ "method ::= ID OPENP params CLOSEP",
+ /* 144 */ "method ::= DOLLAR ID OPENP params CLOSEP",
+ /* 145 */ "params ::= expr COMMA params",
+ /* 146 */ "params ::= expr",
+ /* 147 */ "params ::=",
+ /* 148 */ "modifierlist ::= modifierlist modifier modparameters",
+ /* 149 */ "modifierlist ::= modifier modparameters",
+ /* 150 */ "modifier ::= VERT AT ID",
+ /* 151 */ "modifier ::= VERT ID",
+ /* 152 */ "modparameters ::= modparameters modparameter",
+ /* 153 */ "modparameters ::=",
+ /* 154 */ "modparameter ::= COLON value",
+ /* 155 */ "modparameter ::= COLON array",
+ /* 156 */ "static_class_access ::= method",
+ /* 157 */ "static_class_access ::= method objectchain",
+ /* 158 */ "static_class_access ::= ID",
+ /* 159 */ "static_class_access ::= DOLLAR ID arrayindex",
+ /* 160 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",
+ /* 161 */ "ifcond ::= EQUALS",
+ /* 162 */ "ifcond ::= NOTEQUALS",
+ /* 163 */ "ifcond ::= GREATERTHAN",
+ /* 164 */ "ifcond ::= LESSTHAN",
+ /* 165 */ "ifcond ::= GREATEREQUAL",
+ /* 166 */ "ifcond ::= LESSEQUAL",
+ /* 167 */ "ifcond ::= IDENTITY",
+ /* 168 */ "ifcond ::= NONEIDENTITY",
+ /* 169 */ "ifcond ::= MOD",
+ /* 170 */ "lop ::= LAND",
+ /* 171 */ "lop ::= LOR",
+ /* 172 */ "lop ::= LXOR",
+ /* 173 */ "array ::= OPENB arrayelements CLOSEB",
+ /* 174 */ "arrayelements ::= arrayelement",
+ /* 175 */ "arrayelements ::= arrayelements COMMA arrayelement",
+ /* 176 */ "arrayelements ::=",
+ /* 177 */ "arrayelement ::= value APTR expr",
+ /* 178 */ "arrayelement ::= ID APTR expr",
+ /* 179 */ "arrayelement ::= expr",
+ /* 180 */ "doublequoted_with_quotes ::= QUOTE QUOTE",
+ /* 181 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",
+ /* 182 */ "doublequoted ::= doublequoted doublequotedcontent",
+ /* 183 */ "doublequoted ::= doublequotedcontent",
+ /* 184 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",
+ /* 185 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",
+ /* 186 */ "doublequotedcontent ::= DOLLARID",
+ /* 187 */ "doublequotedcontent ::= LDEL variable RDEL",
+ /* 188 */ "doublequotedcontent ::= LDEL expr RDEL",
+ /* 189 */ "doublequotedcontent ::= smartytag",
+ /* 190 */ "doublequotedcontent ::= OTHER",
+ /* 191 */ "optspace ::= SPACE",
+ /* 192 */ "optspace ::=",
+    );
+
+    function tokenName($tokenType)
+    {
+        if ($tokenType === 0) {
+            return 'End of Input';
+        }
+        if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
+            return $this->yyTokenName[$tokenType];
+        } else {
+            return "Unknown";
+        }
+    }
+
+    static function yy_destructor($yymajor, $yypminor)
+    {
+        switch ($yymajor) {
+            default:  break;   /* If no destructor action specified: do nothing */
+        }
+    }
+
+    function yy_pop_parser_stack()
+    {
+        if (!count($this->yystack)) {
+            return;
+        }
+        $yytos = array_pop($this->yystack);
+        if (self::$yyTraceFILE && $this->yyidx >= 0) {
+            fwrite(self::$yyTraceFILE,
+                self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+                    "\n");
+        }
+        $yymajor = $yytos->major;
+        self::yy_destructor($yymajor, $yytos->minor);
+        $this->yyidx--;
+        return $yymajor;
+    }
+
+    function __destruct()
+    {
+        while ($this->yystack !== Array()) {
+            $this->yy_pop_parser_stack();
+        }
+        if (is_resource(self::$yyTraceFILE)) {
+            fclose(self::$yyTraceFILE);
+        }
+    }
+
+    function yy_get_expected_tokens($token)
+    {
+        $state = $this->yystack[$this->yyidx]->stateno;
+        $expected = self::$yyExpectedTokens[$state];
+        if (in_array($token, self::$yyExpectedTokens[$state], true)) {
+            return $expected;
+        }
+        $stack = $this->yystack;
+        $yyidx = $this->yyidx;
+        do {
+            $yyact = $this->yy_find_shift_action($token);
+            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+                // reduce action
+                $done = 0;
+                do {
+                    if ($done++ == 100) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        // too much recursion prevents proper detection
+                        // so give up
+                        return array_unique($expected);
+                    }
+                    $yyruleno = $yyact - self::YYNSTATE;
+                    $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
+                    $nextstate = $this->yy_find_reduce_action(
+                        $this->yystack[$this->yyidx]->stateno,
+                        self::$yyRuleInfo[$yyruleno]['lhs']);
+                    if (isset(self::$yyExpectedTokens[$nextstate])) {
+                       $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+                            if (in_array($token,
+                                  self::$yyExpectedTokens[$nextstate], true)) {
+                            $this->yyidx = $yyidx;
+                            $this->yystack = $stack;
+                            return array_unique($expected);
+                        }
+                    }
+                    if ($nextstate < self::YYNSTATE) {
+                        // we need to shift a non-terminal
+                        $this->yyidx++;
+                        $x = new TP_yyStackEntry;
+                        $x->stateno = $nextstate;
+                        $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
+                        $this->yystack[$this->yyidx] = $x;
+                        continue 2;
+                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        // the last token was just ignored, we can't accept
+                        // by ignoring input, this is in essence ignoring a
+                        // syntax error!
+                        return array_unique($expected);
+                    } elseif ($nextstate === self::YY_NO_ACTION) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        // input accepted, but not shifted (I guess)
+                        return $expected;
+                    } else {
+                        $yyact = $nextstate;
+                    }
+                } while (true);
+            }
+            break;
+        } while (true);
+       $this->yyidx = $yyidx;
+       $this->yystack = $stack;
+        return array_unique($expected);
+    }
+
+    function yy_is_expected_token($token)
+    {
+        if ($token === 0) {
+            return true; // 0 is not part of this
+        }
+        $state = $this->yystack[$this->yyidx]->stateno;
+        if (in_array($token, self::$yyExpectedTokens[$state], true)) {
+            return true;
+        }
+        $stack = $this->yystack;
+        $yyidx = $this->yyidx;
+        do {
+            $yyact = $this->yy_find_shift_action($token);
+            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
+                // reduce action
+                $done = 0;
+                do {
+                    if ($done++ == 100) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        // too much recursion prevents proper detection
+                        // so give up
+                        return true;
+                    }
+                    $yyruleno = $yyact - self::YYNSTATE;
+                    $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs'];
+                    $nextstate = $this->yy_find_reduce_action(
+                        $this->yystack[$this->yyidx]->stateno,
+                        self::$yyRuleInfo[$yyruleno]['lhs']);
+                    if (isset(self::$yyExpectedTokens[$nextstate]) &&
+                          in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        return true;
+                    }
+                    if ($nextstate < self::YYNSTATE) {
+                        // we need to shift a non-terminal
+                        $this->yyidx++;
+                        $x = new TP_yyStackEntry;
+                        $x->stateno = $nextstate;
+                        $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
+                        $this->yystack[$this->yyidx] = $x;
+                        continue 2;
+                    } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        if (!$token) {
+                            // end of input: this is valid
+                            return true;
+                        }
+                        // the last token was just ignored, we can't accept
+                        // by ignoring input, this is in essence ignoring a
+                        // syntax error!
+                        return false;
+                    } elseif ($nextstate === self::YY_NO_ACTION) {
+                        $this->yyidx = $yyidx;
+                        $this->yystack = $stack;
+                        // input accepted, but not shifted (I guess)
+                        return true;
+                    } else {
+                        $yyact = $nextstate;
+                    }
+                } while (true);
+            }
+            break;
+        } while (true);
+        $this->yyidx = $yyidx;
+        $this->yystack = $stack;
+        return true;
+    }
+
+   function yy_find_shift_action($iLookAhead)
+    {
+        $stateno = $this->yystack[$this->yyidx]->stateno;
+     
+        /* if ($this->yyidx < 0) return self::YY_NO_ACTION;  */
+        if (!isset(self::$yy_shift_ofst[$stateno])) {
+            // no shift actions
+            return self::$yy_default[$stateno];
+        }
+        $i = self::$yy_shift_ofst[$stateno];
+        if ($i === self::YY_SHIFT_USE_DFLT) {
+            return self::$yy_default[$stateno];
+        }
+        if ($iLookAhead == self::YYNOCODE) {
+            return self::YY_NO_ACTION;
+        }
+        $i += $iLookAhead;
+        if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
+              self::$yy_lookahead[$i] != $iLookAhead) {
+            if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
+                   && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
+                if (self::$yyTraceFILE) {
+                    fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
+                        $this->yyTokenName[$iLookAhead] . " => " .
+                        $this->yyTokenName[$iFallback] . "\n");
+                }
+                return $this->yy_find_shift_action($iFallback);
+            }
+            return self::$yy_default[$stateno];
+        } else {
+            return self::$yy_action[$i];
+        }
+    }
+
+    function yy_find_reduce_action($stateno, $iLookAhead)
+    {
+        /* $stateno = $this->yystack[$this->yyidx]->stateno; */
+
+        if (!isset(self::$yy_reduce_ofst[$stateno])) {
+            return self::$yy_default[$stateno];
+        }
+        $i = self::$yy_reduce_ofst[$stateno];
+        if ($i == self::YY_REDUCE_USE_DFLT) {
+            return self::$yy_default[$stateno];
+        }
+        if ($iLookAhead == self::YYNOCODE) {
+            return self::YY_NO_ACTION;
+        }
+        $i += $iLookAhead;
+        if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
+              self::$yy_lookahead[$i] != $iLookAhead) {
+            return self::$yy_default[$stateno];
+        } else {
+            return self::$yy_action[$i];
+        }
+    }
+
+    function yy_shift($yyNewState, $yyMajor, $yypMinor)
+    {
+        $this->yyidx++;
+        if ($this->yyidx >= self::YYSTACKDEPTH) {
+            $this->yyidx--;
+            if (self::$yyTraceFILE) {
+                fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+            }
+            while ($this->yyidx >= 0) {
+                $this->yy_pop_parser_stack();
+            }
+#line 82 "smarty_internal_templateparser.y"
+
+    $this->internalError = true;
+    $this->compiler->trigger_template_error("Stack overflow in template parser");
+#line 1615 "smarty_internal_templateparser.php"
+            return;
+        }
+        $yytos = new TP_yyStackEntry;
+        $yytos->stateno = $yyNewState;
+        $yytos->major = $yyMajor;
+        $yytos->minor = $yypMinor;
+        array_push($this->yystack, $yytos);
+        if (self::$yyTraceFILE && $this->yyidx > 0) {
+            fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
+                $yyNewState);
+            fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
+            for($i = 1; $i <= $this->yyidx; $i++) {
+                fprintf(self::$yyTraceFILE, " %s",
+                    $this->yyTokenName[$this->yystack[$i]->major]);
+            }
+            fwrite(self::$yyTraceFILE,"\n");
+        }
+    }
+
+    static public $yyRuleInfo = array(
+  array( 'lhs' => 78, 'rhs' => 1 ),
+  array( 'lhs' => 79, 'rhs' => 1 ),
+  array( 'lhs' => 79, 'rhs' => 2 ),
+  array( 'lhs' => 79, 'rhs' => 0 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 80, 'rhs' => 1 ),
+  array( 'lhs' => 82, 'rhs' => 2 ),
+  array( 'lhs' => 82, 'rhs' => 3 ),
+  array( 'lhs' => 83, 'rhs' => 2 ),
+  array( 'lhs' => 83, 'rhs' => 0 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 84, 'rhs' => 1 ),
+  array( 'lhs' => 81, 'rhs' => 3 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 5 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 6 ),
+  array( 'lhs' => 81, 'rhs' => 6 ),
+  array( 'lhs' => 81, 'rhs' => 7 ),
+  array( 'lhs' => 81, 'rhs' => 7 ),
+  array( 'lhs' => 81, 'rhs' => 6 ),
+  array( 'lhs' => 81, 'rhs' => 6 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 3 ),
+  array( 'lhs' => 81, 'rhs' => 6 ),
+  array( 'lhs' => 81, 'rhs' => 5 ),
+  array( 'lhs' => 81, 'rhs' => 7 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 12 ),
+  array( 'lhs' => 96, 'rhs' => 2 ),
+  array( 'lhs' => 96, 'rhs' => 1 ),
+  array( 'lhs' => 81, 'rhs' => 7 ),
+  array( 'lhs' => 81, 'rhs' => 8 ),
+  array( 'lhs' => 81, 'rhs' => 3 ),
+  array( 'lhs' => 81, 'rhs' => 7 ),
+  array( 'lhs' => 81, 'rhs' => 10 ),
+  array( 'lhs' => 81, 'rhs' => 7 ),
+  array( 'lhs' => 81, 'rhs' => 10 ),
+  array( 'lhs' => 81, 'rhs' => 3 ),
+  array( 'lhs' => 81, 'rhs' => 4 ),
+  array( 'lhs' => 81, 'rhs' => 6 ),
+  array( 'lhs' => 81, 'rhs' => 5 ),
+  array( 'lhs' => 86, 'rhs' => 2 ),
+  array( 'lhs' => 86, 'rhs' => 1 ),
+  array( 'lhs' => 86, 'rhs' => 0 ),
+  array( 'lhs' => 100, 'rhs' => 4 ),
+  array( 'lhs' => 100, 'rhs' => 4 ),
+  array( 'lhs' => 100, 'rhs' => 4 ),
+  array( 'lhs' => 100, 'rhs' => 4 ),
+  array( 'lhs' => 100, 'rhs' => 2 ),
+  array( 'lhs' => 100, 'rhs' => 4 ),
+  array( 'lhs' => 93, 'rhs' => 1 ),
+  array( 'lhs' => 93, 'rhs' => 3 ),
+  array( 'lhs' => 92, 'rhs' => 4 ),
+  array( 'lhs' => 88, 'rhs' => 1 ),
+  array( 'lhs' => 88, 'rhs' => 4 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 1 ),
+  array( 'lhs' => 88, 'rhs' => 2 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 2 ),
+  array( 'lhs' => 88, 'rhs' => 2 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 2 ),
+  array( 'lhs' => 88, 'rhs' => 2 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 88, 'rhs' => 3 ),
+  array( 'lhs' => 90, 'rhs' => 7 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 2 ),
+  array( 'lhs' => 85, 'rhs' => 2 ),
+  array( 'lhs' => 85, 'rhs' => 2 ),
+  array( 'lhs' => 85, 'rhs' => 2 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 3 ),
+  array( 'lhs' => 85, 'rhs' => 2 ),
+  array( 'lhs' => 85, 'rhs' => 2 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 3 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 85, 'rhs' => 3 ),
+  array( 'lhs' => 85, 'rhs' => 3 ),
+  array( 'lhs' => 85, 'rhs' => 1 ),
+  array( 'lhs' => 87, 'rhs' => 1 ),
+  array( 'lhs' => 87, 'rhs' => 4 ),
+  array( 'lhs' => 87, 'rhs' => 1 ),
+  array( 'lhs' => 87, 'rhs' => 3 ),
+  array( 'lhs' => 87, 'rhs' => 3 ),
+  array( 'lhs' => 91, 'rhs' => 3 ),
+  array( 'lhs' => 107, 'rhs' => 2 ),
+  array( 'lhs' => 107, 'rhs' => 0 ),
+  array( 'lhs' => 108, 'rhs' => 3 ),
+  array( 'lhs' => 108, 'rhs' => 5 ),
+  array( 'lhs' => 108, 'rhs' => 2 ),
+  array( 'lhs' => 108, 'rhs' => 2 ),
+  array( 'lhs' => 108, 'rhs' => 4 ),
+  array( 'lhs' => 108, 'rhs' => 3 ),
+  array( 'lhs' => 108, 'rhs' => 5 ),
+  array( 'lhs' => 108, 'rhs' => 3 ),
+  array( 'lhs' => 108, 'rhs' => 2 ),
+  array( 'lhs' => 95, 'rhs' => 1 ),
+  array( 'lhs' => 95, 'rhs' => 2 ),
+  array( 'lhs' => 109, 'rhs' => 1 ),
+  array( 'lhs' => 109, 'rhs' => 3 ),
+  array( 'lhs' => 106, 'rhs' => 2 ),
+  array( 'lhs' => 110, 'rhs' => 1 ),
+  array( 'lhs' => 110, 'rhs' => 2 ),
+  array( 'lhs' => 111, 'rhs' => 3 ),
+  array( 'lhs' => 111, 'rhs' => 4 ),
+  array( 'lhs' => 111, 'rhs' => 5 ),
+  array( 'lhs' => 111, 'rhs' => 6 ),
+  array( 'lhs' => 111, 'rhs' => 2 ),
+  array( 'lhs' => 103, 'rhs' => 4 ),
+  array( 'lhs' => 112, 'rhs' => 4 ),
+  array( 'lhs' => 112, 'rhs' => 5 ),
+  array( 'lhs' => 113, 'rhs' => 3 ),
+  array( 'lhs' => 113, 'rhs' => 1 ),
+  array( 'lhs' => 113, 'rhs' => 0 ),
+  array( 'lhs' => 89, 'rhs' => 3 ),
+  array( 'lhs' => 89, 'rhs' => 2 ),
+  array( 'lhs' => 98, 'rhs' => 3 ),
+  array( 'lhs' => 98, 'rhs' => 2 ),
+  array( 'lhs' => 99, 'rhs' => 2 ),
+  array( 'lhs' => 99, 'rhs' => 0 ),
+  array( 'lhs' => 114, 'rhs' => 2 ),
+  array( 'lhs' => 114, 'rhs' => 2 ),
+  array( 'lhs' => 105, 'rhs' => 1 ),
+  array( 'lhs' => 105, 'rhs' => 2 ),
+  array( 'lhs' => 105, 'rhs' => 1 ),
+  array( 'lhs' => 105, 'rhs' => 3 ),
+  array( 'lhs' => 105, 'rhs' => 4 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 101, 'rhs' => 1 ),
+  array( 'lhs' => 102, 'rhs' => 1 ),
+  array( 'lhs' => 102, 'rhs' => 1 ),
+  array( 'lhs' => 102, 'rhs' => 1 ),
+  array( 'lhs' => 97, 'rhs' => 3 ),
+  array( 'lhs' => 115, 'rhs' => 1 ),
+  array( 'lhs' => 115, 'rhs' => 3 ),
+  array( 'lhs' => 115, 'rhs' => 0 ),
+  array( 'lhs' => 116, 'rhs' => 3 ),
+  array( 'lhs' => 116, 'rhs' => 3 ),
+  array( 'lhs' => 116, 'rhs' => 1 ),
+  array( 'lhs' => 104, 'rhs' => 2 ),
+  array( 'lhs' => 104, 'rhs' => 3 ),
+  array( 'lhs' => 117, 'rhs' => 2 ),
+  array( 'lhs' => 117, 'rhs' => 1 ),
+  array( 'lhs' => 118, 'rhs' => 3 ),
+  array( 'lhs' => 118, 'rhs' => 3 ),
+  array( 'lhs' => 118, 'rhs' => 1 ),
+  array( 'lhs' => 118, 'rhs' => 3 ),
+  array( 'lhs' => 118, 'rhs' => 3 ),
+  array( 'lhs' => 118, 'rhs' => 1 ),
+  array( 'lhs' => 118, 'rhs' => 1 ),
+  array( 'lhs' => 94, 'rhs' => 1 ),
+  array( 'lhs' => 94, 'rhs' => 0 ),
+    );
+
+    static public $yyReduceMap = array(
+        0 => 0,
+        1 => 1,
+        2 => 1,
+        4 => 4,
+        5 => 5,
+        6 => 6,
+        7 => 7,
+        8 => 8,
+        9 => 9,
+        10 => 10,
+        11 => 11,
+        12 => 12,
+        13 => 13,
+        14 => 14,
+        15 => 15,
+        18 => 15,
+        16 => 16,
+        17 => 17,
+        96 => 17,
+        98 => 17,
+        99 => 17,
+        157 => 17,
+        19 => 19,
+        20 => 19,
+        71 => 19,
+        95 => 19,
+        100 => 19,
+        101 => 19,
+        106 => 19,
+        108 => 19,
+        109 => 19,
+        115 => 19,
+        156 => 19,
+        174 => 19,
+        21 => 21,
+        22 => 21,
+        23 => 23,
+        24 => 24,
+        25 => 25,
+        26 => 26,
+        27 => 27,
+        28 => 27,
+        30 => 27,
+        31 => 27,
+        29 => 29,
+        32 => 32,
+        33 => 32,
+        34 => 34,
+        35 => 34,
+        36 => 36,
+        37 => 36,
+        38 => 38,
+        39 => 39,
+        40 => 40,
+        41 => 41,
+        42 => 42,
+        43 => 43,
+        44 => 43,
+        45 => 45,
+        46 => 46,
+        47 => 47,
+        60 => 47,
+        146 => 47,
+        150 => 47,
+        158 => 47,
+        179 => 47,
+        48 => 48,
+        49 => 49,
+        50 => 50,
+        51 => 51,
+        52 => 52,
+        53 => 53,
+        54 => 54,
+        55 => 55,
+        56 => 56,
+        57 => 57,
+        58 => 58,
+        59 => 59,
+        61 => 61,
+        62 => 62,
+        63 => 63,
+        64 => 63,
+        65 => 63,
+        66 => 66,
+        67 => 67,
+        68 => 68,
+        69 => 69,
+        70 => 70,
+        72 => 72,
+        73 => 73,
+        74 => 73,
+        75 => 73,
+        76 => 76,
+        130 => 76,
+        191 => 76,
+        77 => 77,
+        78 => 78,
+        81 => 78,
+        92 => 78,
+        79 => 79,
+        80 => 80,
+        82 => 82,
+        83 => 83,
+        84 => 84,
+        89 => 84,
+        85 => 85,
+        88 => 85,
+        86 => 86,
+        91 => 86,
+        87 => 87,
+        90 => 87,
+        93 => 93,
+        94 => 94,
+        97 => 97,
+        102 => 102,
+        103 => 103,
+        104 => 104,
+        105 => 105,
+        107 => 107,
+        110 => 110,
+        111 => 111,
+        112 => 112,
+        113 => 113,
+        114 => 114,
+        116 => 116,
+        117 => 117,
+        118 => 118,
+        119 => 119,
+        120 => 120,
+        121 => 121,
+        122 => 122,
+        123 => 123,
+        124 => 124,
+        125 => 125,
+        128 => 125,
+        126 => 126,
+        127 => 127,
+        129 => 129,
+        131 => 131,
+        132 => 132,
+        133 => 133,
+        134 => 134,
+        135 => 135,
+        136 => 136,
+        137 => 137,
+        138 => 138,
+        139 => 139,
+        140 => 140,
+        141 => 141,
+        142 => 142,
+        143 => 143,
+        144 => 144,
+        145 => 145,
+        147 => 147,
+        148 => 148,
+        149 => 149,
+        151 => 151,
+        152 => 152,
+        153 => 153,
+        192 => 153,
+        154 => 154,
+        155 => 154,
+        159 => 159,
+        160 => 160,
+        161 => 161,
+        162 => 162,
+        163 => 163,
+        164 => 164,
+        165 => 165,
+        166 => 166,
+        167 => 167,
+        168 => 168,
+        169 => 169,
+        170 => 170,
+        171 => 171,
+        172 => 172,
+        173 => 173,
+        175 => 175,
+        176 => 176,
+        177 => 177,
+        178 => 178,
+        180 => 180,
+        181 => 181,
+        182 => 182,
+        183 => 183,
+        184 => 184,
+        185 => 184,
+        187 => 184,
+        186 => 186,
+        188 => 188,
+        189 => 189,
+        190 => 190,
+    );
+#line 93 "smarty_internal_templateparser.y"
+    function yy_r0(){ $this->_retvalue = $this->root_buffer->to_smarty_php();     }
+#line 2027 "smarty_internal_templateparser.php"
+#line 99 "smarty_internal_templateparser.y"
+    function yy_r1(){ $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);     }
+#line 2030 "smarty_internal_templateparser.php"
+#line 111 "smarty_internal_templateparser.y"
+    function yy_r4(){
+                                          if ($this->compiler->has_code) {
+                                            $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();
+                                            $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true));
+                                         } else { 
+                                           $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
+                                         }  
+                                         $this->compiler->has_variable_string = false;
+                                         $this->block_nesting_level = count($this->compiler->_tag_stack);
+                                            }
+#line 2042 "smarty_internal_templateparser.php"
+#line 123 "smarty_internal_templateparser.y"
+    function yy_r5(){ $this->_retvalue = new _smarty_tag($this, '');    }
+#line 2045 "smarty_internal_templateparser.php"
+#line 126 "smarty_internal_templateparser.y"
+    function yy_r6(){ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);     }
+#line 2048 "smarty_internal_templateparser.php"
+#line 129 "smarty_internal_templateparser.y"
+    function yy_r7(){
+                                      if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {
+                                                                    $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
+                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {
+                                       $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {
+                                       $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<?php', true));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {
+                                       $this->_retvalue = new _smarty_text($this, '');
+                                      }
+                                         }
+#line 2061 "smarty_internal_templateparser.php"
+#line 141 "smarty_internal_templateparser.y"
+    function yy_r8(){if ($this->is_xml) {
+                                       $this->compiler->tag_nocache = true; 
+                                       $this->is_xml = true; 
+                                       $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '?>';?>", $this->compiler, true));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {
+                                                                    $this->_retvalue = new _smarty_text($this, '?<?php ?>>');
+                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {
+                                       $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {
+                                       $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {
+                                       $this->_retvalue = new _smarty_text($this, '');
+                                      }
+                                         }
+#line 2077 "smarty_internal_templateparser.php"
+#line 157 "smarty_internal_templateparser.y"
+    function yy_r9(){
+                                      if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {
+                                                                    $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {
+                                       $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {
+                                        if ($this->asp_tags) {
+                                          $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<%', true));
+                                        } else {
+                                         $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+                                        }
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {
+                                        if ($this->asp_tags) {
+                                         $this->_retvalue = new _smarty_text($this, '');
+                                        } else {
+                                         $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+                                        }
+                                      }
+                                        }
+#line 2098 "smarty_internal_templateparser.php"
+#line 178 "smarty_internal_templateparser.y"
+    function yy_r10(){
+                                      if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {
+                                                                    $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {
+                                       $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {
+                                        if ($this->asp_tags) {
+                                          $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('%>', true));
+                                        } else {
+                                         $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+                                        }
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {
+                                        if ($this->asp_tags) {
+                                         $this->_retvalue = new _smarty_text($this, '');
+                                        } else {
+                                         $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+                                        }
+                                      }
+                                        }
+#line 2119 "smarty_internal_templateparser.php"
+#line 198 "smarty_internal_templateparser.y"
+    function yy_r11(){if ($this->lex->strip) {
+                                       $this->_retvalue = new _smarty_text($this, preg_replace('![\$this->yystack[$this->yyidx + 0]->minor ]*[\r\n]+[\$this->yystack[$this->yyidx + 0]->minor ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)));     
+                                     } else {
+                                       $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));    
+                                     }
+                                        }
+#line 2127 "smarty_internal_templateparser.php"
+#line 206 "smarty_internal_templateparser.y"
+    function yy_r12(){ $this->compiler->tag_nocache = true; $this->is_xml = true; $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true));    }
+#line 2130 "smarty_internal_templateparser.php"
+#line 209 "smarty_internal_templateparser.y"
+    function yy_r13(){if ($this->lex->strip) {
+                                       $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); 
+                                     } else {
+                                       $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);    
+                                     }
+                                        }
+#line 2138 "smarty_internal_templateparser.php"
+#line 215 "smarty_internal_templateparser.y"
+    function yy_r14(){
+                                     $this->_retvalue = new _smarty_linebreak($this, $this->yystack[$this->yyidx + 0]->minor);
+                                       }
+#line 2143 "smarty_internal_templateparser.php"
+#line 220 "smarty_internal_templateparser.y"
+    function yy_r15(){ $this->_retvalue = '';     }
+#line 2146 "smarty_internal_templateparser.php"
+#line 221 "smarty_internal_templateparser.y"
+    function yy_r16(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }
+#line 2149 "smarty_internal_templateparser.php"
+#line 223 "smarty_internal_templateparser.y"
+    function yy_r17(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }
+#line 2152 "smarty_internal_templateparser.php"
+#line 226 "smarty_internal_templateparser.y"
+    function yy_r19(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     }
+#line 2155 "smarty_internal_templateparser.php"
+#line 228 "smarty_internal_templateparser.y"
+    function yy_r21(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     }
+#line 2158 "smarty_internal_templateparser.php"
+#line 230 "smarty_internal_templateparser.y"
+    function yy_r23(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);     }
+#line 2161 "smarty_internal_templateparser.php"
+#line 231 "smarty_internal_templateparser.y"
+    function yy_r24(){ $this->_retvalue = '<<?php ?>%';     }
+#line 2164 "smarty_internal_templateparser.php"
+#line 232 "smarty_internal_templateparser.y"
+    function yy_r25(){ $this->_retvalue = '%<?php ?>>';     }
+#line 2167 "smarty_internal_templateparser.php"
+#line 240 "smarty_internal_templateparser.y"
+    function yy_r26(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2170 "smarty_internal_templateparser.php"
+#line 241 "smarty_internal_templateparser.y"
+    function yy_r27(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2173 "smarty_internal_templateparser.php"
+#line 243 "smarty_internal_templateparser.y"
+    function yy_r29(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array_merge(array('value'=>$this->yystack[$this->yyidx + -3]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2176 "smarty_internal_templateparser.php"
+#line 253 "smarty_internal_templateparser.y"
+    function yy_r32(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"));    }
+#line 2179 "smarty_internal_templateparser.php"
+#line 255 "smarty_internal_templateparser.y"
+    function yy_r34(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor,'var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'"),$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2182 "smarty_internal_templateparser.php"
+#line 257 "smarty_internal_templateparser.y"
+    function yy_r36(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2185 "smarty_internal_templateparser.php"
+#line 260 "smarty_internal_templateparser.y"
+    function yy_r38(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);    }
+#line 2188 "smarty_internal_templateparser.php"
+#line 261 "smarty_internal_templateparser.y"
+    function yy_r39(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());    }
+#line 2191 "smarty_internal_templateparser.php"
+#line 263 "smarty_internal_templateparser.y"
+    function yy_r40(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2194 "smarty_internal_templateparser.php"
+#line 265 "smarty_internal_templateparser.y"
+    function yy_r41(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';
+                                                                                    $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
+                                                                                     }
+#line 2199 "smarty_internal_templateparser.php"
+#line 269 "smarty_internal_templateparser.y"
+    function yy_r42(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -5]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -3]->minor),$this->yystack[$this->yyidx + -1]->minor)).'<?php echo ';
+                                                                                               $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
+                                                                                                }
+#line 2204 "smarty_internal_templateparser.php"
+#line 273 "smarty_internal_templateparser.y"
+    function yy_r43(){ $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2207 "smarty_internal_templateparser.php"
+#line 276 "smarty_internal_templateparser.y"
+    function yy_r45(){
+                                                             $this->_retvalue = $this->compiler->compileTag('for',array('start'=>$this->yystack[$this->yyidx + -9]->minor,'ifexp'=>$this->yystack[$this->yyidx + -6]->minor,'varloop'=>$this->yystack[$this->yyidx + -2]->minor,'loop'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2211 "smarty_internal_templateparser.php"
+#line 279 "smarty_internal_templateparser.y"
+    function yy_r46(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2214 "smarty_internal_templateparser.php"
+#line 280 "smarty_internal_templateparser.y"
+    function yy_r47(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }
+#line 2217 "smarty_internal_templateparser.php"
+#line 281 "smarty_internal_templateparser.y"
+    function yy_r48(){ $this->_retvalue = $this->compiler->compileTag('for',array_merge(array('start'=>$this->yystack[$this->yyidx + -4]->minor,'to'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2220 "smarty_internal_templateparser.php"
+#line 282 "smarty_internal_templateparser.y"
+    function yy_r49(){ $this->_retvalue = $this->compiler->compileTag('for',array('start'=>$this->yystack[$this->yyidx + -5]->minor,'to'=>$this->yystack[$this->yyidx + -3]->minor,'step'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2223 "smarty_internal_templateparser.php"
+#line 284 "smarty_internal_templateparser.y"
+    function yy_r50(){ $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor);    }
+#line 2226 "smarty_internal_templateparser.php"
+#line 286 "smarty_internal_templateparser.y"
+    function yy_r51(){
+                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2230 "smarty_internal_templateparser.php"
+#line 288 "smarty_internal_templateparser.y"
+    function yy_r52(){
+                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor));    }
+#line 2234 "smarty_internal_templateparser.php"
+#line 290 "smarty_internal_templateparser.y"
+    function yy_r53(){ 
+                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2238 "smarty_internal_templateparser.php"
+#line 292 "smarty_internal_templateparser.y"
+    function yy_r54(){ 
+                                                            $this->_retvalue = $this->compiler->compileTag('foreach',array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor));    }
+#line 2242 "smarty_internal_templateparser.php"
+#line 296 "smarty_internal_templateparser.y"
+    function yy_r55(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());    }
+#line 2245 "smarty_internal_templateparser.php"
+#line 297 "smarty_internal_templateparser.y"
+    function yy_r56(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor);    }
+#line 2248 "smarty_internal_templateparser.php"
+#line 298 "smarty_internal_templateparser.y"
+    function yy_r57(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';
+                                                                                         $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';
+                                                                                          }
+#line 2253 "smarty_internal_templateparser.php"
+#line 302 "smarty_internal_templateparser.y"
+    function yy_r58(){  $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));    }
+#line 2256 "smarty_internal_templateparser.php"
+#line 308 "smarty_internal_templateparser.y"
+    function yy_r59(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[key($this->yystack[$this->yyidx + 0]->minor)] = $this->yystack[$this->yyidx + 0]->minor[key($this->yystack[$this->yyidx + 0]->minor)];    }
+#line 2259 "smarty_internal_templateparser.php"
+#line 312 "smarty_internal_templateparser.y"
+    function yy_r61(){ $this->_retvalue = array();    }
+#line 2262 "smarty_internal_templateparser.php"
+#line 315 "smarty_internal_templateparser.y"
+    function yy_r62(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true');
+                                                 } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'false');
+                                                 } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'null');
+                                                 } else
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");    }
+#line 2272 "smarty_internal_templateparser.php"
+#line 323 "smarty_internal_templateparser.y"
+    function yy_r63(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }
+#line 2275 "smarty_internal_templateparser.php"
+#line 326 "smarty_internal_templateparser.y"
+    function yy_r66(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true');    }
+#line 2278 "smarty_internal_templateparser.php"
+#line 327 "smarty_internal_templateparser.y"
+    function yy_r67(){$this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }
+#line 2281 "smarty_internal_templateparser.php"
+#line 333 "smarty_internal_templateparser.y"
+    function yy_r68(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);    }
+#line 2284 "smarty_internal_templateparser.php"
+#line 334 "smarty_internal_templateparser.y"
+    function yy_r69(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;    }
+#line 2287 "smarty_internal_templateparser.php"
+#line 336 "smarty_internal_templateparser.y"
+    function yy_r70(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);    }
+#line 2290 "smarty_internal_templateparser.php"
+#line 345 "smarty_internal_templateparser.y"
+    function yy_r72(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';    }
+#line 2293 "smarty_internal_templateparser.php"
+#line 347 "smarty_internal_templateparser.y"
+    function yy_r73(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;     }
+#line 2296 "smarty_internal_templateparser.php"
+#line 353 "smarty_internal_templateparser.y"
+    function yy_r76(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }
+#line 2299 "smarty_internal_templateparser.php"
+#line 357 "smarty_internal_templateparser.y"
+    function yy_r77(){  $this->_retvalue = $this->compiler->compileTag('private_modifier',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));     }
+#line 2302 "smarty_internal_templateparser.php"
+#line 362 "smarty_internal_templateparser.y"
+    function yy_r78(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2305 "smarty_internal_templateparser.php"
+#line 363 "smarty_internal_templateparser.y"
+    function yy_r79(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';    }
+#line 2308 "smarty_internal_templateparser.php"
+#line 364 "smarty_internal_templateparser.y"
+    function yy_r80(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';    }
+#line 2311 "smarty_internal_templateparser.php"
+#line 366 "smarty_internal_templateparser.y"
+    function yy_r82(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }
+#line 2314 "smarty_internal_templateparser.php"
+#line 367 "smarty_internal_templateparser.y"
+    function yy_r83(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }
+#line 2317 "smarty_internal_templateparser.php"
+#line 368 "smarty_internal_templateparser.y"
+    function yy_r84(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }
+#line 2320 "smarty_internal_templateparser.php"
+#line 369 "smarty_internal_templateparser.y"
+    function yy_r85(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }
+#line 2323 "smarty_internal_templateparser.php"
+#line 370 "smarty_internal_templateparser.y"
+    function yy_r86(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }
+#line 2326 "smarty_internal_templateparser.php"
+#line 371 "smarty_internal_templateparser.y"
+    function yy_r87(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }
+#line 2329 "smarty_internal_templateparser.php"
+#line 377 "smarty_internal_templateparser.y"
+    function yy_r93(){$this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>'; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;    }
+#line 2332 "smarty_internal_templateparser.php"
+#line 383 "smarty_internal_templateparser.y"
+    function yy_r94(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2335 "smarty_internal_templateparser.php"
+#line 390 "smarty_internal_templateparser.y"
+    function yy_r97(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;     }
+#line 2338 "smarty_internal_templateparser.php"
+#line 396 "smarty_internal_templateparser.y"
+    function yy_r102(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;     }
+#line 2341 "smarty_internal_templateparser.php"
+#line 397 "smarty_internal_templateparser.y"
+    function yy_r103(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';     }
+#line 2344 "smarty_internal_templateparser.php"
+#line 398 "smarty_internal_templateparser.y"
+    function yy_r104(){ $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;     }
+#line 2347 "smarty_internal_templateparser.php"
+#line 400 "smarty_internal_templateparser.y"
+    function yy_r105(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+                                $this->_retvalue = 'true';
+                               } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+                                $this->_retvalue = 'false';
+                               } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+                                $this->_retvalue = 'null';
+                               } else
+                               $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";     }
+#line 2357 "smarty_internal_templateparser.php"
+#line 411 "smarty_internal_templateparser.y"
+    function yy_r107(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";     }
+#line 2360 "smarty_internal_templateparser.php"
+#line 417 "smarty_internal_templateparser.y"
+    function yy_r110(){if ((!$this->template->security || $this->smarty->security_handler->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
+                                                                                                                                                                                  if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
+                                                                  $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor;
+                                                                                                                                                                                  } else {
+                                                                  $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor;
+                                                                 } 
+                                                                } else {
+                                                                 $this->compiler->trigger_template_error ("static class '".$this->yystack[$this->yyidx + -2]->minor."' is undefined or not allowed by security setting");
+                                                                }
+                                                                   }
+#line 2372 "smarty_internal_templateparser.php"
+#line 427 "smarty_internal_templateparser.y"
+    function yy_r111(){ if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;} else {
+                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor['var'],"'"), null, true, false)->nocache;}    }
+#line 2376 "smarty_internal_templateparser.php"
+#line 430 "smarty_internal_templateparser.y"
+    function yy_r112(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '$_tmp'.$this->prefix_number;     }
+#line 2379 "smarty_internal_templateparser.php"
+#line 439 "smarty_internal_templateparser.y"
+    function yy_r113(){if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+                                      } else {
+                                      if (isset($this->compiler->local_var[$this->yystack[$this->yyidx + 0]->minor['var']])) {
+                                          $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + 0]->minor['var'] .']->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+                                         } else {
+                                          $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+                                         }
+                                       $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor['var'],"'"), null, true, false)->nocache;}    }
+#line 2389 "smarty_internal_templateparser.php"
+#line 448 "smarty_internal_templateparser.y"
+    function yy_r114(){if (isset($this->compiler->local_var[$this->yystack[$this->yyidx + -2]->minor])) {
+                                                  $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
+                                                 } else {
+                                                  $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor;
+                                                 }
+                                                  $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }
+#line 2397 "smarty_internal_templateparser.php"
+#line 457 "smarty_internal_templateparser.y"
+    function yy_r116(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';    }
+#line 2400 "smarty_internal_templateparser.php"
+#line 458 "smarty_internal_templateparser.y"
+    function yy_r117(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';    }
+#line 2403 "smarty_internal_templateparser.php"
+#line 461 "smarty_internal_templateparser.y"
+    function yy_r118(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);    }
+#line 2406 "smarty_internal_templateparser.php"
+#line 467 "smarty_internal_templateparser.y"
+    function yy_r119(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2409 "smarty_internal_templateparser.php"
+#line 469 "smarty_internal_templateparser.y"
+    function yy_r120(){return;    }
+#line 2412 "smarty_internal_templateparser.php"
+#line 473 "smarty_internal_templateparser.y"
+    function yy_r121(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor .')->value]'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable('$this->yystack[$this->yyidx + 0]->minor', null, true, false)->nocache;    }
+#line 2415 "smarty_internal_templateparser.php"
+#line 474 "smarty_internal_templateparser.y"
+    function yy_r122(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor.']'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }
+#line 2418 "smarty_internal_templateparser.php"
+#line 475 "smarty_internal_templateparser.y"
+    function yy_r123(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";    }
+#line 2421 "smarty_internal_templateparser.php"
+#line 476 "smarty_internal_templateparser.y"
+    function yy_r124(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";    }
+#line 2424 "smarty_internal_templateparser.php"
+#line 477 "smarty_internal_templateparser.y"
+    function yy_r125(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";    }
+#line 2427 "smarty_internal_templateparser.php"
+#line 479 "smarty_internal_templateparser.y"
+    function yy_r126(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';    }
+#line 2430 "smarty_internal_templateparser.php"
+#line 480 "smarty_internal_templateparser.y"
+    function yy_r127(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';    }
+#line 2433 "smarty_internal_templateparser.php"
+#line 484 "smarty_internal_templateparser.y"
+    function yy_r129(){$this->_retvalue = '[]';    }
+#line 2436 "smarty_internal_templateparser.php"
+#line 492 "smarty_internal_templateparser.y"
+    function yy_r131(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2439 "smarty_internal_templateparser.php"
+#line 494 "smarty_internal_templateparser.y"
+    function yy_r132(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }
+#line 2442 "smarty_internal_templateparser.php"
+#line 496 "smarty_internal_templateparser.y"
+    function yy_r133(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';    }
+#line 2445 "smarty_internal_templateparser.php"
+#line 501 "smarty_internal_templateparser.y"
+    function yy_r134(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;} else {
+                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -1]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -1]->minor['var'],"'"), null, true, false)->nocache;}    }
+#line 2449 "smarty_internal_templateparser.php"
+#line 504 "smarty_internal_templateparser.y"
+    function yy_r135(){$this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;     }
+#line 2452 "smarty_internal_templateparser.php"
+#line 506 "smarty_internal_templateparser.y"
+    function yy_r136(){$this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }
+#line 2455 "smarty_internal_templateparser.php"
+#line 508 "smarty_internal_templateparser.y"
+    function yy_r137(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2458 "smarty_internal_templateparser.php"
+#line 509 "smarty_internal_templateparser.y"
+    function yy_r138(){ $this->_retvalue = '->{$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -1]->minor .')->value'.$this->yystack[$this->yyidx + 0]->minor.'}'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -1]->minor,"'"), null, true, false)->nocache;    }
+#line 2461 "smarty_internal_templateparser.php"
+#line 510 "smarty_internal_templateparser.y"
+    function yy_r139(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }
+#line 2464 "smarty_internal_templateparser.php"
+#line 511 "smarty_internal_templateparser.y"
+    function yy_r140(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }
+#line 2467 "smarty_internal_templateparser.php"
+#line 513 "smarty_internal_templateparser.y"
+    function yy_r141(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2470 "smarty_internal_templateparser.php"
+#line 519 "smarty_internal_templateparser.y"
+    function yy_r142(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {
+                                                                                                                                                                                   if ($this->yystack[$this->yyidx + -3]->minor == 'isset' || $this->yystack[$this->yyidx + -3]->minor == 'empty' || $this->yystack[$this->yyidx + -3]->minor == 'array' || is_callable($this->yystack[$this->yyidx + -3]->minor)) {
+                                                                                                                                                                                       $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";
+                                                                                                                                                                                   } else {
+                                                       $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\"");
+                                                      }
+                                                    }    }
+#line 2479 "smarty_internal_templateparser.php"
+#line 530 "smarty_internal_templateparser.y"
+    function yy_r143(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";    }
+#line 2482 "smarty_internal_templateparser.php"
+#line 531 "smarty_internal_templateparser.y"
+    function yy_r144(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = '$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')';    }
+#line 2485 "smarty_internal_templateparser.php"
+#line 535 "smarty_internal_templateparser.y"
+    function yy_r145(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2488 "smarty_internal_templateparser.php"
+#line 539 "smarty_internal_templateparser.y"
+    function yy_r147(){ return;    }
+#line 2491 "smarty_internal_templateparser.php"
+#line 544 "smarty_internal_templateparser.y"
+    function yy_r148(){$this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor));    }
+#line 2494 "smarty_internal_templateparser.php"
+#line 545 "smarty_internal_templateparser.y"
+    function yy_r149(){$this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor);    }
+#line 2497 "smarty_internal_templateparser.php"
+#line 548 "smarty_internal_templateparser.y"
+    function yy_r151(){ $this->_retvalue =  $this->yystack[$this->yyidx + 0]->minor;    }
+#line 2500 "smarty_internal_templateparser.php"
+#line 553 "smarty_internal_templateparser.y"
+    function yy_r152(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2503 "smarty_internal_templateparser.php"
+#line 555 "smarty_internal_templateparser.y"
+    function yy_r153(){$this->_retvalue = '';    }
+#line 2506 "smarty_internal_templateparser.php"
+#line 557 "smarty_internal_templateparser.y"
+    function yy_r154(){$this->_retvalue = ':'.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2509 "smarty_internal_templateparser.php"
+#line 567 "smarty_internal_templateparser.y"
+    function yy_r159(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2512 "smarty_internal_templateparser.php"
+#line 569 "smarty_internal_templateparser.y"
+    function yy_r160(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2515 "smarty_internal_templateparser.php"
+#line 578 "smarty_internal_templateparser.y"
+    function yy_r161(){$this->_retvalue = '==';    }
+#line 2518 "smarty_internal_templateparser.php"
+#line 579 "smarty_internal_templateparser.y"
+    function yy_r162(){$this->_retvalue = '!=';    }
+#line 2521 "smarty_internal_templateparser.php"
+#line 580 "smarty_internal_templateparser.y"
+    function yy_r163(){$this->_retvalue = '>';    }
+#line 2524 "smarty_internal_templateparser.php"
+#line 581 "smarty_internal_templateparser.y"
+    function yy_r164(){$this->_retvalue = '<';    }
+#line 2527 "smarty_internal_templateparser.php"
+#line 582 "smarty_internal_templateparser.y"
+    function yy_r165(){$this->_retvalue = '>=';    }
+#line 2530 "smarty_internal_templateparser.php"
+#line 583 "smarty_internal_templateparser.y"
+    function yy_r166(){$this->_retvalue = '<=';    }
+#line 2533 "smarty_internal_templateparser.php"
+#line 584 "smarty_internal_templateparser.y"
+    function yy_r167(){$this->_retvalue = '===';    }
+#line 2536 "smarty_internal_templateparser.php"
+#line 585 "smarty_internal_templateparser.y"
+    function yy_r168(){$this->_retvalue = '!==';    }
+#line 2539 "smarty_internal_templateparser.php"
+#line 586 "smarty_internal_templateparser.y"
+    function yy_r169(){$this->_retvalue = '%';    }
+#line 2542 "smarty_internal_templateparser.php"
+#line 588 "smarty_internal_templateparser.y"
+    function yy_r170(){$this->_retvalue = '&&';    }
+#line 2545 "smarty_internal_templateparser.php"
+#line 589 "smarty_internal_templateparser.y"
+    function yy_r171(){$this->_retvalue = '||';    }
+#line 2548 "smarty_internal_templateparser.php"
+#line 590 "smarty_internal_templateparser.y"
+    function yy_r172(){$this->_retvalue = ' XOR ';    }
+#line 2551 "smarty_internal_templateparser.php"
+#line 595 "smarty_internal_templateparser.y"
+    function yy_r173(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';    }
+#line 2554 "smarty_internal_templateparser.php"
+#line 597 "smarty_internal_templateparser.y"
+    function yy_r175(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;     }
+#line 2557 "smarty_internal_templateparser.php"
+#line 598 "smarty_internal_templateparser.y"
+    function yy_r176(){ return;     }
+#line 2560 "smarty_internal_templateparser.php"
+#line 599 "smarty_internal_templateparser.y"
+    function yy_r177(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2563 "smarty_internal_templateparser.php"
+#line 600 "smarty_internal_templateparser.y"
+    function yy_r178(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;    }
+#line 2566 "smarty_internal_templateparser.php"
+#line 607 "smarty_internal_templateparser.y"
+    function yy_r180(){ $this->_retvalue = "''";     }
+#line 2569 "smarty_internal_templateparser.php"
+#line 608 "smarty_internal_templateparser.y"
+    function yy_r181(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();     }
+#line 2572 "smarty_internal_templateparser.php"
+#line 610 "smarty_internal_templateparser.y"
+    function yy_r182(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }
+#line 2575 "smarty_internal_templateparser.php"
+#line 611 "smarty_internal_templateparser.y"
+    function yy_r183(){ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);     }
+#line 2578 "smarty_internal_templateparser.php"
+#line 613 "smarty_internal_templateparser.y"
+    function yy_r184(){ $this->_retvalue = new _smarty_code($this, $this->yystack[$this->yyidx + -1]->minor);     }
+#line 2581 "smarty_internal_templateparser.php"
+#line 615 "smarty_internal_templateparser.y"
+    function yy_r186(){if (isset($this->compiler->local_var["'".substr($this->yystack[$this->yyidx + 0]->minor,1)."'"])) {
+                                                       $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
+                                                      } else {
+                                                       $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->value');
+                                                      }
+                                                      $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor,"'"), null, true, false)->nocache;
+      }
+#line 2590 "smarty_internal_templateparser.php"
+#line 623 "smarty_internal_templateparser.y"
+    function yy_r188(){ $this->_retvalue = new _smarty_code($this, '('.$this->yystack[$this->yyidx + -1]->minor.')');     }
+#line 2593 "smarty_internal_templateparser.php"
+#line 624 "smarty_internal_templateparser.y"
+    function yy_r189(){
+   $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
+      }
+#line 2598 "smarty_internal_templateparser.php"
+#line 627 "smarty_internal_templateparser.y"
+    function yy_r190(){ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);     }
+#line 2601 "smarty_internal_templateparser.php"
+
+    private $_retvalue;
+
+    function yy_reduce($yyruleno)
+    {
+        $yymsp = $this->yystack[$this->yyidx];
+        if (self::$yyTraceFILE && $yyruleno >= 0 
+              && $yyruleno < count(self::$yyRuleName)) {
+            fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
+                self::$yyTracePrompt, $yyruleno,
+                self::$yyRuleName[$yyruleno]);
+        }
+
+        $this->_retvalue = $yy_lefthand_side = null;
+        if (array_key_exists($yyruleno, self::$yyReduceMap)) {
+            // call the action
+            $this->_retvalue = null;
+            $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
+            $yy_lefthand_side = $this->_retvalue;
+        }
+        $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
+        $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
+        $this->yyidx -= $yysize;
+        for($i = $yysize; $i; $i--) {
+            // pop all of the right-hand side parameters
+            array_pop($this->yystack);
+        }
+        $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
+        if ($yyact < self::YYNSTATE) {
+            if (!self::$yyTraceFILE && $yysize) {
+                $this->yyidx++;
+                $x = new TP_yyStackEntry;
+                $x->stateno = $yyact;
+                $x->major = $yygoto;
+                $x->minor = $yy_lefthand_side;
+                $this->yystack[$this->yyidx] = $x;
+            } else {
+                $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
+            }
+        } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) {
+            $this->yy_accept();
+        }
+    }
+
+    function yy_parse_failed()
+    {
+        if (self::$yyTraceFILE) {
+            fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+        }
+        while ($this->yyidx >= 0) {
+            $this->yy_pop_parser_stack();
+        }
+    }
+
+    function yy_syntax_error($yymajor, $TOKEN)
+    {
+#line 75 "smarty_internal_templateparser.y"
+
+    $this->internalError = true;
+    $this->yymajor = $yymajor;
+    $this->compiler->trigger_template_error();
+#line 2664 "smarty_internal_templateparser.php"
+    }
+
+    function yy_accept()
+    {
+        if (self::$yyTraceFILE) {
+            fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+        }
+        while ($this->yyidx >= 0) {
+            $stack = $this->yy_pop_parser_stack();
+        }
+#line 67 "smarty_internal_templateparser.y"
+
+    $this->successful = !$this->internalError;
+    $this->internalError = false;
+    $this->retvalue = $this->_retvalue;
+    //echo $this->retvalue."\n\n";
+#line 2682 "smarty_internal_templateparser.php"
+    }
+
+    function doParse($yymajor, $yytokenvalue)
+    {
+        $yyerrorhit = 0;   /* True if yymajor has invoked an error */
+        
+        if ($this->yyidx === null || $this->yyidx < 0) {
+            $this->yyidx = 0;
+            $this->yyerrcnt = -1;
+            $x = new TP_yyStackEntry;
+            $x->stateno = 0;
+            $x->major = 0;
+            $this->yystack = array();
+            array_push($this->yystack, $x);
+        }
+        $yyendofinput = ($yymajor==0);
+        
+        if (self::$yyTraceFILE) {
+            fprintf(self::$yyTraceFILE, "%sInput %s\n",
+                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+        }
+        
+        do {
+            $yyact = $this->yy_find_shift_action($yymajor);
+            if ($yymajor < self::YYERRORSYMBOL &&
+                  !$this->yy_is_expected_token($yymajor)) {
+                // force a syntax error
+                $yyact = self::YY_ERROR_ACTION;
+            }
+            if ($yyact < self::YYNSTATE) {
+                $this->yy_shift($yyact, $yymajor, $yytokenvalue);
+                $this->yyerrcnt--;
+                if ($yyendofinput && $this->yyidx >= 0) {
+                    $yymajor = 0;
+                } else {
+                    $yymajor = self::YYNOCODE;
+                }
+            } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
+                $this->yy_reduce($yyact - self::YYNSTATE);
+            } elseif ($yyact == self::YY_ERROR_ACTION) {
+                if (self::$yyTraceFILE) {
+                    fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
+                        self::$yyTracePrompt);
+                }
+                if (self::YYERRORSYMBOL) {
+                    if ($this->yyerrcnt < 0) {
+                        $this->yy_syntax_error($yymajor, $yytokenvalue);
+                    }
+                    $yymx = $this->yystack[$this->yyidx]->major;
+                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
+                        if (self::$yyTraceFILE) {
+                            fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
+                                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+                        }
+                        $this->yy_destructor($yymajor, $yytokenvalue);
+                        $yymajor = self::YYNOCODE;
+                    } else {
+                        while ($this->yyidx >= 0 &&
+                                 $yymx != self::YYERRORSYMBOL &&
+        ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+                              ){
+                            $this->yy_pop_parser_stack();
+                        }
+                        if ($this->yyidx < 0 || $yymajor==0) {
+                            $this->yy_destructor($yymajor, $yytokenvalue);
+                            $this->yy_parse_failed();
+                            $yymajor = self::YYNOCODE;
+                        } elseif ($yymx != self::YYERRORSYMBOL) {
+                            $u2 = 0;
+                            $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
+                        }
+                    }
+                    $this->yyerrcnt = 3;
+                    $yyerrorhit = 1;
+                } else {
+                    if ($this->yyerrcnt <= 0) {
+                        $this->yy_syntax_error($yymajor, $yytokenvalue);
+                    }
+                    $this->yyerrcnt = 3;
+                    $this->yy_destructor($yymajor, $yytokenvalue);
+                    if ($yyendofinput) {
+                        $this->yy_parse_failed();
+                    }
+                    $yymajor = self::YYNOCODE;
+                }
+            } else {
+                $this->yy_accept();
+                $yymajor = self::YYNOCODE;
+            }            
+        } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
+    }
+}
 ?>
\ No newline at end of file
index 5f3e2ef3818eed13cbc1d0a7716c0b904874a3e9..75cb6b058a6c26c0c960c79fb965840556862498 100644 (file)
@@ -1,36 +1,36 @@
 <?php
 
 /**
-* Project:     Smarty: the PHP compiling template engine
-* File:        smarty_internal_unregister.php
-* SVN:         $Id: $
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-* 
-* For questions, help, comments, discussion, etc., please join the
-* Smarty mailing list. Send a blank e-mail to
-* smarty-discussion-subscribe@googlegroups.com
-* 
-* @link http://www.smarty.net/
-* @copyright 2008 New Digital Group, Inc.
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author Uwe Tews 
-* @package Smarty
-* @subpackage PluginsInternal
-* @version 3-SVN$Rev: 3286 $
-*/
+ * Project:     Smarty: the PHP compiling template engine
+ * File:        smarty_internal_unregister.php
+ * SVN:         $Id: $
+ 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ * For questions, help, comments, discussion, etc., please join the
+ * Smarty mailing list. Send a blank e-mail to
+ * smarty-discussion-subscribe@googlegroups.com
+ 
+ * @link http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author Uwe Tews 
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @version 3-SVN$Rev: 3286 $
+ */
 
 class Smarty_Internal_Unregister {
   
@@ -41,10 +41,10 @@ class Smarty_Internal_Unregister {
     }
     
     /**
-    * Unregisters block function
-    * 
-    * @param string $block_tag name of template function
-    */
+     * Unregisters block function
+     
+     * @param string $block_tag name of template function
+     */
     function block($block_tag)
     {
         if (isset($this->smarty->registered_plugins['block'][$block_tag])) {
@@ -53,10 +53,10 @@ class Smarty_Internal_Unregister {
     }
     
     /**
-    * Unregisters compiler function
-    * 
-    * @param string $compiler_tag name of template function
-    */
+     * Unregisters compiler function
+     
+     * @param string $compiler_tag name of template function
+     */
     function compilerFunction($compiler_tag)
     {
         if (isset($this->smarty->registered_plugins['compiler'][$compiler_tag])) {
@@ -65,10 +65,10 @@ class Smarty_Internal_Unregister {
     } 
     
     /**
-    * Unregisters custom function
-    * 
-    * @param string $function_tag name of template function
-    */
+     * Unregisters custom function
+     
+     * @param string $function_tag name of template function
+     */
     function templateFunction($function_tag)
     {
         if (isset($this->smarty->registered_plugins['function'][$function_tag])) {
@@ -77,10 +77,10 @@ class Smarty_Internal_Unregister {
     }    
     
     /**
-    * Unregisters modifier
-    * 
-    * @param string $modifier name of template modifier
-    */
+     * Unregisters modifier
+     
+     * @param string $modifier name of template modifier
+     */
     function modifier($modifier)
     {
         if (isset($this->smarty->registered_plugins['modifier'][$modifier])) {
@@ -89,63 +89,74 @@ class Smarty_Internal_Unregister {
     }    
     
     /**
-    * Unregisters template object
-    * 
-    * @param string $object_name name of template object
-    */
+     * Unregisters template object
+     
+     * @param string $object_name name of template object
+     */
      function templateObject($object_name)
     {
         unset($this->smarty->registered_objects[$object_name]);
     } 
+
+    /**
+     * Unregisters template class
+     * 
+     * @param string $object_name name of template object
+     */
+     function templateClass($class_name)
+    {
+        unset($this->smarty->registered_classes[$class_name]);
+    } 
     
     /**
-    * Unregisters an output filter
-    * 
-    * @param callback $function_name 
-    */
+     * Unregisters an output filter
+     
+     * @param callback $function_name 
+     */
     function outputFilter($function_name)
     {
         unset($this->smarty->registered_filters['output'][$this->smarty->_get_filter_name($function_name)]);
     }    
     
     /**
-    * Unregisters a postfilter function
-    * 
-    * @param callback $function_name 
-    */
+     * Unregisters a postfilter function
+     *  
+     * @param callback $function_name 
+     */
     function postFilter($function_name)
     {
         unset($this->smarty->registered_filters['post'][$this->smarty->_get_filter_name($function_name)]);
     }    
     
     /**
-    * Unregisters a prefilter function
-    * 
-    * @param callback $function_name 
-    */
+     * Unregisters a prefilter function
+     
+     * @param callback $function_name 
+     */
     function preFilter($function_name)
     {
         unset($this->smarty->registered_filters['pre'][$this->smarty->_get_filter_name($function_name)]);
     }    
     
     /**
-    * Unregisters a resource
-    * 
-    * @param string $resource_name name of resource
-    */
+     * Unregisters a resource
+     
+     * @param string $resource_name name of resource
+     */
     function resource($resource_name)
     {
         unset($this->smarty->plugins['resource'][$resource_name]);
     }    
     
     /**
-    * Unregisters a variablefilter function
-    * 
-    * @param callback $function_name 
-    */
+     * Unregisters a variablefilter function
+     
+     * @param callback $function_name 
+     */
     function variableFilter($function_name)
     {
         unset($this->smarty->registered_filters['variable'][$this->smarty->_get_filter_name($function_name)]);
     }    
     
 }
+?>
\ No newline at end of file
index 9949e7a3cb485aeddd84c229e9b6102afead0e62..01e5b2240b1230921f4c4105ece8680a099e03f9 100644 (file)
@@ -67,18 +67,18 @@ class Smarty_Internal_Utility {
                 $_file = $_fileinfo->getFilename();
                 if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
                 if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
-                    $_template_file = $_file;
+                   $_template_file = $_file;
                 } else {
-                    $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
-                } 
+                    $_template_file = substr(substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file,1);
+                }
                 echo '<br>', $_dir, '---', $_template_file;
                 flush();
-                $_start_time = $this->_get_time();
+                $_start_time = microtime(true);
                 try {
                     $_tpl = $this->smarty->createTemplate($_template_file);
                     if ($_tpl->mustCompile()) {
                         $_tpl->compileTemplateSource();
-                        echo ' compiled in  ', $this->_get_time() - $_start_time, ' seconds';
+                        echo ' compiled in  ', microtime(true) - $_start_time, ' seconds';
                         flush();
                     } else {
                         echo ' is up to date';
@@ -127,16 +127,16 @@ class Smarty_Internal_Utility {
                 if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
                     $_config_file = $_file;
                 } else {
-                    $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
+                    $_config_file = substr(substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file,1);
                 } 
                 echo '<br>', $_dir, '---', $_config_file;
                 flush();
-                $_start_time = $this->_get_time();
+                $_start_time = microtime(true);
                 try {
                     $_config = new Smarty_Internal_Config($_config_file, $this->smarty);
                     if ($_config->mustCompile()) {
                         $_config->compileConfigSource();
-                        echo ' compiled in  ', $this->_get_time() - $_start_time, ' seconds';
+                        echo ' compiled in  ', microtime(true) - $_start_time, ' seconds';
                         flush();
                     } else {
                         echo ' is up to date';
@@ -273,15 +273,5 @@ class Smarty_Internal_Utility {
 
         return true;
     } 
-    /**
-     * Get Micro Time
-     * 
-     * @return double micro time
-     */
-    function _get_time()
-    {
-        $_mtime = microtime();
-        $_mtime = explode(" ", $_mtime);
-        return (double)($_mtime[1]) + (double)($_mtime[0]);
-    } 
 }
+?>
\ No newline at end of file
index aa7bfb44cf8154480f17ea12687aabb6c639ce9a..6301f92f9fa12b80231301bb40512bcd928a3ba9 100644 (file)
@@ -1,36 +1,36 @@
 <?php
 
 /**
-* Project:     Smarty: the PHP compiling template engine
-* File:        smarty_internal_wrapper.php
-* SVN:         $Id: $
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-* 
-* For questions, help, comments, discussion, etc., please join the
-* Smarty mailing list. Send a blank e-mail to
-* smarty-discussion-subscribe@googlegroups.com
-* 
-* @link http://www.smarty.net/
-* @copyright 2008 New Digital Group, Inc.
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author Uwe Tews 
-* @package Smarty
-* @subpackage PluginsInternal
-* @version 3-SVN$Rev: 3286 $
-*/
+ * Project:     Smarty: the PHP compiling template engine
+ * File:        smarty_internal_wrapper.php
+ * SVN:         $Id: $
+ 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ * For questions, help, comments, discussion, etc., please join the
+ * Smarty mailing list. Send a blank e-mail to
+ * smarty-discussion-subscribe@googlegroups.com
+ 
+ * @link http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author Uwe Tews 
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @version 3-SVN$Rev: 3286 $
+ */
 
 /*
  * Smarty Backward Compatability Wrapper
@@ -45,12 +45,12 @@ class Smarty_Internal_Wrapper {
     }
     
     /**
-    * Converts smarty2-style function call to smarty 3-style function call
-    * This is expensive, be sure to port your code to Smarty 3!
-    * 
-    * @param string $name Smarty 2 function name
-    * @param array $args Smarty 2 function args
-    */
+     * Converts smarty2-style function call to smarty 3-style function call
+     * This is expensive, be sure to port your code to Smarty 3!
+     
+     * @param string $name Smarty 2 function name
+     * @param array $args Smarty 2 function args
+     */
     function convert($name, $args) {
        // throw notice about deprecated function
        if($this->smarty->deprecation_notices)
@@ -114,7 +114,7 @@ class Smarty_Internal_Wrapper {
              }
              $func_name = implode('',$name_parts);
              if(!method_exists($this->smarty,$func_name)) {
-                throw new Exception("unknown method '$name'");
+                throw new SmartyException("unknown method '$name'");
                 return false;
              }
              return call_user_func_array(array($this->smarty,$func_name),$args);
@@ -124,4 +124,4 @@ class Smarty_Internal_Wrapper {
     }
 }
 
-?>
+?>
\ No newline at end of file
index 5c756f1bdd62c7d8a2ca547a3877276133359e35..6ec5e2dfd46d162295347d659949bde68ccec9de 100644 (file)
@@ -1,23 +1,24 @@
 <?php
 
 /**
-* Smarty write file plugin
-* 
-* @package Smarty
-* @subpackage PluginsInternal
-* @author Monte Ohrt 
-*/
+ * Smarty write file plugin
+ * 
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Monte Ohrt 
+ */
+
 /**
-* Smarty Internal Write File Class
-*/
+ * Smarty Internal Write File Class
+ */
 class Smarty_Internal_Write_File {
     /**
-    * Writes file in a save way to disk
-    * 
-    * @param string $_filepath complete filepath
-    * @param string $_contents file content
-    * @return boolean true
-    */
+     * Writes file in a save way to disk
+     
+     * @param string $_filepath complete filepath
+     * @param string $_contents file content
+     * @return boolean true
+     */
     public static function writeFile($_filepath, $_contents, $smarty)
     {
         $old_umask = umask(0);
@@ -31,7 +32,7 @@ class Smarty_Internal_Write_File {
 
         if (!file_put_contents($_tmp_file, $_contents)) {
             umask($old_umask);
-            throw new Exception("unable to write file {$_tmp_file}");
+            throw new SmartyException("unable to write file {$_tmp_file}");
             return false;
         } 
         // remove original file
@@ -46,4 +47,4 @@ class Smarty_Internal_Write_File {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 9fb85a9fcdf7c1e1a8eb2bdecad8e3aa8a783b9e..0a0a0bb9b0884c2ff856284c68ca602c7c7dc331 100644 (file)
@@ -1,96 +1,96 @@
 <?php
 /**
-* Smarty plugin
-* 
-* @package Smarty
-* @subpackage Security
-* @author Uwe Tews 
-*/ 
+ * Smarty plugin
+ 
+ * @package Smarty
+ * @subpackage Security
+ * @author Uwe Tews 
+ */ 
 
 /**
-* This class does contain the security settings
-*/
+ * This class does contain the security settings
+ */
 class Smarty_Security {
     /**
-    * This determines how Smarty handles "<?php ... ?>" tags in templates.
-    * possible values:
-    * <ul>
-    *   <li>SMARTY_PHP_PASSTHRU -> echo PHP tags as they are</li>
-    *   <li>SMARTY_PHP_QUOTE    -> escape tags as entities</li>
-    *   <li>SMARTY_PHP_REMOVE   -> remove php tags</li>
-    *   <li>SMARTY_PHP_ALLOW    -> execute php tags</li>
-    * </ul>
-    * 
-    * @var integer 
-    */
+     * This determines how Smarty handles "<?php ... ?>" tags in templates.
+     * possible values:
+     * <ul>
+     *   <li>SMARTY_PHP_PASSTHRU -> echo PHP tags as they are</li>
+     *   <li>SMARTY_PHP_QUOTE    -> escape tags as entities</li>
+     *   <li>SMARTY_PHP_REMOVE   -> remove php tags</li>
+     *   <li>SMARTY_PHP_ALLOW    -> execute php tags</li>
+     * </ul>
+     
+     * @var integer 
+     */
     public $php_handling = SMARTY_PHP_PASSTHRU;
 
     /**
-    * This is the list of template directories that are considered secure.
-    * One directory per array element. 
-    * $template_dir is in this list implicitly.
-    * 
-    * @var array 
-    */
+     * This is the list of template directories that are considered secure.
+     * One directory per array element. 
+     * $template_dir is in this list implicitly.
+     
+     * @var array 
+     */
     public $secure_dir = array();
 
 
     /**
-    * This is an array of directories where trusted php scripts reside.
-    * {@link $security} is disabled during their inclusion/execution.
-    * 
-    * @var array 
-    */
+     * This is an array of directories where trusted php scripts reside.
+     * {@link $security} is disabled during their inclusion/execution.
+     
+     * @var array 
+     */
     public $trusted_dir = array();
 
 
     /**
-    * This is an array of trusted static classes.
-    *
-    * If empty access to all static classes is allowed.
-    * If set to 'none' none is allowed.
-    * @var array 
-    */
+     * This is an array of trusted static classes.
+     *
+     * If empty access to all static classes is allowed.
+     * If set to 'none' none is allowed.
+     * @var array 
+     */
     public $static_classes = array();
 
     /**
-    * This is an array of trusted PHP functions.
-    *
-    * If empty all functions are allowed.
-    * If set to 'none' none is allowed.
-    * @var array 
-    */
+     * This is an array of trusted PHP functions.
+     *
+     * If empty all functions are allowed.
+     * If set to 'none' none is allowed.
+     * @var array 
+     */
     public $php_functions = array('isset', 'empty',
             'count', 'sizeof','in_array', 'is_array','time','nl2br');
 
     /**
-    * This is an array of trusted modifers.
-    *
-    * If empty all modifiers are allowed.
-    * If set to 'none' none is allowed.
-    * @var array 
-    */
+     * This is an array of trusted modifers.
+     *
+     * If empty all modifiers are allowed.
+     * If set to 'none' none is allowed.
+     * @var array 
+     */
     public $modifiers = array('escape','count');
 
     /**
-    * This is an array of trusted streams.
-    *
-    * If empty all streams are allowed.
-    * If set to 'none' none is allowed.
-    * @var array 
-    */
+     * This is an array of trusted streams.
+     *
+     * If empty all streams are allowed.
+     * If set to 'none' none is allowed.
+     * @var array 
+     */
     public $streams = array('file');
     /**
-    + flag if constants can be accessed from template
-    */
+     * + flag if constants can be accessed from template
+     */
     public $allow_constants = true;
     /**
-    + flag if super globals can be accessed from template
-    */
+     * + flag if super globals can be accessed from template
+     */
     public $allow_super_globals = true;
     /**
-    + flag if {php} tag can be executed
-    */
+     * + flag if {php} tag can be executed
+     */
     public $allow_php_tag = false;
 }