From 74306a61a92d4f62f7fc45f0dcad1fbc045680c3 Mon Sep 17 00:00:00 2001 From: cajus Date: Tue, 16 Nov 2010 13:45:48 +0000 Subject: [PATCH] Updated smarty to 3.0.4 git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@20235 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/include/smarty/Smarty.class.php | 482 +-- .../include/smarty/plugins/block.php.php | 7 +- .../smarty/plugins/block.textformat.php | 7 +- .../smarty/plugins/function.counter.php | 2 +- .../include/smarty/plugins/function.cycle.php | 5 +- .../include/smarty/plugins/function.fetch.php | 7 +- .../plugins/function.html_checkboxes.php | 4 +- .../smarty/plugins/function.html_image.php | 12 +- .../smarty/plugins/function.html_options.php | 4 +- .../smarty/plugins/function.html_radios.php | 4 +- .../plugins/function.html_select_date.php | 12 +- .../plugins/function.html_select_time.php | 13 +- .../smarty/plugins/function.html_table.php | 3 +- .../smarty/plugins/function.mailto.php | 3 +- .../include/smarty/plugins/function.math.php | 3 +- .../include/smarty/plugins/function.popup.php | 3 +- .../smarty/plugins/function.popup_init.php | 3 +- .../smarty_internal_cacheresource_file.php | 5 +- .../smarty_internal_compile_append.php | 89 +- .../smarty_internal_compile_assign.php | 38 +- .../smarty_internal_compile_block.php | 161 +- .../smarty_internal_compile_break.php | 15 +- .../smarty_internal_compile_call.php | 22 +- .../smarty_internal_compile_capture.php | 16 +- .../smarty_internal_compile_config_load.php | 30 +- .../smarty_internal_compile_continue.php | 12 +- .../smarty_internal_compile_debug.php | 5 +- .../smarty_internal_compile_eval.php | 4 + .../smarty_internal_compile_extends.php | 66 +- .../smarty_internal_compile_for.php | 35 +- .../smarty_internal_compile_foreach.php | 37 +- .../smarty_internal_compile_function.php | 26 +- .../sysplugins/smarty_internal_compile_if.php | 71 +- .../smarty_internal_compile_include.php | 64 +- .../smarty_internal_compile_include_php.php | 49 +- .../smarty_internal_compile_insert.php | 19 +- .../smarty_internal_compile_ldelim.php | 3 + .../smarty_internal_compile_nocache.php | 3 + ..._internal_compile_private_block_plugin.php | 25 +- ...ternal_compile_private_function_plugin.php | 18 +- ...arty_internal_compile_private_modifier.php | 45 +- ..._compile_private_object_block_function.php | 35 +- ...ternal_compile_private_object_function.php | 19 +- ...ernal_compile_private_print_expression.php | 64 +- ...ernal_compile_private_registered_block.php | 36 +- ...al_compile_private_registered_function.php | 25 +- ...ernal_compile_private_special_variable.php | 18 +- .../smarty_internal_compile_rdelim.php | 3 + .../smarty_internal_compile_section.php | 7 +- .../smarty_internal_compile_while.php | 12 +- .../smarty_internal_compilebase.php | 150 +- .../sysplugins/smarty_internal_config.php | 51 +- .../smarty_internal_config_file_compiler.php | 2 +- .../sysplugins/smarty_internal_data.php | 61 +- .../sysplugins/smarty_internal_debug.php | 19 +- .../sysplugins/smarty_internal_filter.php | 89 + .../smarty_internal_nocache_insert.php | 4 +- .../sysplugins/smarty_internal_register.php | 219 +- .../smarty_internal_resource_eval.php | 1 - .../smarty_internal_resource_extends.php | 58 +- .../smarty_internal_resource_file.php | 8 +- .../smarty_internal_resource_php.php | 8 +- .../smarty_internal_resource_registered.php | 17 +- .../sysplugins/smarty_internal_template.php | 276 +- .../smarty_internal_templatecompilerbase.php | 82 +- .../smarty_internal_templatelexer.php | 111 +- .../smarty_internal_templateparser.php | 3292 +++++++++-------- .../sysplugins/smarty_internal_utility.php | 23 +- .../sysplugins/smarty_internal_wrapper.php | 73 +- .../smarty/sysplugins/smarty_security.php | 156 +- 70 files changed, 3466 insertions(+), 2885 deletions(-) create mode 100644 gosa-core/include/smarty/sysplugins/smarty_internal_filter.php diff --git a/gosa-core/include/smarty/Smarty.class.php b/gosa-core/include/smarty/Smarty.class.php index 1e3ffbd55..213d01b05 100644 --- a/gosa-core/include/smarty/Smarty.class.php +++ b/gosa-core/include/smarty/Smarty.class.php @@ -3,7 +3,7 @@ /** * Project: Smarty: the PHP compiling template engine * File: Smarty.class.php - * SVN: $Id: Smarty.class.php 3669 2010-09-17 18:10:10Z uwe.tews@googlemail.com $ + * SVN: $Id: Smarty.class.php 3788 2010-11-13 18:32:50Z 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 @@ -28,7 +28,7 @@ * @author Monte Ohrt * @author Uwe Tews * @package Smarty - * @version 3-SVN$Rev: 3286 $ + * @version 3.0.4 */ /** @@ -63,30 +63,6 @@ if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) { define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y'); } -/** - * define variable scopes - */ -define('SMARTY_LOCAL_SCOPE', 0); -define('SMARTY_PARENT_SCOPE', 1); -define('SMARTY_ROOT_SCOPE', 2); -define('SMARTY_GLOBAL_SCOPE', 3); - -/** - * define caching modes - */ -define('SMARTY_CACHING_OFF', 0); -define('SMARTY_CACHING_LIFETIME_CURRENT', 1); -define('SMARTY_CACHING_LIFETIME_SAVED', 2); - -/** - * This determines how Smarty handles "" tags in templates. - * possible values: - */ -define('SMARTY_PHP_PASSTHRU', 0); //-> print tags as plain text -define('SMARTY_PHP_QUOTE', 1); //-> escape tags as entities -define('SMARTY_PHP_REMOVE', 2); //-> escape tags as entities -define('SMARTY_PHP_ALLOW', 3); //-> escape tags as entities - /** * register the class autoloader */ @@ -107,8 +83,45 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR * This is the main Smarty class */ class Smarty extends Smarty_Internal_Data { + /** + * constant definitions + */ // smarty version - const SMARTY_VERSION = 'Smarty3rc4'; + const SMARTY_VERSION = 'Smarty-3.0.4'; + //define variable scopes + const SCOPE_LOCAL = 0; + const SCOPE_PARENT = 1; + const SCOPE_ROOT = 2; + const SCOPE_GLOBAL = 3; + // define caching modes + const CACHING_OFF = 0; + const CACHING_LIFETIME_CURRENT = 1; + const CACHING_LIFETIME_SAVED = 2; + /** modes for handling of "" tags in templates. **/ + const PHP_PASSTHRU = 0; //-> print tags as plain text + const PHP_QUOTE = 1; //-> escape tags as entities + const PHP_REMOVE = 2; //-> escape tags as entities + const PHP_ALLOW = 3; //-> escape tags as entities + // filter types + const FILTER_POST = 'post'; + const FILTER_PRE = 'pre'; + const FILTER_OUTPUT = 'output'; + const FILTER_VARIABLE = 'variable'; + // plugin types + const PLUGIN_FUNCTION = 'function'; + const PLUGIN_BLOCK = 'block'; + const PLUGIN_COMPILER = 'compiler'; + const PLUGIN_MODIFIER = 'modifier'; + + /** + * static variables + */ + // assigned global tpl vars + static $global_tpl_vars = array(); + + /** + * variables + */ // auto literal on delimiters with whitspace public $auto_literal = true; // display error on not assigned variables @@ -137,7 +150,7 @@ class Smarty extends Smarty_Internal_Data { public $compile_error = false; // caching enabled public $caching = false; - // merge compiled includea + // merge compiled includes public $merge_compiled_includes = false; // cache lifetime public $cache_lifetime = 3600; @@ -152,12 +165,10 @@ class Smarty extends Smarty_Internal_Data { public $right_delimiter = "}"; // security public $security_class = 'Smarty_Security'; - public $php_handling = SMARTY_PHP_PASSTHRU; + public $security_policy = null; + public $php_handling = self::PHP_PASSTHRU; public $allow_php_tag = false; public $allow_php_templates = false; - public $security = false; - public $security_policy = null; - public $security_handler = null; public $direct_access_security = true; public $trusted_dir = array(); // debug mode @@ -175,8 +186,6 @@ class Smarty extends Smarty_Internal_Data { public $config_vars = array(); // assigned tpl vars public $tpl_vars = array(); - // assigned global tpl vars - public $global_tpl_vars = array(); // dummy parent object public $parent = null; // global template functions @@ -187,8 +196,6 @@ class Smarty extends Smarty_Internal_Data { public $caching_type = 'file'; // internal cache resource types public $cache_resource_types = array('file'); - // internal cache resource objects - public $cache_resource_objects = array(); // internal config properties public $properties = array(); // config type @@ -207,6 +214,8 @@ class Smarty extends Smarty_Internal_Data { public $registered_classes = array(); // registered filters public $registered_filters = array(); + // registered resources + public $registered_resources = array(); // autoload filter public $autoload_filters = array(); // status of filter on variable output @@ -221,25 +230,22 @@ class Smarty extends Smarty_Internal_Data { public $_file_perms = 0644; // default dir permissions public $_dir_perms = 0771; - // smarty object reference - public $smarty = null; // 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? public $deprecation_notices = true; + // Smarty 2 BC + public $_version = self::SMARTY_VERSION; /** * Class constructor, initializes basic smarty properties */ public function __construct() { - // self reference needed by other classes methods - $this->smarty = $this; - + // selfpointer need by some other class methods + $this->smarty = $this; if (is_callable('mb_internal_encoding')) { mb_internal_encoding(SMARTY_RESOURCE_CHAR_SET); } @@ -310,8 +316,9 @@ class Smarty extends Smarty_Internal_Data { // create template object if necessary ($template instanceof $this->template_class)? $_template = $template : $_template = $this->createTemplate ($template, $cache_id, $compile_id, $parent); - $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting) - ? $this->error_reporting : error_reporting() &~E_NOTICE); + if (isset($this->error_reporting)) { + $_smarty_old_error_level = error_reporting($this->error_reporting); + } // obtain data for cache modified check if ($this->cache_modified_check && $this->caching && $display) { $_isCached = $_template->isCached() && !$_template->has_nocache_code; @@ -328,7 +335,9 @@ class Smarty extends Smarty_Internal_Data { $_output = $_template->getRenderedTemplate(); } $_template->rendered_content = null; - error_reporting($_smarty_old_error_level); + if (isset($this->error_reporting)) { + error_reporting($_smarty_old_error_level); + } // display or fetch if ($display) { if ($this->caching && $this->cache_modified_check) { @@ -376,12 +385,16 @@ class Smarty extends Smarty_Internal_Data { * @param string $ |object $template the resource handle of the template file or template object * @param mixed $cache_id cache id to be used with this template * @param mixed $compile_id compile id to be used with this template + * @param object $parent next higher level of Smarty variables * @return boolean cache status */ - public function isCached($template, $cache_id = null, $compile_id = null) + public function isCached($template, $cache_id = null, $compile_id = null, $parent = null) { + if ($parent === null) { + $parent = $this; + } if (!($template instanceof $this->template_class)) { - $template = $this->createTemplate ($template, $cache_id, $compile_id, $this); + $template = $this->createTemplate ($template, $cache_id, $compile_id, $parent); } // return cache status of template return $template->isCached(); @@ -422,13 +435,13 @@ class Smarty extends Smarty_Internal_Data { if (!is_object($template)) { // we got a template resource // already in template cache? - $_templateId = crc32($template . $cache_id . $compile_id); + $_templateId = sha1($template . $cache_id . $compile_id); if (isset($this->template_objects[$_templateId]) && $this->caching) { // return cached template object $tpl = $this->template_objects[$_templateId]; } else { // create new template object - $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id); + $tpl = new $this->template_class($template, clone $this, $parent, $cache_id, $compile_id); } } else { // just return a copy of template class @@ -443,51 +456,8 @@ class Smarty extends Smarty_Internal_Data { } return $tpl; } - - /** - * Loads security class and enables security - */ - public function enableSecurity() - { - if (isset($this->security_class)) { - $this->security_policy = new $this->security_class; - $this->security_handler = new Smarty_Internal_Security_Handler($this); - $this->security = true; - } else { - throw new SmartyException('Property security_class is not defined'); - } - } - - /** - * Disable security - */ - public function disableSecurity() - { - $this->security = false; - } - - /** - * Set template directory - * - * @param string $ |array $template_dir folder(s) of template sorces - */ - public function setTemplateDir($template_dir) - { - $this->template_dir = (array)$template_dir; - return; - } - - /** - * Adds template directory(s) to existing ones - * - * @param string $ |array $template_dir folder(s) of template sources - */ - public function addTemplateDir($template_dir) - { - $this->template_dir = array_merge((array)$this->template_dir, (array)$template_dir); - $this->template_dir = array_unique($this->template_dir); - return; - } + + /** * Check if a template resource exists @@ -503,120 +473,138 @@ class Smarty extends Smarty_Internal_Data { // check if it does exists $result = $tpl->isExisting(); $this->template_objects = $save; - unset ($tpl); return $result; } /** - * Takes unknown classes and loads plugin files for them - * class name format: Smarty_PluginType_PluginName - * plugin filename format: plugintype.pluginname.php + * Returns a single or all global variables * - * @param string $plugin_name class plugin name to load - * @return string |boolean filepath of loaded file or false + * @param object $smarty + * @param string $varname variable name or null + * @return string variable value or or array of variables */ - public function loadPlugin($plugin_name, $check = true) - { - // if function or class exists, exit silently (already loaded) - if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) - return true; - // Plugin name is expected to be: Smarty_[Type]_[Name] - $_plugin_name = strtolower($plugin_name); - $_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 SmartyException("plugin {$plugin_name} is not a valid name format"); - return false; - } - // if type is "internal", get plugin from sysplugins - if ($_name_parts[1] == 'internal') { - $file = SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php'; - if (file_exists($file)) { - require_once($file); - return $file; + function getGlobal($varname = null) + { + if (isset($varname)) { + if (isset(self::$global_tpl_vars[$varname])) { + return self::$global_tpl_vars[$varname]->value; } else { - return false; - } - } - // plugin filename is expected to be: [type].[name].php - $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php"; - // loop through plugin dirs and find the plugin - foreach((array)$this->plugins_dir as $_plugin_dir) { - if (strpos('/\\', substr($_plugin_dir, -1)) === false) { - $_plugin_dir .= DS; + return ''; } - $file = $_plugin_dir . $_plugin_filename; - if (file_exists($file)) { - require_once($file); - return $file; + } else { + $_result = array(); + foreach (self::$global_tpl_vars AS $key => $var) { + $_result[$key] = $var->value; } + return $_result; } - // no plugin loaded - return false; } /** - * load a filter of specified type and name - * - * @param string $type filter type - * @param string $name filter name - * @return bool + * Empty cache folder + * + * @param integer $exp_time expiration time + * @param string $type resource type + * @return integer number of cache files deleted + */ + function clearAllCache($exp_time = null, $type = null) + { + // load cache resource and call clearAll + return $this->loadCacheResource($type)->clearAll($exp_time); + } + + /** + * Empty cache for a specific template + * + * @param string $template_name template name + * @param string $cache_id cache id + * @param string $compile_id compile id + * @param integer $exp_time expiration time + * @param string $type resource type + * @return integer number of cache files deleted + */ + function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) + { + // load cache resource and call clear + return $this->loadCacheResource($type)->clear($template_name, $cache_id, $compile_id, $exp_time); + } + + /** + * Loads security class and enables security */ - function loadFilter($type, $name) + public function enableSecurity($security_class = null) { - $_plugin = "smarty_{$type}filter_{$name}"; - $_filter_name = $_plugin; - if ($this->loadPlugin($_plugin)) { - if (class_exists($_plugin, false)) { - $_plugin = array($_plugin, 'execute'); - } - if (is_callable($_plugin)) { - return $this->registered_filters[$type][$_filter_name] = $_plugin; - } + if ($security_class instanceof Smarty_Security) { + $this->security_policy = $security_class; + return; + } + if ($security_class == null) { + $security_class = $this->security_class; + } + if (class_exists($security_class)) { + $this->security_policy = new $security_class($this); + } else { + throw new SmartyException("Security class '$security_class' is not defined"); } - throw new SmartyException("{$type}filter \"{$name}\" not callable"); - return false; } /** - * Sets the exception handler for Smarty. - * - * @param mixed $handler function name or array with object/method names - * @return string previous exception handler + * Disable security */ - public function setExceptionHandler($handler) + public function disableSecurity() { - $this->exception_handler = $handler; - return set_exception_handler($handler); + $this->security_policy = null; + } + + /** + * Loads cache resource. + * + * @param string $type cache resource type + * @return object of cache resource + */ + public function loadCacheResource($type = null) { + if (!isset($type)) { + $type = $this->caching_type; + } + if (in_array($type, $this->cache_resource_types)) { + $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); + return new $cache_resource_class($this); + } + else { + // try plugins dir + $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); + if ($this->loadPlugin($cache_resource_class)) { + return new $cache_resource_class($this); + } + else { + throw new SmartyException("Unable to load cache resource '{$type}'"); + } + } } + /** - * trigger Smarty error + * Set template directory * - * @param string $error_msg - * @param integer $error_type + * @param string $ |array $template_dir folder(s) of template sorces */ - public function trigger_error($error_msg, $error_type = E_USER_WARNING) + public function setTemplateDir($template_dir) { - throw new SmartyException("Smarty error: $error_msg"); + $this->template_dir = (array)$template_dir; + return; } /** - * Return internal filter name + * Adds template directory(s) to existing ones * - * @param callback $function_name + * @param string $ |array $template_dir folder(s) of template sources */ - public function _get_filter_name($function_name) + public function addTemplateDir($template_dir) { - if (is_array($function_name)) { - $_class_name = (is_object($function_name[0]) ? - get_class($function_name[0]) : $function_name[0]); - return $_class_name . '_' . $function_name[1]; - } else { - return $function_name; - } + $this->template_dir = array_unique(array_merge((array)$this->template_dir, (array)$template_dir)); + return; } - + /** * Adds directory of plugin files * @@ -626,34 +614,10 @@ class Smarty extends Smarty_Internal_Data { */ function addPluginsDir($plugins_dir) { - $this->plugins_dir = array_merge((array)$this->plugins_dir, (array)$plugins_dir); - $this->plugins_dir = array_unique($this->plugins_dir); + $this->plugins_dir = array_unique(array_merge((array)$this->plugins_dir, (array)$plugins_dir)); return; } - /** - * Returns a single or all global variables - * - * @param object $smarty - * @param string $varname variable name or null - * @return string variable value or or array of variables - */ - function getGlobal($varname = null) - { - if (isset($varname)) { - if (isset($this->global_tpl_vars[$varname])) { - return $this->global_tpl_vars[$varname]->value; - } else { - return ''; - } - } else { - $_result = array(); - foreach ($this->global_tpl_vars AS $key => $var) { - $_result[$key] = $var->value; - } - return $_result; - } - } /** * return a reference to a registered object @@ -672,6 +636,7 @@ class Smarty extends Smarty_Internal_Data { return $this->registered_objects[$name][0]; } + /** * return name of debugging template * @@ -694,29 +659,71 @@ class Smarty extends Smarty_Internal_Data { } /** - * lazy loads (valid) property objects + * Takes unknown classes and loads plugin files for them + * class name format: Smarty_PluginType_PluginName + * plugin filename format: plugintype.pluginname.php * - * @param string $name property name + * @param string $plugin_name class plugin name to load + * @return string |boolean filepath of loaded file or false */ - public function __get($name) - { - if (in_array($name, array('register', 'unregister', 'utility', 'cache'))) { - $class = "Smarty_Internal_" . ucfirst($name); - $this->$name = new $class($this); - return $this->$name; - } else if ($name == '_version') { - // Smarty 2 BC - $this->_version = self::SMARTY_VERSION; - return $this->_version; + public function loadPlugin($plugin_name, $check = true) + { + // if function or class exists, exit silently (already loaded) + if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) + return true; + // Plugin name is expected to be: Smarty_[Type]_[Name] + $_plugin_name = strtolower($plugin_name); + $_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 SmartyException("plugin {$plugin_name} is not a valid name format"); + return false; + } + // if type is "internal", get plugin from sysplugins + if ($_name_parts[1] == 'internal') { + $file = SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php'; + if (file_exists($file)) { + require_once($file); + return $file; + } else { + return false; + } } - return null; + // plugin filename is expected to be: [type].[name].php + $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php"; + // loop through plugin dirs and find the plugin + foreach((array)$this->plugins_dir as $_plugin_dir) { + if (strpos('/\\', substr($_plugin_dir, -1)) === false) { + $_plugin_dir .= DS; + } + $file = $_plugin_dir . $_plugin_filename; + if (file_exists($file)) { + require_once($file); + return $file; + } + } + // no plugin loaded + return false; } /** - * Takes unknown class methods and lazy loads sysplugin files for them - * class name format: Smarty_Method_MethodName - * plugin filename format: method.methodname.php - * + * clean up properties on cloned object + */ + public function __clone() + { + // clear config vars + $this->config_vars = array(); + // clear assigned tpl vars + $this->tpl_vars = array(); + // clear objects for external methods + unset($this->register); + unset($this->filter); + } + + + /** + * Handle unknown class methods + * * @param string $name unknown methode name * @param array $args aurgument array */ @@ -725,11 +732,6 @@ class Smarty extends Smarty_Internal_Data { static $camel_func; if (!isset($camel_func)) $camel_func = create_function('$c', 'return "_" . strtolower($c[1]);'); - // PHP4 call to constructor? - if (strtolower($name) == 'smarty') { - throw new SmartyException('Please use parent::__construct() to call parent constuctor'); - return false; - } // see if this is a set/get for a property $first3 = strtolower(substr($name, 0, 3)); if (in_array($first3, array('set', 'get')) && substr($name, 3, 1) !== '_') { @@ -746,13 +748,37 @@ class Smarty extends Smarty_Internal_Data { return $this->$property_name; else return $this->$property_name = $args[0]; + } + // Smarty Backward Compatible wrapper + if (strpos($name,'_') !== false) { + if (!isset($this->wrapper)) { + $this->wrapper = new Smarty_Internal_Wrapper($this); + } + return $this->wrapper->convert($name, $args); + } + // external Smarty methods ? + foreach(array('filter','register') as $external) { + if (method_exists("Smarty_Internal_{$external}",$name)) { + if (!isset($this->$external)) { + $class = "Smarty_Internal_{$external}"; + $this->$external = new $class($this); + } + return call_user_func_array(array($this->$external,$name), $args); + } + } + if (in_array($name,array('clearCompiledTemplate','compileAllTemplates','compileAllConfig','testInstall','getTags'))) { + if (!isset($this->utility)) { + $this->utility = new Smarty_Internal_Utility($this); + } + return call_user_func_array(array($this->utility,$name), $args); + } + // PHP4 call to constructor? + if (strtolower($name) == 'smarty') { + throw new SmartyException('Please use parent::__construct() to call parent constuctor'); + return false; } - // Smarty Backward Compatible wrapper - if (!isset($this->wrapper)) { - $this->wrapper = new Smarty_Internal_Wrapper($this); - } - return $this->wrapper->convert($name, $args); - } + throw new SmartyException("Call of unknown function '$name'."); + } } /** diff --git a/gosa-core/include/smarty/plugins/block.php.php b/gosa-core/include/smarty/plugins/block.php.php index 84a0275e0..8fedd8b43 100644 --- a/gosa-core/include/smarty/plugins/block.php.php +++ b/gosa-core/include/smarty/plugins/block.php.php @@ -11,14 +11,13 @@ * 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 + * @param boolean $ &$repeat repeat flag * @return string content re-formatted */ -function smarty_block_php($params, $content, $smarty, &$repeat, $template) +function smarty_block_php($params, $content, $template, &$repeat) { - if (!$smarty->allow_php_tag) { + if (!$template->allow_php_tag) { throw new SmartyException("{php} is deprecated, set allow_php_tag = true to enable"); } eval($content); diff --git a/gosa-core/include/smarty/plugins/block.textformat.php b/gosa-core/include/smarty/plugins/block.textformat.php index 733f6e234..517fd62dd 100644 --- a/gosa-core/include/smarty/plugins/block.textformat.php +++ b/gosa-core/include/smarty/plugins/block.textformat.php @@ -27,12 +27,11 @@ * * @author Monte Ohrt * @param string $content contents of the block - * @param object $smarty Smarty object - * @param boolean &$repeat repeat flag * @param object $template template object + * @param boolean &$repeat repeat flag * @return string content re-formatted */ -function smarty_block_textformat($params, $content, $smarty, &$repeat, $template) +function smarty_block_textformat($params, $content, $template, &$repeat) { if (is_null($content)) { return; @@ -67,7 +66,7 @@ function smarty_block_textformat($params, $content, $smarty, &$repeat, $template break; default: - $smarty->trigger_error("textformat: unknown attribute '$_key'"); + trigger_error("textformat: unknown attribute '$_key'"); } } diff --git a/gosa-core/include/smarty/plugins/function.counter.php b/gosa-core/include/smarty/plugins/function.counter.php index 534e9981b..7c50bd44b 100644 --- a/gosa-core/include/smarty/plugins/function.counter.php +++ b/gosa-core/include/smarty/plugins/function.counter.php @@ -19,7 +19,7 @@ * @param object $template template object * @return string|null */ -function smarty_function_counter($params, $smarty, $template) +function smarty_function_counter($params, $template) { static $counters = array(); diff --git a/gosa-core/include/smarty/plugins/function.cycle.php b/gosa-core/include/smarty/plugins/function.cycle.php index 76ff0c6b0..98e3e2878 100644 --- a/gosa-core/include/smarty/plugins/function.cycle.php +++ b/gosa-core/include/smarty/plugins/function.cycle.php @@ -39,12 +39,11 @@ * @author credit to Jason Sweat * @version 1.3 * @param array - * @param object $smarty Smarty object * @param object $template template object * @return string|null */ -function smarty_function_cycle($params, $smarty, $template) +function smarty_function_cycle($params, $template) { static $cycle_vars; @@ -55,7 +54,7 @@ function smarty_function_cycle($params, $smarty, $template) if (!in_array('values', array_keys($params))) { if(!isset($cycle_vars[$name]['values'])) { - $smarty->trigger_error("cycle: missing 'values' parameter"); + trigger_error("cycle: missing 'values' parameter"); return; } } else { diff --git a/gosa-core/include/smarty/plugins/function.fetch.php b/gosa-core/include/smarty/plugins/function.fetch.php index 0a511830b..21ea69ba6 100644 --- a/gosa-core/include/smarty/plugins/function.fetch.php +++ b/gosa-core/include/smarty/plugins/function.fetch.php @@ -16,12 +16,11 @@ * (Smarty online manual) * @author Monte Ohrt * @param array $params parameters - * @param object $smarty Smarty object * @param object $template template object * @return string|null if the assign parameter is passed, Smarty assigns the * result to a template variable */ -function smarty_function_fetch($params, $smarty, $template) +function smarty_function_fetch($params, $template) { if (empty($params['file'])) { trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE); @@ -29,8 +28,8 @@ function smarty_function_fetch($params, $smarty, $template) } $content = ''; - if ($template->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { - if(!$smarty->security_handler->isTrustedResourceDir($params['file'])) { + if (isset($template->security_policy) && !preg_match('!^(http|ftp)://!i', $params['file'])) { + if(!$template->security_policy->isTrustedResourceDir($params['file'])) { return; } diff --git a/gosa-core/include/smarty/plugins/function.html_checkboxes.php b/gosa-core/include/smarty/plugins/function.html_checkboxes.php index 328faf448..6a1a3ffdc 100644 --- a/gosa-core/include/smarty/plugins/function.html_checkboxes.php +++ b/gosa-core/include/smarty/plugins/function.html_checkboxes.php @@ -34,15 +34,13 @@ * - separator (optional) - ie
or   * - output (optional) - the output next to each checkbox * - 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_checkboxes($params, $smarty, $template) +function smarty_function_html_checkboxes($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - //$smarty->loadPlugin('Smarty_shared_escape_special_chars'); $name = 'checkbox'; $values = null; diff --git a/gosa-core/include/smarty/plugins/function.html_image.php b/gosa-core/include/smarty/plugins/function.html_image.php index e2714a67e..57c266586 100644 --- a/gosa-core/include/smarty/plugins/function.html_image.php +++ b/gosa-core/include/smarty/plugins/function.html_image.php @@ -29,16 +29,14 @@ * - 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) +function smarty_function_html_image($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - //$smarty->loadPlugin('Smarty_shared_escape_special_chars'); - + $alt = ''; $file = ''; $height = ''; @@ -47,7 +45,7 @@ function smarty_function_html_image($params, $smarty, $template) $prefix = ''; $suffix = ''; $path_prefix = ''; - $server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; + $server_vars = ($template->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; $basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : ''; foreach($params as $_key => $_val) { switch ($_key) { @@ -108,8 +106,8 @@ function smarty_function_html_image($params, $smarty, $template) return; } } - if ($template->security) { - if (!$smarty->security_handler->isTrustedResourceDir($_image_path)) { + if (isset($template->security_policy)) { + if (!$template->security_policy->isTrustedResourceDir($_image_path)) { return; } } diff --git a/gosa-core/include/smarty/plugins/function.html_options.php b/gosa-core/include/smarty/plugins/function.html_options.php index a4725809a..65c77c659 100644 --- a/gosa-core/include/smarty/plugins/function.html_options.php +++ b/gosa-core/include/smarty/plugins/function.html_options.php @@ -24,15 +24,13 @@ * - 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) +function smarty_function_html_options($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - //$smarty->loadPlugin('Smarty_shared_escape_special_chars'); $name = null; $values = null; diff --git a/gosa-core/include/smarty/plugins/function.html_radios.php b/gosa-core/include/smarty/plugins/function.html_radios.php index 39c02330e..c6b27edf2 100644 --- a/gosa-core/include/smarty/plugins/function.html_radios.php +++ b/gosa-core/include/smarty/plugins/function.html_radios.php @@ -35,15 +35,13 @@ * - separator (optional) - ie
or   * - 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) +function smarty_function_html_radios($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); - //$smarty->loadPlugin('Smarty_shared_escape_special_chars'); $name = 'radio'; $values = null; diff --git a/gosa-core/include/smarty/plugins/function.html_select_date.php b/gosa-core/include/smarty/plugins/function.html_select_date.php index cd20d689b..1d57fdc7a 100644 --- a/gosa-core/include/smarty/plugins/function.html_select_date.php +++ b/gosa-core/include/smarty/plugins/function.html_select_date.php @@ -34,18 +34,14 @@ * @author Andrei Zmievski * @author Monte Ohrt * @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) +function smarty_function_html_select_date($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); require_once(SMARTY_PLUGINS_DIR . 'function.html_options.php'); - //$smarty->loadPlugin('Smarty_shared_escape_special_chars'); - //$smarty->loadPlugin('Smarty_shared_make_timestamp'); - //$smarty->loadPlugin('Smarty_function_html_options'); /* Default values. */ $prefix = "Date_"; @@ -219,7 +215,7 @@ function smarty_function_html_select_date($params, $smarty, $template) 'values' => $month_values, 'selected' => (int)$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '', 'print_result' => false), - $smarty, $template); + $template); $month_result .= ''; } @@ -255,7 +251,7 @@ function smarty_function_html_select_date($params, $smarty, $template) 'values' => $day_values, 'selected' => $time[2], 'print_result' => false), - $smarty, $template); + $template); $day_result .= ''; } @@ -302,7 +298,7 @@ function smarty_function_html_select_date($params, $smarty, $template) 'values' => $yearvals, 'selected' => $time[0], 'print_result' => false), - $smarty, $template); + $template); $year_result .= ''; } } diff --git a/gosa-core/include/smarty/plugins/function.html_select_time.php b/gosa-core/include/smarty/plugins/function.html_select_time.php index e9d95c2fb..ddde4f5ac 100644 --- a/gosa-core/include/smarty/plugins/function.html_select_time.php +++ b/gosa-core/include/smarty/plugins/function.html_select_time.php @@ -18,17 +18,14 @@ * @author Roberto Berto * @credits Monte Ohrt * @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) +function smarty_function_html_select_time($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); require_once(SMARTY_PLUGINS_DIR . 'function.html_options.php'); - //$smarty->loadPlugin('Smarty_shared_make_timestamp'); - //$smarty->loadPlugin('Smarty_function_html_options'); /* Default values. */ $prefix = "Time_"; @@ -108,7 +105,7 @@ function smarty_function_html_select_time($params, $smarty, $template) 'values' => $hours, 'selected' => strftime($hour_fmt, $time), 'print_result' => false), - $smarty, $template); + $template); $html_result .= "\n"; } @@ -135,7 +132,7 @@ function smarty_function_html_select_time($params, $smarty, $template) 'values' => $minutes, 'selected' => $selected, 'print_result' => false), - $smarty, $template); + $template); $html_result .= "\n"; } @@ -163,7 +160,7 @@ function smarty_function_html_select_time($params, $smarty, $template) 'values' => $seconds, 'selected' => $selected, 'print_result' => false), - $smarty, $template); + $template); $html_result .= "\n"; } @@ -187,7 +184,7 @@ function smarty_function_html_select_time($params, $smarty, $template) 'values' => array('am', 'pm'), 'selected' => strtolower(strftime('%p', $time)), 'print_result' => false), - $smarty, $template); + $template); $html_result .= "\n"; } diff --git a/gosa-core/include/smarty/plugins/function.html_table.php b/gosa-core/include/smarty/plugins/function.html_table.php index f279ad6d9..7986a9bcf 100644 --- a/gosa-core/include/smarty/plugins/function.html_table.php +++ b/gosa-core/include/smarty/plugins/function.html_table.php @@ -44,11 +44,10 @@ * - 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) +function smarty_function_html_table($params, $template) { $table_attr = 'border="1"'; $tr_attr = ''; diff --git a/gosa-core/include/smarty/plugins/function.mailto.php b/gosa-core/include/smarty/plugins/function.mailto.php index f75dc71bc..976218f53 100644 --- a/gosa-core/include/smarty/plugins/function.mailto.php +++ b/gosa-core/include/smarty/plugins/function.mailto.php @@ -45,11 +45,10 @@ * - 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) +function smarty_function_mailto($params, $template) { $extra = ''; diff --git a/gosa-core/include/smarty/plugins/function.math.php b/gosa-core/include/smarty/plugins/function.math.php index 197f4df14..cd90020a4 100644 --- a/gosa-core/include/smarty/plugins/function.math.php +++ b/gosa-core/include/smarty/plugins/function.math.php @@ -17,11 +17,10 @@ * (Smarty online manual) * @author Monte Ohrt * @param array $params parameters - * @param object $smarty Smarty object * @param object $template template object * @return string|null */ -function smarty_function_math($params, $smarty, $template) +function smarty_function_math($params, $template) { // be sure equation parameter is present if (empty($params['equation'])) { diff --git a/gosa-core/include/smarty/plugins/function.popup.php b/gosa-core/include/smarty/plugins/function.popup.php index c646181a4..6d09d05b0 100644 --- a/gosa-core/include/smarty/plugins/function.popup.php +++ b/gosa-core/include/smarty/plugins/function.popup.php @@ -16,11 +16,10 @@ * (Smarty online manual) * @author Monte Ohrt * @param array $params parameters - * @param object $smarty Smarty object * @param object $template template object * @return string */ -function smarty_function_popup($params, $smarty, $template) +function smarty_function_popup($params, $template) { $append = ''; foreach ($params as $_key=>$_value) { diff --git a/gosa-core/include/smarty/plugins/function.popup_init.php b/gosa-core/include/smarty/plugins/function.popup_init.php index ba1f9a658..7d8ac7a8e 100644 --- a/gosa-core/include/smarty/plugins/function.popup_init.php +++ b/gosa-core/include/smarty/plugins/function.popup_init.php @@ -16,12 +16,11 @@ * (Smarty online manual) * @author Monte Ohrt * @param array $params parameters - * @param object $smarty Smarty object * @param object $template template object * @return string */ -function smarty_function_popup_init($params, $smarty, $template) +function smarty_function_popup_init($params, $template) { $zindex = 1000; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php b/gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php index 3ce4e8fcd..c2f9a726e 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php @@ -76,11 +76,12 @@ class Smarty_Internal_CacheResource_File { */ public function getCachedContents($_template, $no_render = false) { - ob_start(); + if (!$no_render) { + ob_start(); + } $_smarty_tpl = $_template; include $_template->getCachedFilepath(); if ($no_render) { - ob_clean(); return null; } else { return ob_get_clean(); diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_append.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_append.php index c9a05c334..8b6c4ee8b 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_append.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_append.php @@ -1,68 +1,49 @@ compiler = $compiler; - $this->required_attributes = array('var', 'value'); - $this->optional_attributes = array('scope', 'nocache', 'index'); - - $_nocache = 'null'; - $_scope = 'null'; - // check for nocache attribute before _get_attributes because - // it shall not controll caching of the compiled code, but is a parameter - if (isset($args['nocache'])) { - if ($args['nocache'] == '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'])) { - $_attr['scope'] = trim($_attr['scope'], "'\""); - if ($_attr['scope'] == 'parent') { - $_scope = SMARTY_PARENT_SCOPE; - } elseif ($_attr['scope'] == 'root') { - $_scope = SMARTY_ROOT_SCOPE; - } elseif ($_attr['scope'] == 'global') { - $_scope = SMARTY_GLOBAL_SCOPE; - } - } - // compiled output + $_attr = $this->_get_attributes($args); + // map to compile assign attributes if (isset($_attr['index'])) { - return "append($_attr[var],array($_attr[index] => $_attr[value]),true,$_nocache,$_scope);?>"; + $_params['smarty_internal_index'] = '[' . $_attr['index'] . ']'; + unset($_attr['index']); } else { - return "append($_attr[var],$_attr[value],false,$_nocache,$_scope);?>"; + $_params['smarty_internal_index'] = '[]'; + } + $_new_attr = array(); + foreach ($_attr as $key => $value) { + $_new_attr[] = array($key => $value); } + // call compile assign + return parent::compile($_new_attr, $compiler, $_params); } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_assign.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_assign.php index bdbefae32..b7dab7c41 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_assign.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_assign.php @@ -19,47 +19,41 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; $this->required_attributes = array('var', 'value'); - $this->optional_attributes = array('scope', 'nocache', 'smarty_internal_index'); - + $this->shorttag_order = array('var', 'value'); + $this->optional_attributes = array('scope'); $_nocache = 'null'; $_scope = 'null'; - // check for nocache attribute before _get_attributes because - // it shall not controll caching of the compiled code, but is a parameter - if (isset($args['nocache'])) { - if ($args['nocache'] == 'true') { - $this->compiler->tag_nocache = true; - } - unset($args['nocache']); - } - // check and get attributes - $_attr = $this->_get_attributes($args); - - if ($this->compiler->tag_nocache) { + $_attr = $this->_get_attributes($args); + // nocache ? + if ($this->compiler->tag_nocache || $this->compiler->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); + $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true); } - + // scope setup if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); if ($_attr['scope'] == 'parent') { - $_scope = SMARTY_PARENT_SCOPE; + $_scope = Smarty::SCOPE_PARENT; } elseif ($_attr['scope'] == 'root') { - $_scope = SMARTY_ROOT_SCOPE; + $_scope = Smarty::SCOPE_ROOT; } elseif ($_attr['scope'] == 'global') { - $_scope = SMARTY_GLOBAL_SCOPE; + $_scope = Smarty::SCOPE_GLOBAL; + } else { + $this->compiler->trigger_template_error('illegal value for "scope" attribute', $this->compiler->lex->taglineno); } } // compiled output - if (isset($_attr['smarty_internal_index'])) { - return "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];?>"; + if (isset($parameter['smarty_internal_index'])) { + return "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$parameter[smarty_internal_index] = $_attr[value];?>"; } else { return "tpl_vars[$_attr[var]] = new Smarty_variable($_attr[value], $_nocache, $_scope);?>"; } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_block.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_block.php index 7e651e438..2cc03ee72 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_block.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_block.php @@ -13,6 +13,9 @@ * Smarty Internal Plugin Compile Block Class */ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('name'); + public $shorttag_order = array('name'); /** * Compiles code for the {block} tag * @@ -23,16 +26,12 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { public function compile($args, $compiler) { $this->compiler = $compiler; - $this->required_attributes = array('name'); - $this->optional_attributes = array('assign', 'nocache'); // check and get attributes $_attr = $this->_get_attributes($args); - $save = array($_attr, $compiler->parser->current_buffer, $this->compiler->nocache, $this->compiler->smarty->merge_compiled_includes); + $save = array($_attr, $compiler->parser->current_buffer, $this->compiler->nocache, $this->compiler->smarty->merge_compiled_includes, $compiler->smarty->inheritance); $this->_open_tag('block', $save); - if (isset($_attr['nocache'])) { - if ($_attr['nocache'] == 'true') { - $compiler->nocache = true; - } + if ($_attr['nocache'] == true) { + $compiler->nocache = true; } // set flag for {block} tag $compiler->smarty->inheritance = true; @@ -43,7 +42,105 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { $compiler->has_code = false; return true; } -} + + + static function saveBlockData($block_content, $block_tag, $template, $filepath) + { + $_rdl = preg_quote($template->smarty->right_delimiter); + $_ldl = preg_quote($template->smarty->left_delimiter); + + if (0 == preg_match("!({$_ldl}block\s+)(name=)?(\w+|'\w+'|\"\w+\")(\s*?)?((append|prepend|nocache)(=true)?)?(\s*{$_rdl})!", $block_tag, $_match)) { + $template->compiler_object->trigger_template_error('Illegal {block} tag syntax'); + } else { + $_name = trim($_match[3], '\'"'); + // replace {$smarty.block.child} + if (strpos($block_content, $template->smarty->left_delimiter . '$smarty.block.child' . $template->smarty->right_delimiter) !== false) { + if (isset($template->block_data[$_name])) { + $block_content = str_replace($template->smarty->left_delimiter . '$smarty.block.child' . $template->smarty->right_delimiter, + $template->block_data[$_name]['source'], $block_content); + unset($template->block_data[$_name]); + } else { + $block_content = str_replace($template->smarty->left_delimiter . '$smarty.block.child' . $template->smarty->right_delimiter, + '', $block_content); + } + } + 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 { + $template->block_data[$_name]['source'] = $block_content; + } + if ($_match[6] == 'append') { + $template->block_data[$_name]['mode'] = 'append'; + } elseif ($_match[6] == 'prepend') { + $template->block_data[$_name]['mode'] = 'prepend'; + } else { + $template->block_data[$_name]['mode'] = 'replace'; + } + $template->block_data[$_name]['file'] = $filepath; + } + } + + static function compileChildBlock ($compiler, $_name = null) + { + $_output = ''; + // if called by {$smarty.block.child} we must search the name of enclosing {block} + if ($_name == null) { + $stack_count = count($compiler->_tag_stack); + while (--$stack_count >= 0) { + if ($compiler->_tag_stack[$stack_count][0] == 'block') { + $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'] ,"'"); + break; + } + } + } + if ($_name == null) { + $compiler->trigger_template_error('{$smarty.block.child} used out of context'); + } + $_tpl = new Smarty_Internal_template ('eval:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id, + $compiler->template->compile_id = null, $compiler->template->caching, $compiler->template->cache_lifetime); + $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; + $_tpl->template_filepath = $compiler->template->block_data[$_name]['file']; + if ($compiler->nocache) { + $_tpl->forceNocache = 2; + } else { + $_tpl->forceNocache = 1; + } + $_tpl->suppressHeader = true; + $_tpl->suppressFileDependency = true; + 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']); + $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']); + if ($_tpl->has_nocache_code) { + $compiler->template->has_nocache_code = true; + } + foreach($_tpl->required_plugins as $code => $tmp1) { + foreach($tmp1 as $name => $tmp) { + foreach($tmp as $type => $data) { + $compiler->template->required_plugins[$code][$name][$type] = $data; + } + } + } + unset($_tpl); + $compiler->template->block_data[$_name]['compiled'] = true; + return $_output; + } + +} /** * Smarty Internal Plugin Compile BlockClose Class @@ -62,59 +159,23 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase { $this->smarty = $compiler->smarty; $this->compiler->has_code = true; // check and get attributes - $this->optional_attributes = array('name'); $_attr = $this->_get_attributes($args); - $saved_data = $this->_close_tag(array('block')); - // if name does match to opening tag - if (isset($_attr['name']) && $saved_data[0]['name'] != $_attr['name']) { - $this->compiler->trigger_template_error('mismatching name attributes "' . $saved_data[0]['name'] . '" and "' . $_attr['name'] . '"'); - } + $saved_data = $this->_close_tag(array('block')); $_name = trim($saved_data[0]['name'], "\"'"); - 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 = $compiler->template->block_data[$_name]['file']; - if ($compiler->nocache) { - $_tpl->forceNocache = 2; - } else { - $_tpl->forceNocache = 1; - } - $_tpl->suppressHeader = true; - $_tpl->suppressFileDependency = true; - 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']); - $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']); - if ($_tpl->has_nocache_code) { - $compiler->template->has_nocache_code = true; - } - foreach($_tpl->required_plugins as $code => $tmp1) { - foreach($tmp1 as $name => $tmp) { - foreach($tmp as $type => $data) { - $compiler->template->required_plugins[$code][$name][$type] = $data; - } - } - } - unset($_tpl); + if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) { + $_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name); } else { $_output = $compiler->parser->current_buffer->to_smarty_php(); + unset ($compiler->template->block_data[$_name]['compiled']); } + // reset flags $compiler->parser->current_buffer = $saved_data[1]; $compiler->nocache = $saved_data[2]; $compiler->smarty->merge_compiled_includes = $saved_data[3]; + $compiler->smarty->inheritance = $saved_data[4]; // $_output content has already nocache code processed $compiler->suppressNocacheProcessing = true; - // reset flag - $compiler->smarty->inheritance = false; return $_output; } } - ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php index 60e856df1..2e57da401 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_break.php @@ -13,21 +13,30 @@ * Smarty Internal Plugin Compile Break Class */ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase { + // attribute definitions + public $optional_attributes = array('levels'); + public $shorttag_order = array('levels'); + + /** * Compiles code for the {break} tag * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) - { + public function compile($args, $compiler, $parameter) + { $this->compiler = $compiler; $this->smarty = $compiler->smarty; - $this->optional_attributes = array('levels'); // check and get attributes $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } + if (isset($_attr['levels'])) { if (!is_numeric($_attr['levels'])) { $this->compiler->trigger_template_error('level attribute must be a numeric constant', $this->compiler->lex->taglineno); diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_call.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_call.php index e63bd1c83..8d63b7c73 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_call.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_call.php @@ -14,28 +14,32 @@ * Smarty Internal Plugin Compile Function_Call Class */ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('name'); + public $shorttag_order = array('name'); + public $optional_attributes = array('_any'); + /** * Compiles the calls of user defined tags defined by {function} * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ public function compile($args, $compiler) { $this->compiler = $compiler; $this->smarty = $compiler->smarty; - $this->required_attributes = array('name'); - $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); - // save posible attributes + // save possible attributes if (isset($_attr['assign'])) { // output will be stored in a smarty variable instead of beind displayed $_assign = $_attr['assign']; } $_name = trim($_attr['name'], "'\""); - unset($_attr['name'], $_attr['assign']); + unset($_attr['name'], $_attr['assign'], $_attr['nocache']); // set flag (compiled code of {function} must be included in cache file if ($compiler->nocache || $compiler->tag_nocache) { $_nocache = 'true'; @@ -49,7 +53,8 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase { } else { $_paramsArray[] = "'$_key'=>$_value"; } - } + } + if (false) { if (isset($compiler->template->properties['function'][$_name]['parameter'])) { foreach ($compiler->template->properties['function'][$_name]['parameter'] as $_key => $_value) { if (!isset($_attr[$_key])) { @@ -70,15 +75,16 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase { } } } - } + } + } $_params = 'array(' . implode(",", $_paramsArray) . ')'; $_hash = str_replace('-','_',$compiler->template->properties['nocache_hash']); // was there an assign attribute if (isset($_assign)) { if ($compiler->template->caching) { - $_output = "\$_smarty_tpl->assign({$_assign},Smarty_Internal_Function_Call_Handler::call ('{$_name}',\$_smarty_tpl,{$_params},'{$_hash}',{$_nocache}));?>\n"; + $_output = "assign({$_assign}, ob_get_clean());?>\n"; } else { - $_output = "\$_smarty_tpl->assign({$_assign},smarty_template_function_{$_name}(\$_smarty_tpl,{$_params}));?>\n"; + $_output = "assign({$_assign}, ob_get_clean());?>\n"; } } else { if ($compiler->template->caching) { diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_capture.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_capture.php index 96589cdde..2583aadc0 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_capture.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_capture.php @@ -13,6 +13,10 @@ * Smarty Internal Plugin Compile Capture Class */ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { + // attribute definitions + public $shorttag_order = array('name'); + public $optional_attributes = array('name', 'assign', 'append'); + /** * Compiles code for the {capture} tag * @@ -23,7 +27,6 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { public function compile($args, $compiler) { $this->compiler = $compiler; - $this->optional_attributes = array('name', 'assign', 'append'); // check and get attributes $_attr = $this->_get_attributes($args); @@ -31,8 +34,9 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase { $assign = isset($_attr['assign']) ? $_attr['assign'] : null; $append = isset($_attr['append']) ? $_attr['append'] : null; - $this->compiler->_capture_stack[] = array($buffer, $assign, $append); - + $this->compiler->_capture_stack[] = array($buffer, $assign, $append, $this->compiler->nocache); + // maybe nocache because of nocache variables + $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; $_output = ""; return $_output; @@ -55,8 +59,12 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase { $this->compiler = $compiler; // check and get attributes $_attr = $this->_get_attributes($args); + // must endblock be nocache? + if ($this->compiler->nocache) { + $this->compiler->tag_nocache = true; + } - list($buffer, $assign, $append) = array_pop($this->compiler->_capture_stack); + list($buffer, $assign, $append, $this->compiler->nocache) = array_pop($this->compiler->_capture_stack); $_output = "compiler = $compiler; - $this->required_attributes = array('file'); - $this->optional_attributes = array('section', 'scope'); // check and get attributes - $_attr = $this->_get_attributes($args); + $_attr = $this->_get_attributes($args); + + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } + + // save posible attributes $conf_file = $_attr['file']; if (isset($_attr['section'])) { @@ -35,18 +44,19 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase { } else { $section = 'null'; } - $scope = '$_smarty_tpl->smarty'; + $scope = 'local'; + // scope setup if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); - if ($_attr['scope'] == 'local') { - $scope = '$_smarty_tpl'; - } elseif ($_attr['scope'] == 'parent') { - $scope = '$_smarty_tpl->parent'; - } + if (in_array($_attr['scope'],array('local','parent','root','global'))) { + $scope = $_attr['scope']; + } else { + $this->compiler->trigger_template_error('illegal value for "scope" attribute', $this->compiler->lex->taglineno); + } } // create config object $_output = "smarty, \$_smarty_tpl);"; - $_output .= "\$_config->loadConfigVars($section, $scope); ?>"; + $_output .= "\$_config->loadConfigVars($section, '$scope'); ?>"; return $_output; } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php index 3c15e8f12..7d7966732 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_continue.php @@ -13,21 +13,29 @@ * Smarty Internal Plugin Compile Continue Class */ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase { + // attribute definitions + public $optional_attributes = array('levels'); + public $shorttag_order = array('levels'); + /** * Compiles code for the {continue} tag * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; $this->smarty = $compiler->smarty; - $this->optional_attributes = array('levels'); // check and get attributes $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } + if (isset($_attr['levels'])) { if (!is_numeric($_attr['levels'])) { $this->compiler->trigger_template_error('level attribute must be a numeric constant', $this->compiler->lex->taglineno); diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_debug.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_debug.php index d6d8905f9..f6189e7e1 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_debug.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_debug.php @@ -26,8 +26,11 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase { // check and get attributes $_attr = $this->_get_attributes($args); + // compile always as nocache + $this->compiler->tag_nocache = true; + // display debug template - $_output = "smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl->smarty); ?>"; + $_output = "smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl); ?>"; return $_output; } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_eval.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_eval.php index 17be1f80c..aa3c25807 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_eval.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_eval.php @@ -13,6 +13,10 @@ * Smarty Internal Plugin Compile Eval Class */ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase { + public $required_attributes = array('var'); + public $optional_attributes = array('assign'); + public $shorttag_order = array('var','assign'); + /** * Compiles code for the {eval} tag * diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.php index 245fe9c4e..3d3ac7976 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.php @@ -14,6 +14,10 @@ * Smarty Internal Plugin Compile extend Class */ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('file'); + public $shorttag_order = array('file'); + /** * Compiles code for the {extends} tag * @@ -27,26 +31,34 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase { $this->smarty = $compiler->smarty; $this->_rdl = preg_quote($this->smarty->right_delimiter); $this->_ldl = preg_quote($this->smarty->left_delimiter); - $this->required_attributes = array('file'); + $filepath = $compiler->template->getTemplateFilepath(); // check and get attributes $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } + $_smarty_tpl = $compiler->template; $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 - $template_sha1 = sha1($_template->getTemplateFilepath()); + if (in_array($_template->resource_type,array('eval','string'))) { + $template_sha1 = sha1($include_file); + } else { + $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; + $compiler->template->properties['file_dependency'][$template_sha1] = array($_template->getTemplateFilepath(), $_template->getTemplateTimestamp(),$_template->resource_type); + $_content = substr($compiler->template->template_source,$compiler->lex->counter-1); if (preg_match_all("!({$this->_ldl}block\s(.+?){$this->_rdl})!", $_content, $s) != - preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $c)) { + preg_match_all("!({$this->_ldl}/block{$this->_rdl})!", $_content, $c)) { $this->compiler->trigger_template_error('unmatched {block} {/block} pairs'); } - preg_match_all("!{$this->_ldl}block\s(.+?){$this->_rdl}|{$this->_ldl}/block(.*?){$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE); + preg_match_all("!{$this->_ldl}block\s(.+?){$this->_rdl}|{$this->_ldl}/block{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE); $_result_count = count($_result[0]); $_start = 0; while ($_start < $_result_count) { @@ -62,7 +74,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase { } $_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], $compiler->template); + Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $compiler->template, $filepath); $_start = $_start + $_end + 1; } $compiler->template->template_source = $_template->getTemplateSource(); @@ -71,45 +83,5 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase { return ''; } - protected function saveBlockData($block_content, $block_tag, $template) - { - 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} - if (strpos($block_content, $this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter) !== false) { - if (isset($template->block_data[$_name])) { - $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter, - $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($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 { - $template->block_data[$_name]['source'] = $block_content; - } - if (preg_match('/(.?)(append)(.*)/', $block_tag, $_match) != 0) { - $template->block_data[$_name]['mode'] = 'append'; - } elseif (preg_match('/(.?)(prepend)(.*)/', $block_tag, $_match) != 0) { - $template->block_data[$_name]['mode'] = 'prepend'; - } else { - $template->block_data[$_name]['mode'] = 'replace'; - } - $template->block_data[$_name]['file'] = $template->getTemplateFilepath(); - } - } } - ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_for.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_for.php index 77f196cc8..2e5d0a11f 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_for.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_for.php @@ -29,32 +29,33 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - // {for $x=0; $x<$y; $x++} syntax - if (isset($args['ifexp'])) { - $this->required_attributes = array('ifexp', 'start', 'loop', 'varloop'); + if ($parameter == 0) { + $this->required_attributes = array('start','to'); + $this->optional_attributes = array('max','step'); } else { - $this->required_attributes = array('start', 'to'); - $this->optional_attributes = array('step', 'max'); - } + $this->required_attributes = array('start','ifexp','var','step'); + $this->optional_attributes = array(); + } // check and get attributes $_attr = $this->_get_attributes($args); $local_vars = array(); $output = "tpl_vars[$_statement[var]] = new Smarty_Variable;"; $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n"; $compiler->local_var[$_statement['var']] = true; $local_vars[] = $_statement['var']; } - $output .= " if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[varloop]]->value$_attr[loop]){\n"; + $output .= " if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]){\n"; } else { $_statement = $_attr['start']; $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;"; @@ -63,12 +64,12 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase { if (isset($_attr['step'])) { $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = $_attr[step];"; } else { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = ($_attr[to] - ($_statement[value]) < 0) ? -1 : 1;"; + $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = 1;"; } if (isset($_attr['max'])) { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - $_statement[value] : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n"; + $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n"; } else { - $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - $_statement[value] : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n"; + $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n"; } $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0){\n"; $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++){\n"; @@ -94,13 +95,14 @@ class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; // check and get attributes - $_attr = $this->_get_attributes($args); + $_attr = $this->_get_attributes($args); list($_open_tag, $nocache, $local_vars) = $this->_close_tag(array('for')); $this->_open_tag('forelse', array('forelse', $nocache, $local_vars)); @@ -117,13 +119,14 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; // check and get attributes - $_attr = $this->_get_attributes($args); + $_attr = $this->_get_attributes($args); // must endblock be nocache? if ($this->compiler->nocache) { $this->compiler->tag_nocache = true; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_foreach.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_foreach.php index 52b78c334..9564c6a25 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_foreach.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_foreach.php @@ -13,18 +13,22 @@ * Smarty Internal Plugin Compile Foreach Class */ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('from', 'item'); + public $optional_attributes = array('name', 'key'); + public $shorttag_order = array('from','item','key','name'); + /** * Compiles code for the {foreach} tag * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - $this->required_attributes = array('from', 'item'); - $this->optional_attributes = array('name', 'key'); $tpl = $compiler->template; // check and get attributes $_attr = $this->_get_attributes($args); @@ -62,11 +66,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase { $usesSmartyIndex = strpos($tpl->template_source, $SmartyVarName . 'index') !== false; $usesSmartyIteration = strpos($tpl->template_source, $SmartyVarName . 'iteration') !== false; $usesSmartyShow = strpos($tpl->template_source, $SmartyVarName . 'show') !== false; - $usesSmartyTotal = $usesSmartyLast || strpos($tpl->template_source, $SmartyVarName . 'total') !== false; + $usesSmartyTotal = strpos($tpl->template_source, $SmartyVarName . 'total') !== false; } else { $usesSmartyFirst = false; $usesSmartyLast = false; $usesSmartyTotal = false; + $usesSmartyShow = false; } $usesPropFirst = $usesSmartyFirst || strpos($tpl->template_source, $ItemVarName . 'first') !== false; @@ -74,7 +79,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase { $usesPropIndex = $usesPropFirst || strpos($tpl->template_source, $ItemVarName . 'index') !== false; $usesPropIteration = $usesPropLast || strpos($tpl->template_source, $ItemVarName . 'iteration') !== false; $usesPropShow = strpos($tpl->template_source, $ItemVarName . 'show') !== false; - $usesPropTotal = $usesSmartyTotal || $usesPropLast || strpos($tpl->template_source, $ItemVarName . 'total') !== false; + $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($tpl->template_source, $ItemVarName . 'total') !== false; // generate output code $output = "tpl_vars[$item] = new Smarty_Variable;\n"; @@ -85,7 +90,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=(\$_from instanceof Traversable)?iterator_count(\$_from):count(\$_from);\n"; + $output .= " \$_smarty_tpl->tpl_vars[$item]->total= \$_smarty_tpl->_count(\$_from);\n"; } if ($usesPropIteration) { $output .= " \$_smarty_tpl->tpl_vars[$item]->iteration=0;\n"; @@ -93,6 +98,9 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase { if ($usesPropIndex) { $output .= " \$_smarty_tpl->tpl_vars[$item]->index=-1;\n"; } + if ($usesPropShow) { + $output .= " \$_smarty_tpl->tpl_vars[$item]->show = (\$_smarty_tpl->tpl_vars[$item]->total > 0);\n"; + } if ($has_name) { if ($usesSmartyTotal) { $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['total'] = \$_smarty_tpl->tpl_vars[$item]->total;\n"; @@ -103,9 +111,16 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase { if ($usesSmartyIndex) { $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['index']=-1;\n"; } + if ($usesSmartyShow) { + $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['show']=(\$_smarty_tpl->tpl_vars[$item]->total > 0);\n"; + } } - $output .= "if (count(\$_from) > 0){\n"; - $output .= " foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value){\n"; + if ($usesPropTotal) { + $output .= "if (\$_smarty_tpl->tpl_vars[$item]->total > 0){\n"; + } else { + $output .= "if (\$_smarty_tpl->_count(\$_from) > 0){\n"; + } + $output .= " foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value){\n"; if ($key != null) { $output .= " \$_smarty_tpl->tpl_vars[$key]->value = \$_smarty_tpl->tpl_vars[$item]->key;\n"; } @@ -150,9 +165,10 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; // check and get attributes @@ -174,9 +190,10 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; // check and get attributes diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_function.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_function.php index 0080704af..3b7ebca28 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_function.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_function.php @@ -13,20 +13,29 @@ * Smarty Internal Plugin Compile Function Class */ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('name'); + public $shorttag_order = array('name'); + public $optional_attributes = array('_any'); + /** * Compiles code for the {function} tag * * @param array $args array with attributes from parser * @param object $compiler compiler object - * @return boolean true + * @param array $parameter array with compilation parameter + * @return boolean true */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - $this->required_attributes = array('name'); - $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); + + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } + $save = array($_attr, $compiler->parser->current_buffer, $compiler->template->has_nocache_code, $compiler->template->required_plugins); $this->_open_tag('function', $save); @@ -43,6 +52,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase { $output = "tpl_vars; + foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(trim(\$value,'\''));}; foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>"; } // Init temporay context @@ -65,9 +75,10 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return boolean true */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; $_attr = $this->_get_attributes($args); @@ -93,6 +104,11 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase } $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n"; } + // remove last line break from function definition + $last = count($compiler->parser->current_buffer->subtrees) - 1; + if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) { + unset($compiler->parser->current_buffer->subtrees[$last]); + } // if caching save template function for possible nocache call if ($compiler->template->caching) { $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_if.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_if.php index 4eac8d4b3..496451364 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_if.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_if.php @@ -18,21 +18,30 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - $this->required_attributes = array('if condition'); // check and get attributes $_attr = $this->_get_attributes($args); - $this->_open_tag('if',array(1,$compiler->tag_nocache)); - if (is_array($args['if condition'])) { - $_output = "tpl_vars[".$args['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$args['if condition']['var']."] = new Smarty_Variable;"; - $_output .= "if (\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."]->value = ".$args['if condition']['value']."){?>"; + $this->_open_tag('if',array(1,$this->compiler->nocache)); + // must whole block be nocache ? + $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; + if (is_array($parameter['if condition'])) { + if ($this->compiler->nocache) { + $_nocache = '(null,true)'; + // create nocache var to make it know for further compiling + $this->compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true); + } else { + $_nocache = ''; + } + $_output = "tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable{$_nocache};"; + $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value']."){?>"; return $_output; } else { - return ""; + return ""; } } } @@ -46,9 +55,10 @@ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'elseif')); @@ -67,26 +77,52 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - $this->required_attributes = array('if condition'); // check and get attributes $_attr = $this->_get_attributes($args); list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'elseif')); + if (is_array($parameter['if condition'])) { + $condition_by_assign = true; + if ($this->compiler->nocache) { + $_nocache = '(null,true)'; + // create nocache var to make it know for further compiling + $this->compiler->template->tpl_vars[trim($parameter['if condition']['var'], "'")] = new Smarty_variable(null, true); + } else { + $_nocache = ''; + } + } else { + $condition_by_assign = false; + } + if (empty($this->compiler->prefix_code)) { - $this->_open_tag('elseif', array($nesting, $compiler->tag_nocache)); - return ""; + if ($condition_by_assign) { + $this->_open_tag('elseif', array($nesting + 1, $compiler->tag_nocache)); + $_output = "tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable{$_nocache};"; + $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value']."){?>"; + return $_output; + } else { + $this->_open_tag('elseif', array($nesting, $compiler->tag_nocache)); + return ""; + } } else { $tmp = ''; foreach ($this->compiler->prefix_code as $code) $tmp .= $code; $this->compiler->prefix_code = array(); $this->_open_tag('elseif', array($nesting + 1, $compiler->tag_nocache)); - return "{$tmp}"; + if ($condition_by_assign) { + $_output = "{$tmp}tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable{$_nocache};"; + $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value']."){?>"; + return $_output; + } else { + return "{$tmp}"; + } } } } @@ -100,12 +136,17 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'else', 'elseif')); + // must endblock be nocache? + if ($this->compiler->nocache) { + $this->compiler->tag_nocache = true; + } + list($nesting, $this->compiler->nocache) = $this->_close_tag(array('if', 'else', 'elseif')); $tmp = ''; for ($i = 0; $i < $nesting ; $i++) $tmp .= '}'; return ""; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include.php index fa1d64277..ea3231019 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include.php @@ -14,6 +14,14 @@ * Smarty Internal Plugin Compile Include Class */ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { + // caching mode to create nocache code but no cache file + const CACHING_NOCACHE_CODE = 9999; + // attribute definitions + public $required_attributes = array('file'); + public $shorttag_order = array('file'); + public $option_flags = array('nocache','inline','caching'); + public $optional_attributes = array('_any'); + /** * Compiles code for the {include} tag * @@ -24,28 +32,28 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { public function compile($args, $compiler) { $this->compiler = $compiler; - $this->required_attributes = array('file'); - $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); // save posible attributes $include_file = $_attr['file']; $has_compiled_template = false; - if ($compiler->smarty->merge_compiled_includes || isset($_attr['inline'])) { + if ($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) { // 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) { $tmp = null; eval("\$tmp = $include_file;"); if ($this->compiler->template->template_resource != $tmp) { $tpl = new $compiler->smarty->template_class ($tmp, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id); + // suppress writing of compiled file + $tpl->write_compiled_code = false; if ($this->compiler->template->caching) { // needs code for cached page but no cache file - $tpl->caching = 9999; + $tpl->caching = self::CACHING_NOCACHE_CODE; } - 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(); @@ -77,24 +85,24 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { $_assign = $_attr['assign']; } - $_parent_scope = SMARTY_LOCAL_SCOPE; + $_parent_scope = Smarty::SCOPE_LOCAL; if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); if ($_attr['scope'] == 'parent') { - $_parent_scope = SMARTY_PARENT_SCOPE; + $_parent_scope = Smarty::SCOPE_PARENT; } elseif ($_attr['scope'] == 'root') { - $_parent_scope = SMARTY_ROOT_SCOPE; + $_parent_scope = Smarty::SCOPE_ROOT; } elseif ($_attr['scope'] == 'global') { - $_parent_scope = SMARTY_GLOBAL_SCOPE; + $_parent_scope = Smarty::SCOPE_GLOBAL; } } $_caching = 'null'; if ($this->compiler->nocache || $this->compiler->tag_nocache) { - $_caching = SMARTY_CACHING_OFF; + $_caching = Smarty::CACHING_OFF; } // default for included templates if ($this->compiler->template->caching && !$this->compiler->nocache && !$this->compiler->tag_nocache) { - $_caching = 9999; + $_caching = self::CACHING_NOCACHE_CODE; } /* * if the {include} tag provides individual parameter for caching @@ -104,38 +112,36 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { if (isset($_attr['cache_lifetime'])) { $_cache_lifetime = $_attr['cache_lifetime']; $this->compiler->tag_nocache = true; - $_caching = SMARTY_CACHING_LIFETIME_CURRENT; + $_caching = Smarty::CACHING_LIFETIME_CURRENT; } else { $_cache_lifetime = 'null'; } if (isset($_attr['cache_id'])) { $_cache_id = $_attr['cache_id']; $this->compiler->tag_nocache = true; - $_caching = SMARTY_CACHING_LIFETIME_CURRENT; + $_caching = Smarty::CACHING_LIFETIME_CURRENT; } else { $_cache_id = '$_smarty_tpl->cache_id'; } - if (isset($_attr['nocache'])) { - if (trim($_attr['nocache'], "'\"") == 'true') { - $this->compiler->tag_nocache = true; - $_caching = SMARTY_CACHING_OFF; - } + if (isset($_attr['compile_id'])) { + $_compile_id = $_attr['compile_id']; + } else { + $_compile_id = '$_smarty_tpl->compile_id'; } - if (isset($_attr['caching'])) { - if (trim($_attr['caching'], "'\"") == 'true') { - $_caching = SMARTY_CACHING_LIFETIME_CURRENT; - } else { - $this->compiler->tag_nocache = true; - $_caching = SMARTY_CACHING_OFF; - } + if ($_attr['caching'] === true) { + $_caching = Smarty::CACHING_LIFETIME_CURRENT; + } + if ($_attr['nocache'] === true) { + $this->compiler->tag_nocache = true; + $_caching = Smarty::CACHING_OFF; } // create template object - $_output = "smarty->template_class}($include_file, \$_smarty_tpl->smarty, \$_smarty_tpl, $_cache_id, \$_smarty_tpl->compile_id, $_caching, $_cache_lifetime);\n"; + $_output = "smarty->template_class}($include_file, \$_smarty_tpl->smarty, \$_smarty_tpl, $_cache_id, $_compile_id, $_caching, $_cache_lifetime);\n"; // delete {include} standard attributes - unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']); + unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_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) { + if ($_parent_scope == Smarty::SCOPE_LOCAL) { // create variables foreach ($_attr as $_key => $_value) { $_output .= "\$_template->assign('$_key',$_value);"; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include_php.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include_php.php index 5aa558ddf..19ee186bc 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include_php.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_include_php.php @@ -14,6 +14,11 @@ * Smarty Internal Plugin Compile Insert Class */ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('file'); + public $shorttag_order = array('file'); + public $optional_attributes = array('once', 'assign'); + /** * Compiles code for the {include_php} tag * @@ -23,30 +28,46 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase { */ public function compile($args, $compiler) { + if (!$compiler->smarty->allow_php_tag) { + throw new SmartyException("{include_php} is deprecated, set allow_php_tag = true to enable"); + } $this->compiler = $compiler; - $this->required_attributes = array('file'); - $this->optional_attributes = array('once', 'assign'); // check and get attributes $_attr = $this->_get_attributes($args); $_output = 'template; + $_filepath = false; eval('$_file = ' . $_attr['file'] . ';'); - - $_file = realpath($_file); - - if ($this->compiler->smarty->security) { - $this->compiler->smarty->security_handler->isTrustedPHPDir($_file); + if (!isset($this->compiler->smarty->security_policy) && file_exists($_file)) { + $_filepath = $_file; + } else { + if (isset($this->compiler->smarty->security_policy)) { + $_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 . $_file)) { + $_filepath = $_script_dir . $_file; + break; + } + } + } } - - if ($_file === false) { - $this->compiler->trigger_template_error('include_php: file "' . $_attr['file'] . '" is not readable'); + if ($_filepath == false) { + $this->compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", $this->compiler->lex->taglineno); } - if ($this->compiler->smarty->security) { - $this->compiler->smarty->security_handler->isTrustedPHPDir($_file); + if (isset($this->compiler->smarty->security_policy)) { + $this->compiler->smarty->security_policy->isTrustedPHPDir($_filepath); } + if (isset($_attr['assign'])) { // output will be stored in a smarty variable instead of being displayed $_assign = $_attr['assign']; @@ -59,9 +80,9 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase { } if (isset($_assign)) { - return "assign({$_assign},ob_get_contents()); ob_end_clean();?>"; + return "assign({$_assign},ob_get_contents()); ob_end_clean();?>"; } else { - return "\n"; + return "\n"; } } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_insert.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_insert.php index f1b5e8ebd..898e5315a 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_insert.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_insert.php @@ -14,6 +14,11 @@ * Smarty Internal Plugin Compile Insert Class */ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('name'); + public $shorttag_order = array('name'); + public $optional_attributes = array('_any'); + /** * Compiles code for the {insert} tag * @@ -24,8 +29,6 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { public function compile($args, $compiler) { $this->compiler = $compiler; - $this->required_attributes = array('name'); - $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); // never compile as nocache code @@ -39,7 +42,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { // save posible attributes eval('$_name = ' . $_attr['name'] . ';'); if (isset($_attr['assign'])) { - // output will be stored in a smarty variable instead of beind displayed + // output will be stored in a smarty variable instead of being displayed $_assign = $_attr['assign']; // create variable to make shure that the compiler knows about its nocache status $this->compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true); @@ -50,10 +53,10 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { $_smarty_tpl = $compiler->template; $_filepath = false; eval('$_script = ' . $_attr['script'] . ';'); - if (!$this->compiler->smarty->security && file_exists($_script)) { + if (!isset($this->compiler->smarty->security_policy) && file_exists($_script)) { $_filepath = $_script; } else { - if ($this->compiler->smarty->security) { + if (isset($this->compiler->smarty->security_policy)) { $_dir = $this->compiler->smarty->security_policy->trusted_dir; } else { $_dir = $this->compiler->smarty->trusted_dir; @@ -91,7 +94,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { } } // delete {insert} standard attributes - unset($_attr['name'], $_attr['assign'], $_attr['script']); + unset($_attr['name'], $_attr['assign'], $_attr['script'], $_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -103,14 +106,14 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase { if ($_smarty_tpl->caching) { $_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);?>"; + $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>"; } } else { $this->compiler->has_output = true; if ($_smarty_tpl->caching) { $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>"; } else { - $_output .= "echo {$_function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>"; + $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>"; } } return $_output; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_ldelim.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_ldelim.php index 9f6294cab..bdf86de4c 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_ldelim.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_ldelim.php @@ -25,6 +25,9 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase { { $this->compiler = $compiler; $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } // this tag does not return compiled code $this->compiler->has_code = true; return $this->compiler->smarty->left_delimiter; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_nocache.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_nocache.php index 3a4e11350..0c88b14bd 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_nocache.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_nocache.php @@ -25,6 +25,9 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase { { $this->compiler = $compiler; $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } // enter nocache mode $this->compiler->nocache = true; // this tag does not return compiled code diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php index 79772a12e..7cfdc51c8 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php @@ -1,4 +1,4 @@ -compiler = $compiler; if (strlen($tag) < 6 || substr($tag, -5) != 'close') { // opening tag of block plugin - $this->required_attributes = array(); - $this->optional_attributes = array('_any'); - // check and get attributes - $_attr = $this->_get_attributes($args); + // check and get attributes + $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->tag_nocache = true; + } + unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -45,7 +52,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 - $output = "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 = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else { // must endblock be nocache? if ($this->compiler->nocache) { @@ -56,7 +63,7 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi // This tag does create output $this->compiler->has_output = true; // compile code - $output = "smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; + $output = "smarty->_tag_stack);?>"; } return $output . "\n"; } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_function_plugin.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_function_plugin.php index 77f83c0d3..965d696ef 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_function_plugin.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_function_plugin.php @@ -13,24 +13,32 @@ * Smarty Internal Plugin Compile Function Plugin Class */ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array(); + public $optional_attributes = array('_any'); + /** * 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 + * @param array $parameter array with compilation parameter + * @param string $tag name of function plugin + * @param string $function PHP function name * @return string compiled code */ - public function compile($args, $compiler, $tag, $function) + public function compile($args, $compiler, $parameter, $tag, $function) { $this->compiler = $compiler; // This tag does create output $this->compiler->has_output = true; - $this->required_attributes = array(); - $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->tag_nocache = true; + } + unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -42,7 +50,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co } $_params = 'array(' . implode(",", $_paramsArray) . ')'; // compile code - $output = "smarty,\$_smarty_tpl);?>\n"; + $output = "\n"; return $output; } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_modifier.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_modifier.php index 06b5a885e..1648db2ed 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_modifier.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_modifier.php @@ -18,40 +18,29 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; $this->smarty = $this->compiler->smarty; - $this->required_attributes = array('value', 'modifierlist'); // check and get attributes $_attr = $this->_get_attributes($args); - $output = $_attr['value']; + $output = $parameter['value']; // loop over list of modifiers - foreach ($_attr['modifierlist'] as $single_modifier) { - preg_match_all('/(((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^:"]*"[^"\\\\]*(?:\\\\.[^"\\\\]*)*")[^:]*)+|::?|[^:]+)/', $single_modifier, $mod_array); - $modifier = $mod_array[0][0]; - for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) { - if ($mod_array[0][$i] == ':') { - $mod_array[0][$i] = ','; - } - if ($mod_array[0][$i] == '::') { - $mod_array[0][$i-1] = $mod_array[0][$i-1] . $mod_array[0][$i] . $mod_array[0][$i + 1]; - unset($mod_array[0][$i], $mod_array[0][$i + 1]); - $i++; - } - } - unset($mod_array[0][0]); - $params = $output . implode('', $mod_array[0]); + foreach ($parameter['modifierlist'] as $single_modifier) { + $modifier = $single_modifier[0]; + $single_modifier[0] = $output; + $params = implode(',', $single_modifier); // check for registered modifier - if (isset($compiler->smarty->registered_plugins['modifier'][$modifier])) { - $function = $compiler->smarty->registered_plugins['modifier'][$modifier][0]; + if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) { + $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; if (!is_array($function)) { $output = "{$function}({$params})"; } else { if (is_object($function[0])) { - $output = '$_smarty_tpl->smarty->registered_plugins[\'modifier\'][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; + $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; } else { $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; } @@ -59,24 +48,18 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa // check for plugin modifiercompiler } else if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) { $plugin = 'smarty_modifiercompiler_' . $modifier; - foreach($mod_array[0] as $key => $value) { - if ($value == ',') { - unset ($mod_array[0][$key]); - } - } - $args = array_merge((array)$output, $mod_array[0]); - $output = $plugin($args, $compiler); + $output = $plugin($single_modifier, $compiler); // check for plugin modifier - } else if ($function = $this->compiler->getPlugin($modifier, 'modifier')) { + } else if ($function = $this->compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) { $output = "{$function}({$params})"; // check if trusted PHP function } else if (is_callable($modifier)) { // check if modifier allowed - if (!$this->compiler->template->security || $this->smarty->security_handler->isTrustedModifier($modifier, $this->compiler)) { + if (!is_object($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedModifier($modifier, $this->compiler)) { $output = "{$modifier}({$params})"; } } else { - $this->compiler->trigger_template_error ("unknown modifier \"" . $modifier . "\""); + $this->compiler->trigger_template_error ("unknown modifier \"" . $modifier . "\"", $this->compiler->lex->taglineno); } } return $output; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php index 83558bfcd..f3ae966f6 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php @@ -13,24 +13,31 @@ * Smarty Internal Plugin Compile Object Block Function Class */ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array(); + public $optional_attributes = array('_any'); + /** * 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 + * @param array $parameter array with compilation parameter + * @param string $tag name of block object + * @param string $methode name of methode to call * @return string compiled code */ - public function compile($args, $compiler, $tag, $methode) + public function compile($args, $compiler, $parameter, $tag, $methode) { $this->compiler = $compiler; if (strlen($tag) < 5 || substr($tag, -5) != 'close') { // opening tag of block plugin - $this->required_attributes = array(); - $this->optional_attributes = array('_any'); - // check and get attributes - $_attr = $this->_get_attributes($args); + // check and get attributes + $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->tag_nocache = true; + } + unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -42,13 +49,19 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter } $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $this->_open_tag($tag . '->' . $methode, $_params); + $this->_open_tag($tag . '->' . $methode, array($_params, $this->compiler->nocache)); + // maybe nocache because of nocache variables or nocache plugin + $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; // compile code - $output = "smarty->_tag_stack[] = array('{$tag}->{$methode}', {$_params}); \$_block_repeat=true; \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>"; + $output = "smarty->_tag_stack[] = array('{$tag}->{$methode}', {$_params}); \$_block_repeat=true; \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else { $base_tag = substr($tag, 0, -5); - // closing tag of block plugin - $_params = $this->_close_tag($base_tag . '->' . $methode); + // must endblock be nocache? + if ($this->compiler->nocache) { + $this->compiler->tag_nocache = true; + } + // closing tag of block plugin, restore nocache + list($_params, $this->compiler->nocache) = $this->_close_tag($base_tag . '->' . $methode); // This tag does create output $this->compiler->has_output = true; // compile code diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php index 32bdbdce2..f0755f062 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php @@ -13,22 +13,29 @@ * Smarty Internal Plugin Compile Object Function Class */ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array(); + public $optional_attributes = array('_any'); + /** * Compiles code for the execution of function plugin * * @param array $args array with attributes from parser + * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @param string $tag name of 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) + public function compile($args, $compiler, $parameter, $tag, $methode) { $this->compiler = $compiler; - $this->required_attributes = array(); - $this->optional_attributes = array('_any'); // check and get attributes - $_attr = $this->_get_attributes($args); + $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->tag_nocache = true; + } + unset($_attr['nocache']); $_assign = null; if (isset($_attr['assign'])) { $_assign = $_attr['assign']; @@ -45,7 +52,7 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl)"; + $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params},\$_smarty_tpl)"; } else { $_params = implode(",", $_attr); $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params})"; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_print_expression.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_print_expression.php index 850917d4b..3843428f4 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_print_expression.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_print_expression.php @@ -13,54 +13,62 @@ * Smarty Internal Plugin Compile Print Expression Class */ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase { + // attribute definitions + public $optional_attributes = array('assign'); + public $option_flags = array('nocache', 'nofilter'); + /** * Compiles code for gererting output from any expression * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - $this->required_attributes = array('value'); - $this->optional_attributes = array('assign', 'nocache', 'filter', 'nofilter', 'modifierlist'); // check and get attributes - $_attr = $this->_get_attributes($args); - - if (isset($_attr['nocache'])) { - if ($_attr['nocache'] == 'true') { - $this->compiler->tag_nocache = true; - } - } - - if (!isset($_attr['filter'])) { - $_attr['filter'] = 'null'; + $_attr = $this->_get_attributes($args); + // nocache option + if ($_attr['nocache'] === true) { + $this->compiler->tag_nocache = true; } - if (isset($_attr['nofilter'])) { - if ($_attr['nofilter'] == 'true') { - $_attr['filter'] = 'false'; - } + // filter handling + if ($_attr['nofilter'] === true) { + $_filter = 'false'; + } else { + $_filter = 'true'; } - + // compiled output + // compiled output if (isset($_attr['assign'])) { // assign output to variable - $output = 'assign(' . $_attr['assign'] . ',' . $_attr['value'] . ');?>'; + $output = "assign({$_attr['assign']},{$parameter['value']});?>"; } else { // display value - if (isset($this->compiler->smarty->registered_filters['variable'])) { - $output = 'Smarty_Internal_Filter_Handler::runFilter(\'variable\', ' . $_attr['value'] . ',$_smarty_tpl->smarty, $_smarty_tpl, ' . $_attr['filter'] . ')'; + if (!$_attr['nofilter'] && isset($this->compiler->smarty->registered_filters['variable'])) { + $output = "Smarty_Internal_Filter_Handler::runFilter('variable', {$parameter['value']},\$_smarty_tpl->smarty, \$_smarty_tpl, {$_filter})"; } else { - $output = $_attr['value']; + $output = $parameter['value']; } - if (!isset($_attr['nofilter']) && isset($this->compiler->smarty->default_modifiers)) { - $output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $this->compiler->smarty->default_modifiers, 'value' => $output)); + if (!$_attr['nofilter'] && !empty($this->compiler->smarty->default_modifiers)) { + $modifierlist = array(); + foreach ($this->compiler->smarty->default_modifiers as $key => $single_default_modifier) { + preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); + for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) { + if ($mod_array[0][$i] != ':') { + $modifierlist[$key][] = $mod_array[0][$i]; + } + } + } + $output = $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $modifierlist, 'value' => $output)); } - if (isset($_attr['modifierlist'])) { - $output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $_attr['modifierlist'], 'value' => $output)); + if (!empty($parameter['modifierlist'])) { + $output = $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output)); } - $this->compiler->has_output = true; - $output = ''; + $this->compiler->has_output = true; + $output = ""; } return $output; } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php index 39ad5903e..8f55a97c5 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php @@ -13,23 +13,29 @@ * Smarty Internal Plugin Compile Registered Block Class */ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase { + // attribute definitions + public $optional_attributes = array('_any'); + /** * Compiles code for the execution of a block function * * @param array $args array with attributes from parser - * @param string $tag name of block function * @param object $compiler compiler object + * @param array $parameter array with compilation parameter + * @param string $tag name of block function * @return string compiled code */ - public function compile($args, $compiler, $tag) + public function compile($args, $compiler, $parameter, $tag) { $this->compiler = $compiler; if (strlen($tag) < 6 || substr($tag,-5) != 'close') { // opening tag of block plugin - $this->required_attributes = array(); - $this->optional_attributes = array('_any'); - // check and get attributes - $_attr = $this->_get_attributes($args); + // check and get attributes + $_attr = $this->_get_attributes($args); + if ($_attr['nocache']) { + $this->compiler->tag_nocache = true; + } + unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -43,15 +49,15 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C $this->_open_tag($tag, array($_params, $this->compiler->nocache)); // maybe nocache because of nocache variables or nocache plugin - $this->compiler->nocache = !$compiler->smarty->registered_plugins['block'][$tag][1] | $this->compiler->nocache | $this->compiler->tag_nocache; - $function = $compiler->smarty->registered_plugins['block'][$tag][0]; + $this->compiler->nocache = !$compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag][1] | $this->compiler->nocache | $this->compiler->tag_nocache; + $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag][0]; // compile code if (!is_array($function)) { - $output = "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 = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else if (is_object($function[0])) { - $output = "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();?>"; + $output = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else { - $output = "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();?>"; + $output = "smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } } else { // must endblock be nocache? @@ -63,14 +69,14 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C list($_params, $this->compiler->nocache) = $this->_close_tag($base_tag); // This tag does create output $this->compiler->has_output = true; - $function = $compiler->smarty->registered_plugins['block'][$base_tag][0]; + $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; // compile code if (!is_array($function)) { - $output = "smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; + $output = "smarty->_tag_stack);?>"; } else if (is_object($function[0])) { - $output = "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);?>"; + $output = "smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; } else { - $output = "smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>"; + $output = "smarty->_tag_stack);?>"; } } return $output."\n"; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_function.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_function.php index 3590beac4..ca4e68dba 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_function.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_function.php @@ -13,26 +13,31 @@ * Smarty Internal Plugin Compile Registered Function Class */ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase { + // attribute definitions + public $optional_attributes = array('_any'); + /** * Compiles code for the execution of a registered function * * @param array $args array with attributes from parser - * @param string $tag name of function * @param object $compiler compiler object + * @param array $parameter array with compilation parameter + * @param string $tag name of function * @return string compiled code */ - public function compile($args, $compiler, $tag) + public function compile($args, $compiler, $parameter, $tag) { $this->compiler = $compiler; // This tag does create output $this->compiler->has_output = true; - - $this->required_attributes = array(); - $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); + if ($_attr['nocache']) { + $this->compiler->tag_nocache = true; + } + unset($_attr['nocache']); // not cachable? - $this->compiler->tag_nocache = !$compiler->smarty->registered_plugins['function'][$tag][1]; + $this->compiler->tag_nocache = $this->compiler->tag_nocache || !$compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag][1]; // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -43,14 +48,14 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; - $function = $compiler->smarty->registered_plugins['function'][$tag][0]; + $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag][0]; // compile code if (!is_array($function)) { - $output = "smarty,\$_smarty_tpl);?>\n"; + $output = "\n"; } else if (is_object($function[0])) { - $output = "smarty->registered_plugins['function']['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n"; + $output = "smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n"; } else { - $output = "smarty,\$_smarty_tpl);?>\n"; + $output = "\n"; } return $output; } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_special_variable.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_special_variable.php index ec628b05b..76527f4ee 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_special_variable.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_special_variable.php @@ -20,22 +20,22 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C * @param object $compiler compiler object * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { - $_index = explode(',', str_replace(array(']['), array(','), substr($args, 1, strlen($args)-2))); + $_index = preg_split("/\]\[/",substr($parameter, 1, strlen($parameter)-2)); $compiled_ref = ' '; $variable = trim($_index[0], "'"); switch ($variable) { case 'foreach': - return "\$_smarty_tpl->getVariable('smarty')->value$args"; + return "\$_smarty_tpl->getVariable('smarty')->value$parameter"; case 'section': - return "\$_smarty_tpl->getVariable('smarty')->value$args"; + return "\$_smarty_tpl->getVariable('smarty')->value$parameter"; case 'capture': - return "\$_smarty_tpl->smarty->_smarty_vars$args"; + return "\$_smarty_tpl->smarty->_smarty_vars$parameter"; case 'now': return 'time()'; case 'cookies': - if ($compiler->smarty->security && !$compiler->smarty->security_policy->allow_super_globals) { + if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { $compiler->trigger_template_error("(secure mode) super globals not permitted"); break; } @@ -48,7 +48,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C case 'server': case 'session': case 'request': - if ($compiler->smarty->security && !$compiler->smarty->security_policy->allow_super_globals) { + if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals) { $compiler->trigger_template_error("(secure mode) super globals not permitted"); break; } @@ -78,7 +78,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C return "'$_version'"; case 'const': - if ($compiler->smarty->security && !$compiler->smarty->security_policy->allow_constants) { + if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants) { $compiler->trigger_template_error("(secure mode) constants not permitted"); break; } @@ -104,7 +104,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C $compiled_ref = $compiled_ref . "[$_ind]"; } } - return $compiled_ref; + return "(isset($compiled_ref)? $compiled_ref : null)"; } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_rdelim.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_rdelim.php index e8f3eb24f..6436bfd16 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_rdelim.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_rdelim.php @@ -25,6 +25,9 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase { { $this->compiler = $compiler; $_attr = $this->_get_attributes($args); + if ($_attr['nocache'] === true) { + $this->compiler->trigger_template_error('nocache option not allowed', $this->compiler->lex->taglineno); + } // this tag does not return compiled code $this->compiler->has_code = true; return $this->compiler->smarty->right_delimiter; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_section.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_section.php index 50c827226..0768b026e 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_section.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_section.php @@ -13,6 +13,11 @@ * Smarty Internal Plugin Compile Section Class */ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase { + // attribute definitions + public $required_attributes = array('name', 'loop'); + public $shorttag_order = array('name', 'loop'); + public $optional_attributes = array('start', 'step', 'max', 'show'); + /** * Compiles code for the {section} tag * @@ -23,8 +28,6 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase { public function compile($args, $compiler) { $this->compiler = $compiler; - $this->required_attributes = array('name', 'loop'); - $this->optional_attributes = array('start', 'step', 'max', 'show'); // check and get attributes $_attr = $this->_get_attributes($args); diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_while.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_while.php index 1a0d8dd42..ecad07148 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compile_while.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compile_while.php @@ -18,12 +18,12 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase { * * @param array $args array with attributes from parser * @param object $compiler compiler object + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compile($args, $compiler) + public function compile($args, $compiler, $parameter) { $this->compiler = $compiler; - $this->required_attributes = array('if condition'); // check and get attributes $_attr = $this->_get_attributes($args); $this->_open_tag('while', $this->compiler->nocache); @@ -32,12 +32,12 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase { $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; - if (is_array($args['if condition'])) { - $_output = " 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 ?>"; + if (is_array($parameter['if condition'])) { + $_output = " tpl_vars[".$parameter['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable;\n"; + $_output .= " while (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value'].") {\n ?>"; return $_output; } else { - return ''; + return ''; } } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_compilebase.php b/gosa-core/include/smarty/sysplugins/smarty_internal_compilebase.php index 9485eacd7..5b3260a29 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_compilebase.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_compilebase.php @@ -1,80 +1,126 @@ required_attributes = array(); - $this->optional_attributes = array(); - } + * This class does extend all internal compile plugins + */ +// abstract class Smarty_Internal_CompileBase implements TagCompilerInterface +class Smarty_Internal_CompileBase { + public $required_attributes = array(); + public $optional_attributes = array(); + public $shorttag_order = array(); + public $option_flags = array('nocache'); + /** - * This function checks if the attributes passed are valid - * - * The attributes passed for the tag to compile are checked against the list of required and - * optional attributes. Required attributes must be present. Optional attributes are check against - * against the corresponding list. The keyword '_any' specifies that any attribute will be accepted - * as valid - * - * @todo More generallized handling of the nocache attributes in compile plugins - * @param array $args attributes applied to the tag - * @return array attributes for further processing - */ - function _get_attributes ($args) - { + * This function checks if the attributes passed are valid + * + * The attributes passed for the tag to compile are checked against the list of required and + * optional attributes. Required attributes must be present. Optional attributes are check against + * against the corresponding list. The keyword '_any' specifies that any attribute will be accepted + * as valid + * + * @param array $attributes attributes applied to the tag + * @return array of mapped attributes for further processing + */ + function _get_attributes ($attributes) + { + $_indexed_attr = array(); + // loop over attributes + foreach ($attributes as $key => $mixed) { + // shorthand ? + if (!is_array($mixed)) { + // option flag ? + if (in_array(trim($mixed, '\'"'), $this->option_flags)) { + $_indexed_attr[trim($mixed, '\'"')] = true; + // shorthand attribute ? + } else if (isset($this->shorttag_order[$key])) { + $_indexed_attr[$this->shorttag_order[$key]] = $mixed; + } else { + // too many shorthands + $this->compiler->trigger_template_error('too many shorthand attributes', $this->compiler->lex->taglineno); + } + // named attribute + } else { + $kv = each($mixed); + // option flag? + if (in_array($kv['key'], $this->option_flags)) { + if (is_bool($kv['value'])) { + $_indexed_attr[$kv['key']] = $kv['value']; + } else if (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) { + if (trim($kv['value']) == 'true') { + $_indexed_attr[$kv['key']] = true; + } else { + $_indexed_attr[$kv['key']] = false; + } + } else if (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) { + if ($kv['value'] == 1) { + $_indexed_attr[$kv['key']] = true; + } else { + $_indexed_attr[$kv['key']] = false; + } + } else { + $this->compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", $this->compiler->lex->taglineno); + } + // must be named attribute + } else { + $_indexed_attr = array_merge($_indexed_attr, $mixed); + } + } + } // check if all required attributes present foreach ($this->required_attributes as $attr) { - if (!array_key_exists($attr, $args)) { - $this->compiler->trigger_template_error("missing \"" . $attr . "\" attribute"); + if (!array_key_exists($attr, $_indexed_attr)) { + $this->compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $this->compiler->lex->taglineno); } } // check for unallowed attributes if ($this->optional_attributes != array('_any')) { - $tmp_array = array_merge($this->required_attributes, $this->optional_attributes); - foreach ($args as $key => $dummy) { - if (!in_array($key, $tmp_array) && $key !== 0) { - $this->compiler->trigger_template_error("unexpected \"" . $key . "\" attribute"); + $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags); + foreach ($_indexed_attr as $key => $dummy) { + if (!in_array($key, $tmp_array) && $key !== 0) { + $this->compiler->trigger_template_error("unexpected \"" . $key . "\" attribute", $this->compiler->lex->taglineno); } } } + // default 'false' for all option flags not set + foreach ($this->option_flags as $flag) { + if (!isset($_indexed_attr[$flag])) { + $_indexed_attr[$flag] = false; + } + } - return $args; + return $_indexed_attr; } /** - * Push opening tag name on stack - * - * Optionally additional data can be saved on stack - * - * @param string $open_tag the opening tag's name - * @param anytype $data optional data which shall be saved on stack - */ + * Push opening tag name on stack + * + * Optionally additional data can be saved on stack + * + * @param string $open_tag the opening tag's name + * @param anytype $data optional data which shall be saved on stack + */ function _open_tag($open_tag, $data = null) { array_push($this->compiler->_tag_stack, array($open_tag, $data)); } /** - * Pop closing tag - * - * Raise an error if this stack-top doesn't match with expected opening tags - * - * @param array $ |string $expected_tag the expected opening tag names - * @return anytype the opening tag's name or saved data - */ + * Pop closing tag + * + * Raise an error if this stack-top doesn't match with expected opening tags + * + * @param array $ |string $expected_tag the expected opening tag names + * @return anytype the opening tag's name or saved data + */ function _close_tag($expected_tag) { if (count($this->compiler->_tag_stack) > 0) { @@ -95,7 +141,7 @@ abstract class Smarty_Internal_CompileBase return; } // wrong nesting of tags - $this->compiler->trigger_template_error("unexpected closing tag",$this->compiler->lex->taglineno); + $this->compiler->trigger_template_error("unexpected closing tag", $this->compiler->lex->taglineno); return; } } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_config.php b/gosa-core/include/smarty/sysplugins/smarty_internal_config.php index 5097398ce..06ae70ba9 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_config.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_config.php @@ -12,9 +12,9 @@ class Smarty_Internal_Config { static $config_objects = array(); - public function __construct($config_resource, $smarty, $template = null) + public function __construct($config_resource, $smarty, $data = null) { - $this->template = $template; + $this->data = $data; $this->smarty = $smarty; $this->config_resource = $config_resource; $this->config_resource_type = null; @@ -135,6 +135,7 @@ class Smarty_Internal_Config { } public function buildCompiledFilepath() { + $_compile_id = isset($this->smarty->compile_id) ? preg_replace('![^\w\|]+!', '_', $this->smarty->compile_id) : null; $_flag = (int)$this->smarty->config_read_hidden + (int)$this->smarty->config_booleanize * 2 + (int)$this->smarty->config_overwrite * 4; $_filepath = sha1($this->config_resource_name . $_flag); @@ -145,6 +146,10 @@ class Smarty_Internal_Config { . substr($_filepath, 4, 2) . DS . $_filepath; } + $_compile_dir_sep = $this->smarty->use_sub_dirs ? DS : '^'; + if (isset($_compile_id)) { + $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; + } $_compile_dir = $this->smarty->compile_dir; if (substr($_compile_dir, -1) != DS) { $_compile_dir .= DS; @@ -233,39 +238,51 @@ class Smarty_Internal_Config { * @param mixed $sections array of section names, single section or null * @param object $scope global,parent or local */ - public function loadConfigVars ($sections = null, $scope) + public function loadConfigVars ($sections = null, $scope = 'local') { - if (isset($this->template)) { - $this->template->properties['file_dependency'][sha1($this->getConfigFilepath())] = array($this->getConfigFilepath(), $this->getTimestamp()); - } else { - $this->smarty->properties['file_dependency'][sha1($this->getConfigFilepath())] = array($this->getConfigFilepath(), $this->getTimestamp()); + if ($this->data instanceof Smarty_Internal_Template) { + $this->data->properties['file_dependency'][sha1($this->getConfigFilepath())] = array($this->getConfigFilepath(), $this->getTimestamp(),'file'); } if ($this->mustCompile()) { $this->compileConfigSource(); - } + } + // pointer to scope + if ($scope == 'local') { + $scope_ptr = $this->data; + } elseif ($scope == 'parent') { + if (isset($this->data->parent)) { + $scope_ptr = $this->data->parent; + } else { + $scope_ptr = $this->data; + } + } elseif ($scope == 'root' || $scope == 'global') { + $scope_ptr = $this->data; + while (isset($scope_ptr->parent)) { + $scope_ptr = $scope_ptr->parent; + } + } $_config_vars = array(); - include($this->getCompiledFilepath ()); + include($this->getCompiledFilepath ()); // copy global config vars foreach ($_config_vars['vars'] as $variable => $value) { - if ($this->smarty->config_overwrite || !isset($scope->config_vars[$variable])) { - $scope->config_vars[$variable] = $value; + if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { + $scope_ptr->config_vars[$variable] = $value; } else { - $scope->config_vars[$variable] = array_merge((array)$scope->config_vars[$variable], (array)$value); + $scope_ptr->config_vars[$variable] = array_merge((array)$scope_ptr->config_vars[$variable], (array)$value); } } // scan sections foreach ($_config_vars['sections'] as $this_section => $dummy) { if ($sections == null || in_array($this_section, (array)$sections)) { foreach ($_config_vars['sections'][$this_section]['vars'] as $variable => $value) { - if ($this->smarty->config_overwrite || !isset($scope->config_vars[$variable])) { - $scope->config_vars[$variable] = $value; + if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { + $scope_ptr->config_vars[$variable] = $value; } else { - $scope->config_vars[$variable] = array_merge((array)$scope->config_vars[$variable], (array)$value); + $scope_ptr->config_vars[$variable] = array_merge((array)$scope_ptr->config_vars[$variable], (array)$value); } } } - } + } } } - ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_config_file_compiler.php b/gosa-core/include/smarty/sysplugins/smarty_internal_config_file_compiler.php index 469dab276..e9dfbdb02 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_config_file_compiler.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_config_file_compiler.php @@ -23,7 +23,7 @@ class Smarty_Internal_Config_File_Compiler { $this->smarty = $smarty; // get required plugins $this->smarty->loadPlugin('Smarty_Internal_Configfilelexer'); - $this->smarty->loadPlugin('Smarty_Internal_Configfileparser'); + $this->smarty->loadPlugin('Smarty_Internal_Configfileparser'); $this->config_data['sections'] = array(); $this->config_data['vars'] = array(); } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_data.php b/gosa-core/include/smarty/sysplugins/smarty_internal_data.php index 95a03c774..5b8d48abc 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_data.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_data.php @@ -25,17 +25,17 @@ class Smarty_Internal_Data { * @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) + public function assign($tpl_var, $value = null, $nocache = false) { if (is_array($tpl_var)) { foreach ($tpl_var as $_key => $_val) { if ($_key != '') { - $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache, $scope); + $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache); } } } else { if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache, $scope); + $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache); } } } @@ -49,7 +49,7 @@ class Smarty_Internal_Data { public function assignGlobal($varname, $value = null, $nocache = false) { if ($varname != '') { - $this->smarty->global_tpl_vars[$varname] = new Smarty_variable($value, $nocache); + Smarty::$global_tpl_vars[$varname] = new Smarty_variable($value, $nocache); } } /** @@ -58,27 +58,26 @@ class Smarty_Internal_Data { * @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) + public function assignByRef($tpl_var, &$value, $nocache = false) { if ($tpl_var != '') { - $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache, $scope); + $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache); $this->tpl_vars[$tpl_var]->value = &$value; } } + /** * 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) + public function assign_by_ref($tpl_var, &$value) { - trigger_error("function call 'assign_by_ref' is unknown or deprecated, use 'assignByRef'", E_USER_NOTICE); - $this->assignByRef($tpl_var, $value, $nocache, $scope); + if($this->smarty->deprecation_notices) + trigger_error("function call 'assign_by_ref' is unknown or deprecated, use 'assignByRef'", E_USER_NOTICE); + $this->assignByRef($tpl_var, $value); } /** * appends values to template variables @@ -87,9 +86,8 @@ class Smarty_Internal_Data { * @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) + public function append($tpl_var, $value = null, $merge = false, $nocache = false) { if (is_array($tpl_var)) { // $tpl_var is an array, ignore $value @@ -98,12 +96,9 @@ class Smarty_Internal_Data { if (!isset($this->tpl_vars[$_key])) { $tpl_var_inst = $this->getVariable($_key, null, true, false); if ($tpl_var_inst instanceof Undefined_Smarty_Variable) { - $this->tpl_vars[$_key] = new Smarty_variable(null, $nocache, $scope); + $this->tpl_vars[$_key] = new Smarty_variable(null, $nocache); } else { $this->tpl_vars[$_key] = clone $tpl_var_inst; - if ($scope != SMARTY_LOCAL_SCOPE) { - $this->tpl_vars[$_key]->scope = $scope; - } } } if (!(is_array($this->tpl_vars[$_key]->value) || $this->tpl_vars[$_key]->value instanceof ArrayAccess)) { @@ -123,12 +118,9 @@ class Smarty_Internal_Data { 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(null, $nocache, $scope); + $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache); } 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)) { @@ -170,8 +162,8 @@ 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 @@ -179,7 +171,8 @@ class Smarty_Internal_Data { */ 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); + if($this->smarty->deprecation_notices) + trigger_error("function call 'append_by_ref' is unknown or deprecated, use 'appendByRef'", E_USER_NOTICE); $this->appendByRef($tpl_var, $value, $merge); } /** @@ -212,8 +205,8 @@ class Smarty_Internal_Data { $_ptr = null; } } - if ($search_parents && isset($this->global_tpl_vars)) { - foreach ($this->global_tpl_vars AS $key => $var) { + if ($search_parents && isset(Smarty::$global_tpl_vars)) { + foreach (Smarty::$global_tpl_vars AS $key => $var) { $_result[$key] = $var->value; } } @@ -254,8 +247,8 @@ class Smarty_Internal_Data { public function configLoad($config_file, $sections = null) { // load Config class - $config = new Smarty_Internal_Config($config_file, $this->smarty); - $config->loadConfigVars($sections, $this); + $config = new Smarty_Internal_Config($config_file, $this->smarty, $this); + $config->loadConfigVars($sections); } /** @@ -282,9 +275,9 @@ class Smarty_Internal_Data { $_ptr = null; } } - if (isset($this->smarty->global_tpl_vars[$variable])) { + if (isset(Smarty::$global_tpl_vars[$variable])) { // found it, return it - return $this->smarty->global_tpl_vars[$variable]; + return Smarty::$global_tpl_vars[$variable]; } if ($this->smarty->error_unassigned && $error_enable) { throw new SmartyException('Undefined Smarty variable "' . $variable . '"'); @@ -312,7 +305,7 @@ class Smarty_Internal_Data { if ($this->smarty->error_unassigned) { throw new SmartyException('Undefined config variable "' . $variable . '"'); } else { - return ''; + return null; } } /** @@ -335,7 +328,7 @@ class Smarty_Internal_Data { if ($this->smarty->error_unassigned) { throw new SmartyException('Undefined stream variable "' . $variable . '"'); } else { - return ''; + return null; } } @@ -428,7 +421,7 @@ class Smarty_Variable { * @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) + public function __construct ($value = null, $nocache = false, $scope = Smarty::SCOPE_LOCAL) { $this->value = $value; $this->nocache = $nocache; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_debug.php b/gosa-core/include/smarty/sysplugins/smarty_internal_debug.php index ad1091b5f..d165d7d78 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_debug.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_debug.php @@ -73,21 +73,30 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data { /** * Opens a window for the Smarty Debugging Consol and display the data */ - public static function display_debug($smarty) + public static function display_debug($obj) { // prepare information of assigned variables - $_assigned_vars = $smarty->tpl_vars; + $ptr = $obj; + while (isset($ptr->parent)) { + $ptr = $ptr->parent; + } + if ($obj instanceof Smarty) { + $smarty = $obj; + } else { + $smarty = $obj->smarty; + } + $_assigned_vars = $ptr->tpl_vars; ksort($_assigned_vars); - $_config_vars = $smarty->config_vars; + $_config_vars = $ptr->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 = new Smarty_Internal_Template ($smarty->debug_tpl, $smarty); $_template->caching = false; $_template->force_compile = false; - $_template->security = false; + $_template->disableSecurity(); $_template->cache_id = null; $_template->compile_id = null; $_template->assign('template_data', self::$template_data); diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_filter.php b/gosa-core/include/smarty/sysplugins/smarty_internal_filter.php new file mode 100644 index 000000000..90214ad42 --- /dev/null +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_filter.php @@ -0,0 +1,89 @@ +smarty = $smarty; + } + /** + * Registers a filter function + * + * @param string $type filter type + * @param callback $callback + */ + public function registerFilter($type, $callback) + { + $this->smarty->registered_filters[$type][$this->_get_filter_name($callback)] = $callback; + } + + /** + * Unregisters a filter function + * + * @param string $type filter type + * @param callback $callback + */ + public function unregisterFilter($type, $callback) + { + $name = $this->_get_filter_name($callback); + if(isset($this->smarty->registered_filters[$type][$name])) { + unset($this->smarty->registered_filters[$type][$name]); + } + } + + + /** + * Return internal filter name + * + * @param callback $function_name + */ + public function _get_filter_name($function_name) + { + if (is_array($function_name)) { + $_class_name = (is_object($function_name[0]) ? + get_class($function_name[0]) : $function_name[0]); + return $_class_name . '_' . $function_name[1]; + } else { + return $function_name; + } + } + + + /** + * load a filter of specified type and name + * + * @param string $type filter type + * @param string $name filter name + * @return bool + */ + function loadFilter($type, $name) + { + $_plugin = "smarty_{$type}filter_{$name}"; + $_filter_name = $_plugin; + if ($this->smarty->loadPlugin($_plugin)) { + if (class_exists($_plugin, false)) { + $_plugin = array($_plugin, 'execute'); + } + if (is_callable($_plugin)) { + return $this->smarty->registered_filters[$type][$_filter_name] = $_plugin; + } + } + throw new SmartyException("{$type}filter \"{$name}\" not callable"); + return false; + } + + +} +?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php b/gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php index ae11a7ce6..76e97816e 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_nocache_insert.php @@ -34,9 +34,9 @@ class Smarty_Internal_Nocache_Insert { } // call insert if (isset($_assign)) { - $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl->smarty,\$_smarty_tpl), true);?>"; + $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>"; } else { - $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl->smarty,\$_smarty_tpl);?>"; + $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>"; } $_tpl = $_template; while ($_tpl->parent instanceof Smarty_Internal_Template) { diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_register.php b/gosa-core/include/smarty/sysplugins/smarty_internal_register.php index a1e3acd0f..aee615840 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_register.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_register.php @@ -1,122 +1,84 @@ - * @author Uwe Tews * @package Smarty - * @subpackage PluginsInternal - * @version 3-SVN$Rev: 3286 $ + * @author Uwe Tews */ +/** + * Class for register/unregister methods + */ class Smarty_Internal_Register { - protected $smarty; function __construct($smarty) { $this->smarty = $smarty; } - /** - * Registers block function to be used in templates + * Registers plugin to be used in templates * - * @param string $block_tag name of template block - * @param string $block_impl PHP function to register + * @param string $type plugin type + * @param string $tag name of template tag + * @param callback $callback PHP callback 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 SmartyException("Plugin tag \"{$block_tag}\" already registered"); - } elseif (!is_callable($block_impl)) { - throw new SmartyException("Plugin \"{$block_tag}\" not callable"); - } else { - $this->smarty->registered_plugins['block'][$block_tag] = - array($block_impl, $cacheable, $cache_attr); - } - } + + public function registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = null) + { + if (isset($this->smarty->registered_plugins[$type][$tag])) { + throw new Exception("Plugin tag \"{$tag}\" already registered"); + } elseif (!is_callable($callback)) { + throw new Exception("Plugin \"{$tag}\" not callable"); + } else { + $this->smarty->registered_plugins[$type][$tag] = array($callback, (bool) $cacheable); + if (isset($cache_attr)&&in_array($type, array(Smarty::PLUGIN_BLOCK, Smarty::PLUGIN_FUNCTION))) { + $this->smarty->registered_plugins[$type][$tag][] = (array) $cache_attr; + } + } + } /** - * Registers compiler function + * Unregister Plugin * - * @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 + * @param string $type of plugin + * @param string $tag name of plugin */ - function compilerFunction($compiler_tag, $compiler_impl, $cacheable = true) + function unregisterPlugin($type, $tag) { - if (isset($this->smarty->registered_plugins['compiler'][$compiler_tag])) { - throw new SmartyException("Plugin tag \"{$compiler_tag}\" already registered"); - } elseif (!is_callable($compiler_impl)) { - throw new SmartyException("Plugin \"{$compiler_tag}\" not callable"); - } else { - $this->smarty->registered_plugins['compiler'][$compiler_tag] = - array($compiler_impl, $cacheable); + if (isset($this->smarty->registered_plugins[$type][$tag])) { + unset($this->smarty->registered_plugins[$type][$tag]); } } - + /** - * Registers custom function to be used in templates + * Registers a resource to fetch a template * - * @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 + * @param string $type name of resource type + * @param array $callback array of callbacks to handle resource */ - function templateFunction($function_tag, $function_impl, $cacheable = true, $cache_attr = array()) - { - if (isset($this->smarty->registered_plugins['function'][$function_tag])) { - throw new SmartyException("Plugin tag \"{$function_tag}\" already registered"); - } elseif (!is_callable($function_impl)) { - throw new SmartyException("Plugin \"{$function_tag}\" not callable"); - } else { - $this->smarty->registered_plugins['function'][$function_tag] = - array($function_impl, $cacheable, $cache_attr); - } - } + public function registerResource($type, $callback) + { + $this->smarty->registered_resources[$type] = array($callback, false); + } /** - * Registers modifier to be used in templates + * Unregisters a resource * - * @param string $modifier_name name of template modifier - * @param string $modifier_impl name of PHP function to register + * @param string $type name of resource type */ - function modifier($modifier_name, $modifier_impl) + function unregisterResource($type) { - if (isset($this->smarty->registered_plugins['modifier'][$modifier_name])) { - throw new SmartyException("Plugin \"{$modifier_name}\" already registered"); - } elseif (!is_callable($modifier_impl)) { - throw new SmartyException("Plugin \"{$modifier_name}\" not callable"); - } else { - $this->smarty->registered_plugins['modifier'][$modifier_name] = - array($modifier_impl); + if (isset($this->smarty->registered_resources[$type])) { + unset($this->smarty->registered_resources[$type]); } } + /** * Registers object to be used in templates * @@ -126,7 +88,7 @@ class Smarty_Internal_Register { * @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()) + function registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) { // test if allowed methodes callable if (!empty($allowed)) { @@ -155,7 +117,7 @@ class Smarty_Internal_Register { * @param string $class name of template class * @param string $class_impl the referenced PHP class to register */ - function templateClass($class_name, $class_impl) + function registerClass($class_name, $class_impl) { // test if exists if (!class_exists($class_impl)) { @@ -165,100 +127,33 @@ class Smarty_Internal_Register { $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 - */ - 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 - */ - 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 - */ - function resource($resource_type, $function_names) - { - if (count($function_names) == 4) { - $this->smarty->_plugins['resource'][$resource_type] = - array($function_names, false); - } 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); - } else { - 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 - */ - 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 + * @param $callback mixed string | array $plugin class/methode name */ - function defaultPluginHandler($function_name) + function registerDefaultPluginHandler($callback) { - if (is_callable($function_name)) { - $this->smarty->default_plugin_handler_func = $function_name; + if (is_callable($callback)) { + $this->smarty->default_plugin_handler_func = $callback; } else { - throw new SmartyException("Default plugin handler '$function_name' not callable"); + throw new SmartyException("Default plugin handler '$callback' not callable"); } } /** * Registers a default template handler * - * @param $function_name mixed string | array class/method name + * @param $callback mixed string | array class/method name */ - function defaultTemplateHandler($function_name) + function registerDefaultTemplateHandler($callback) { - if (is_callable($function_name)) { - $this->smarty->default_template_handler_func = $function_name; + if (is_callable($callback)) { + $this->smarty->default_template_handler_func = $callback; } else { - throw new SmartyException("Default template handler '$function_name' not callable"); + throw new SmartyException("Default template handler '$callback' 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 index 2eb208571..c4a75f585 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_eval.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_eval.php @@ -86,5 +86,4 @@ class Smarty_Internal_Resource_Eval { return false; } } - ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php index c263f8ac3..74dc0f9b6 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php @@ -58,9 +58,9 @@ class Smarty_Internal_Resource_Extends { foreach ($_files as $_file) { $_filepath = $_template->buildTemplateFilepath ($_file); if ($_filepath !== false) { - if ($_template->security) { - $_template->smarty->security_handler->isTrustedResourceDir($_filepath); - } + if (is_object($_template->smarty->security_policy)) { + $_template->smarty->security_policy->isTrustedResourceDir($_filepath); + } } $sha1String .= $_filepath; $this->allFilepaths[$_file] = $_filepath; @@ -98,16 +98,16 @@ class Smarty_Internal_Resource_Extends { } // read template file if ($_filepath != $_first) { - $_template->properties['file_dependency'][sha1($_filepath)] = array($_filepath, filemtime($_filepath)); + $_template->properties['file_dependency'][sha1($_filepath)] = array($_filepath, filemtime($_filepath),'file'); } $_template->template_filepath = $_filepath; $_content = file_get_contents($_filepath); 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'"); + preg_match_all("!({$this->_ldl}/block{$this->_rdl})!", $_content, $_close)) { + $this->smarty->triggerError("unmatched {block} {/block} pairs in file '$_filepath'"); } - preg_match_all("!{$this->_ldl}block\s(.+?){$this->_rdl}|{$this->_ldl}/block(.*?){$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE); + preg_match_all("!{$this->_ldl}block\s(.+?){$this->_rdl}|{$this->_ldl}/block{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE); $_result_count = count($_result[0]); $_start = 0; while ($_start < $_result_count) { @@ -123,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, $_template); + Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $_template, $_filepath); $_start = $_start + $_end + 1; } } else { @@ -133,48 +133,6 @@ class Smarty_Internal_Resource_Extends { } } - /** - * 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} - if (strpos($block_content, $this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter) !== false) { - if (isset($_template->block_data[$_name])) { - $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter, - $_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($_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 { - $_template->block_data[$_name]['source'] = $block_content; - } - if (preg_match('/(.?)(append)(.*)/', $block_tag, $_match) != 0) { - $_template->block_data[$_name]['mode'] = 'append'; - } elseif (preg_match('/(.?)(prepend)(.*)/', $block_tag, $_match) != 0) { - $_template->block_data[$_name]['mode'] = 'prepend'; - } else { - $_template->block_data[$_name]['mode'] = 'replace'; - } - $_template->block_data[$_name]['file'] = $_filepath; - } - } /** * Get filepath to compiled template diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_file.php b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_file.php index abdd6c5a4..79decc599 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_file.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_file.php @@ -51,8 +51,8 @@ class Smarty_Internal_Resource_File { $_filepath = $_template->buildTemplateFilepath (); if ($_filepath !== false) { - if ($_template->security) { - $_template->smarty->security_handler->isTrustedResourceDir($_filepath); + if (is_object($_template->smarty->security_policy)) { + $_template->smarty->security_policy->isTrustedResourceDir($_filepath); } } $_template->templateUid = sha1($_filepath); @@ -79,8 +79,8 @@ class Smarty_Internal_Resource_File { public function getTemplateSource($_template) { // read template file - if (file_exists($_template->getTemplateFilepath())) { - $_template->template_source = file_get_contents($_template->getTemplateFilepath()); + if (file_exists($_tfp = $_template->getTemplateFilepath())) { + $_template->template_source = file_get_contents($_tfp); return true; } else { return false; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_php.php b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_php.php index d0d285f65..16c77446e 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_php.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_php.php @@ -50,8 +50,8 @@ class Smarty_Internal_Resource_PHP { { $_filepath = $_template->buildTemplateFilepath (); - if ($_template->security) { - $_template->smarty->security_handler->isTrustedResourceDir($_filepath); + if (is_object($_template->smarty->security_policy)) { + $_template->smarty->security_policy->isTrustedResourceDir($_filepath); } $_template->templateUid = sha1($_filepath); return $_filepath; @@ -76,8 +76,8 @@ class Smarty_Internal_Resource_PHP { */ public function getTemplateSource($_template) { - if (file_exists($_template->getTemplateFilepath())) { - $_template->template_source = file_get_contents($_template->getTemplateFilepath()); + if (file_exists($_tfp = $_template->getTemplateFilepath())) { + $_template->template_source = file_get_contents($_tfp); return true; } else { return false; diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_registered.php b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_registered.php index d120d1790..467da11a8 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_resource_registered.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_resource_registered.php @@ -14,9 +14,16 @@ * Smarty Internal Plugin Resource Registered */ class Smarty_Internal_Resource_Registered { - public function __construct($smarty) + public function __construct($template, $resource_type = null) { - $this->smarty = $smarty; + $this->smarty = $template->smarty; + if (isset($resource_type)) { + $template->smarty->registerResource($resource_type, + array("smarty_resource_{$resource_type}_source", + "smarty_resource_{$resource_type}_timestamp", + "smarty_resource_{$resource_type}_secure", + "smarty_resource_{$resource_type}_trusted")); + } } // classes used for compiling Smarty templates from file resource public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; @@ -62,7 +69,7 @@ class Smarty_Internal_Resource_Registered { { // return timestamp $time_stamp = false; - call_user_func_array($this->smarty->_plugins['resource'][$_template->resource_type][0][1], + call_user_func_array($this->smarty->registered_resources[$_template->resource_type][0][1], array($_template->resource_name, &$time_stamp, $this->smarty)); return is_numeric($time_stamp) ? (int)$time_stamp : $time_stamp; } @@ -77,7 +84,7 @@ class Smarty_Internal_Resource_Registered { { // return timestamp $time_stamp = false; - call_user_func_array($this->smarty->_plugins['resource'][$_resource_type][0][1], + call_user_func_array($this->smarty->registered_resources[$_resource_type][0][1], array($_resource_name, &$time_stamp, $this->smarty)); return is_numeric($time_stamp) ? (int)$time_stamp : $time_stamp; } @@ -91,7 +98,7 @@ class Smarty_Internal_Resource_Registered { public function getTemplateSource($_template) { // return template string - return call_user_func_array($this->smarty->_plugins['resource'][$_template->resource_type][0][0], + return call_user_func_array($this->smarty->registered_resources[$_template->resource_type][0][0], array($_template->resource_name, &$_template->template_source, $this->smarty)); } diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_template.php b/gosa-core/include/smarty/sysplugins/smarty_internal_template.php index e8a4e7f80..6b81ed0ce 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_template.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_template.php @@ -24,13 +24,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { public $cache_lifetime = null; public $cacher_class = null; public $caching_type = null; - public $force_compile = null; public $forceNocache = false; // Template resource public $template_resource = null; public $resource_type = null; public $resource_name = null; - public $resource_object = null; +// public $resource_object = null; private $isExisting = null; public $templateUid = ''; // Template source @@ -45,13 +44,14 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { public $suppressHeader = false; public $suppressFileDependency = false; public $has_nocache_code = false; + public $write_compiled_code = true; // Rendered content public $rendered_content = null; // Cache file private $cached_filepath = null; public $cached_timestamp = null; private $isCached = null; - private $cache_resource_object = null; +// private $cache_resource_object = null; private $cacheFileChecked = false; // template variables public $tpl_vars = array(); @@ -65,7 +65,6 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { 'function' => array()); // required plugins public $required_plugins = array('compiled' => array(), 'nocache' => array()); - public $security = false; public $saved_modifier = null; public $smarty = null; // blocks for template inheritance @@ -87,27 +86,16 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // Smarty parameter $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; - $this->force_compile = $this->smarty->force_compile; $this->caching = $_caching === null ? $this->smarty->caching : $_caching; - if ($this->caching === true) $this->caching = SMARTY_CACHING_LIFETIME_CURRENT; + if ($this->caching === true) $this->caching = Smarty::CACHING_LIFETIME_CURRENT; $this->cache_lifetime = $_cache_lifetime === null ?$this->smarty->cache_lifetime : $_cache_lifetime; - $this->force_cache = $this->smarty->force_cache; - $this->security = $this->smarty->security; $this->parent = $_parent; // dummy local smarty variable $this->tpl_vars['smarty'] = new Smarty_Variable; // Template resource $this->template_resource = $template_resource; - // parse resource name - if (!$this->parseResourceName ($template_resource, $this->resource_type, $this->resource_name, $this->resource_object)) { - 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) { + if ($this->parent instanceof Smarty_Internal_Template) { $this->block_data = $this->parent->block_data; } @@ -187,7 +175,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { { $this->isExisting(true); if ($this->mustCompile === null) { - $this->mustCompile = ($this->resource_object->usesCompiler && ($this->force_compile || $this->resource_object->isEvaluated || $this->getCompiledTimestamp () === false || + $this->mustCompile = ($this->resource_object->usesCompiler && ($this->smarty->force_compile || $this->resource_object->isEvaluated || $this->getCompiledTimestamp () === false || // ($this->smarty->compile_check && $this->getCompiledTimestamp () !== $this->getTemplateTimestamp ()))); ($this->smarty->compile_check && $this->getCompiledTimestamp () < $this->getTemplateTimestamp ()))); } @@ -249,7 +237,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { { if (!$this->resource_object->isEvaluated) { $this->properties['file_dependency'] = array(); - $this->properties['file_dependency'][$this->templateUid] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp()); + $this->properties['file_dependency'][$this->templateUid] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp(),$this->resource_type); } if ($this->smarty->debugging) { Smarty_Internal_Debug::start_compile($this); @@ -278,7 +266,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { throw $e; } // compiling succeded - if (!$this->resource_object->isEvaluated) { + if (!$this->resource_object->isEvaluated && $this->write_compiled_code) { // write compiled template Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty); } @@ -296,11 +284,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { */ public function getCachedFilepath () { - if (!isset($this->cache_resource_object)) { - $this->cache_resource_object = $this->smarty->cache->loadResource(); - } return $this->cached_filepath === null ? - $this->cached_filepath = ($this->resource_object->isEvaluated || !($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedFilepath($this) : + $this->cached_filepath = ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedFilepath($this) : $this->cached_filepath; } @@ -313,11 +298,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { */ public function getCachedTimestamp () { - if (!isset($this->cache_resource_object)) { - $this->cache_resource_object = $this->smarty->cache->loadResource(); - } return $this->cached_timestamp === null ? - $this->cached_timestamp = ($this->resource_object->isEvaluated || !($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedTimestamp($this) : + $this->cached_timestamp = ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedTimestamp($this) : $this->cached_timestamp; } @@ -328,11 +310,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { */ public function getCachedContent () { - if (!isset($this->cache_resource_object)) { - $this->cache_resource_object = $this->smarty->cache->loadResource(); - } return $this->rendered_content === null ? - $this->rendered_content = ($this->resource_object->isEvaluated || !($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedContents($this) : + $this->rendered_content = ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedContents($this) : $this->rendered_content; } @@ -341,7 +320,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { */ public function writeCachedContent ($content) { - if ($this->resource_object->isEvaluated || !($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) { + if ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) { // don't write cache file return false; } @@ -356,19 +335,26 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { * * @return boolean true if cache is valid */ - public function isCached ($no_render = true) + public function isCached ($template = null, $cache_id = null, $compile_id = null, $parent = null) { + if ($template === null) { + $no_render = true; + } elseif ($template === false) { + $no_render = false; + } else { + if ($parent === null) { + $parent = $this; + } + $this->smarty->isCached ($template, $cache_id, $compile_id, $parent); + } if ($this->isCached === null) { $this->isCached = false; - if (($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED) && !$this->resource_object->isEvaluated) { - if (!isset($this->cache_resource_object)) { - $this->cache_resource_object = $this->smarty->cache->loadResource(); - } + if (($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED) && !$this->resource_object->isEvaluated) { $cachedTimestamp = $this->getCachedTimestamp(); - if ($cachedTimestamp === false || $this->force_compile || $this->force_cache) { + if ($cachedTimestamp === false || $this->smarty->force_compile || $this->smarty->force_cache) { return $this->isCached; } - if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED || ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT && (time() <= ($cachedTimestamp + $this->cache_lifetime) || $this->cache_lifetime < 0))) { + if ($this->caching === Smarty::CACHING_LIFETIME_SAVED || ($this->caching == Smarty::CACHING_LIFETIME_CURRENT && (time() <= ($cachedTimestamp + $this->cache_lifetime) || $this->cache_lifetime < 0))) { if ($this->smarty->debugging) { Smarty_Internal_Debug::start_cache($this); } @@ -381,7 +367,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->isCached; } $this->cacheFileChecked = true; - if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED && $this->properties['cache_lifetime'] >= 0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) { + 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; @@ -390,10 +376,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $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') { + If ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'extends' || $_file_to_check[2] == 'php') { $mtime = filemtime($_file_to_check[0]); } else { + $this->getResourceTypeName($_file_to_check[0], $resource_type, $resource_name); $resource_handler = $this->loadTemplateResourceHandler($resource_type); $mtime = $resource_handler->getTemplateTimestampTypeName($resource_type, $resource_name); } @@ -441,10 +427,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $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') { + If ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'extends' || $_file_to_check[2] == 'php') { $mtime = filemtime($_file_to_check[0]); } else { + $this->getResourceTypeName($_file_to_check[0], $resource_type, $resource_name); $resource_handler = $this->loadTemplateResourceHandler($resource_type); $mtime = $resource_handler->getTemplateTimestampTypeName($resource_type, $resource_name); } @@ -477,9 +463,9 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } $this->rendered_content = ob_get_clean(); if (!$this->resource_object->isEvaluated && empty($this->properties['file_dependency'][$this->templateUid])) { - $this->properties['file_dependency'][$this->templateUid] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp()); + $this->properties['file_dependency'][$this->templateUid] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp(),$this->resource_type); } - if ($this->parent instanceof Smarty_Template or $this->parent instanceof Smarty_Internal_Template) { + if ($this->parent instanceof Smarty_Internal_Template) { $this->parent->properties['file_dependency'] = array_merge($this->parent->properties['file_dependency'], $this->properties['file_dependency']); foreach($this->required_plugins as $code => $tmp1) { foreach($tmp1 as $name => $tmp) { @@ -493,7 +479,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { Smarty_Internal_Debug::end_render($this); } // write to cache when nessecary - if (!$this->resource_object->isEvaluated && ($this->caching == SMARTY_CACHING_LIFETIME_SAVED || $this->caching == SMARTY_CACHING_LIFETIME_CURRENT)) { + if (!$this->resource_object->isEvaluated && ($this->caching == Smarty::CACHING_LIFETIME_SAVED || $this->caching == Smarty::CACHING_LIFETIME_CURRENT)) { if ($this->smarty->debugging) { Smarty_Internal_Debug::start_cache($this); } @@ -591,7 +577,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // cache template object under a unique ID // do not cache eval resources if ($resource_type != 'eval') { - $this->smarty->template_objects[crc32($this->template_resource . $this->cache_id . $this->compile_id)] = $this; + $this->smarty->template_objects[sha1($this->template_resource . $this->cache_id . $this->compile_id)] = $this; } return true; } @@ -634,25 +620,25 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { /** * Update Smarty variables in other scopes */ - public function updateParentVariables ($scope = SMARTY_LOCAL_SCOPE) + public function updateParentVariables ($scope = Smarty::SCOPE_LOCAL) { $has_root = false; foreach ($this->tpl_vars as $_key => $_variable) { $_variable_scope = $this->tpl_vars[$_key]->scope; - if ($scope == SMARTY_LOCAL_SCOPE && $_variable_scope == SMARTY_LOCAL_SCOPE) { + if ($scope == Smarty::SCOPE_LOCAL && $_variable_scope == Smarty::SCOPE_LOCAL) { continue; } - if (isset($this->parent) && ($scope == SMARTY_PARENT_SCOPE || $_variable_scope == SMARTY_PARENT_SCOPE)) { + if (isset($this->parent) && ($scope == Smarty::SCOPE_PARENT || $_variable_scope == Smarty::SCOPE_PARENT)) { if (isset($this->parent->tpl_vars[$_key])) { // variable is already defined in parent, copy value $this->parent->tpl_vars[$_key]->value = $this->tpl_vars[$_key]->value; } else { // create variable in parent $this->parent->tpl_vars[$_key] = clone $_variable; - $this->parent->tpl_vars[$_key]->scope = SMARTY_LOCAL_SCOPE; + $this->parent->tpl_vars[$_key]->scope = Smarty::SCOPE_LOCAL; } } - if ($scope == SMARTY_ROOT_SCOPE || $_variable_scope == SMARTY_ROOT_SCOPE) { + if ($scope == Smarty::SCOPE_ROOT || $_variable_scope == Smarty::SCOPE_ROOT) { if ($this->parent == null) { continue; } @@ -670,18 +656,18 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } else { // create variable in root $root_ptr->tpl_vars[$_key] = clone $_variable; - $root_ptr->tpl_vars[$_key]->scope = SMARTY_LOCAL_SCOPE; + $root_ptr->tpl_vars[$_key]->scope = Smarty::SCOPE_LOCAL; } } - if ($scope == SMARTY_GLOBAL_SCOPE || $_variable_scope == SMARTY_GLOBAL_SCOPE) { - if (isset($this->smarty->global_tpl_vars[$_key])) { + if ($scope == Smarty::SCOPE_GLOBAL || $_variable_scope == Smarty::SCOPE_GLOBAL) { + if (isset(Smarty::$global_tpl_vars[$_key])) { // variable is already defined in root, copy value - $this->smarty->global_tpl_vars[$_key]->value = $this->tpl_vars[$_key]->value; + Smarty::$global_tpl_vars[$_key]->value = $this->tpl_vars[$_key]->value; } else { - // create variable in root - $this->smarty->global_tpl_vars[$_key] = clone $_variable; + // create global variable + Smarty::$global_tpl_vars[$_key] = clone $_variable; } - $this->smarty->global_tpl_vars[$_key]->scope = SMARTY_LOCAL_SCOPE; + Smarty::$global_tpl_vars[$_key]->scope = Smarty::SCOPE_LOCAL; } } } @@ -706,9 +692,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // 1 char is not resource type, but part of filepath $resource_type = 'file'; $resource_name = $template_resource; - } else { - $resource_type = $resource_type; - } + } } } @@ -721,11 +705,11 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { protected function loadTemplateResourceHandler ($resource_type) { // try registered resource - if (isset($this->smarty->_plugins['resource'][$resource_type])) { - return new Smarty_Internal_Resource_Registered($this->smarty); + if (isset($this->smarty->registered_resources[$resource_type])) { + return new Smarty_Internal_Resource_Registered($this); } else { // try sysplugins dir - if (in_array($resource_type, array('file', 'string', 'extends', 'php', 'registered', 'stream', 'eval'))) { + if (in_array($resource_type, array('file', 'string', 'extends', 'php', 'stream', 'eval'))) { $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($resource_type); return new $_resource_class($this->smarty); } else { @@ -735,20 +719,15 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if (class_exists($_resource_class, false)) { return new $_resource_class($this->smarty); } else { - $this->smarty->register->resource($resource_type, - array("smarty_resource_{$resource_type}_source", - "smarty_resource_{$resource_type}_timestamp", - "smarty_resource_{$resource_type}_secure", - "smarty_resource_{$resource_type}_trusted")); - return new Smarty_Internal_Resource_Registered($this->smarty); + return new Smarty_Internal_Resource_Registered($this, $resource_type); } } else { // try streams $_known_stream = stream_get_wrappers(); if (in_array($resource_type, $_known_stream)) { // is known stream - if ($this->smarty->security) { - $this->smarty->security_handler->isTrustedStream($resource_type); + if (is_object($this->smarty->security_policy)) { + $this->smarty->security_policy->isTrustedStream($resource_type); } return new Smarty_Internal_Resource_Stream($this->smarty); } else { @@ -830,9 +809,9 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } /** - * creates a loacal Smarty variable for array assihgments + * creates a loacal Smarty variable for array assignments */ - public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = SMARTY_LOCAL_SCOPE) + public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = Smarty::SCOPE_LOCAL) { if (!isset($this->tpl_vars[$tpl_var])) { $tpl_var_inst = $this->getVariable($tpl_var, null, true, false); @@ -840,7 +819,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $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) { + if ($scope != Smarty::SCOPE_LOCAL) { $this->tpl_vars[$tpl_var]->scope = $scope; } } @@ -849,40 +828,113 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { settype($this->tpl_vars[$tpl_var]->value, 'array'); } } + /** - * wrapper for display + * [util function] counts an array, arrayaccess/traversable or PDOStatement object + * @param mixed $value + * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements */ - public function display () + public function _count($value) { - return $this->smarty->display($this); - } + if (is_array($value) === true || $value instanceof Countable) { + return count($value); + } elseif ($value instanceof ArrayAccess) { + if ($value->offsetExists(0)) { + return 1; + } + } elseif ($value instanceof Iterator) { + $value->rewind(); + if ($value->valid()) { + return 1; + } + } elseif ($value instanceof PDOStatement) { + return $value->rowCount(); + } elseif ($value instanceof Traversable) { + return iterator_count($value); + } elseif ($value instanceof ArrayAccess) { + if ($value->offsetExists(0)) { + return 1; + } + } elseif (is_object($value)) { + return count($value); + } + return 0; + } /** * wrapper for fetch */ - public function fetch () + public function fetch ($template = null, $cache_id = null, $compile_id = null, $parent = null, $display = false) + { + if ($template == null) { + return $this->smarty->fetch($this); + } else { + if (!isset($parent)) { + $parent = $this; + } + return $this->smarty->fetch($template, $cache_id, $compile_id, $parent, $display); + } + + } + + /** + * wrapper for display + */ + public function display ($template = null, $cache_id = null, $compile_id = null, $parent = null) { - return $this->smarty->fetch($this); + if ($template == null) { + return $this->smarty->display($this); + } else { + if (!isset($parent)) { + $parent = $this; + } + return $this->smarty->display($template, $cache_id, $compile_id, $parent); + } + } /** - * lazy loads (valid) property objects - * - * @param string $name property name + * set Smarty property in template context + * @param string $property_name property name + * @param mixed $value value */ - public function __get($name) + public function __set($property_name, $value) { - if (in_array($name, array('register', 'unregister', 'utility', 'cache'))) { - $class = "Smarty_Internal_" . ucfirst($name); - $this->$name = new $class($this); - return $this->$name; - } else if ($name == '_version') { - // Smarty 2 BC - $this->_version = self::SMARTY_VERSION; - return $this->_version; - } - return null; - } + if ($property_name == 'resource_object' || $property_name == 'cache_resource_object') { + $this->$property_name = $value; + } elseif (property_exists($this->smarty, $property_name)) { + $this->smarty->$property_name = $value; + } else { + throw new SmartyException("invalid template property '$property_name'."); + } + } + + /** + * get Smarty property in template context + * @param string $property_name property name + */ + public function __get($property_name) + { + if ($property_name == 'resource_object') { + // load template resource + $this->resource_object = null; + if (!$this->parseResourceName ($this->template_resource, $this->resource_type, $this->resource_name, $this->resource_object)) { + throw new SmartyException ("Unable to parse resource name \"{$template_resource}\""); + } + return $this->resource_object; + } + if ($property_name == 'cache_resource_object') { + // load cache resource + $this->cache_resource_object = $this->loadCacheResource(); + return $this->cache_resource_object; + } + if (property_exists($this->smarty, $property_name)) { + return $this->smarty->$property_name; + } else { + throw new SmartyException("template property '$property_name' does not exist."); + } + } + /** * Takes unknown class methods and lazy loads sysplugin files for them @@ -905,22 +957,16 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4); // 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 SmartyException("property '$property_name' does not exist."); - return false; - } - if ($first3 == 'get') - return $this->$property_name; - else - return $this->$property_name = $args[0]; - } + if (property_exists($this, $property_name)) { + if ($first3 == 'get') + return $this->$property_name; + else + return $this->$property_name = $args[0]; + } + } + // pass call to Smarty object + return call_user_func_array(array($this->smarty,$name),$args); } -} - -/** - * wrapper for template class - */ -class Smarty_Template extends Smarty_Internal_Template { -} +} ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_templatecompilerbase.php b/gosa-core/include/smarty/sysplugins/smarty_internal_templatecompilerbase.php index 0a0218c2c..cca157845 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_templatecompilerbase.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_templatecompilerbase.php @@ -23,6 +23,8 @@ class Smarty_Internal_TemplateCompilerBase { public $_tag_stack = array(); // current template public $template = null; + // optional log of tag/attributes + public $used_tags = array(); /** * Initialize compiler @@ -45,9 +47,6 @@ class Smarty_Internal_TemplateCompilerBase { } else { $this->nocache_hash = $template->properties['nocache_hash']; } - /* here is where the compiling takes place. Smarty - tags in the templates are replaces with PHP code, - then written to compiled files. */ // flag for nochache sections $this->nocache = false; $this->tag_nocache = false; @@ -102,20 +101,30 @@ class Smarty_Internal_TemplateCompilerBase { * * @param string $tag tag name * @param array $args array with tag attributes + * @param array $parameter array with compilation parameter * @return string compiled code */ - public function compileTag($tag, $args) + public function compileTag($tag, $args, $parameter = array()) { // $args contains the attributes parsed and compiled by the lexer/parser // assume that tag does compile into code, but creates no HTML output $this->has_code = true; - $this->has_output = false; + $this->has_output = false; + // log tag/attributes + if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) { + $this->used_tags[] = array($tag,$args); + } + // check nocache option flag + if (in_array("'nocache'",$args) || in_array(array('nocache'=>'true'),$args) + || in_array(array('nocache'=>'"true"'),$args) || in_array(array('nocache'=>"'true'"),$args)) { + $this->tag_nocache = true; + } // compile the smarty tag (required compile classes to compile the tag are autoloaded) - if (($_output = $this->callTagCompiler($tag, $args)) === false) { + if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { if (isset($this->smarty->template_functions[$tag])) { // template defined by {template} tag - $args['name'] = "'" . $tag . "'"; - $_output = $this->callTagCompiler('call', $args); + $args['_attr']['name'] = "'" . $tag . "'"; + $_output = $this->callTagCompiler('call', $args, $parameter); } } if ($_output !== false) { @@ -133,47 +142,58 @@ class Smarty_Internal_TemplateCompilerBase { // tag did not produce compiled code return ''; } else { + // map_named attributes + if (isset($args['_attr'])) { + foreach ($args['_attr'] as $key => $attribute) { + if (is_array($attribute)) { + $args = array_merge($args, $attribute); + } + } + } // not an internal compiler tag if (strlen($tag) < 6 || substr($tag, -5) != 'close') { // check if tag is a registered object - if (isset($this->smarty->registered_objects[$tag]) && isset($args['object_methode'])) { - $methode = $args['object_methode']; - unset ($args['object_methode']); + if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_methode'])) { + $methode = $parameter['object_methode']; if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) && (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) { - return $this->callTagCompiler('private_object_function', $args, $tag, $methode); + return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $methode); } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $tag, $methode); + return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode); } else { return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno); } } // check if tag is registered - foreach (array('compiler', 'function', 'block') as $type) { + foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $type) { if (isset($this->smarty->registered_plugins[$type][$tag])) { // if compiler function plugin call it now - if ($type == 'compiler') { + if ($type == Smarty::PLUGIN_COMPILER) { + $new_args = array(); + foreach ($args as $mixed) { + $new_args = array_merge($new_args, $mixed); + } if (!$this->smarty->registered_plugins[$type][$tag][1]) { $this->tag_nocache = true; } $function = $this->smarty->registered_plugins[$type][$tag][0]; if (!is_array($function)) { - return $function($args, $this); + return $function($new_args, $this); } else if (is_object($function[0])) { - return $this->smarty->registered_plugins[$type][$tag][0][0]->$function[1]($args, $this); + return $this->smarty->registered_plugins[$type][$tag][0][0]->$function[1]($new_args, $this); } else { - return call_user_func_array($this->smarty->registered_plugins[$type][$tag][0], array($args, $this)); + return call_user_func_array($this->smarty->registered_plugins[$type][$tag][0], array($new_args, $this)); } } // compile registered function or block function - if ($type == 'function' || $type == 'block') { - return $this->callTagCompiler('private_registered_' . $type, $args, $tag); + if ($type == Smarty::PLUGIN_FUNCTION || $type == Smarty::PLUGIN_BLOCK) { + return $this->callTagCompiler('private_registered_' . $type, $args, $parameter, $tag); } } } // check plugins from plugins folder foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($plugin_type == 'compiler' && $this->smarty->loadPlugin('smarty_compiler_' . $tag)) { + if ($plugin_type == Smarty::PLUGIN_BLOCK && $this->smarty->loadPlugin('smarty_compiler_' . $tag)) { $plugin = 'smarty_compiler_' . $tag; if (is_callable($plugin)) { return $plugin($args, $this->smarty); @@ -187,7 +207,7 @@ class Smarty_Internal_TemplateCompilerBase { throw new SmartyException("Plugin \"{$tag}\" not callable"); } else { if ($function = $this->getPlugin($tag, $plugin_type)) { - return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $tag, $function); + return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function); } } } @@ -195,22 +215,21 @@ class Smarty_Internal_TemplateCompilerBase { // compile closing tag of block function $base_tag = substr($tag, 0, -5); // check if closing tag is a registered object - if (isset($this->smarty->registered_objects[$base_tag]) && isset($args['object_methode'])) { - $methode = $args['object_methode']; - unset ($args['object_methode']); + if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_methode'])) { + $methode = $parameter['object_methode']; if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $tag, $methode); + return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode); } else { return $this->trigger_template_error ('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno); } } // registered block tag ? - if (isset($this->smarty->registered_plugins['block'][$base_tag])) { - return $this->callTagCompiler('private_registered_block', $args, $tag); + if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { + return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag); } // block plugin? - if ($function = $this->getPlugin($base_tag, 'block')) { - return $this->callTagCompiler('private_block_plugin', $args, $tag, $function); + if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) { + return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function); } if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { $plugin = 'smarty_compiler_' . $tag; @@ -403,5 +422,6 @@ class Smarty_Internal_TemplateCompilerBase { } throw new SmartyCompilerException($error_text); } -} +} + ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_templatelexer.php b/gosa-core/include/smarty/sysplugins/smarty_internal_templatelexer.php index 50decb9e4..6744e7f67 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_templatelexer.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_templatelexer.php @@ -133,16 +133,16 @@ class Smarty_Internal_Templatelexer { $tokenMap = array ( 1 => 0, - 2 => 1, - 4 => 0, + 2 => 0, + 3 => 1, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, - 11 => 1, - 13 => 0, + 11 => 0, + 12 => 1, 14 => 0, 15 => 0, 16 => 0, @@ -151,13 +151,14 @@ class Smarty_Internal_Templatelexer 19 => 0, 20 => 0, 21 => 0, - 22 => 2, - 25 => 0, + 22 => 0, + 23 => 2, + 26 => 0, ); if ($this->counter >= strlen($this->data)) { return false; // end of input } - $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]+)/"; + $yy_global_pattern = "/^(".$this->ldel."[$]smarty\\.block\\.child".$this->rdel.")|^(\\{\\})|^(".$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)) { @@ -210,14 +211,19 @@ class Smarty_Internal_Templatelexer function yy_r1_1($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_OTHER; + $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILD; } function yy_r1_2($yy_subpatterns) { + $this->token = Smarty_Internal_Templateparser::TP_OTHER; + } + function yy_r1_3($yy_subpatterns) + { + $this->token = Smarty_Internal_Templateparser::TP_COMMENT; } - function yy_r1_4($yy_subpatterns) + function yy_r1_5($yy_subpatterns) { if ($this->strip) { @@ -226,13 +232,13 @@ class Smarty_Internal_Templatelexer $this->token = Smarty_Internal_Templateparser::TP_LINEBREAK; } } - function yy_r1_5($yy_subpatterns) + function yy_r1_6($yy_subpatterns) { $this->strip = true; return false; } - function yy_r1_6($yy_subpatterns) + function yy_r1_7($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -242,13 +248,13 @@ class Smarty_Internal_Templatelexer return false; } } - function yy_r1_7($yy_subpatterns) + function yy_r1_8($yy_subpatterns) { $this->strip = false; return false; } - function yy_r1_8($yy_subpatterns) + function yy_r1_9($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -258,13 +264,13 @@ class Smarty_Internal_Templatelexer return false; } } - function yy_r1_9($yy_subpatterns) + function yy_r1_10($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; $this->yypushstate(self::LITERAL); } - function yy_r1_10($yy_subpatterns) + function yy_r1_11($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -275,7 +281,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_11($yy_subpatterns) + function yy_r1_12($yy_subpatterns) { if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { @@ -286,7 +292,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_13($yy_subpatterns) + function yy_r1_14($yy_subpatterns) { if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { @@ -297,7 +303,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_14($yy_subpatterns) + function yy_r1_15($yy_subpatterns) { if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { @@ -308,7 +314,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_15($yy_subpatterns) + function yy_r1_16($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -319,21 +325,21 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_16($yy_subpatterns) + function yy_r1_17($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r1_17($yy_subpatterns) + function yy_r1_18($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r1_18($yy_subpatterns) + function yy_r1_19($yy_subpatterns) { if (in_array($this->value, Array('value = substr($this->value, 0, 2); } } - function yy_r1_19($yy_subpatterns) + function yy_r1_20($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG; } - function yy_r1_20($yy_subpatterns) + function yy_r1_21($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG; } - function yy_r1_21($yy_subpatterns) + function yy_r1_22($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG; } - function yy_r1_22($yy_subpatterns) + function yy_r1_23($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; } - function yy_r1_25($yy_subpatterns) + function yy_r1_26($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; @@ -421,9 +427,10 @@ class Smarty_Internal_Templatelexer 62 => 0, 63 => 0, 64 => 0, - 65 => 1, - 67 => 1, - 69 => 1, + 65 => 0, + 66 => 1, + 68 => 1, + 70 => 0, 71 => 0, 72 => 0, 73 => 0, @@ -441,12 +448,11 @@ class Smarty_Internal_Templatelexer 85 => 0, 86 => 0, 87 => 0, - 88 => 0, ); 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*\\?\\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*)|^(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)) { @@ -771,104 +777,104 @@ class Smarty_Internal_Templatelexer $this->token = Smarty_Internal_Templateparser::TP_INCDEC; } - function yy_r2_67($yy_subpatterns) + function yy_r2_66($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; } - function yy_r2_69($yy_subpatterns) + function yy_r2_68($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_MATH; } - function yy_r2_71($yy_subpatterns) + function yy_r2_70($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; } - function yy_r2_72($yy_subpatterns) + function yy_r2_71($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; } - function yy_r2_73($yy_subpatterns) + function yy_r2_72($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; } - function yy_r2_74($yy_subpatterns) + function yy_r2_73($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_COLON; } - function yy_r2_75($yy_subpatterns) + function yy_r2_74($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_AT; } - function yy_r2_76($yy_subpatterns) + function yy_r2_75($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_HATCH; } - function yy_r2_77($yy_subpatterns) + function yy_r2_76($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypushstate(self::DOUBLEQUOTEDSTRING); } - function yy_r2_78($yy_subpatterns) + function yy_r2_77($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->yypopstate(); } - function yy_r2_79($yy_subpatterns) + function yy_r2_78($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_VERT; } - function yy_r2_80($yy_subpatterns) + function yy_r2_79($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOT; } - function yy_r2_81($yy_subpatterns) + function yy_r2_80($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_COMMA; } - function yy_r2_82($yy_subpatterns) + function yy_r2_81($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ANDSYM; } - function yy_r2_83($yy_subpatterns) + function yy_r2_82($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_QMARK; } - function yy_r2_84($yy_subpatterns) + function yy_r2_83($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_HEX; } - function yy_r2_85($yy_subpatterns) + function yy_r2_84($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ID; } - function yy_r2_86($yy_subpatterns) + function yy_r2_85($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_INTEGER; } - function yy_r2_87($yy_subpatterns) + function yy_r2_86($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_SPACE; } - function yy_r2_88($yy_subpatterns) + function yy_r2_87($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; @@ -1169,6 +1175,5 @@ class Smarty_Internal_Templatelexer $this->token = Smarty_Internal_Templateparser::TP_OTHER; } - } ?> \ No newline at end of file diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_templateparser.php b/gosa-core/include/smarty/sysplugins/smarty_internal_templateparser.php index 03aa34825..c06df6d1f 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_templateparser.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_templateparser.php @@ -88,6 +88,8 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php { #line 14 "smarty_internal_templateparser.y" + const Err1 = "Security error: Call to private object member not allowed"; + const Err2 = "Security error: Call to dynamic object member not allowed"; // states whether the parse was successful or not public $successful = true; public $retvalue = 0; @@ -101,15 +103,15 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php $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; + if ($this->security = isset($this->smarty->security_policy)) { + $this->php_handling = $this->smarty->security_policy->php_handling; + } else { + $this->php_handling = $this->smarty->php_handling; + } $this->is_xml = false; $this->asp_tags = (ini_get('asp_tags') != '0'); $this->current_buffer = $this->root_buffer = new _smarty_template_buffer($this); @@ -134,7 +136,7 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php } -#line 130 "smarty_internal_templateparser.php" +#line 132 "smarty_internal_templateparser.php" const TP_VERT = 1; const TP_COLON = 2; @@ -166,672 +168,739 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php 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 TP_SMARTYBLOCKCHILD = 31; + const TP_LDELSLASH = 32; + const TP_INTEGER = 33; + const TP_COMMA = 34; + const TP_MATH = 35; + const TP_UNIMATH = 36; + const TP_ANDSYM = 37; + const TP_ISIN = 38; + const TP_ISDIVBY = 39; + const TP_ISNOTDIVBY = 40; + const TP_ISEVEN = 41; + const TP_ISNOTEVEN = 42; + const TP_ISEVENBY = 43; + const TP_ISNOTEVENBY = 44; + const TP_ISODD = 45; + const TP_ISNOTODD = 46; + const TP_ISODDBY = 47; + const TP_ISNOTODDBY = 48; + const TP_INSTANCEOF = 49; + const TP_OPENP = 50; + const TP_CLOSEP = 51; + const TP_QMARK = 52; + const TP_NOT = 53; + const TP_TYPECAST = 54; + const TP_HEX = 55; + const TP_DOT = 56; + const TP_SINGLEQUOTESTRING = 57; + const TP_DOUBLECOLON = 58; + const TP_AT = 59; + const TP_HATCH = 60; + const TP_OPENB = 61; + const TP_CLOSEB = 62; + const TP_EQUALS = 63; + const TP_NOTEQUALS = 64; + const TP_GREATERTHAN = 65; + const TP_LESSTHAN = 66; + const TP_GREATEREQUAL = 67; + const TP_LESSEQUAL = 68; + const TP_IDENTITY = 69; + const TP_NONEIDENTITY = 70; + const TP_MOD = 71; + const TP_LAND = 72; + const TP_LOR = 73; + const TP_LXOR = 74; + const TP_QUOTE = 75; + const TP_BACKTICK = 76; + const TP_DOLLARID = 77; + const YY_NO_ACTION = 573; + const YY_ACCEPT_ACTION = 572; + const YY_ERROR_ACTION = 571; - const YY_SZ_ACTTAB = 2088; + const YY_SZ_ACTTAB = 2401; 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, + /* 0 */ 191, 304, 303, 306, 305, 307, 302, 301, 297, 296, + /* 10 */ 298, 299, 300, 168, 334, 325, 37, 341, 152, 3, + /* 20 */ 38, 38, 215, 281, 201, 218, 360, 128, 277, 133, + /* 30 */ 33, 243, 270, 209, 50, 44, 49, 43, 13, 9, + /* 40 */ 354, 361, 19, 35, 362, 370, 30, 20, 320, 315, + /* 50 */ 311, 310, 316, 103, 265, 279, 168, 309, 319, 356, + /* 60 */ 191, 38, 371, 372, 373, 369, 368, 364, 363, 365, + /* 70 */ 366, 367, 349, 268, 191, 269, 331, 170, 25, 219, + /* 80 */ 202, 38, 213, 52, 252, 116, 115, 176, 440, 324, + /* 90 */ 17, 14, 284, 348, 440, 38, 359, 352, 3, 330, + /* 100 */ 226, 572, 91, 239, 303, 306, 128, 169, 50, 44, + /* 110 */ 49, 43, 13, 9, 354, 361, 19, 35, 362, 370, + /* 120 */ 30, 20, 3, 272, 7, 146, 437, 204, 102, 38, + /* 130 */ 128, 10, 437, 112, 322, 277, 371, 372, 373, 369, + /* 140 */ 368, 364, 363, 365, 366, 367, 349, 268, 191, 357, + /* 150 */ 331, 179, 238, 142, 202, 275, 213, 61, 18, 116, + /* 160 */ 3, 274, 41, 295, 24, 135, 284, 348, 128, 38, + /* 170 */ 359, 352, 18, 330, 18, 274, 41, 274, 233, 192, + /* 180 */ 232, 38, 50, 44, 49, 43, 13, 9, 354, 361, + /* 190 */ 19, 35, 362, 370, 30, 20, 18, 283, 18, 274, + /* 200 */ 15, 274, 228, 119, 185, 18, 236, 155, 274, 8, + /* 210 */ 371, 372, 373, 369, 368, 364, 363, 365, 366, 367, + /* 220 */ 349, 268, 191, 167, 331, 281, 148, 173, 202, 101, + /* 230 */ 213, 61, 21, 116, 120, 158, 277, 12, 11, 135, + /* 240 */ 284, 348, 228, 38, 359, 352, 159, 330, 39, 230, + /* 250 */ 179, 40, 179, 27, 200, 260, 50, 44, 49, 43, + /* 260 */ 13, 9, 354, 361, 19, 35, 362, 370, 30, 20, + /* 270 */ 3, 144, 48, 442, 100, 185, 339, 312, 128, 442, + /* 280 */ 8, 277, 191, 38, 371, 372, 373, 369, 368, 364, + /* 290 */ 363, 365, 366, 367, 349, 268, 191, 179, 331, 259, + /* 300 */ 94, 147, 202, 38, 213, 61, 48, 116, 229, 18, + /* 310 */ 48, 277, 274, 321, 284, 348, 38, 38, 359, 352, + /* 320 */ 313, 330, 275, 439, 206, 23, 38, 285, 257, 439, + /* 330 */ 50, 44, 49, 43, 13, 9, 354, 361, 19, 35, + /* 340 */ 362, 370, 30, 20, 287, 436, 286, 141, 175, 335, + /* 350 */ 267, 38, 114, 231, 281, 2, 48, 277, 371, 372, + /* 360 */ 373, 369, 368, 364, 363, 365, 366, 367, 349, 268, + /* 370 */ 191, 331, 164, 177, 150, 202, 174, 213, 61, 162, + /* 380 */ 116, 191, 277, 18, 277, 180, 274, 284, 348, 277, + /* 390 */ 38, 359, 352, 275, 330, 96, 436, 271, 210, 38, + /* 400 */ 275, 223, 38, 38, 50, 44, 49, 43, 13, 9, + /* 410 */ 354, 361, 19, 35, 362, 370, 30, 20, 345, 278, + /* 420 */ 151, 327, 220, 18, 38, 38, 274, 38, 166, 335, + /* 430 */ 277, 126, 371, 372, 373, 369, 368, 364, 363, 365, + /* 440 */ 366, 367, 349, 268, 191, 331, 177, 222, 143, 202, + /* 450 */ 131, 197, 68, 121, 116, 224, 203, 276, 277, 178, + /* 460 */ 135, 284, 348, 38, 330, 359, 352, 346, 330, 275, + /* 470 */ 227, 347, 18, 38, 318, 208, 317, 38, 50, 44, + /* 480 */ 49, 43, 13, 9, 354, 361, 19, 35, 362, 370, + /* 490 */ 30, 20, 191, 153, 149, 294, 329, 18, 119, 240, + /* 500 */ 225, 38, 38, 277, 277, 38, 371, 372, 373, 369, + /* 510 */ 368, 364, 363, 365, 366, 367, 349, 268, 326, 177, + /* 520 */ 177, 156, 18, 275, 38, 207, 50, 44, 49, 43, + /* 530 */ 13, 9, 354, 361, 19, 35, 362, 370, 30, 20, + /* 540 */ 99, 280, 247, 248, 336, 266, 323, 38, 6, 38, + /* 550 */ 38, 38, 117, 321, 371, 372, 373, 369, 368, 364, + /* 560 */ 363, 365, 366, 367, 349, 268, 191, 331, 172, 335, + /* 570 */ 353, 202, 256, 213, 74, 160, 116, 130, 38, 48, + /* 580 */ 333, 254, 28, 284, 348, 277, 38, 359, 352, 258, + /* 590 */ 330, 328, 255, 281, 4, 38, 18, 38, 38, 196, + /* 600 */ 50, 44, 49, 43, 13, 9, 354, 361, 19, 35, + /* 610 */ 362, 370, 30, 20, 191, 288, 89, 2, 127, 234, + /* 620 */ 48, 293, 130, 264, 289, 341, 204, 93, 371, 372, + /* 630 */ 373, 369, 368, 364, 363, 365, 366, 367, 349, 268, + /* 640 */ 321, 253, 229, 118, 34, 134, 90, 5, 50, 44, + /* 650 */ 49, 43, 13, 9, 354, 361, 19, 35, 362, 370, + /* 660 */ 30, 20, 338, 157, 165, 161, 314, 286, 135, 16, + /* 670 */ 275, 332, 42, 123, 277, 277, 371, 372, 373, 369, + /* 680 */ 368, 364, 363, 365, 366, 367, 349, 268, 191, 331, + /* 690 */ 263, 122, 95, 202, 108, 213, 72, 214, 116, 242, + /* 700 */ 136, 108, 245, 106, 321, 284, 348, 321, 132, 359, + /* 710 */ 352, 171, 330, 321, 321, 273, 321, 177, 191, 104, + /* 720 */ 275, 29, 50, 44, 49, 43, 13, 9, 354, 361, + /* 730 */ 19, 35, 362, 370, 30, 20, 105, 308, 318, 318, + /* 740 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 321, + /* 750 */ 371, 372, 373, 369, 368, 364, 363, 365, 366, 367, + /* 760 */ 349, 268, 191, 331, 318, 318, 318, 202, 318, 213, + /* 770 */ 55, 318, 116, 318, 137, 97, 318, 261, 318, 284, + /* 780 */ 348, 318, 318, 359, 352, 318, 330, 321, 321, 318, + /* 790 */ 318, 318, 318, 318, 318, 318, 50, 44, 49, 43, + /* 800 */ 13, 9, 354, 361, 19, 35, 362, 370, 30, 20, + /* 810 */ 191, 31, 318, 318, 318, 318, 318, 318, 318, 318, + /* 820 */ 318, 318, 318, 318, 371, 372, 373, 369, 368, 364, + /* 830 */ 363, 365, 366, 367, 349, 268, 318, 318, 318, 318, + /* 840 */ 318, 318, 318, 318, 50, 44, 49, 43, 13, 9, + /* 850 */ 354, 361, 19, 35, 362, 370, 30, 20, 191, 318, + /* 860 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + /* 870 */ 318, 318, 371, 372, 373, 369, 368, 364, 363, 365, + /* 880 */ 366, 367, 349, 268, 318, 318, 318, 318, 318, 318, + /* 890 */ 318, 318, 50, 44, 49, 43, 13, 9, 354, 361, + /* 900 */ 19, 35, 362, 370, 30, 20, 191, 318, 221, 318, + /* 910 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + /* 920 */ 371, 372, 373, 369, 368, 364, 363, 365, 366, 367, + /* 930 */ 349, 268, 318, 318, 217, 318, 318, 318, 318, 318, + /* 940 */ 50, 44, 49, 43, 13, 9, 354, 361, 19, 35, + /* 950 */ 362, 370, 30, 20, 191, 318, 318, 318, 318, 318, + /* 960 */ 318, 318, 318, 318, 318, 318, 318, 318, 371, 372, + /* 970 */ 373, 369, 368, 364, 363, 365, 366, 367, 349, 268, + /* 980 */ 318, 318, 318, 318, 318, 318, 318, 318, 50, 44, + /* 990 */ 49, 43, 13, 9, 354, 361, 19, 35, 362, 370, + /* 1000 */ 30, 20, 191, 318, 318, 318, 318, 318, 318, 318, + /* 1010 */ 318, 318, 318, 318, 318, 246, 371, 372, 373, 369, + /* 1020 */ 368, 364, 363, 365, 366, 367, 349, 268, 318, 318, + /* 1030 */ 318, 318, 318, 318, 318, 318, 50, 44, 49, 43, + /* 1040 */ 13, 9, 354, 361, 19, 35, 362, 370, 30, 20, + /* 1050 */ 191, 318, 318, 318, 318, 318, 318, 318, 318, 318, + /* 1060 */ 318, 318, 318, 318, 371, 372, 373, 369, 368, 364, + /* 1070 */ 363, 365, 366, 367, 349, 268, 318, 337, 318, 318, + /* 1080 */ 318, 318, 318, 318, 50, 44, 49, 43, 13, 9, + /* 1090 */ 354, 361, 19, 35, 362, 370, 30, 20, 318, 318, + /* 1100 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + /* 1110 */ 318, 318, 371, 372, 373, 369, 368, 364, 363, 365, + /* 1120 */ 366, 367, 349, 268, 50, 44, 49, 43, 13, 9, + /* 1130 */ 354, 361, 19, 35, 362, 370, 30, 20, 318, 318, + /* 1140 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + /* 1150 */ 318, 318, 371, 372, 373, 369, 368, 364, 363, 365, + /* 1160 */ 366, 367, 349, 268, 318, 318, 318, 318, 37, 318, + /* 1170 */ 129, 186, 318, 331, 215, 318, 201, 351, 318, 213, + /* 1180 */ 318, 133, 116, 318, 270, 209, 216, 318, 318, 45, + /* 1190 */ 355, 442, 318, 359, 352, 318, 330, 442, 318, 318, + /* 1200 */ 318, 318, 318, 32, 212, 318, 46, 47, 292, 205, + /* 1210 */ 350, 318, 318, 96, 1, 241, 318, 318, 318, 37, + /* 1220 */ 318, 129, 193, 318, 48, 215, 318, 201, 92, 318, + /* 1230 */ 318, 318, 133, 318, 318, 270, 209, 216, 318, 318, + /* 1240 */ 45, 318, 318, 318, 318, 318, 331, 318, 318, 318, + /* 1250 */ 195, 318, 213, 73, 32, 116, 318, 46, 47, 292, + /* 1260 */ 205, 350, 284, 348, 96, 1, 359, 352, 318, 330, + /* 1270 */ 37, 318, 114, 193, 318, 318, 215, 318, 201, 92, + /* 1280 */ 194, 235, 318, 133, 318, 318, 270, 209, 216, 318, + /* 1290 */ 318, 45, 318, 318, 318, 318, 318, 331, 318, 318, + /* 1300 */ 318, 195, 318, 213, 73, 36, 116, 318, 46, 47, + /* 1310 */ 292, 205, 350, 284, 348, 96, 1, 359, 352, 318, + /* 1320 */ 330, 37, 318, 129, 189, 318, 318, 215, 318, 201, + /* 1330 */ 92, 318, 244, 318, 133, 318, 318, 270, 209, 216, + /* 1340 */ 318, 318, 45, 318, 318, 318, 318, 318, 331, 318, + /* 1350 */ 318, 318, 202, 318, 213, 66, 32, 116, 318, 46, + /* 1360 */ 47, 292, 205, 350, 284, 348, 96, 1, 359, 352, + /* 1370 */ 318, 330, 37, 318, 129, 181, 318, 318, 215, 318, + /* 1380 */ 201, 92, 318, 318, 318, 133, 318, 318, 270, 209, + /* 1390 */ 216, 318, 318, 45, 318, 318, 318, 318, 318, 331, + /* 1400 */ 318, 318, 318, 202, 318, 213, 77, 32, 116, 318, + /* 1410 */ 46, 47, 292, 205, 350, 284, 348, 96, 1, 359, + /* 1420 */ 352, 318, 330, 37, 318, 129, 182, 318, 318, 215, + /* 1430 */ 318, 201, 92, 318, 318, 318, 133, 318, 318, 270, + /* 1440 */ 209, 198, 318, 318, 45, 318, 318, 318, 318, 318, + /* 1450 */ 331, 318, 318, 318, 187, 318, 213, 83, 32, 116, + /* 1460 */ 318, 46, 47, 292, 205, 350, 284, 348, 96, 1, + /* 1470 */ 359, 352, 318, 330, 37, 318, 113, 193, 318, 318, + /* 1480 */ 215, 318, 201, 92, 318, 318, 318, 133, 318, 318, + /* 1490 */ 270, 209, 216, 318, 318, 45, 318, 318, 318, 318, + /* 1500 */ 318, 331, 318, 318, 318, 202, 318, 213, 71, 32, + /* 1510 */ 116, 318, 46, 47, 292, 205, 350, 284, 348, 96, + /* 1520 */ 1, 359, 352, 318, 330, 37, 318, 124, 88, 318, + /* 1530 */ 318, 215, 318, 201, 92, 318, 318, 318, 133, 318, + /* 1540 */ 318, 270, 209, 216, 318, 318, 45, 318, 318, 318, + /* 1550 */ 318, 318, 331, 318, 318, 318, 202, 318, 213, 81, + /* 1560 */ 32, 116, 318, 46, 47, 292, 205, 350, 284, 348, + /* 1570 */ 96, 1, 359, 352, 318, 330, 37, 318, 129, 183, + /* 1580 */ 318, 318, 215, 318, 201, 92, 318, 318, 318, 133, + /* 1590 */ 318, 318, 270, 209, 216, 318, 318, 45, 318, 318, + /* 1600 */ 318, 318, 318, 331, 318, 318, 318, 202, 318, 213, + /* 1610 */ 58, 32, 116, 318, 46, 47, 292, 205, 350, 284, + /* 1620 */ 348, 96, 1, 359, 352, 318, 330, 37, 318, 125, + /* 1630 */ 193, 318, 318, 215, 318, 201, 92, 318, 318, 318, + /* 1640 */ 133, 318, 318, 270, 209, 216, 318, 318, 45, 318, + /* 1650 */ 318, 318, 318, 318, 331, 318, 318, 318, 190, 318, + /* 1660 */ 213, 53, 32, 116, 318, 46, 47, 292, 205, 350, + /* 1670 */ 284, 348, 96, 1, 359, 352, 318, 330, 37, 318, + /* 1680 */ 114, 193, 318, 318, 215, 318, 201, 92, 318, 318, + /* 1690 */ 318, 133, 318, 318, 270, 209, 216, 318, 318, 45, + /* 1700 */ 318, 318, 318, 318, 318, 331, 318, 318, 318, 111, + /* 1710 */ 318, 107, 54, 36, 109, 318, 46, 47, 292, 205, + /* 1720 */ 350, 284, 348, 96, 318, 359, 352, 318, 330, 37, + /* 1730 */ 318, 114, 199, 318, 318, 215, 318, 201, 92, 318, + /* 1740 */ 318, 318, 133, 318, 318, 270, 209, 216, 483, 318, + /* 1750 */ 45, 318, 318, 318, 483, 318, 483, 318, 483, 483, + /* 1760 */ 318, 483, 139, 318, 36, 173, 483, 46, 47, 292, + /* 1770 */ 205, 350, 277, 318, 96, 12, 11, 318, 318, 318, + /* 1780 */ 318, 483, 3, 483, 318, 318, 318, 318, 179, 92, + /* 1790 */ 128, 318, 318, 163, 483, 331, 98, 318, 318, 202, + /* 1800 */ 318, 213, 84, 277, 116, 318, 12, 11, 483, 318, + /* 1810 */ 318, 284, 348, 318, 318, 359, 352, 318, 330, 179, + /* 1820 */ 331, 318, 318, 318, 202, 318, 213, 85, 318, 116, + /* 1830 */ 318, 318, 318, 318, 318, 318, 284, 348, 318, 318, + /* 1840 */ 359, 352, 331, 330, 318, 318, 184, 318, 213, 63, + /* 1850 */ 318, 116, 318, 318, 318, 318, 318, 318, 284, 348, + /* 1860 */ 318, 318, 359, 352, 331, 330, 318, 318, 202, 318, + /* 1870 */ 213, 75, 318, 116, 318, 318, 318, 318, 318, 318, + /* 1880 */ 284, 348, 331, 318, 359, 352, 202, 330, 213, 62, + /* 1890 */ 318, 116, 318, 318, 318, 318, 318, 318, 284, 348, + /* 1900 */ 318, 318, 359, 352, 318, 330, 318, 331, 318, 318, + /* 1910 */ 318, 202, 318, 213, 76, 318, 116, 318, 318, 318, + /* 1920 */ 318, 318, 318, 284, 348, 318, 318, 359, 352, 318, + /* 1930 */ 330, 318, 318, 318, 374, 318, 318, 318, 318, 22, + /* 1940 */ 318, 318, 331, 318, 318, 215, 202, 201, 213, 60, + /* 1950 */ 318, 116, 133, 318, 318, 270, 209, 318, 284, 348, + /* 1960 */ 318, 318, 359, 352, 331, 330, 318, 318, 202, 318, + /* 1970 */ 213, 80, 318, 116, 318, 318, 318, 318, 318, 318, + /* 1980 */ 284, 348, 318, 318, 359, 352, 331, 330, 318, 318, + /* 1990 */ 202, 318, 213, 82, 318, 116, 318, 318, 318, 343, + /* 2000 */ 26, 340, 284, 348, 318, 318, 359, 352, 318, 330, + /* 2010 */ 331, 318, 318, 318, 202, 318, 213, 87, 318, 116, + /* 2020 */ 318, 318, 318, 318, 318, 318, 284, 348, 331, 318, + /* 2030 */ 359, 352, 202, 330, 213, 69, 318, 116, 318, 318, + /* 2040 */ 318, 318, 318, 318, 284, 348, 331, 318, 359, 352, + /* 2050 */ 202, 330, 213, 57, 318, 116, 318, 318, 318, 318, + /* 2060 */ 318, 318, 284, 348, 331, 318, 359, 352, 202, 330, + /* 2070 */ 213, 70, 318, 116, 318, 318, 318, 318, 318, 318, + /* 2080 */ 284, 348, 331, 318, 359, 352, 202, 330, 213, 59, + /* 2090 */ 318, 116, 318, 318, 318, 318, 318, 318, 284, 348, + /* 2100 */ 331, 318, 359, 352, 111, 330, 110, 56, 318, 109, + /* 2110 */ 318, 318, 318, 318, 318, 318, 284, 348, 331, 318, + /* 2120 */ 359, 352, 188, 330, 213, 79, 318, 116, 318, 318, + /* 2130 */ 318, 374, 318, 318, 284, 348, 22, 318, 359, 352, + /* 2140 */ 318, 330, 215, 318, 201, 318, 318, 318, 318, 133, + /* 2150 */ 331, 318, 270, 209, 202, 318, 213, 78, 318, 116, + /* 2160 */ 318, 318, 318, 318, 318, 318, 284, 348, 331, 318, + /* 2170 */ 359, 352, 202, 330, 213, 51, 318, 116, 318, 318, + /* 2180 */ 318, 318, 318, 318, 284, 348, 331, 318, 359, 352, + /* 2190 */ 202, 330, 213, 67, 318, 116, 342, 26, 340, 318, + /* 2200 */ 318, 318, 284, 348, 331, 318, 359, 352, 202, 330, + /* 2210 */ 213, 65, 318, 116, 318, 318, 318, 318, 318, 318, + /* 2220 */ 284, 348, 331, 318, 359, 352, 202, 330, 213, 64, + /* 2230 */ 318, 116, 318, 318, 318, 318, 318, 318, 284, 348, + /* 2240 */ 331, 318, 359, 352, 202, 330, 213, 86, 318, 116, + /* 2250 */ 318, 318, 318, 318, 318, 318, 284, 348, 331, 318, + /* 2260 */ 359, 352, 251, 330, 213, 318, 318, 116, 331, 318, + /* 2270 */ 318, 318, 282, 318, 213, 250, 331, 116, 359, 352, + /* 2280 */ 358, 330, 213, 318, 318, 116, 331, 318, 359, 352, + /* 2290 */ 290, 330, 213, 318, 331, 116, 359, 352, 262, 330, + /* 2300 */ 213, 318, 318, 116, 331, 318, 359, 352, 249, 330, + /* 2310 */ 213, 318, 331, 116, 359, 352, 237, 330, 213, 191, + /* 2320 */ 318, 116, 331, 318, 359, 352, 291, 330, 213, 318, + /* 2330 */ 318, 116, 359, 352, 344, 330, 318, 318, 211, 318, + /* 2340 */ 38, 318, 359, 352, 140, 330, 138, 173, 318, 173, + /* 2350 */ 318, 318, 145, 318, 277, 173, 277, 12, 11, 12, + /* 2360 */ 11, 318, 277, 318, 318, 12, 11, 318, 3, 318, + /* 2370 */ 179, 318, 179, 318, 154, 318, 128, 173, 179, 318, + /* 2380 */ 318, 318, 318, 318, 277, 318, 318, 12, 11, 318, + /* 2390 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + /* 2400 */ 179, ); 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, + /* 0 */ 1, 81, 82, 83, 3, 4, 5, 6, 7, 8, + /* 10 */ 9, 10, 11, 12, 16, 16, 15, 82, 87, 50, + /* 20 */ 22, 22, 21, 25, 23, 56, 18, 58, 97, 28, + /* 30 */ 2, 62, 31, 32, 35, 36, 37, 38, 39, 40, + /* 40 */ 41, 42, 43, 44, 45, 46, 47, 48, 4, 5, + /* 50 */ 6, 7, 8, 118, 119, 16, 12, 13, 14, 18, + /* 60 */ 1, 22, 63, 64, 65, 66, 67, 68, 69, 70, + /* 70 */ 71, 72, 73, 74, 1, 16, 82, 24, 30, 20, + /* 80 */ 86, 22, 88, 89, 51, 91, 92, 34, 16, 16, + /* 90 */ 19, 19, 98, 99, 22, 22, 102, 103, 50, 105, + /* 100 */ 59, 79, 80, 81, 82, 83, 58, 18, 35, 36, + /* 110 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + /* 120 */ 47, 48, 50, 16, 34, 87, 16, 56, 90, 22, + /* 130 */ 58, 15, 22, 17, 18, 97, 63, 64, 65, 66, + /* 140 */ 67, 68, 69, 70, 71, 72, 73, 74, 1, 33, + /* 150 */ 82, 113, 62, 106, 86, 108, 88, 89, 15, 91, + /* 160 */ 50, 18, 19, 16, 19, 20, 98, 99, 58, 22, + /* 170 */ 102, 103, 15, 105, 15, 18, 19, 18, 92, 93, + /* 180 */ 112, 22, 35, 36, 37, 38, 39, 40, 41, 42, + /* 190 */ 43, 44, 45, 46, 47, 48, 15, 18, 15, 18, + /* 200 */ 19, 18, 59, 58, 56, 15, 25, 106, 18, 61, + /* 210 */ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + /* 220 */ 73, 74, 1, 114, 82, 25, 87, 90, 86, 90, + /* 230 */ 88, 89, 15, 91, 17, 18, 97, 100, 101, 20, + /* 240 */ 98, 99, 59, 22, 102, 103, 106, 105, 27, 59, + /* 250 */ 113, 26, 113, 30, 112, 51, 35, 36, 37, 38, + /* 260 */ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + /* 270 */ 50, 87, 49, 16, 90, 56, 76, 16, 58, 22, + /* 280 */ 61, 97, 1, 22, 63, 64, 65, 66, 67, 68, + /* 290 */ 69, 70, 71, 72, 73, 74, 1, 113, 82, 62, + /* 300 */ 95, 87, 86, 22, 88, 89, 49, 91, 2, 15, + /* 310 */ 49, 97, 18, 108, 98, 99, 22, 22, 102, 103, + /* 320 */ 16, 105, 108, 16, 30, 19, 22, 18, 112, 22, + /* 330 */ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + /* 340 */ 45, 46, 47, 48, 18, 16, 107, 87, 109, 110, + /* 350 */ 60, 22, 17, 18, 25, 50, 49, 97, 63, 64, + /* 360 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 370 */ 1, 82, 87, 113, 87, 86, 114, 88, 89, 87, + /* 380 */ 91, 1, 97, 15, 97, 16, 18, 98, 99, 97, + /* 390 */ 22, 102, 103, 108, 105, 60, 16, 16, 30, 22, + /* 400 */ 108, 112, 22, 22, 35, 36, 37, 38, 39, 40, + /* 410 */ 41, 42, 43, 44, 45, 46, 47, 48, 16, 16, + /* 420 */ 87, 16, 18, 15, 22, 22, 18, 22, 109, 110, + /* 430 */ 97, 17, 63, 64, 65, 66, 67, 68, 69, 70, + /* 440 */ 71, 72, 73, 74, 1, 82, 113, 88, 87, 86, + /* 450 */ 91, 88, 89, 17, 91, 17, 18, 16, 97, 16, + /* 460 */ 20, 98, 99, 22, 105, 102, 103, 16, 105, 108, + /* 470 */ 18, 16, 15, 22, 83, 18, 85, 22, 35, 36, + /* 480 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + /* 490 */ 47, 48, 1, 87, 87, 16, 16, 15, 58, 16, + /* 500 */ 18, 22, 22, 97, 97, 22, 63, 64, 65, 66, + /* 510 */ 67, 68, 69, 70, 71, 72, 73, 74, 16, 113, + /* 520 */ 113, 106, 15, 108, 22, 18, 35, 36, 37, 38, + /* 530 */ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + /* 540 */ 95, 16, 51, 16, 16, 16, 16, 22, 22, 22, + /* 550 */ 22, 22, 17, 108, 63, 64, 65, 66, 67, 68, + /* 560 */ 69, 70, 71, 72, 73, 74, 1, 82, 109, 110, + /* 570 */ 104, 86, 16, 88, 89, 87, 91, 111, 22, 49, + /* 580 */ 16, 16, 15, 98, 99, 97, 22, 102, 103, 16, + /* 590 */ 105, 16, 16, 25, 50, 22, 15, 22, 22, 18, + /* 600 */ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + /* 610 */ 45, 46, 47, 48, 1, 104, 18, 50, 17, 60, + /* 620 */ 49, 33, 111, 51, 33, 82, 56, 95, 63, 64, + /* 630 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 640 */ 108, 16, 2, 17, 52, 22, 18, 34, 35, 36, + /* 650 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + /* 660 */ 47, 48, 119, 106, 87, 87, 97, 107, 20, 22, + /* 670 */ 108, 110, 2, 17, 97, 97, 63, 64, 65, 66, + /* 680 */ 67, 68, 69, 70, 71, 72, 73, 74, 1, 82, + /* 690 */ 111, 95, 106, 86, 95, 88, 89, 94, 91, 22, + /* 700 */ 95, 95, 92, 95, 108, 98, 99, 108, 96, 102, + /* 710 */ 103, 24, 105, 108, 108, 115, 108, 113, 1, 84, + /* 720 */ 108, 94, 35, 36, 37, 38, 39, 40, 41, 42, + /* 730 */ 43, 44, 45, 46, 47, 48, 95, 13, 120, 120, + /* 740 */ 120, 120, 120, 120, 120, 120, 120, 120, 120, 108, + /* 750 */ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + /* 760 */ 73, 74, 1, 82, 120, 120, 120, 86, 120, 88, + /* 770 */ 89, 120, 91, 120, 95, 95, 120, 16, 120, 98, + /* 780 */ 99, 120, 120, 102, 103, 120, 105, 108, 108, 120, + /* 790 */ 120, 120, 120, 120, 120, 120, 35, 36, 37, 38, + /* 800 */ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + /* 810 */ 1, 2, 120, 120, 120, 120, 120, 120, 120, 120, + /* 820 */ 120, 120, 120, 120, 63, 64, 65, 66, 67, 68, + /* 830 */ 69, 70, 71, 72, 73, 74, 120, 120, 120, 120, + /* 840 */ 120, 120, 120, 120, 35, 36, 37, 38, 39, 40, + /* 850 */ 41, 42, 43, 44, 45, 46, 47, 48, 1, 120, + /* 860 */ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + /* 870 */ 120, 120, 63, 64, 65, 66, 67, 68, 69, 70, + /* 880 */ 71, 72, 73, 74, 120, 120, 120, 120, 120, 120, + /* 890 */ 120, 120, 35, 36, 37, 38, 39, 40, 41, 42, + /* 900 */ 43, 44, 45, 46, 47, 48, 1, 120, 51, 120, + /* 910 */ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + /* 920 */ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + /* 930 */ 73, 74, 120, 120, 29, 120, 120, 120, 120, 120, + /* 940 */ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + /* 950 */ 45, 46, 47, 48, 1, 120, 120, 120, 120, 120, + /* 960 */ 120, 120, 120, 120, 120, 120, 120, 120, 63, 64, + /* 970 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 980 */ 120, 120, 120, 120, 120, 120, 120, 120, 35, 36, + /* 990 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + /* 1000 */ 47, 48, 1, 120, 120, 120, 120, 120, 120, 120, + /* 1010 */ 120, 120, 120, 120, 120, 62, 63, 64, 65, 66, + /* 1020 */ 67, 68, 69, 70, 71, 72, 73, 74, 120, 120, + /* 1030 */ 120, 120, 120, 120, 120, 120, 35, 36, 37, 38, + /* 1040 */ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + /* 1050 */ 1, 120, 120, 120, 120, 120, 120, 120, 120, 120, + /* 1060 */ 120, 120, 120, 120, 63, 64, 65, 66, 67, 68, + /* 1070 */ 69, 70, 71, 72, 73, 74, 120, 76, 120, 120, + /* 1080 */ 120, 120, 120, 120, 35, 36, 37, 38, 39, 40, + /* 1090 */ 41, 42, 43, 44, 45, 46, 47, 48, 120, 120, + /* 1100 */ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + /* 1110 */ 120, 120, 63, 64, 65, 66, 67, 68, 69, 70, + /* 1120 */ 71, 72, 73, 74, 35, 36, 37, 38, 39, 40, + /* 1130 */ 41, 42, 43, 44, 45, 46, 47, 48, 120, 120, + /* 1140 */ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + /* 1150 */ 120, 120, 63, 64, 65, 66, 67, 68, 69, 70, + /* 1160 */ 71, 72, 73, 74, 120, 120, 120, 120, 15, 120, + /* 1170 */ 17, 18, 120, 82, 21, 120, 23, 86, 120, 88, + /* 1180 */ 120, 28, 91, 120, 31, 32, 33, 120, 120, 36, + /* 1190 */ 99, 16, 120, 102, 103, 120, 105, 22, 120, 120, + /* 1200 */ 120, 120, 120, 50, 29, 120, 53, 54, 55, 56, + /* 1210 */ 57, 120, 120, 60, 61, 62, 120, 120, 120, 15, + /* 1220 */ 120, 17, 18, 120, 49, 21, 120, 23, 75, 120, + /* 1230 */ 120, 120, 28, 120, 120, 31, 32, 33, 120, 120, + /* 1240 */ 36, 120, 120, 120, 120, 120, 82, 120, 120, 120, + /* 1250 */ 86, 120, 88, 89, 50, 91, 120, 53, 54, 55, + /* 1260 */ 56, 57, 98, 99, 60, 61, 102, 103, 120, 105, + /* 1270 */ 15, 120, 17, 18, 120, 120, 21, 120, 23, 75, + /* 1280 */ 116, 117, 120, 28, 120, 120, 31, 32, 33, 120, + /* 1290 */ 120, 36, 120, 120, 120, 120, 120, 82, 120, 120, + /* 1300 */ 120, 86, 120, 88, 89, 50, 91, 120, 53, 54, + /* 1310 */ 55, 56, 57, 98, 99, 60, 61, 102, 103, 120, + /* 1320 */ 105, 15, 120, 17, 18, 120, 120, 21, 120, 23, + /* 1330 */ 75, 120, 117, 120, 28, 120, 120, 31, 32, 33, + /* 1340 */ 120, 120, 36, 120, 120, 120, 120, 120, 82, 120, + /* 1350 */ 120, 120, 86, 120, 88, 89, 50, 91, 120, 53, + /* 1360 */ 54, 55, 56, 57, 98, 99, 60, 61, 102, 103, + /* 1370 */ 120, 105, 15, 120, 17, 18, 120, 120, 21, 120, + /* 1380 */ 23, 75, 120, 120, 120, 28, 120, 120, 31, 32, + /* 1390 */ 33, 120, 120, 36, 120, 120, 120, 120, 120, 82, + /* 1400 */ 120, 120, 120, 86, 120, 88, 89, 50, 91, 120, + /* 1410 */ 53, 54, 55, 56, 57, 98, 99, 60, 61, 102, + /* 1420 */ 103, 120, 105, 15, 120, 17, 18, 120, 120, 21, + /* 1430 */ 120, 23, 75, 120, 120, 120, 28, 120, 120, 31, + /* 1440 */ 32, 33, 120, 120, 36, 120, 120, 120, 120, 120, + /* 1450 */ 82, 120, 120, 120, 86, 120, 88, 89, 50, 91, + /* 1460 */ 120, 53, 54, 55, 56, 57, 98, 99, 60, 61, + /* 1470 */ 102, 103, 120, 105, 15, 120, 17, 18, 120, 120, + /* 1480 */ 21, 120, 23, 75, 120, 120, 120, 28, 120, 120, + /* 1490 */ 31, 32, 33, 120, 120, 36, 120, 120, 120, 120, + /* 1500 */ 120, 82, 120, 120, 120, 86, 120, 88, 89, 50, + /* 1510 */ 91, 120, 53, 54, 55, 56, 57, 98, 99, 60, + /* 1520 */ 61, 102, 103, 120, 105, 15, 120, 17, 18, 120, + /* 1530 */ 120, 21, 120, 23, 75, 120, 120, 120, 28, 120, + /* 1540 */ 120, 31, 32, 33, 120, 120, 36, 120, 120, 120, + /* 1550 */ 120, 120, 82, 120, 120, 120, 86, 120, 88, 89, + /* 1560 */ 50, 91, 120, 53, 54, 55, 56, 57, 98, 99, + /* 1570 */ 60, 61, 102, 103, 120, 105, 15, 120, 17, 18, + /* 1580 */ 120, 120, 21, 120, 23, 75, 120, 120, 120, 28, + /* 1590 */ 120, 120, 31, 32, 33, 120, 120, 36, 120, 120, + /* 1600 */ 120, 120, 120, 82, 120, 120, 120, 86, 120, 88, + /* 1610 */ 89, 50, 91, 120, 53, 54, 55, 56, 57, 98, + /* 1620 */ 99, 60, 61, 102, 103, 120, 105, 15, 120, 17, + /* 1630 */ 18, 120, 120, 21, 120, 23, 75, 120, 120, 120, + /* 1640 */ 28, 120, 120, 31, 32, 33, 120, 120, 36, 120, + /* 1650 */ 120, 120, 120, 120, 82, 120, 120, 120, 86, 120, + /* 1660 */ 88, 89, 50, 91, 120, 53, 54, 55, 56, 57, + /* 1670 */ 98, 99, 60, 61, 102, 103, 120, 105, 15, 120, + /* 1680 */ 17, 18, 120, 120, 21, 120, 23, 75, 120, 120, + /* 1690 */ 120, 28, 120, 120, 31, 32, 33, 120, 120, 36, + /* 1700 */ 120, 120, 120, 120, 120, 82, 120, 120, 120, 86, + /* 1710 */ 120, 88, 89, 50, 91, 120, 53, 54, 55, 56, + /* 1720 */ 57, 98, 99, 60, 120, 102, 103, 120, 105, 15, + /* 1730 */ 120, 17, 18, 120, 120, 21, 120, 23, 75, 120, + /* 1740 */ 120, 120, 28, 120, 120, 31, 32, 33, 16, 120, + /* 1750 */ 36, 120, 120, 120, 22, 120, 24, 120, 26, 27, + /* 1760 */ 120, 29, 87, 120, 50, 90, 34, 53, 54, 55, + /* 1770 */ 56, 57, 97, 120, 60, 100, 101, 120, 120, 120, + /* 1780 */ 120, 49, 50, 51, 120, 120, 120, 120, 113, 75, + /* 1790 */ 58, 120, 120, 87, 62, 82, 90, 120, 120, 86, + /* 1800 */ 120, 88, 89, 97, 91, 120, 100, 101, 76, 120, + /* 1810 */ 120, 98, 99, 120, 120, 102, 103, 120, 105, 113, + /* 1820 */ 82, 120, 120, 120, 86, 120, 88, 89, 120, 91, + /* 1830 */ 120, 120, 120, 120, 120, 120, 98, 99, 120, 120, + /* 1840 */ 102, 103, 82, 105, 120, 120, 86, 120, 88, 89, + /* 1850 */ 120, 91, 120, 120, 120, 120, 120, 120, 98, 99, + /* 1860 */ 120, 120, 102, 103, 82, 105, 120, 120, 86, 120, + /* 1870 */ 88, 89, 120, 91, 120, 120, 120, 120, 120, 120, + /* 1880 */ 98, 99, 82, 120, 102, 103, 86, 105, 88, 89, + /* 1890 */ 120, 91, 120, 120, 120, 120, 120, 120, 98, 99, + /* 1900 */ 120, 120, 102, 103, 120, 105, 120, 82, 120, 120, + /* 1910 */ 120, 86, 120, 88, 89, 120, 91, 120, 120, 120, + /* 1920 */ 120, 120, 120, 98, 99, 120, 120, 102, 103, 120, + /* 1930 */ 105, 120, 120, 120, 10, 120, 120, 120, 120, 15, + /* 1940 */ 120, 120, 82, 120, 120, 21, 86, 23, 88, 89, + /* 1950 */ 120, 91, 28, 120, 120, 31, 32, 120, 98, 99, + /* 1960 */ 120, 120, 102, 103, 82, 105, 120, 120, 86, 120, + /* 1970 */ 88, 89, 120, 91, 120, 120, 120, 120, 120, 120, + /* 1980 */ 98, 99, 120, 120, 102, 103, 82, 105, 120, 120, + /* 1990 */ 86, 120, 88, 89, 120, 91, 120, 120, 120, 75, + /* 2000 */ 76, 77, 98, 99, 120, 120, 102, 103, 120, 105, + /* 2010 */ 82, 120, 120, 120, 86, 120, 88, 89, 120, 91, + /* 2020 */ 120, 120, 120, 120, 120, 120, 98, 99, 82, 120, + /* 2030 */ 102, 103, 86, 105, 88, 89, 120, 91, 120, 120, + /* 2040 */ 120, 120, 120, 120, 98, 99, 82, 120, 102, 103, + /* 2050 */ 86, 105, 88, 89, 120, 91, 120, 120, 120, 120, + /* 2060 */ 120, 120, 98, 99, 82, 120, 102, 103, 86, 105, + /* 2070 */ 88, 89, 120, 91, 120, 120, 120, 120, 120, 120, + /* 2080 */ 98, 99, 82, 120, 102, 103, 86, 105, 88, 89, + /* 2090 */ 120, 91, 120, 120, 120, 120, 120, 120, 98, 99, + /* 2100 */ 82, 120, 102, 103, 86, 105, 88, 89, 120, 91, + /* 2110 */ 120, 120, 120, 120, 120, 120, 98, 99, 82, 120, + /* 2120 */ 102, 103, 86, 105, 88, 89, 120, 91, 120, 120, + /* 2130 */ 120, 10, 120, 120, 98, 99, 15, 120, 102, 103, + /* 2140 */ 120, 105, 21, 120, 23, 120, 120, 120, 120, 28, + /* 2150 */ 82, 120, 31, 32, 86, 120, 88, 89, 120, 91, + /* 2160 */ 120, 120, 120, 120, 120, 120, 98, 99, 82, 120, + /* 2170 */ 102, 103, 86, 105, 88, 89, 120, 91, 120, 120, + /* 2180 */ 120, 120, 120, 120, 98, 99, 82, 120, 102, 103, + /* 2190 */ 86, 105, 88, 89, 120, 91, 75, 76, 77, 120, + /* 2200 */ 120, 120, 98, 99, 82, 120, 102, 103, 86, 105, + /* 2210 */ 88, 89, 120, 91, 120, 120, 120, 120, 120, 120, + /* 2220 */ 98, 99, 82, 120, 102, 103, 86, 105, 88, 89, + /* 2230 */ 120, 91, 120, 120, 120, 120, 120, 120, 98, 99, + /* 2240 */ 82, 120, 102, 103, 86, 105, 88, 89, 120, 91, + /* 2250 */ 120, 120, 120, 120, 120, 120, 98, 99, 82, 120, + /* 2260 */ 102, 103, 86, 105, 88, 120, 120, 91, 82, 120, + /* 2270 */ 120, 120, 86, 120, 88, 99, 82, 91, 102, 103, + /* 2280 */ 86, 105, 88, 120, 120, 91, 82, 120, 102, 103, + /* 2290 */ 86, 105, 88, 120, 82, 91, 102, 103, 86, 105, + /* 2300 */ 88, 120, 120, 91, 82, 120, 102, 103, 86, 105, + /* 2310 */ 88, 120, 82, 91, 102, 103, 86, 105, 88, 1, + /* 2320 */ 120, 91, 82, 120, 102, 103, 86, 105, 88, 120, + /* 2330 */ 120, 91, 102, 103, 16, 105, 120, 120, 20, 120, + /* 2340 */ 22, 120, 102, 103, 87, 105, 87, 90, 120, 90, + /* 2350 */ 120, 120, 87, 120, 97, 90, 97, 100, 101, 100, + /* 2360 */ 101, 120, 97, 120, 120, 100, 101, 120, 50, 120, + /* 2370 */ 113, 120, 113, 120, 87, 120, 58, 90, 113, 120, + /* 2380 */ 120, 120, 120, 120, 97, 120, 120, 100, 101, 120, + /* 2390 */ 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + /* 2400 */ 113, ); const YY_SHIFT_USE_DFLT = -32; - const YY_SHIFT_MAX = 227; + const YY_SHIFT_MAX = 233; 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, + /* 0 */ 1, 1306, 1204, 1204, 1204, 1204, 1612, 1306, 1153, 1204, + /* 10 */ 1204, 1204, 1204, 1204, 1561, 1204, 1408, 1204, 1204, 1204, + /* 20 */ 1204, 1204, 1510, 1204, 1204, 1204, 1204, 1204, 1204, 1204, + /* 30 */ 1204, 1204, 1204, 1357, 1459, 1204, 1204, 1510, 1408, 1204, + /* 40 */ 1204, 1204, 1255, 1255, 1663, 1663, 1663, 1663, 1714, 1663, + /* 50 */ 1663, 221, 147, -1, 73, 295, 295, 295, 369, 491, + /* 60 */ 443, 613, 565, 905, 809, 857, 761, 953, 1001, 687, + /* 70 */ 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, + /* 80 */ 1049, 1049, 1049, 1049, 1049, 1049, 1089, 1089, 2318, 59, + /* 90 */ 281, 1, 1924, 368, 294, 219, 335, 159, 380, 159, + /* 100 */ 281, 281, 281, 2121, 44, 143, 181, -2, 183, 145, + /* 110 */ 329, 261, 408, 482, 408, 576, 440, 408, 408, 438, + /* 120 */ 457, 408, 408, 408, 581, 507, 408, 408, 438, 507, + /* 130 */ 648, 648, 377, 647, 656, 217, 190, 157, 479, 483, + /* 140 */ 527, 480, 148, 525, 528, 405, 381, 39, 402, 455, + /* 150 */ 441, 451, 403, 107, 502, 148, 148, 148, 567, 148, + /* 160 */ 556, 564, 529, 575, 573, 304, 648, 670, 724, 544, + /* 170 */ 677, 677, 648, 717, 670, 648, 656, -32, -32, -32, + /* 180 */ -32, 1732, 72, 110, 1175, 116, -31, 307, 257, 48, + /* 190 */ 530, 41, 53, 220, 90, 223, 306, 200, 71, 220, + /* 200 */ 33, 623, 571, 305, 588, 591, 626, 640, 544, 598, + /* 210 */ 414, 628, 436, 568, 601, 526, 570, 535, 452, 404, + /* 220 */ 625, 592, 559, 572, 89, 28, 8, 237, 309, 179, + /* 230 */ 326, 290, 204, 225, ); - const YY_REDUCE_USE_DFLT = -93; - const YY_REDUCE_MAX = 171; + const YY_REDUCE_USE_DFLT = -81; + const YY_REDUCE_MAX = 180; 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, + /* 0 */ 22, 1164, 289, 68, 142, 216, -6, 1215, 2104, 1470, + /* 10 */ 1266, 607, 1904, 1738, 1368, 1782, 1760, 1713, 1800, 1825, + /* 20 */ 1882, 1860, 1623, 1572, 681, 485, 363, 1317, 1521, 1946, + /* 30 */ 1419, 1928, 2122, 2158, 2140, 1982, 2000, 2018, 2036, 1964, + /* 40 */ 2086, 2068, 2176, 1091, 2230, 2186, 2204, 2240, 2212, 2194, + /* 50 */ 2222, 1675, 2259, 2287, 1706, 2265, 1706, 2257, 137, 137, + /* 60 */ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + /* 70 */ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + /* 80 */ 137, 137, 137, 137, 137, 137, 137, 137, 184, 38, + /* 90 */ 139, -80, -65, 214, 285, 239, 359, 361, 260, 292, + /* 100 */ 407, 333, 406, 543, 391, 415, 612, 578, 415, 319, + /* 110 */ 578, 577, 605, 606, 599, 488, 319, 205, 445, 466, + /* 120 */ 596, 532, 47, 679, 599, 641, 680, 608, 511, 599, + /* 130 */ 459, 319, 287, -69, 86, 579, 562, 562, 569, 569, + /* 140 */ 569, 569, 560, 569, 569, 569, 569, 569, 569, 569, + /* 150 */ 569, 569, 569, 569, 569, 560, 560, 560, 557, 560, + /* 160 */ 569, 569, 569, 569, 569, 569, 561, 600, 635, 586, + /* 170 */ 627, 603, 561, 604, 600, 561, 610, 262, 140, 109, + /* 180 */ 101, ); 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, ), + /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 21, 23, 28, 31, 32, ), + /* 1 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 2 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 3 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 4 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 5 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 6 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 7 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 8 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 62, 75, ), + /* 9 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 10 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 11 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 12 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 13 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 14 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 15 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 16 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 17 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 18 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 19 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 20 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 21 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 22 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 23 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 24 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 25 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 26 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 27 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 28 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 29 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 30 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 31 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 32 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 33 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 34 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 35 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 36 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 37 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 38 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 39 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 40 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 41 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 42 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 43 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 61, 75, ), + /* 44 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 45 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 46 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 47 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 48 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 49 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 50 */ array(15, 17, 18, 21, 23, 28, 31, 32, 33, 36, 50, 53, 54, 55, 56, 57, 60, 75, ), + /* 51 */ array(1, 22, 27, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 52 */ array(1, 16, 22, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 53 */ array(1, 16, 22, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 54 */ array(1, 16, 22, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 55 */ array(1, 22, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 56 */ array(1, 22, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 57 */ array(1, 22, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 58 */ array(1, 16, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 59 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 60 */ array(1, 16, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 61 */ array(1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 62 */ array(1, 16, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 63 */ array(1, 29, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 64 */ array(1, 2, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 65 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 66 */ array(1, 16, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 67 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 68 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, ), + /* 69 */ array(1, 24, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 70 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 71 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 72 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 73 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 74 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 75 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 76 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 77 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 78 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 79 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 80 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 81 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 82 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 83 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 84 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 85 */ array(1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 86 */ array(35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 87 */ array(35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ), + /* 88 */ array(1, 16, 20, 22, 50, 58, ), + /* 89 */ array(1, 16, 20, 22, ), + /* 90 */ array(1, 22, ), + /* 91 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 21, 23, 28, 31, 32, ), + /* 92 */ array(10, 15, 21, 23, 28, 31, 32, 75, 76, 77, ), + /* 93 */ array(15, 18, 22, 30, ), + /* 94 */ array(15, 18, 22, 30, ), + /* 95 */ array(20, 56, 61, ), + /* 96 */ array(17, 18, 60, ), + /* 97 */ array(15, 18, 22, ), + /* 98 */ array(1, 16, 22, ), + /* 99 */ array(15, 18, 22, ), + /* 100 */ array(1, 22, ), + /* 101 */ array(1, 22, ), + /* 102 */ array(1, 22, ), + /* 103 */ array(10, 15, 21, 23, 28, 31, 32, 75, 76, 77, ), + /* 104 */ array(4, 5, 6, 7, 8, 12, 13, 14, ), + /* 105 */ array(15, 18, 19, 59, ), + /* 106 */ array(15, 18, 19, 25, ), + /* 107 */ array(16, 22, 25, ), + /* 108 */ array(15, 18, 59, ), + /* 109 */ array(19, 20, 58, ), + /* 110 */ array(16, 22, 25, ), + /* 111 */ array(16, 22, 49, ), /* 112 */ array(15, 18, ), /* 113 */ array(15, 18, ), - /* 114 */ array(17, 18, ), - /* 115 */ array(15, 18, ), - /* 116 */ array(15, 18, ), + /* 114 */ array(15, 18, ), + /* 115 */ array(16, 22, ), + /* 116 */ array(20, 58, ), /* 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, ), + /* 119 */ array(17, 18, ), + /* 120 */ array(15, 18, ), + /* 121 */ array(15, 18, ), + /* 122 */ array(15, 18, ), + /* 123 */ array(15, 18, ), + /* 124 */ array(15, 18, ), + /* 125 */ array(15, 18, ), + /* 126 */ array(15, 18, ), + /* 127 */ array(15, 18, ), + /* 128 */ array(17, 18, ), + /* 129 */ array(15, 18, ), + /* 130 */ array(20, ), + /* 131 */ array(20, ), + /* 132 */ array(22, ), + /* 133 */ array(22, ), + /* 134 */ array(17, ), + /* 135 */ array(15, 17, 18, ), + /* 136 */ array(15, 18, 59, ), + /* 137 */ array(15, 18, 19, ), /* 138 */ array(16, 22, ), /* 139 */ array(16, 22, ), /* 140 */ array(16, 22, ), /* 141 */ array(16, 22, ), - /* 142 */ array(16, 22, ), + /* 142 */ array(56, 61, ), /* 143 */ array(16, 22, ), /* 144 */ array(16, 22, ), /* 145 */ array(16, 22, ), @@ -839,90 +908,90 @@ static public $yy_action = array( /* 147 */ array(16, 22, ), /* 148 */ array(16, 22, ), /* 149 */ array(16, 22, ), - /* 150 */ array(55, 60, ), + /* 150 */ array(16, 22, ), /* 151 */ array(16, 22, ), /* 152 */ array(16, 22, ), - /* 153 */ array(55, 60, ), + /* 153 */ array(16, 22, ), /* 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, ), + /* 155 */ array(56, 61, ), + /* 156 */ array(56, 61, ), + /* 157 */ array(56, 61, ), + /* 158 */ array(15, 50, ), + /* 159 */ array(56, 61, ), + /* 160 */ array(16, 22, ), + /* 161 */ array(16, 22, ), + /* 162 */ array(16, 22, ), + /* 163 */ array(16, 22, ), + /* 164 */ array(16, 22, ), + /* 165 */ array(16, 22, ), + /* 166 */ array(20, ), + /* 167 */ array(2, ), + /* 168 */ array(13, ), + /* 169 */ array(50, ), + /* 170 */ array(22, ), + /* 171 */ array(22, ), + /* 172 */ array(20, ), + /* 173 */ array(1, ), + /* 174 */ array(2, ), + /* 175 */ array(20, ), + /* 176 */ array(17, ), + /* 177 */ array(), + /* 178 */ array(), + /* 179 */ array(), + /* 180 */ array(), + /* 181 */ array(16, 22, 24, 26, 27, 29, 34, 49, 50, 51, 58, 62, 76, ), + /* 182 */ array(16, 19, 22, 50, 58, ), + /* 183 */ array(16, 22, 50, 58, ), + /* 184 */ array(16, 22, 29, 49, ), + /* 185 */ array(15, 17, 18, 33, ), + /* 186 */ array(50, 56, 58, 62, ), + /* 187 */ array(16, 22, 49, ), + /* 188 */ array(16, 22, 49, ), + /* 189 */ array(30, 50, 58, ), + /* 190 */ array(16, 49, ), + /* 191 */ array(18, 59, ), + /* 192 */ array(24, 34, ), + /* 193 */ array(50, 58, ), + /* 194 */ array(34, 62, ), + /* 195 */ array(30, 49, ), + /* 196 */ array(2, 19, ), + /* 197 */ array(25, 76, ), + /* 198 */ array(19, 56, ), + /* 199 */ array(50, 58, ), + /* 200 */ array(51, ), + /* 201 */ array(22, ), + /* 202 */ array(49, ), + /* 203 */ array(50, ), + /* 204 */ array(33, ), + /* 205 */ array(33, ), /* 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, ), + /* 207 */ array(2, ), + /* 208 */ array(50, ), + /* 209 */ array(18, ), + /* 210 */ array(17, ), + /* 211 */ array(18, ), + /* 212 */ array(17, ), + /* 213 */ array(25, ), + /* 214 */ array(17, ), + /* 215 */ array(22, ), + /* 216 */ array(56, ), + /* 217 */ array(17, ), /* 218 */ array(18, ), - /* 219 */ array(61, ), - /* 220 */ array(19, ), - /* 221 */ array(18, ), - /* 222 */ array(18, ), - /* 223 */ array(59, ), + /* 219 */ array(18, ), + /* 220 */ array(16, ), + /* 221 */ array(52, ), + /* 222 */ array(60, ), + /* 223 */ array(51, ), /* 224 */ array(18, ), - /* 225 */ array(26, ), - /* 226 */ array(50, ), - /* 227 */ array(50, ), - /* 228 */ array(), - /* 229 */ array(), - /* 230 */ array(), - /* 231 */ array(), - /* 232 */ array(), - /* 233 */ array(), + /* 225 */ array(2, ), + /* 226 */ array(18, ), + /* 227 */ array(62, ), + /* 228 */ array(18, ), + /* 229 */ array(18, ), + /* 230 */ array(18, ), + /* 231 */ array(60, ), + /* 232 */ array(51, ), + /* 233 */ array(26, ), /* 234 */ array(), /* 235 */ array(), /* 236 */ array(), @@ -1058,51 +1127,58 @@ static public $yy_action = array( /* 366 */ array(), /* 367 */ array(), /* 368 */ array(), + /* 369 */ array(), + /* 370 */ array(), + /* 371 */ array(), + /* 372 */ array(), + /* 373 */ array(), + /* 374 */ 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, + /* 0 */ 378, 554, 525, 525, 525, 525, 571, 571, 571, 571, + /* 10 */ 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + /* 20 */ 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + /* 30 */ 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + /* 40 */ 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, + /* 50 */ 571, 436, 571, 571, 571, 436, 436, 436, 571, 571, + /* 60 */ 571, 524, 571, 441, 571, 571, 571, 571, 571, 571, + /* 70 */ 464, 467, 458, 557, 556, 420, 463, 555, 446, 441, + /* 80 */ 468, 460, 455, 438, 443, 459, 471, 472, 483, 571, + /* 90 */ 436, 375, 571, 436, 436, 537, 571, 436, 454, 436, + /* 100 */ 436, 436, 436, 571, 571, 498, 571, 473, 498, 491, + /* 110 */ 473, 447, 571, 571, 571, 571, 491, 571, 571, 571, + /* 120 */ 571, 571, 498, 571, 571, 571, 571, 571, 571, 571, + /* 130 */ 534, 491, 436, 436, 571, 571, 499, 571, 571, 571, + /* 140 */ 571, 571, 516, 571, 571, 571, 571, 571, 571, 571, + /* 150 */ 571, 571, 571, 571, 571, 518, 496, 515, 498, 517, + /* 160 */ 571, 571, 571, 571, 571, 571, 512, 527, 393, 498, + /* 170 */ 570, 570, 535, 454, 526, 538, 571, 531, 498, 531, + /* 180 */ 498, 449, 483, 483, 447, 571, 483, 447, 447, 483, + /* 190 */ 447, 571, 571, 483, 571, 447, 510, 473, 479, 469, + /* 200 */ 571, 571, 447, 536, 481, 571, 571, 510, 510, 571, + /* 210 */ 571, 571, 571, 473, 571, 571, 479, 571, 571, 571, + /* 220 */ 571, 485, 571, 571, 571, 510, 571, 571, 571, 571, + /* 230 */ 571, 571, 571, 444, 495, 552, 421, 451, 551, 376, + /* 240 */ 422, 507, 569, 504, 553, 445, 506, 485, 423, 450, + /* 250 */ 533, 532, 522, 433, 511, 417, 418, 523, 427, 505, + /* 260 */ 520, 503, 470, 519, 521, 561, 428, 494, 550, 430, + /* 270 */ 429, 431, 432, 530, 510, 509, 419, 435, 424, 425, + /* 280 */ 426, 477, 474, 449, 448, 492, 497, 500, 488, 482, + /* 290 */ 475, 476, 478, 480, 416, 415, 386, 385, 387, 388, + /* 300 */ 389, 384, 383, 379, 377, 380, 381, 382, 390, 391, + /* 310 */ 400, 399, 401, 402, 434, 398, 397, 392, 394, 395, + /* 320 */ 396, 508, 501, 406, 566, 407, 408, 409, 405, 404, + /* 330 */ 493, 490, 514, 403, 565, 513, 410, 563, 560, 562, + /* 340 */ 564, 567, 559, 558, 411, 412, 414, 413, 453, 549, + /* 350 */ 486, 457, 487, 489, 461, 456, 529, 502, 452, 484, + /* 360 */ 528, 462, 465, 545, 544, 546, 547, 548, 543, 542, + /* 370 */ 466, 539, 540, 541, 568, ); - const YYNOCODE = 120; + const YYNOCODE = 121; const YYSTACKDEPTH = 100; - const YYNSTATE = 369; - const YYNRULE = 193; - const YYERRORSYMBOL = 77; + const YYNSTATE = 375; + const YYNRULE = 196; + const YYERRORSYMBOL = 78; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; static public $yyFallback = array( @@ -1138,29 +1214,29 @@ static public $yy_action = array( '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', + 'LDELFOREACH', 'AS', 'APTR', 'SMARTYBLOCKCHILD', + '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', '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', + 'foraction', 'attribute', 'ternary', 'array', + 'ifcond', 'lop', 'function', 'doublequoted_with_quotes', + 'static_class_access', 'object', 'arrayindex', 'indexdef', + 'varvarele', 'objectchain', 'objectelement', 'method', + 'params', 'modifier', 'modparameters', 'modparameter', + 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent', ); static public $yyRuleName = array( @@ -1195,33 +1271,33 @@ static public $yy_action = array( /* 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", + /* 31 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL", + /* 32 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL", + /* 33 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL", + /* 34 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL", + /* 35 */ "smartytag ::= LDEL ID attributes RDEL", + /* 36 */ "smartytag ::= LDEL ID RDEL", + /* 37 */ "smartytag ::= LDEL ID PTR ID attributes RDEL", + /* 38 */ "smartytag ::= LDEL ID modifierlist attributes RDEL", + /* 39 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes RDEL", + /* 40 */ "smartytag ::= LDELIF SPACE expr RDEL", + /* 41 */ "smartytag ::= LDELIF SPACE expr attributes RDEL", + /* 42 */ "smartytag ::= LDELIF SPACE statement RDEL", + /* 43 */ "smartytag ::= LDELIF SPACE statement attributes RDEL", + /* 44 */ "smartytag ::= LDELFOR SPACE statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes RDEL", + /* 45 */ "foraction ::= EQUAL expr", + /* 46 */ "foraction ::= INCDEC", + /* 47 */ "smartytag ::= LDELFOR SPACE statement TO expr attributes RDEL", + /* 48 */ "smartytag ::= LDELFOR SPACE statement TO expr STEP expr attributes RDEL", + /* 49 */ "smartytag ::= LDELFOREACH attributes RDEL", + /* 50 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes RDEL", + /* 51 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL", + /* 52 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes RDEL", + /* 53 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL", + /* 54 */ "smartytag ::= SMARTYBLOCKCHILD", /* 55 */ "smartytag ::= LDELSLASH ID RDEL", /* 56 */ "smartytag ::= LDELSLASH ID attributes RDEL", - /* 57 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL", + /* 57 */ "smartytag ::= LDELSLASH ID modifierlist attributes RDEL", /* 58 */ "smartytag ::= LDELSLASH ID PTR ID RDEL", /* 59 */ "attributes ::= attributes attribute", /* 60 */ "attributes ::= attribute", @@ -1229,134 +1305,137 @@ static public $yy_action = array( /* 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 ::=", + /* 65 */ "attribute ::= SPACE ID", + /* 66 */ "attribute ::= SPACE expr", + /* 67 */ "attribute ::= SPACE value", + /* 68 */ "attribute ::= SPACE INTEGER EQUAL expr", + /* 69 */ "statements ::= statement", + /* 70 */ "statements ::= statements COMMA statement", + /* 71 */ "statement ::= DOLLAR varvar EQUAL expr", + /* 72 */ "expr ::= value", + /* 73 */ "expr ::= ternary", + /* 74 */ "expr ::= DOLLAR ID COLON ID", + /* 75 */ "expr ::= expr MATH value", + /* 76 */ "expr ::= expr UNIMATH value", + /* 77 */ "expr ::= expr ANDSYM value", + /* 78 */ "expr ::= array", + /* 79 */ "expr ::= expr modifierlist", + /* 80 */ "expr ::= expr ifcond expr", + /* 81 */ "expr ::= expr ISIN array", + /* 82 */ "expr ::= expr ISIN value", + /* 83 */ "expr ::= expr lop expr", + /* 84 */ "expr ::= expr ISDIVBY expr", + /* 85 */ "expr ::= expr ISNOTDIVBY expr", + /* 86 */ "expr ::= expr ISEVEN", + /* 87 */ "expr ::= expr ISNOTEVEN", + /* 88 */ "expr ::= expr ISEVENBY expr", + /* 89 */ "expr ::= expr ISNOTEVENBY expr", + /* 90 */ "expr ::= expr ISODD", + /* 91 */ "expr ::= expr ISNOTODD", + /* 92 */ "expr ::= expr ISODDBY expr", + /* 93 */ "expr ::= expr ISNOTODDBY expr", + /* 94 */ "expr ::= value INSTANCEOF ID", + /* 95 */ "expr ::= value INSTANCEOF value", + /* 96 */ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr", + /* 97 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr", + /* 98 */ "value ::= variable", + /* 99 */ "value ::= UNIMATH value", + /* 100 */ "value ::= NOT value", + /* 101 */ "value ::= TYPECAST value", + /* 102 */ "value ::= variable INCDEC", + /* 103 */ "value ::= HEX", + /* 104 */ "value ::= INTEGER", + /* 105 */ "value ::= INTEGER DOT INTEGER", + /* 106 */ "value ::= INTEGER DOT", + /* 107 */ "value ::= DOT INTEGER", + /* 108 */ "value ::= ID", + /* 109 */ "value ::= function", + /* 110 */ "value ::= OPENP expr CLOSEP", + /* 111 */ "value ::= SINGLEQUOTESTRING", + /* 112 */ "value ::= doublequoted_with_quotes", + /* 113 */ "value ::= ID DOUBLECOLON static_class_access", + /* 114 */ "value ::= varindexed DOUBLECOLON static_class_access", + /* 115 */ "value ::= smartytag", + /* 116 */ "variable ::= varindexed", + /* 117 */ "variable ::= DOLLAR varvar AT ID", + /* 118 */ "variable ::= object", + /* 119 */ "variable ::= HATCH ID HATCH", + /* 120 */ "variable ::= HATCH variable HATCH", + /* 121 */ "varindexed ::= DOLLAR varvar arrayindex", + /* 122 */ "arrayindex ::= arrayindex indexdef", + /* 123 */ "arrayindex ::=", + /* 124 */ "indexdef ::= DOT DOLLAR varvar", + /* 125 */ "indexdef ::= DOT DOLLAR varvar AT ID", + /* 126 */ "indexdef ::= DOT ID", + /* 127 */ "indexdef ::= DOT INTEGER", + /* 128 */ "indexdef ::= DOT LDEL expr RDEL", + /* 129 */ "indexdef ::= OPENB ID CLOSEB", + /* 130 */ "indexdef ::= OPENB ID DOT ID CLOSEB", + /* 131 */ "indexdef ::= OPENB expr CLOSEB", + /* 132 */ "indexdef ::= OPENB CLOSEB", + /* 133 */ "varvar ::= varvarele", + /* 134 */ "varvar ::= varvar varvarele", + /* 135 */ "varvarele ::= ID", + /* 136 */ "varvarele ::= LDEL expr RDEL", + /* 137 */ "object ::= varindexed objectchain", + /* 138 */ "objectchain ::= objectelement", + /* 139 */ "objectchain ::= objectchain objectelement", + /* 140 */ "objectelement ::= PTR ID arrayindex", + /* 141 */ "objectelement ::= PTR DOLLAR varvar arrayindex", + /* 142 */ "objectelement ::= PTR LDEL expr RDEL arrayindex", + /* 143 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex", + /* 144 */ "objectelement ::= PTR method", + /* 145 */ "function ::= ID OPENP params CLOSEP", + /* 146 */ "method ::= ID OPENP params CLOSEP", + /* 147 */ "method ::= DOLLAR ID OPENP params CLOSEP", + /* 148 */ "params ::= expr COMMA params", + /* 149 */ "params ::= expr", + /* 150 */ "params ::=", + /* 151 */ "modifierlist ::= modifierlist modifier modparameters", + /* 152 */ "modifierlist ::= modifier modparameters", + /* 153 */ "modifier ::= VERT AT ID", + /* 154 */ "modifier ::= VERT ID", + /* 155 */ "modparameters ::= modparameters modparameter", + /* 156 */ "modparameters ::=", + /* 157 */ "modparameter ::= COLON value", + /* 158 */ "modparameter ::= COLON array", + /* 159 */ "static_class_access ::= method", + /* 160 */ "static_class_access ::= method objectchain", + /* 161 */ "static_class_access ::= ID", + /* 162 */ "static_class_access ::= DOLLAR ID arrayindex", + /* 163 */ "static_class_access ::= DOLLAR ID arrayindex objectchain", + /* 164 */ "ifcond ::= EQUALS", + /* 165 */ "ifcond ::= NOTEQUALS", + /* 166 */ "ifcond ::= GREATERTHAN", + /* 167 */ "ifcond ::= LESSTHAN", + /* 168 */ "ifcond ::= GREATEREQUAL", + /* 169 */ "ifcond ::= LESSEQUAL", + /* 170 */ "ifcond ::= IDENTITY", + /* 171 */ "ifcond ::= NONEIDENTITY", + /* 172 */ "ifcond ::= MOD", + /* 173 */ "lop ::= LAND", + /* 174 */ "lop ::= LOR", + /* 175 */ "lop ::= LXOR", + /* 176 */ "array ::= OPENB arrayelements CLOSEB", + /* 177 */ "arrayelements ::= arrayelement", + /* 178 */ "arrayelements ::= arrayelements COMMA arrayelement", + /* 179 */ "arrayelements ::=", + /* 180 */ "arrayelement ::= value APTR expr", + /* 181 */ "arrayelement ::= ID APTR expr", + /* 182 */ "arrayelement ::= expr", + /* 183 */ "doublequoted_with_quotes ::= QUOTE QUOTE", + /* 184 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE", + /* 185 */ "doublequoted ::= doublequoted doublequotedcontent", + /* 186 */ "doublequoted ::= doublequotedcontent", + /* 187 */ "doublequotedcontent ::= BACKTICK variable BACKTICK", + /* 188 */ "doublequotedcontent ::= BACKTICK expr BACKTICK", + /* 189 */ "doublequotedcontent ::= DOLLARID", + /* 190 */ "doublequotedcontent ::= LDEL variable RDEL", + /* 191 */ "doublequotedcontent ::= LDEL expr RDEL", + /* 192 */ "doublequotedcontent ::= smartytag", + /* 193 */ "doublequotedcontent ::= OTHER", + /* 194 */ "optspace ::= SPACE", + /* 195 */ "optspace ::=", ); function tokenName($tokenType) @@ -1612,11 +1691,11 @@ static public $yy_action = array( while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } -#line 82 "smarty_internal_templateparser.y" +#line 84 "smarty_internal_templateparser.y" $this->internalError = true; $this->compiler->trigger_template_error("Stack overflow in template parser"); -#line 1615 "smarty_internal_templateparser.php" +#line 1694 "smarty_internal_templateparser.php" return; } $yytos = new TP_yyStackEntry; @@ -1637,197 +1716,200 @@ static public $yy_action = array( } 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' => 80, 'rhs' => 2 ), + array( 'lhs' => 80, 'rhs' => 0 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), 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' => 83, 'rhs' => 3 ), + array( 'lhs' => 84, 'rhs' => 2 ), + array( 'lhs' => 84, 'rhs' => 0 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 82, 'rhs' => 3 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 5 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 6 ), + array( 'lhs' => 82, 'rhs' => 6 ), + array( 'lhs' => 82, 'rhs' => 7 ), + array( 'lhs' => 82, 'rhs' => 6 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 3 ), + array( 'lhs' => 82, 'rhs' => 6 ), + array( 'lhs' => 82, 'rhs' => 5 ), + array( 'lhs' => 82, 'rhs' => 7 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 5 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 5 ), + array( 'lhs' => 82, 'rhs' => 13 ), 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' => 82, 'rhs' => 7 ), + array( 'lhs' => 82, 'rhs' => 9 ), + array( 'lhs' => 82, 'rhs' => 3 ), + array( 'lhs' => 82, 'rhs' => 8 ), + array( 'lhs' => 82, 'rhs' => 11 ), + array( 'lhs' => 82, 'rhs' => 8 ), + array( 'lhs' => 82, 'rhs' => 11 ), + array( 'lhs' => 82, 'rhs' => 1 ), + array( 'lhs' => 82, 'rhs' => 3 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 82, 'rhs' => 5 ), + array( 'lhs' => 82, 'rhs' => 5 ), + array( 'lhs' => 87, 'rhs' => 2 ), + array( 'lhs' => 87, 'rhs' => 1 ), + array( 'lhs' => 87, 'rhs' => 0 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 2 ), + array( 'lhs' => 97, 'rhs' => 2 ), + array( 'lhs' => 97, 'rhs' => 2 ), + array( 'lhs' => 97, 'rhs' => 4 ), array( 'lhs' => 93, 'rhs' => 1 ), array( 'lhs' => 93, 'rhs' => 3 ), array( 'lhs' => 92, 'rhs' => 4 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 4 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 2 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 2 ), + array( 'lhs' => 89, 'rhs' => 2 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 2 ), + array( 'lhs' => 89, 'rhs' => 2 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 89, 'rhs' => 3 ), + array( 'lhs' => 98, 'rhs' => 8 ), + array( 'lhs' => 98, 'rhs' => 7 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 1 ), 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' => 106, 'rhs' => 2 ), + array( 'lhs' => 106, 'rhs' => 0 ), + array( 'lhs' => 107, 'rhs' => 3 ), + array( 'lhs' => 107, 'rhs' => 5 ), + array( 'lhs' => 107, 'rhs' => 2 ), + array( 'lhs' => 107, 'rhs' => 2 ), + array( 'lhs' => 107, 'rhs' => 4 ), + array( 'lhs' => 107, 'rhs' => 3 ), + array( 'lhs' => 107, 'rhs' => 5 ), + array( 'lhs' => 107, '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' => 108, 'rhs' => 1 ), + array( 'lhs' => 108, 'rhs' => 3 ), + array( 'lhs' => 105, 'rhs' => 2 ), array( 'lhs' => 109, 'rhs' => 1 ), - array( 'lhs' => 109, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 2 ), - array( 'lhs' => 110, 'rhs' => 1 ), + array( 'lhs' => 109, 'rhs' => 2 ), + array( 'lhs' => 110, 'rhs' => 3 ), + array( 'lhs' => 110, 'rhs' => 4 ), + array( 'lhs' => 110, 'rhs' => 5 ), + array( 'lhs' => 110, 'rhs' => 6 ), array( 'lhs' => 110, 'rhs' => 2 ), - array( 'lhs' => 111, 'rhs' => 3 ), + array( 'lhs' => 102, 'rhs' => 4 ), 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' => 112, 'rhs' => 3 ), + array( 'lhs' => 112, 'rhs' => 1 ), + array( 'lhs' => 112, 'rhs' => 0 ), + array( 'lhs' => 90, 'rhs' => 3 ), + array( 'lhs' => 90, 'rhs' => 2 ), 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' => 113, 'rhs' => 2 ), 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' => 114, 'rhs' => 0 ), + array( 'lhs' => 115, 'rhs' => 2 ), + array( 'lhs' => 115, 'rhs' => 2 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 2 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 3 ), + array( 'lhs' => 104, 'rhs' => 4 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, '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' => 99, 'rhs' => 3 ), array( 'lhs' => 116, 'rhs' => 1 ), - array( 'lhs' => 104, 'rhs' => 2 ), - array( 'lhs' => 104, 'rhs' => 3 ), - array( 'lhs' => 117, 'rhs' => 2 ), + array( 'lhs' => 116, 'rhs' => 3 ), + array( 'lhs' => 116, 'rhs' => 0 ), + array( 'lhs' => 117, 'rhs' => 3 ), + array( 'lhs' => 117, 'rhs' => 3 ), 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' => 103, 'rhs' => 2 ), + array( 'lhs' => 103, 'rhs' => 3 ), + array( 'lhs' => 118, 'rhs' => 2 ), array( 'lhs' => 118, 'rhs' => 1 ), + array( 'lhs' => 119, 'rhs' => 3 ), + array( 'lhs' => 119, 'rhs' => 3 ), + array( 'lhs' => 119, 'rhs' => 1 ), + array( 'lhs' => 119, 'rhs' => 3 ), + array( 'lhs' => 119, 'rhs' => 3 ), + array( 'lhs' => 119, 'rhs' => 1 ), + array( 'lhs' => 119, 'rhs' => 1 ), array( 'lhs' => 94, 'rhs' => 1 ), array( 'lhs' => 94, 'rhs' => 0 ), ); @@ -1851,22 +1933,23 @@ static public $yy_action = array( 18 => 15, 16 => 16, 17 => 17, - 96 => 17, - 98 => 17, 99 => 17, - 157 => 17, + 101 => 17, + 102 => 17, + 160 => 17, 19 => 19, 20 => 19, - 71 => 19, - 95 => 19, - 100 => 19, - 101 => 19, - 106 => 19, - 108 => 19, + 72 => 19, + 73 => 19, + 98 => 19, + 103 => 19, + 104 => 19, 109 => 19, - 115 => 19, - 156 => 19, - 174 => 19, + 111 => 19, + 112 => 19, + 118 => 19, + 159 => 19, + 177 => 19, 21 => 21, 22 => 21, 23 => 23, @@ -1876,29 +1959,29 @@ static public $yy_action = array( 27 => 27, 28 => 27, 30 => 27, - 31 => 27, 29 => 29, - 32 => 32, - 33 => 32, + 31 => 31, + 32 => 31, + 33 => 33, 34 => 34, - 35 => 34, + 35 => 35, 36 => 36, - 37 => 36, + 37 => 37, 38 => 38, 39 => 39, 40 => 40, + 42 => 40, 41 => 41, - 42 => 42, - 43 => 43, - 44 => 43, + 43 => 41, + 44 => 44, 45 => 45, 46 => 46, + 66 => 46, + 67 => 46, + 149 => 46, + 161 => 46, + 182 => 46, 47 => 47, - 60 => 47, - 146 => 47, - 150 => 47, - 158 => 47, - 179 => 47, 48 => 48, 49 => 49, 50 => 50, @@ -1911,55 +1994,54 @@ static public $yy_action = array( 57 => 57, 58 => 58, 59 => 59, + 60 => 60, + 69 => 60, + 153 => 60, 61 => 61, 62 => 62, 63 => 63, 64 => 63, - 65 => 63, - 66 => 66, - 67 => 67, + 65 => 65, 68 => 68, - 69 => 69, 70 => 70, - 72 => 72, - 73 => 73, - 74 => 73, - 75 => 73, - 76 => 76, - 130 => 76, - 191 => 76, - 77 => 77, + 71 => 71, + 74 => 74, + 75 => 75, + 76 => 75, + 77 => 75, 78 => 78, - 81 => 78, - 92 => 78, + 133 => 78, + 194 => 78, 79 => 79, 80 => 80, + 83 => 80, + 94 => 80, + 81 => 81, 82 => 82, - 83 => 83, 84 => 84, - 89 => 84, 85 => 85, - 88 => 85, 86 => 86, 91 => 86, 87 => 87, 90 => 87, - 93 => 93, - 94 => 94, + 88 => 88, + 93 => 88, + 89 => 89, + 92 => 89, + 95 => 95, + 96 => 96, 97 => 97, - 102 => 102, - 103 => 103, - 104 => 104, + 100 => 100, 105 => 105, + 106 => 106, 107 => 107, + 108 => 108, 110 => 110, - 111 => 111, - 112 => 112, 113 => 113, 114 => 114, + 115 => 115, 116 => 116, 117 => 117, - 118 => 118, 119 => 119, 120 => 120, 121 => 121, @@ -1967,13 +2049,13 @@ static public $yy_action = array( 123 => 123, 124 => 124, 125 => 125, - 128 => 125, 126 => 126, 127 => 127, + 128 => 128, + 131 => 128, 129 => 129, - 131 => 131, + 130 => 130, 132 => 132, - 133 => 133, 134 => 134, 135 => 135, 136 => 136, @@ -1986,18 +2068,17 @@ static public $yy_action = array( 143 => 143, 144 => 144, 145 => 145, + 146 => 146, 147 => 147, 148 => 148, - 149 => 149, + 150 => 150, 151 => 151, 152 => 152, - 153 => 153, - 192 => 153, 154 => 154, - 155 => 154, - 159 => 159, - 160 => 160, - 161 => 161, + 155 => 155, + 156 => 156, + 157 => 157, + 158 => 157, 162 => 162, 163 => 163, 164 => 164, @@ -2010,29 +2091,33 @@ static public $yy_action = array( 171 => 171, 172 => 172, 173 => 173, + 174 => 174, 175 => 175, 176 => 176, - 177 => 177, 178 => 178, + 179 => 179, 180 => 180, 181 => 181, - 182 => 182, 183 => 183, 184 => 184, - 185 => 184, - 187 => 184, + 185 => 185, 186 => 186, - 188 => 188, + 187 => 187, + 188 => 187, + 190 => 187, 189 => 189, - 190 => 190, + 191 => 191, + 192 => 192, + 193 => 193, + 195 => 195, ); -#line 93 "smarty_internal_templateparser.y" +#line 95 "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" +#line 2112 "smarty_internal_templateparser.php" +#line 101 "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" +#line 2115 "smarty_internal_templateparser.php" +#line 113 "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(); @@ -2043,55 +2128,55 @@ static public $yy_action = array( $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" +#line 2127 "smarty_internal_templateparser.php" +#line 125 "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" +#line 2130 "smarty_internal_templateparser.php" +#line 128 "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" +#line 2133 "smarty_internal_templateparser.php" +#line 131 "smarty_internal_templateparser.y" function yy_r7(){ - if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { + if ($this->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) { + } elseif ($this->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) { + }elseif ($this->php_handling == Smarty::PHP_ALLOW) { $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('sec_obj->php_handling == SMARTY_PHP_REMOVE) { + }elseif ($this->php_handling == Smarty::PHP_REMOVE) { $this->_retvalue = new _smarty_text($this, ''); } } -#line 2061 "smarty_internal_templateparser.php" -#line 141 "smarty_internal_templateparser.y" +#line 2146 "smarty_internal_templateparser.php" +#line 143 "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("';?>", $this->compiler, true)); - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { + }elseif ($this->php_handling == Smarty::PHP_PASSTHRU) { $this->_retvalue = new _smarty_text($this, '?>'); - } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) { + } elseif ($this->php_handling == Smarty::PHP_QUOTE) { $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES)); - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) { + }elseif ($this->php_handling == Smarty::PHP_ALLOW) { $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true)); - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) { + }elseif ($this->php_handling == Smarty::PHP_REMOVE) { $this->_retvalue = new _smarty_text($this, ''); } } -#line 2077 "smarty_internal_templateparser.php" -#line 157 "smarty_internal_templateparser.y" +#line 2162 "smarty_internal_templateparser.php" +#line 159 "smarty_internal_templateparser.y" function yy_r9(){ - if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { + if ($this->php_handling == Smarty::PHP_PASSTHRU) { $this->_retvalue = new _smarty_text($this, '<%'); - } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) { + } elseif ($this->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) { + }elseif ($this->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, '<%'); } - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) { + }elseif ($this->php_handling == Smarty::PHP_REMOVE) { if ($this->asp_tags) { $this->_retvalue = new _smarty_text($this, ''); } else { @@ -2099,20 +2184,20 @@ static public $yy_action = array( } } } -#line 2098 "smarty_internal_templateparser.php" -#line 178 "smarty_internal_templateparser.y" +#line 2183 "smarty_internal_templateparser.php" +#line 180 "smarty_internal_templateparser.y" function yy_r10(){ - if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { + if ($this->php_handling == Smarty::PHP_PASSTHRU) { $this->_retvalue = new _smarty_text($this, '%>'); - } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) { + } elseif ($this->php_handling == Smarty::PHP_QUOTE) { $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES)); - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) { + }elseif ($this->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, '%>'); } - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) { + }elseif ($this->php_handling == Smarty::PHP_REMOVE) { if ($this->asp_tags) { $this->_retvalue = new _smarty_text($this, ''); } else { @@ -2120,151 +2205,160 @@ static public $yy_action = array( } } } -#line 2119 "smarty_internal_templateparser.php" -#line 198 "smarty_internal_templateparser.y" +#line 2204 "smarty_internal_templateparser.php" +#line 200 "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" +#line 2212 "smarty_internal_templateparser.php" +#line 208 "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("", $this->compiler, true)); } -#line 2130 "smarty_internal_templateparser.php" -#line 209 "smarty_internal_templateparser.y" +#line 2215 "smarty_internal_templateparser.php" +#line 211 "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" +#line 2223 "smarty_internal_templateparser.php" +#line 217 "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" +#line 2228 "smarty_internal_templateparser.php" +#line 222 "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 2231 "smarty_internal_templateparser.php" #line 223 "smarty_internal_templateparser.y" + function yy_r16(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } +#line 2234 "smarty_internal_templateparser.php" +#line 225 "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 2237 "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" + function yy_r19(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2240 "smarty_internal_templateparser.php" #line 230 "smarty_internal_templateparser.y" + function yy_r21(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor); } +#line 2243 "smarty_internal_templateparser.php" +#line 232 "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" +#line 2246 "smarty_internal_templateparser.php" +#line 233 "smarty_internal_templateparser.y" function yy_r24(){ $this->_retvalue = '<%'; } -#line 2164 "smarty_internal_templateparser.php" -#line 232 "smarty_internal_templateparser.y" +#line 2249 "smarty_internal_templateparser.php" +#line 234 "smarty_internal_templateparser.y" function yy_r25(){ $this->_retvalue = '%>'; } -#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 2252 "smarty_internal_templateparser.php" +#line 242 "smarty_internal_templateparser.y" + function yy_r26(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 2255 "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" + function yy_r27(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor)); } +#line 2258 "smarty_internal_templateparser.php" +#line 245 "smarty_internal_templateparser.y" + function yy_r29(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor)); } +#line 2261 "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" + function yy_r31(){ $this->_retvalue = $this->compiler->compileTag('assign',array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"))); } +#line 2264 "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" + function yy_r33(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'")),$this->yystack[$this->yyidx + -1]->minor)); } +#line 2267 "smarty_internal_templateparser.php" +#line 256 "smarty_internal_templateparser.y" + function yy_r34(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>$this->yystack[$this->yyidx + -4]->minor['var'])),$this->yystack[$this->yyidx + -1]->minor),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -4]->minor['smarty_internal_index'])); } +#line 2270 "smarty_internal_templateparser.php" +#line 258 "smarty_internal_templateparser.y" + function yy_r35(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor); } +#line 2273 "smarty_internal_templateparser.php" +#line 259 "smarty_internal_templateparser.y" + function yy_r36(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array()); } +#line 2276 "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" + function yy_r37(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor)); } +#line 2279 "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 = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'_retvalue .= $this->compiler->compileTag('private_modifier',array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>'; + function yy_r38(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),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 = ''.$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)).'_retvalue .= $this->compiler->compileTag('private_modifier',array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>'; +#line 2284 "smarty_internal_templateparser.php" +#line 267 "smarty_internal_templateparser.y" + function yy_r39(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -5]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -3]->minor)).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),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 2289 "smarty_internal_templateparser.php" +#line 271 "smarty_internal_templateparser.y" + function yy_r40(){ $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 2292 "smarty_internal_templateparser.php" +#line 272 "smarty_internal_templateparser.y" + function yy_r41(){ $tag = trim(substr($this->yystack[$this->yyidx + -4]->minor,$this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + -1]->minor,array('if condition'=>$this->yystack[$this->yyidx + -2]->minor)); } +#line 2295 "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" + function yy_r44(){ + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -10]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -7]->minor),array('var'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),1); } +#line 2299 "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" + function yy_r45(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor; } +#line 2302 "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" + function yy_r46(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2305 "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" + function yy_r47(){ $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -4]->minor),array('to'=>$this->yystack[$this->yyidx + -2]->minor))),0); } +#line 2308 "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" + function yy_r48(){ $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('to'=>$this->yystack[$this->yyidx + -4]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),0); } +#line 2311 "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" + function yy_r49(){ $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor); } +#line 2314 "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" + function yy_r50(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor)))); } +#line 2318 "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" + function yy_r51(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor)))); } +#line 2322 "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" + function yy_r52(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor)))); } +#line 2326 "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" + function yy_r53(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor)))); } +#line 2330 "smarty_internal_templateparser.php" #line 296 "smarty_internal_templateparser.y" + function yy_r54(){ $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); } +#line 2333 "smarty_internal_templateparser.php" +#line 300 "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" +#line 2336 "smarty_internal_templateparser.php" +#line 301 "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 = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'_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 2339 "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" + function yy_r57(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>'; + } +#line 2344 "smarty_internal_templateparser.php" +#line 306 "smarty_internal_templateparser.y" + function yy_r58(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 2347 "smarty_internal_templateparser.php" #line 312 "smarty_internal_templateparser.y" + function yy_r59(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } +#line 2350 "smarty_internal_templateparser.php" +#line 314 "smarty_internal_templateparser.y" + function yy_r60(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } +#line 2353 "smarty_internal_templateparser.php" +#line 316 "smarty_internal_templateparser.y" function yy_r61(){ $this->_retvalue = array(); } -#line 2262 "smarty_internal_templateparser.php" -#line 315 "smarty_internal_templateparser.y" +#line 2356 "smarty_internal_templateparser.php" +#line 319 "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)) { @@ -2273,84 +2367,84 @@ static public $yy_action = array( $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 2366 "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" + function yy_r63(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2369 "smarty_internal_templateparser.php" +#line 329 "smarty_internal_templateparser.y" + function yy_r65(){ $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'"; } +#line 2372 "smarty_internal_templateparser.php" +#line 332 "smarty_internal_templateparser.y" + function yy_r68(){$this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2375 "smarty_internal_templateparser.php" +#line 339 "smarty_internal_templateparser.y" + function yy_r70(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } +#line 2378 "smarty_internal_templateparser.php" +#line 341 "smarty_internal_templateparser.y" + function yy_r71(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2381 "smarty_internal_templateparser.php" +#line 352 "smarty_internal_templateparser.y" + function yy_r74(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')'; } +#line 2384 "smarty_internal_templateparser.php" +#line 354 "smarty_internal_templateparser.y" + function yy_r75(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor; } +#line 2387 "smarty_internal_templateparser.php" +#line 360 "smarty_internal_templateparser.y" + function yy_r78(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2390 "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" + function yy_r79(){ $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor)); } +#line 2393 "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" + function yy_r80(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2396 "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" + function yy_r81(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2399 "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" + function yy_r82(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2402 "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[] = '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" + function yy_r84(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2405 "smarty_internal_templateparser.php" +#line 372 "smarty_internal_templateparser.y" + function yy_r85(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2408 "smarty_internal_templateparser.php" +#line 373 "smarty_internal_templateparser.y" + function yy_r86(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2411 "smarty_internal_templateparser.php" +#line 374 "smarty_internal_templateparser.y" + function yy_r87(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2414 "smarty_internal_templateparser.php" +#line 375 "smarty_internal_templateparser.y" + function yy_r88(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2417 "smarty_internal_templateparser.php" +#line 376 "smarty_internal_templateparser.y" + function yy_r89(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2420 "smarty_internal_templateparser.php" +#line 382 "smarty_internal_templateparser.y" + function yy_r95(){$this->prefix_number++; $this->compiler->prefix_code[] = '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 2423 "smarty_internal_templateparser.php" +#line 388 "smarty_internal_templateparser.y" + function yy_r96(){ $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.' ? $_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'\')->value : '.$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable('$this->yystack[$this->yyidx + -2]->minor', null, true, false)->nocache; } +#line 2426 "smarty_internal_templateparser.php" +#line 389 "smarty_internal_templateparser.y" + function yy_r97(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } +#line 2429 "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)) { + function yy_r100(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2432 "smarty_internal_templateparser.php" +#line 402 "smarty_internal_templateparser.y" + function yy_r105(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2435 "smarty_internal_templateparser.php" +#line 403 "smarty_internal_templateparser.y" + function yy_r106(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; } +#line 2438 "smarty_internal_templateparser.php" +#line 404 "smarty_internal_templateparser.y" + function yy_r107(){ $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2441 "smarty_internal_templateparser.php" +#line 406 "smarty_internal_templateparser.y" + function yy_r108(){ 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'; @@ -2358,12 +2452,12 @@ static public $yy_action = array( $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 2451 "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])) { + function yy_r110(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")"; } +#line 2454 "smarty_internal_templateparser.php" +#line 423 "smarty_internal_templateparser.y" + function yy_r113(){if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) { 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 { @@ -2373,236 +2467,274 @@ static public $yy_action = array( $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 { +#line 2466 "smarty_internal_templateparser.php" +#line 433 "smarty_internal_templateparser.y" + function yy_r114(){ if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$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[] = ''.$this->yystack[$this->yyidx + 0]->minor.'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']); +#line 2470 "smarty_internal_templateparser.php" +#line 436 "smarty_internal_templateparser.y" + function yy_r115(){ $this->prefix_number++; $this->compiler->prefix_code[] = ''.$this->yystack[$this->yyidx + 0]->minor.'prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '$_tmp'.$this->prefix_number; } +#line 2473 "smarty_internal_templateparser.php" +#line 445 "smarty_internal_templateparser.y" + function yy_r116(){if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$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']; + $this->_retvalue = '(isset($_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + 0]->minor['var'] .']->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'].') ? $_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + 0]->minor['var'] .']->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'].' : null)'; + } else { + if (isset($this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'])) { + $this->_retvalue = '(isset($_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'].') ? $_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'].' : null)'; } else { - $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; + $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])) { +#line 2487 "smarty_internal_templateparser.php" +#line 458 "smarty_internal_templateparser.y" + function yy_r117(){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 2495 "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" + function yy_r119(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')'; } +#line 2498 "smarty_internal_templateparser.php" +#line 468 "smarty_internal_templateparser.y" + function yy_r120(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')'; } +#line 2501 "smarty_internal_templateparser.php" +#line 471 "smarty_internal_templateparser.y" + function yy_r121(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2504 "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" + function yy_r122(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2507 "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" + function yy_r123(){return; } +#line 2510 "smarty_internal_templateparser.php" +#line 483 "smarty_internal_templateparser.y" + function yy_r124(){ $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 2513 "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" + function yy_r125(){ $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 2516 "smarty_internal_templateparser.php" +#line 485 "smarty_internal_templateparser.y" + function yy_r126(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']"; } +#line 2519 "smarty_internal_templateparser.php" +#line 486 "smarty_internal_templateparser.y" + function yy_r127(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]"; } +#line 2522 "smarty_internal_templateparser.php" +#line 487 "smarty_internal_templateparser.y" + function yy_r128(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]"; } +#line 2525 "smarty_internal_templateparser.php" +#line 489 "smarty_internal_templateparser.y" + function yy_r129(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; } +#line 2528 "smarty_internal_templateparser.php" +#line 490 "smarty_internal_templateparser.y" + function yy_r130(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; } +#line 2531 "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" + function yy_r132(){$this->_retvalue = '[]'; } +#line 2534 "smarty_internal_templateparser.php" +#line 502 "smarty_internal_templateparser.y" + function yy_r134(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2537 "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" + function yy_r135(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } +#line 2540 "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" + function yy_r136(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2543 "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 .")"; + function yy_r137(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$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 2547 "smarty_internal_templateparser.php" +#line 514 "smarty_internal_templateparser.y" + function yy_r138(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2550 "smarty_internal_templateparser.php" +#line 516 "smarty_internal_templateparser.y" + function yy_r139(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2553 "smarty_internal_templateparser.php" +#line 518 "smarty_internal_templateparser.y" + function yy_r140(){if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '_') { + $this->compiler->trigger_template_error (self::Err1); + } + $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; + } +#line 2560 "smarty_internal_templateparser.php" +#line 523 "smarty_internal_templateparser.y" + function yy_r141(){if ($this->security) { + $this->compiler->trigger_template_error (self::Err2); + } + $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 2567 "smarty_internal_templateparser.php" +#line 528 "smarty_internal_templateparser.y" + function yy_r142(){if ($this->security) { + $this->compiler->trigger_template_error (self::Err2); + } + $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; + } +#line 2574 "smarty_internal_templateparser.php" +#line 533 "smarty_internal_templateparser.y" + function yy_r143(){if ($this->security) { + $this->compiler->trigger_template_error (self::Err2); + } + $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; + } +#line 2581 "smarty_internal_templateparser.php" +#line 539 "smarty_internal_templateparser.y" + function yy_r144(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2584 "smarty_internal_templateparser.php" +#line 545 "smarty_internal_templateparser.y" + function yy_r145(){if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) { + if (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'array') === 0 || is_callable($this->yystack[$this->yyidx + -3]->minor)) { + if (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'isset') === 0) { + $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .' !== null)'; + } elseif (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'empty') === 0){ + $this->prefix_number++; $this->compiler->prefix_code[] = 'prefix_number.'='.$this->yystack[$this->yyidx + -1]->minor.';?>'; + $this->_retvalue = 'empty($_tmp'.$this->prefix_number.')'; + } else { + $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[] = '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 2600 "smarty_internal_templateparser.php" +#line 563 "smarty_internal_templateparser.y" + function yy_r146(){if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) == '_') { + $this->compiler->trigger_template_error (self::Err1); + } + $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")"; + } +#line 2607 "smarty_internal_templateparser.php" +#line 568 "smarty_internal_templateparser.y" + function yy_r147(){if ($this->security) { + $this->compiler->trigger_template_error (self::Err2); + } + $this->prefix_number++; $this->compiler->prefix_code[] = '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 2614 "smarty_internal_templateparser.php" +#line 576 "smarty_internal_templateparser.y" + function yy_r148(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor; } +#line 2617 "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" + function yy_r150(){ return; } +#line 2620 "smarty_internal_templateparser.php" #line 585 "smarty_internal_templateparser.y" - function yy_r168(){$this->_retvalue = '!=='; } -#line 2539 "smarty_internal_templateparser.php" + function yy_r151(){$this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor))); } +#line 2623 "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" + function yy_r152(){$this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)); } +#line 2626 "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" + function yy_r154(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } +#line 2629 "smarty_internal_templateparser.php" +#line 594 "smarty_internal_templateparser.y" + function yy_r155(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } +#line 2632 "smarty_internal_templateparser.php" +#line 596 "smarty_internal_templateparser.y" + function yy_r156(){$this->_retvalue = array(); } +#line 2635 "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" + function yy_r157(){$this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } +#line 2638 "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" + function yy_r162(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2641 "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)."'"])) { + function yy_r163(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2644 "smarty_internal_templateparser.php" +#line 619 "smarty_internal_templateparser.y" + function yy_r164(){$this->_retvalue = '=='; } +#line 2647 "smarty_internal_templateparser.php" +#line 620 "smarty_internal_templateparser.y" + function yy_r165(){$this->_retvalue = '!='; } +#line 2650 "smarty_internal_templateparser.php" +#line 621 "smarty_internal_templateparser.y" + function yy_r166(){$this->_retvalue = '>'; } +#line 2653 "smarty_internal_templateparser.php" +#line 622 "smarty_internal_templateparser.y" + function yy_r167(){$this->_retvalue = '<'; } +#line 2656 "smarty_internal_templateparser.php" +#line 623 "smarty_internal_templateparser.y" + function yy_r168(){$this->_retvalue = '>='; } +#line 2659 "smarty_internal_templateparser.php" +#line 624 "smarty_internal_templateparser.y" + function yy_r169(){$this->_retvalue = '<='; } +#line 2662 "smarty_internal_templateparser.php" +#line 625 "smarty_internal_templateparser.y" + function yy_r170(){$this->_retvalue = '==='; } +#line 2665 "smarty_internal_templateparser.php" +#line 626 "smarty_internal_templateparser.y" + function yy_r171(){$this->_retvalue = '!=='; } +#line 2668 "smarty_internal_templateparser.php" +#line 627 "smarty_internal_templateparser.y" + function yy_r172(){$this->_retvalue = '%'; } +#line 2671 "smarty_internal_templateparser.php" +#line 629 "smarty_internal_templateparser.y" + function yy_r173(){$this->_retvalue = '&&'; } +#line 2674 "smarty_internal_templateparser.php" +#line 630 "smarty_internal_templateparser.y" + function yy_r174(){$this->_retvalue = '||'; } +#line 2677 "smarty_internal_templateparser.php" +#line 631 "smarty_internal_templateparser.y" + function yy_r175(){$this->_retvalue = ' XOR '; } +#line 2680 "smarty_internal_templateparser.php" +#line 636 "smarty_internal_templateparser.y" + function yy_r176(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2683 "smarty_internal_templateparser.php" +#line 638 "smarty_internal_templateparser.y" + function yy_r178(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } +#line 2686 "smarty_internal_templateparser.php" +#line 639 "smarty_internal_templateparser.y" + function yy_r179(){ return; } +#line 2689 "smarty_internal_templateparser.php" +#line 640 "smarty_internal_templateparser.y" + function yy_r180(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2692 "smarty_internal_templateparser.php" +#line 641 "smarty_internal_templateparser.y" + function yy_r181(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2695 "smarty_internal_templateparser.php" +#line 648 "smarty_internal_templateparser.y" + function yy_r183(){ $this->_retvalue = "''"; } +#line 2698 "smarty_internal_templateparser.php" +#line 649 "smarty_internal_templateparser.y" + function yy_r184(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php(); } +#line 2701 "smarty_internal_templateparser.php" +#line 651 "smarty_internal_templateparser.y" + function yy_r185(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } +#line 2704 "smarty_internal_templateparser.php" +#line 652 "smarty_internal_templateparser.y" + function yy_r186(){ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor); } +#line 2707 "smarty_internal_templateparser.php" +#line 654 "smarty_internal_templateparser.y" + function yy_r187(){ $this->_retvalue = new _smarty_code($this, $this->yystack[$this->yyidx + -1]->minor); } +#line 2710 "smarty_internal_templateparser.php" +#line 656 "smarty_internal_templateparser.y" + function yy_r189(){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(){ +#line 2719 "smarty_internal_templateparser.php" +#line 664 "smarty_internal_templateparser.y" + function yy_r191(){ $this->_retvalue = new _smarty_code($this, '('.$this->yystack[$this->yyidx + -1]->minor.')'); } +#line 2722 "smarty_internal_templateparser.php" +#line 665 "smarty_internal_templateparser.y" + function yy_r192(){ $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" +#line 2727 "smarty_internal_templateparser.php" +#line 668 "smarty_internal_templateparser.y" + function yy_r193(){ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor); } +#line 2730 "smarty_internal_templateparser.php" +#line 675 "smarty_internal_templateparser.y" + function yy_r195(){$this->_retvalue = ''; } +#line 2733 "smarty_internal_templateparser.php" private $_retvalue; @@ -2659,12 +2791,12 @@ static public $yy_action = array( function yy_syntax_error($yymajor, $TOKEN) { -#line 75 "smarty_internal_templateparser.y" +#line 77 "smarty_internal_templateparser.y" $this->internalError = true; $this->yymajor = $yymajor; $this->compiler->trigger_template_error(); -#line 2664 "smarty_internal_templateparser.php" +#line 2796 "smarty_internal_templateparser.php" } function yy_accept() @@ -2675,13 +2807,13 @@ static public $yy_action = array( while ($this->yyidx >= 0) { $stack = $this->yy_pop_parser_stack(); } -#line 67 "smarty_internal_templateparser.y" +#line 69 "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" +#line 2814 "smarty_internal_templateparser.php" } function doParse($yymajor, $yytokenvalue) diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_utility.php b/gosa-core/include/smarty/sysplugins/smarty_internal_utility.php index 01e5b2240..3c64e58ac 100644 --- a/gosa-core/include/smarty/sysplugins/smarty_internal_utility.php +++ b/gosa-core/include/smarty/sysplugins/smarty_internal_utility.php @@ -60,6 +60,9 @@ class Smarty_Internal_Utility { $_error_count = 0; // loop over array of template directories foreach((array)$this->smarty->template_dir as $_dir) { + if (strpos('/\\', substr($_dir, -1)) === false) { + $_dir .= DS; + } $_compileDirs = new RecursiveDirectoryIterator($_dir); $_compile = new RecursiveIteratorIterator($_compileDirs); foreach ($_compile as $_fileinfo) { @@ -69,7 +72,7 @@ class Smarty_Internal_Utility { if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { $_template_file = $_file; } else { - $_template_file = substr(substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file,1); + $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; } echo '
', $_dir, '---', $_template_file; flush(); @@ -118,6 +121,9 @@ class Smarty_Internal_Utility { $_error_count = 0; // loop over array of template directories foreach((array)$this->smarty->config_dir as $_dir) { + if (strpos('/\\', substr($_dir, -1)) === false) { + $_dir .= DS; + } $_compileDirs = new RecursiveDirectoryIterator($_dir); $_compile = new RecursiveIteratorIterator($_compileDirs); foreach ($_compile as $_fileinfo) { @@ -127,7 +133,7 @@ class Smarty_Internal_Utility { if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { $_config_file = $_file; } else { - $_config_file = substr(substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file,1); + $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; } echo '
', $_dir, '---', $_config_file; flush(); @@ -208,6 +214,19 @@ class Smarty_Internal_Utility { return $_count; } + /** + * Return array of tag/attributes of all tags used by an template + * + * @param object $templae template object + * @return array of tag/attributes + */ + function getTags(Smarty_Internal_Template $template) + { + $template->smarty->get_used_tags = true; + $template->compileTemplateSource(); + return $template->compiler_object->used_tags; + } + function testInstall() { echo "
\n";
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php b/gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php
index 6301f92f9..2895e8ae9 100644
--- a/gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php
+++ b/gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php
@@ -60,68 +60,67 @@ class Smarty_Internal_Wrapper {
        switch($name_parts[0]) {
          case 'register':
          case 'unregister':
-           $myobj = $name_parts[0] == 'register' ? $this->smarty->register : $this->smarty->unregister;
            switch($name_parts[1]) {
-              case 'function':
-                 return call_user_func_array(array($myobj,'templateFunction'),$args);
-                 break;
               case 'object':
-                 return call_user_func_array(array($myobj,'templateObject'),$args);
-                 break;
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Object"),$args);
               case 'compiler_function':
-                 return call_user_func_array(array($myobj,'compilerFunction'),$args);
-                 break;
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Plugin"),array_merge(array('compiler'),$args));
+              case 'prefilter':
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Filter"),array_merge(array('pre'),$args));
+              case 'postfilter':
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Filter"),array_merge(array('post'),$args));
+              case 'outputfilter':
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Filter"),array_merge(array('output'),$args));
+             case 'resource':
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Resource"),$args);
               default:
-                 return call_user_func_array(array($myobj,$name_parts[1]),$args);
-                 break;
+                 return call_user_func_array(array($this->smarty,"{$name_parts[0]}Plugin"),array_merge(array($name_parts[1]),$args));
            }
-           break;
            case 'get':
            switch($name_parts[1]) {
               case 'template_vars':
                  return call_user_func_array(array($this->smarty,'getTemplateVars'),$args);
-                 break;
               case 'config_vars':
                  return call_user_func_array(array($this->smarty,'getConfigVars'),$args);
-                 break;
               default:
                  return call_user_func_array(array($myobj,$name_parts[1]),$args);
-                 break;
            }
-           break;
            case 'clear':
            switch($name_parts[1]) {
               case 'all_assign':
                  return call_user_func_array(array($this->smarty,'clearAllAssign'),$args);
-                 break;
+              case 'assign':
+                 return call_user_func_array(array($this->smarty,'clearAssign'),$args);
+              case 'all_cache':
+                 return call_user_func_array(array($this->smarty,'clearAllCache'),$args);
+              case 'cache':
+                 return call_user_func_array(array($this->smarty,'clearCache'),$args);
+              case 'compiled_template':
+                 return call_user_func_array(array($this->smarty,'clearCompiledTemplate'),$args);
            }
-           break;
            case 'config':
            switch($name_parts[1]) {
               case 'load':
                  return call_user_func_array(array($this->smarty,'configLoad'),$args);
-                 break;
            }
-           break;
-           default:
-             // convert foo_bar_baz to fooBarBaz style names
-             $name_parts = explode('_',$name);
-             foreach($name_parts as $idx=>$part) {
-                if($idx==0)
-                  $name_parts[$idx] = strtolower($part);
-                else
-                  $name_parts[$idx] = ucfirst($part);
-             }
-             $func_name = implode('',$name_parts);
-             if(!method_exists($this->smarty,$func_name)) {
-                throw new SmartyException("unknown method '$name'");
-                return false;
-             }
-             return call_user_func_array(array($this->smarty,$func_name),$args);
-           break;
+           case 'trigger':
+           switch($name_parts[1]) {
+              case 'error':
+                 return call_user_func_array(array($this,'trigger_error'),$args);
+           }
        }
-       return false;
+       throw new SmartyException("unknown method '$name'");
     }
-}
 
+    /**
+     * trigger Smarty error
+     *
+     * @param string $error_msg
+     * @param integer $error_type
+     */
+    function trigger_error($error_msg, $error_type = E_USER_WARNING)
+    {
+        trigger_error("Smarty error: $error_msg", $error_type);
+    }
+}
 ?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/sysplugins/smarty_security.php b/gosa-core/include/smarty/sysplugins/smarty_security.php
index 0a0a0bb9b..cd066fb4e 100644
--- a/gosa-core/include/smarty/sysplugins/smarty_security.php
+++ b/gosa-core/include/smarty/sysplugins/smarty_security.php
@@ -15,19 +15,18 @@ class Smarty_Security {
      * This determines how Smarty handles "" tags in templates.
      * possible values:
      * 
    - *
  • SMARTY_PHP_PASSTHRU -> echo PHP tags as they are
  • - *
  • SMARTY_PHP_QUOTE -> escape tags as entities
  • - *
  • SMARTY_PHP_REMOVE -> remove php tags
  • - *
  • SMARTY_PHP_ALLOW -> execute php tags
  • + *
  • Smarty::PHP_PASSTHRU -> echo PHP tags as they are
  • + *
  • Smarty::PHP_QUOTE -> escape tags as entities
  • + *
  • Smarty::PHP_REMOVE -> remove php tags
  • + *
  • Smarty::PHP_ALLOW -> execute php tags
  • *
* * @var integer */ - public $php_handling = SMARTY_PHP_PASSTHRU; + 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 @@ -57,26 +56,26 @@ class Smarty_Security { * This is an array of trusted PHP functions. * * If empty all functions are allowed. - * If set to 'none' none is allowed. + * To disable all PHP functions set $php_functions = null. * @var array */ public $php_functions = array('isset', 'empty', 'count', 'sizeof','in_array', 'is_array','time','nl2br'); /** - * This is an array of trusted modifers. + * This is an array of trusted PHP modifers. * * If empty all modifiers are allowed. - * If set to 'none' none is allowed. + * To disable all modifier set $modifiers = null. * @var array */ - public $modifiers = array('escape','count'); + public $php_modifiers = array('escape','count'); /** * This is an array of trusted streams. * * If empty all streams are allowed. - * If set to 'none' none is allowed. + * To disable all streams set $streams = null. * @var array */ public $streams = array('file'); @@ -89,9 +88,142 @@ class Smarty_Security { */ public $allow_super_globals = true; /** - * + flag if {php} tag can be executed + * + flag if the {php} and {include_php} tag can be executed */ public $allow_php_tag = false; + + public 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 + */ + function isTrustedPhpFunction($function_name, $compiler) + { + if (isset($this->php_functions) && (empty($this->php_functions) || in_array($function_name, $this->php_functions))) { + return true; + } else { + $compiler->trigger_template_error ("PHP function '{$function_name}' not allowed by security setting"); + return false; + } + } + + /** + * 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 (isset($this->static_classes) && (empty($this->static_classes) || in_array($class_name, $this->static_classes))) { + return true; + } else { + $compiler->trigger_template_error ("access to static class '{$class_name}' not allowed by security setting"); + return false; + } + } + /** + * 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 (isset($this->php_modifiers) && (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers))) { + return true; + } else { + $compiler->trigger_template_error ("modifier '{$modifier_name}' not allowed by security setting"); + return false; + } + } + /** + * 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 (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) { + return true; + } else { + 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 + */ + function isTrustedResourceDir($filepath) + { + $_rp = realpath($filepath); + if (isset($this->smarty->template_dir)) { + foreach ((array)$this->smarty->template_dir as $curr_dir) { + if (($_cd = realpath($curr_dir)) !== false && + strncmp($_rp, $_cd, strlen($_cd)) == 0 && + (strlen($_rp) == strlen($_cd) || substr($_rp, strlen($_cd), 1) == DS)) { + return true; + } + } + } + if (!empty($this->smarty->security_policy->secure_dir)) { + foreach ((array)$this->smarty->security_policy->secure_dir as $curr_dir) { + if (($_cd = realpath($curr_dir)) !== false) { + if ($_cd == $_rp) { + return true; + } elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 && + (strlen($_rp) == strlen($_cd) || substr($_rp, strlen($_cd), 1) == DS)) { + return true; + } + } + } + } + + 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 + */ + function isTrustedPHPDir($filepath) + { + $_rp = realpath($filepath); + if (!empty($this->trusted_dir)) { + foreach ((array)$this->trusted_dir as $curr_dir) { + if (($_cd = realpath($curr_dir)) !== false) { + if ($_cd == $_rp) { + return true; + } elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 && + substr($_rp, strlen($_cd), 1) == DS) { + return true; + } + } + } + } + + throw new SmartyException ("directory '{$_rp}' not allowed by security setting"); + return false; + } } ?> \ No newline at end of file -- 2.30.2