From 44dd7830ddef97f8a87f5637d191d805c7a61f51 Mon Sep 17 00:00:00 2001 From: "Uwe.Tews" Date: Sun, 27 Dec 2009 15:06:49 +0000 Subject: [PATCH] --- this is a major update with a couple of internal changes --- - new config file lexer/parser (thanks to Thue Jnaus Kristensen) - template lexer/parser fixes for PHP and {literal} handing (thanks to Thue Jnaus Kristensen) - fix on registered plugins with different type but same name - rewrite of plugin handling (optimized execution speed) - closed a security hole regarding PHP code injection into cache files - fixed bug in clear cache handling - Renamed a couple of internal classes - code cleanup for merging compiled templates - couple of runtime optimizations (still not all done) --- README | 16 +- SMARTY2_BC_NOTES | 14 +- change_log.txt | 14 +- libs/Smarty.class.php | 131 +- libs/plugins/modifier.debug_print_var.php | 120 +- .../smarty_internal_cacher_inlinecode.php | 93 - .../smarty_internal_cacheresource_file.php | 93 +- .../smarty_internal_compile_function.php | 12 +- .../smarty_internal_compile_include.php | 59 +- ...internal_compile_private_block_plugin.php} | 23 +- ...nternal_compile_private_function_call.php} | 2 +- ...ernal_compile_private_function_plugin.php} | 15 +- ...arty_internal_compile_private_modifier.php | 58 + ...compile_private_object_block_function.php} | 2 +- ...ernal_compile_private_object_function.php} | 2 +- ...rnal_compile_private_print_expression.php} | 4 +- ...ernal_compile_private_registered_block.php | 79 + ...al_compile_private_registered_function.php | 51 + ...rnal_compile_private_special_variable.php} | 6 +- .../smarty_internal_compilebase.php | 6 - .../smarty_internal_configfilelexer.php | 301 +- .../smarty_internal_configfileparser.php | 417 ++- ...platebase.php => smarty_internal_data.php} | 23 +- libs/sysplugins/smarty_internal_debug.php | 2 +- ...php => smarty_internal_filter_handler.php} | 30 +- .../smarty_internal_plugin_handler.php | 104 - .../smarty_internal_resource_extends.php | 24 +- .../smarty_internal_resource_file.php | 24 +- .../smarty_internal_resource_php.php | 24 +- .../smarty_internal_resource_registered.php | 25 +- .../smarty_internal_resource_stream.php | 25 +- .../smarty_internal_resource_string.php | 25 +- ...smarty_internal_smartytemplatecompiler.php | 9 +- libs/sysplugins/smarty_internal_template.php | 277 +- .../smarty_internal_templatecompilerbase.php | 221 +- .../smarty_internal_templatelexer.php | 343 +- .../smarty_internal_templateparser.php | 3085 ++++++++--------- .../smarty_method_register_block.php | 6 +- ...arty_method_register_compiler_function.php | 6 +- .../smarty_method_register_function.php | 6 +- .../smarty_method_register_modifier.php | 6 +- .../smarty_method_unregister_block.php | 4 +- ...ty_method_unregister_compiler_function.php | 4 +- .../smarty_method_unregister_function.php | 4 +- .../smarty_method_unregister_modifier.php | 4 +- 45 files changed, 3015 insertions(+), 2784 deletions(-) delete mode 100644 libs/sysplugins/smarty_internal_cacher_inlinecode.php rename libs/sysplugins/{smarty_internal_compile_block_plugin.php => smarty_internal_compile_private_block_plugin.php} (60%) rename libs/sysplugins/{smarty_internal_compile_function_call.php => smarty_internal_compile_private_function_call.php} (96%) rename libs/sysplugins/{smarty_internal_compile_function_plugin.php => smarty_internal_compile_private_function_plugin.php} (71%) create mode 100644 libs/sysplugins/smarty_internal_compile_private_modifier.php rename libs/sysplugins/{smarty_internal_compile_object_block_function.php => smarty_internal_compile_private_object_block_function.php} (96%) rename libs/sysplugins/{smarty_internal_compile_object_function.php => smarty_internal_compile_private_object_function.php} (94%) rename libs/sysplugins/{smarty_internal_compile_print_expression.php => smarty_internal_compile_private_print_expression.php} (88%) create mode 100644 libs/sysplugins/smarty_internal_compile_private_registered_block.php create mode 100644 libs/sysplugins/smarty_internal_compile_private_registered_function.php rename libs/sysplugins/{smarty_internal_compile_special_smarty_variable.php => smarty_internal_compile_private_special_variable.php} (94%) rename libs/sysplugins/{smarty_internal_templatebase.php => smarty_internal_data.php} (94%) rename libs/sysplugins/{smarty_internal_run_filter.php => smarty_internal_filter_handler.php} (63%) delete mode 100644 libs/sysplugins/smarty_internal_plugin_handler.php diff --git a/README b/README index 4d119459..84a37ba2 100644 --- a/README +++ b/README @@ -16,7 +16,7 @@ The file structure is similar to Smarty 2: modifier.escape.php ... -A lot of Smarty 3 core functionality lies in the sysplugins directory, you do +A lot of Smarty 3 core functionality lies in the sysplugins directory; you do not need to change any files here. The /libs/plugins/ folder is where Smarty plugins are located. You can add your own here, or create a separate plugin directory, just the same as Smarty 2. You will still need to create your own @@ -47,7 +47,7 @@ There are many things that are new to Smarty 3. Here are the notable items: LEXER/PARSER ============ -Smarty 3 now uses a lexing tokenizer for it's parser/compiler. Basically, this +Smarty 3 now uses a lexing tokenizer for its parser/compiler. Basically, this means Smarty has some syntax additions that make life easier such as in-template math, shorter/intuitive function parameter options, infinite function recursion, more accurate error handling, etc. @@ -57,14 +57,14 @@ WHAT IS NEW IN SMARTY TEMPLATE SYNTAX ===================================== Smarty 3 allows expressions almost anywhere. Expressions can include PHP -functions as long as they are not disabled by the security policy, object -methods and properties, etc. The {math} plugin will be no longer necessary but +functions as long as they are not disabled by the security policy, object +methods and properties, etc. The {math} plugin is no longer necessary but is still supported for BC. Examples: {$x+$y} will output the sum of x and y. {$foo = strlen($bar)} function in assignment -{assign var=foo value= $x+$y} in attributs +{assign var=foo value= $x+$y} in attributes {$foo = myfunct( ($x+$y)*3 )} as function parameter {$foo[$x+3]} as array index @@ -170,8 +170,8 @@ Just as you can use PHP functions as modifiers directly, you can now access PHP functions directly, provided they are permitted by security settings: {time()} -There is a new {function}...{/function} block tag. This allows to reuse code -sequences like a plugin function. It can all itself recursively. +There is a new {function}...{/function} block tag. This enables reuse of code +sequences like a plugin function. It can call itself recursively. Example: @@ -397,7 +397,7 @@ extends another one that extends another one and so on..), but be aware that all have to be checked for modifications at runtime so the more inheritance the more overhead you add. Instead of defining the parent/child relationships with the {extends} tag in the child template you -can use the s resource as follow: +can use the resource as follow: $smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); diff --git a/SMARTY2_BC_NOTES b/SMARTY2_BC_NOTES index ce66112f..adcf5e97 100644 --- a/SMARTY2_BC_NOTES +++ b/SMARTY2_BC_NOTES @@ -4,9 +4,9 @@ Smarty 3 is PHP 5 only. It will not work with PHP 4. == {php} Tag == The {php} tag is disabled by default. The use of {php} tags is -decripated. It can be enabled with $smarty->allow_php_tag=true. +deprecated. It can be enabled with $smarty->allow_php_tag=true. -But if you scatter PHP code which belogs together into several +But if you scatter PHP code which belongs together into several {php} tags it may not work any longer. == Delimiters and whitespace == @@ -27,8 +27,8 @@ For example filename strings must be quoted == Extending the Smarty class == Smarty 3 makes use of the __construct method for initialization. If you are extending -the Smarty class its constructor is not called implicitly if the your child class defines -also constructor. In order to run Smarty's constructor, a call to parent::__construct() +the Smarty class, its constructor is not called implicitly if the your child class defines +its own constructor. In order to run Smarty's constructor, a call to parent::__construct() within your child constructor is required. @@ -55,7 +55,7 @@ In Smarty 2, mixed case file names did work. == Scope of Special Smarty Variables == In Smarty 2 the special Smarty variables $smarty.section... and $smarty.foreach... -had global scope. If you had loops with same name in subtemplates you could accidentally +had global scope. If you had loops with the same name in subtemplates you could accidentally overwrite values of parent template. In Smarty 3 these special Smarty variable have only local scope in the template which @@ -68,5 +68,5 @@ as parameter. == SMARTY_RESOURCE_CHAR_SET == Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as default template charset. This is now used also on modifiers like escape as default charset. If your templates use -other charsets make sure that you define the constant accordingly. Otherwise you may get -not output. \ No newline at end of file +other charsets make sure that you define the constant accordingly. Otherwise you may not +get any output. \ No newline at end of file diff --git a/change_log.txt b/change_log.txt index 7489ad8a..c0212b3c 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,3 +1,15 @@ +12/27/2009 +--- this is a major update with a couple of internal changes --- +- new config file lexer/parser (thanks to Thue Jnaus Kristensen) +- template lexer/parser fixes for PHP and {literal} handing (thanks to Thue Jnaus Kristensen) +- fix on registered plugins with different type but same name +- rewrite of plugin handling (optimized execution speed) +- closed a security hole regarding PHP code injection into cache files +- fixed bug in clear cache handling +- Renamed a couple of internal classes +- code cleanup for merging compiled templates +- couple of runtime optimizations (still not all done) + 12/19/2009 - bugfix on comment lines in config files @@ -8,7 +20,7 @@ 12/16/2009 - update of changelog -- added {include file='foo.tpl' inline} inline option to merge compiled code of aubtemplate into the calling template +- added {include file='foo.tpl' inline} inline option to merge compiled code of subtemplate into the calling template 12/14/2009 - fixed sideefect of last modification (objects in array index did not work anymore) diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php index a3a360c6..5a23d848 100644 --- a/libs/Smarty.class.php +++ b/libs/Smarty.class.php @@ -106,9 +106,9 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR /** * This is the main Smarty class */ -class Smarty extends Smarty_Internal_TemplateBase { +class Smarty extends Smarty_Internal_Data { // smarty version - public static $_version = 'Smarty3-SVN$Rev: 3286 $'; + const SMARTY_VERSION = 'Smarty3-SVN$Rev: 3286 $'; // auto literal on delimiters with whitspace public $auto_literal = true; // display error on not assigned variables @@ -167,7 +167,7 @@ class Smarty extends Smarty_Internal_TemplateBase { // config var settings public $config_overwrite = true; //Controls whether variables with the same name overwrite each other. public $config_booleanize = true; //Controls whether config values of on/true/yes and off/false/no get converted to boolean - public $config_read_hidden = true; //Controls whether hidden config sections/vars are read from the file. + public $config_read_hidden = true; //Controls whether hidden config sections/vars are read from the file. // config vars public $config_vars = array(); // assigned tpl vars @@ -186,30 +186,20 @@ class Smarty extends Smarty_Internal_TemplateBase { public $cache_resource_types = array('file'); // config type public $default_config_type = 'file'; - // class used for cacher - public $cacher_class = 'Smarty_Internal_Cacher_InlineCode'; // exception handler: array('ExceptionClass','ExceptionMethod'); public $exception_handler = null; // cached template objects public $template_objects = null; // check If-Modified-Since headers public $cache_modified_check = false; - // cached objects - public $resource_objects = array(); // registered plugins public $registered_plugins = array(); // plugin search order public $plugin_search_order = array('function', 'block', 'compiler', 'class'); - // plugin handler object - public $plugin_handler = null; - // default plugin handler - public $default_plugin_handler_func = null; // registered objects public $registered_objects = array(); // registered filters public $registered_filters = array(); - // filter handler - public $filter_handler = null; // autoload filter public $autoload_filters = array(); // status of filter on variable output @@ -228,8 +218,7 @@ class Smarty extends Smarty_Internal_TemplateBase { /** * Class constructor, initializes basic smarty properties */ - public function __construct() - { + public function __construct() { // self reference needed by other classes methods $this->smarty = $this; @@ -239,7 +228,7 @@ class Smarty extends Smarty_Internal_TemplateBase { $this->start_time = $this->_get_time(); // set exception handler if (!empty($this->exception_handler)) - set_exception_handler($this->exception_handler); + set_exception_handler($this->exception_handler); // set default dirs $this->template_dir = array('.' . DS . 'templates' . DS); $this->compile_dir = '.' . DS . 'templates_c' . DS; @@ -247,12 +236,11 @@ class Smarty extends Smarty_Internal_TemplateBase { $this->cache_dir = '.' . DS . 'cache' . DS; $this->config_dir = '.' . DS . 'configs' . DS; $this->debug_tpl = SMARTY_DIR . 'debug.tpl'; - $this->plugin_handler = new Smarty_Internal_Plugin_Handler($this); - $this->filter_handler = new Smarty_Internal_Run_Filter($this); if (!$this->debugging && $this->debugging_ctrl == 'URL') { if (isset($_SERVER['QUERY_STRING'])) { $_query_string = $_SERVER['QUERY_STRING']; - } else { + } + else { $_query_string = ''; } if (false !== strpos($_query_string, $this->smarty_debug_id)) { @@ -260,15 +248,18 @@ class Smarty extends Smarty_Internal_TemplateBase { // enable debugging for this browser session setcookie('SMARTY_DEBUG', true); $this->debugging = true; - } elseif (false !== strpos($_query_string, $this->smarty_debug_id . '=off')) { + } + elseif (false !== strpos($_query_string, $this->smarty_debug_id . '=off')) { // disable debugging for this browser session setcookie('SMARTY_DEBUG', false); $this->debugging = false; - } else { + } + else { // enable debugging for this page $this->debugging = true; } - } else { + } + else { if (isset($_COOKIE['SMARTY_DEBUG'])) { $this->debugging = true; } @@ -280,11 +271,10 @@ class Smarty extends Smarty_Internal_TemplateBase { /** * Class destructor */ - public function __destruct() - { + public function __destruct() { // restore to previous exception handler, if any if (!empty($this->exception_handler)) - restore_exception_handler(); + restore_exception_handler(); } /** @@ -296,8 +286,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * @param object $ |null $parent next higher level of Smarty variables * @return string rendered template output */ - public function fetch($template, $cache_id = null, $compile_id = null, $parent = null) - { + public function fetch($template, $cache_id = null, $compile_id = null, $parent = null) { if (is_object($cache_id)) { $parent = $cache_id; $cache_id = null; @@ -313,8 +302,9 @@ class Smarty extends Smarty_Internal_TemplateBase { ? $this->error_reporting : error_reporting() &~E_NOTICE); // return redered template if (isset($this->autoload_filters['output']) || isset($this->registered_filters['output'])) { - $_output = $this->filter_handler->execute('output', $_template->getRenderedTemplate()); - } else { + $_output = Smarty_Internal_Filter_Handler::runFilter('output', $_template->getRenderedTemplate(), $this); + } + else { $_output = $_template->getRenderedTemplate(); } $_template->rendered_content = null; @@ -330,8 +320,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * @param mixed $compile_id compile id to be used with this template * @param object $parent next higher level of Smarty variables */ - public function display($template, $cache_id = null, $compile_id = null, $parent = null) - { + public function display($template, $cache_id = null, $compile_id = null, $parent = null) { // display template echo $this->fetch ($template, $cache_id, $compile_id, $parent); // debug output @@ -349,8 +338,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * @param mixed $compile_id compile id to be used with this template * @return boolean cache status */ - public function is_cached($template, $cache_id = null, $compile_id = null) - { + public function is_cached($template, $cache_id = null, $compile_id = null) { if (!($template instanceof $this->template_class)) { $template = $this->createTemplate ($template, $cache_id, $compile_id, $this); } @@ -361,13 +349,13 @@ class Smarty extends Smarty_Internal_TemplateBase { /** * Loads security class and enables security */ - public function enableSecurity() - { + 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 { + } + else { throw new Exception('Property security_class is not defined'); } } @@ -377,8 +365,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * * @param string $ |array $template_dir folder(s) of template sorces */ - public function setTemplateDir($template_dir) - { + public function setTemplateDir($template_dir) { $this->template_dir = (array)$template_dir; return; } @@ -387,8 +374,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * * @param string $ |array $template_dir folder(s) of template sources */ - public function addTemplateDir($template_dir) - { + 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; @@ -398,8 +384,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * * @param string $compile_dir folder of compiled template sources */ - public function setCompileDir($compile_dir) - { + public function setCompileDir($compile_dir) { $this->compile_dir = $compile_dir; return; } @@ -408,16 +393,14 @@ class Smarty extends Smarty_Internal_TemplateBase { * * @param string $cache_dir folder of cache files */ - public function setCacheDir($cache_dir) - { + public function setCacheDir($cache_dir) { $this->cache_dir = $cache_dir; return; } /** * Enable Caching */ - public function enableCaching() - { + public function enableCaching() { $this->caching = SMARTY_CACHING_LIFETIME_CURRENT; return; } @@ -426,8 +409,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * * @param integer $lifetime lifetime of cached file in seconds */ - public function setCacheLifetime($lifetime) - { + public function setCacheLifetime($lifetime) { $this->cache_lifetime = $lifetime; return; } @@ -437,16 +419,12 @@ class Smarty extends Smarty_Internal_TemplateBase { * plugin filename format: plugintype.pluginname.php * * @param string $plugin_name class plugin name to load - * @return boolean + * @return string|boolean filepath of loaded file or false */ - public function loadPlugin($plugin_name) - { - // if class exists, exit silently (already loaded) - if (class_exists($plugin_name, false)) - return true; - // if callable as function, exit silently (already loaded) - if (is_callable($plugin_name)) - return true; + 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); @@ -457,10 +435,12 @@ class Smarty extends Smarty_Internal_TemplateBase { } // if type is "internal", get plugin from sysplugins if ($_name_parts[1] == 'internal') { - if (file_exists(SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php')) { - require_once(SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php'); - return true; - } else { + $file = SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php'; + if (file_exists($file)) { + require_once($file); + return $file; + } + else { return false; } } @@ -471,10 +451,10 @@ class Smarty extends Smarty_Internal_TemplateBase { if (strpos('/\\', substr($_plugin_dir, -1)) === false) { $_plugin_dir .= DS; } - - if (file_exists($_plugin_dir . $_plugin_filename)) { - require_once($_plugin_dir . $_plugin_filename); - return true; + $file = $_plugin_dir . $_plugin_filename; + if (file_exists($file)) { + require_once($file); + return $file; } } // no plugin loaded @@ -487,8 +467,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * @param mixed $handler function name or array with object/method names * @return string previous exception handler */ - public function setExceptionHandler($handler) - { + public function setExceptionHandler($handler) { $this->exception_handler = $handler; return set_exception_handler($handler); } @@ -498,8 +477,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * * @return object of cache resource */ - public function loadCacheResource($type = null) - { + public function loadCacheResource($type = null) { if (!isset($type)) { $type = $this->caching_type; } @@ -510,12 +488,14 @@ class Smarty extends Smarty_Internal_TemplateBase { if (in_array($type, $this->cache_resource_types)) { $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); return $this->cache_resource_objects[$type] = new $cache_resource_class($this); - } else { + } + else { // try plugins dir $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); if ($this->loadPlugin($cache_resource_class)) { return $this->cache_resource_objects[$type] = new $cache_resource_class($this); - } else { + } + else { throw new Exception("Unable to load cache resource '{$type}'"); } } @@ -527,8 +507,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * @param string $error_msg * @param integer $error_type */ - public function trigger_error($error_msg, $error_type = E_USER_WARNING) - { + public function trigger_error($error_msg, $error_type = E_USER_WARNING) { throw new Exception("Smarty error: $error_msg"); } @@ -540,8 +519,7 @@ class Smarty extends Smarty_Internal_TemplateBase { * @param string $name unknown methode name * @param array $args aurgument array */ - public function __call($name, $args) - { + public function __call($name, $args) { $name = strtolower($name); if ($name == 'smarty') { throw new Exception('Please use parent::__construct() to call parent constuctor'); @@ -557,8 +535,7 @@ class Smarty extends Smarty_Internal_TemplateBase { } } -function smartyAutoload($class) -{ +function smartyAutoload($class) { $_class = strtolower($class); if (substr($_class, 0, 16) === 'smarty_internal_' || $_class == 'smarty_security') { include SMARTY_SYSPLUGINS_DIR . $_class . '.php'; diff --git a/libs/plugins/modifier.debug_print_var.php b/libs/plugins/modifier.debug_print_var.php index e976d12f..f0f83d27 100644 --- a/libs/plugins/modifier.debug_print_var.php +++ b/libs/plugins/modifier.debug_print_var.php @@ -20,70 +20,68 @@ * @param integer $ * @return string */ -class Smarty_Modifier_Debug_Print_Var { - static function execute ($var, $depth = 0, $length = 40) - { - $_replace = array("\n" => '\n', - "\r" => '\r', - "\t" => '\t' - ); +function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40) +{ + $_replace = array("\n" => '\n', + "\r" => '\r', + "\t" => '\t' + ); - switch (gettype($var)) { - case 'array' : - $results = 'Array (' . count($var) . ')'; - foreach ($var as $curr_key => $curr_val) { - $results .= '
' . str_repeat(' ', $depth * 2) - . '' . strtr($curr_key, $_replace) . ' => ' - . self::execute($curr_val, ++$depth, $length); - $depth--; - } - break; - case 'object' : - $object_vars = get_object_vars($var); - $results = '' . get_class($var) . ' Object (' . count($object_vars) . ')'; - foreach ($object_vars as $curr_key => $curr_val) { - $results .= '
' . str_repeat(' ', $depth * 2) - . ' ->' . strtr($curr_key, $_replace) . ' = ' - . self::execute($curr_val, ++$depth, $length); - $depth--; - } - break; - case 'boolean' : - case 'NULL' : - case 'resource' : - if (true === $var) { - $results = 'true'; - } elseif (false === $var) { - $results = 'false'; - } elseif (null === $var) { - $results = 'null'; - } else { - $results = htmlspecialchars((string) $var); - } - $results = '' . $results . ''; - break; - case 'integer' : - case 'float' : + switch (gettype($var)) { + case 'array' : + $results = 'Array (' . count($var) . ')'; + foreach ($var as $curr_key => $curr_val) { + $results .= '
' . str_repeat(' ', $depth * 2) + . '' . strtr($curr_key, $_replace) . ' => ' + . smarty_modifier_debug_print_var($curr_val, ++$depth, $length); + $depth--; + } + break; + case 'object' : + $object_vars = get_object_vars($var); + $results = '' . get_class($var) . ' Object (' . count($object_vars) . ')'; + foreach ($object_vars as $curr_key => $curr_val) { + $results .= '
' . str_repeat(' ', $depth * 2) + . ' ->' . strtr($curr_key, $_replace) . ' = ' + . smarty_modifier_debug_print_var($curr_val, ++$depth, $length); + $depth--; + } + break; + case 'boolean' : + case 'NULL' : + case 'resource' : + if (true === $var) { + $results = 'true'; + } elseif (false === $var) { + $results = 'false'; + } elseif (null === $var) { + $results = 'null'; + } else { $results = htmlspecialchars((string) $var); - break; - case 'string' : - $results = strtr($var, $_replace); - if (strlen($var) > $length) { - $results = substr($var, 0, $length - 3) . '...'; - } - $results = htmlspecialchars('"' . $results . '"'); - break; - case 'unknown type' : - default : - $results = strtr((string) $var, $_replace); - if (strlen($results) > $length) { - $results = substr($results, 0, $length - 3) . '...'; - } - $results = htmlspecialchars($results); - } - - return $results; + } + $results = '' . $results . ''; + break; + case 'integer' : + case 'float' : + $results = htmlspecialchars((string) $var); + break; + case 'string' : + $results = strtr($var, $_replace); + if (strlen($var) > $length) { + $results = substr($var, 0, $length - 3) . '...'; + } + $results = htmlspecialchars('"' . $results . '"'); + break; + case 'unknown type' : + default : + $results = strtr((string) $var, $_replace); + if (strlen($results) > $length) { + $results = substr($results, 0, $length - 3) . '...'; + } + $results = htmlspecialchars($results); } + + return $results; } ?> diff --git a/libs/sysplugins/smarty_internal_cacher_inlinecode.php b/libs/sysplugins/smarty_internal_cacher_inlinecode.php deleted file mode 100644 index eb943fed..00000000 --- a/libs/sysplugins/smarty_internal_cacher_inlinecode.php +++ /dev/null @@ -1,93 +0,0 @@ -smarty = $smarty; - } - - /** - * Inject inline code for nocache template sections - * - * This method gets the content of each template element from the parser. - * If the content is compiled code and it should be not cached the code is injected - * into the rendered output. - * - * @param string $content content of template element - * @param object $compiler intance of compiler class - * @param boolean $tag_nocache true if the parser detected a nocache situation - * @param boolean $is_code true if content is compiled code - * @return string content - */ - public function processNocacheCode ($content, $compiler, $is_code) - { - // If the template is not evaluated and we have a nocache section and or a nocache tag - if ($is_code) { - // generate replacement code - if ((!$compiler->template->isEvaluated() || $compiler->template->forceNocache) && $compiler->template->caching && - ($compiler->nocache || $compiler->tag_nocache)) { - $compiler->tag_nocache = false; - $_output = str_replace("'", "\'", $content); - $_output = ''; - } else { - $_output = $content; - } - } else { - $_output = $content; - } - // if compiled code shall be grabbed - if ($compiler->template->extract_code == false) { - // return output - return $_output; - } else { - // store code in extract buffer - $compiler->template->extracted_compiled_code .= $_output; - return ''; - } - } - - /** - * Initialize cacher - * - * Is a noop in current implementation - * - * @param object $compiler intance of compiler class - */ - public function initCacher ($compiler) - { - return; - } - - /** - * Close cacher - * - * Hook to perform any post processing on the final compiled template - * Is a noop in current implementation - * - * @param object $compiler intance of compiler class - * @param string $template_code complete compiled template - * @return string compiled template output - */ - public function closeCacher ($compiler, $template_code) - { - return $template_code; - } - -} - -?> diff --git a/libs/sysplugins/smarty_internal_cacheresource_file.php b/libs/sysplugins/smarty_internal_cacheresource_file.php index f3a1329c..d4d9baf7 100644 --- a/libs/sysplugins/smarty_internal_cacheresource_file.php +++ b/libs/sysplugins/smarty_internal_cacheresource_file.php @@ -38,7 +38,8 @@ class Smarty_Internal_CacheResource_File { */ public function getCachedTimestamp($template) { - return ($template->getCachedFilepath() && file_exists($template->getCachedFilepath())) ? filemtime($template->getCachedFilepath()) : false ; + return @filemtime($template->getCachedFilepath()); + // return ($template->getCachedFilepath() && file_exists($template->getCachedFilepath())) ? filemtime($template->getCachedFilepath()) : false ; } /** @@ -63,7 +64,7 @@ class Smarty_Internal_CacheResource_File { */ public function writeCachedContent($template, $content) { - if (!$template->isEvaluated()) { + if (!$template->resource_object->isEvaluated) { return Smarty_Internal_Write_File::writeFile($template->getCachedFilepath(), $content, $this->smarty); } else { return false; @@ -91,51 +92,61 @@ class Smarty_Internal_CacheResource_File { */ public function clear($resource_name, $cache_id, $compile_id, $exp_time) { - $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!','_',$cache_id) : null; - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!','_',$compile_id) : null; - $_dir_sep = $this->smarty->use_sub_dirs ? DS : '^'; - if (isset($resource_name)) { - $_resource_part = (string)abs(crc32($resource_name)) . '.' . $resource_name . '.php'; - } else { - $_resource_part = null; + $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null; + $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; + $_dir_sep = $this->smarty->use_sub_dirs ? '/' : '^'; + $_compile_id_offset = $this->smarty->use_sub_dirs ? 3 : 0; + $_dir = rtrim($this->smarty->cache_dir, '/\\') . DS; + $_dir_length = strlen($_dir); + if (isset($_cache_id)) { + $_cache_id_parts = explode('|', $_cache_id); + $_cache_id_parts_count = count($_cache_id_parts); } - $_dir = $this->smarty->cache_dir; - if (strpos('/\\', substr($_dir, -1)) === false) { - $_dir .= DS; - } - if ($this->smarty->use_sub_dirs && isset($_cache_id)) { - $_dir .= str_replace('|', $_dir_sep, $_cache_id) . $_dir_sep; - } - $_compile_pos = $this->smarty->use_sub_dirs ? 5 : 2; $_count = 0; $_cacheDirs = new RecursiveDirectoryIterator($_dir); $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); foreach ($_cache as $_file) { - if (strpos($_file, '.svn') !== false) continue; + if (strpos($_file, '.svn') !== false) continue; + // directory ? if ($_file->isDir()) { if (!$_cache->isDot()) { // delete folder if empty @rmdir($_file->getPathname()); } } else { - $_parts = explode($_dir_sep, $_file); - $_parts_count = count($_parts); - $_parts_compile_pos = $_parts_count - $_compile_pos; - if ($_parts_compile_pos < 0) { - $_parts_compile_pos = 0; - } - if ((substr_compare((string)$_file, $_dir, 0, strlen($_dir)) == 0 && - (!isset($resource_name) || $_parts[$_parts_count-1] == $_resource_part) && - (!isset($_compile_id) || $_parts[$_parts_compile_pos] == $_compile_id)) || - (isset($resource_name) && (string)$_file == $_dir . $_resource_part)) { - if (isset($exp_time)) { - if (time() - @filemtime($_file) >= $exp_time) { - $_count += @unlink((string) $_file) ? 1 : 0; - } - } else { - $_count += @unlink((string) $_file) ? 1 : 0; + $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length))); + $_parts_count = count($_parts); + // check name + if (isset($resource_name)) { + $_filename_parts = explode('.', $_parts[$_parts_count-1]); + $_resourcename_parts = explode('.', $resource_name . '.php'); + if (count($_filename_parts)-1 != count($_resourcename_parts)) { + continue; + } + for ($i = 0; $i < count($_resourcename_parts); $i++) { + if ($_filename_parts[$i + 1] != $_resourcename_parts[$i]) continue 2; } } + // check compile id + if (isset($_compile_id) && $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id) { + continue; + } + // check cache id + if (isset($_cache_id)) { + // count of cache id parts + $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset; + if ($_parts_count < $_cache_id_parts_count) { + continue; + } + for ($i = 0; $i < $_cache_id_parts_count; $i++) { + if ($_parts[$i] != $_cache_id_parts[$i]) continue 2; + } + } + // expired ? + if (isset($exp_time) && time() - @filemtime($_file) < $exp_time) { + continue; + } + $_count += @unlink((string) $_file) ? 1 : 0; } } return $_count; @@ -143,17 +154,16 @@ class Smarty_Internal_CacheResource_File { /** * Get system filepath to cached file * - * @param string $resource_name template name + * @param string $source_file_path template source file path * @param string $cache_id cache id * @param string $compile_id compile id * @return string filepath of cache file */ - private function buildCachedFilepath ($resource_name, $cache_id, $compile_id) + private function buildCachedFilepath ($source_file_path, $cache_id, $compile_id) { - $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!','_',$cache_id) : null; - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!','_',$compile_id) : null; - $_files = explode('|', $resource_name); - $_filepath = (string)abs(crc32($resource_name)); + $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null; + $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; + $_filepath = (string)abs(crc32($source_file_path)); // if use_sub_dirs, break file into directories if ($this->smarty->use_sub_dirs) { $_filepath = substr($_filepath, 0, 2) . DS @@ -176,8 +186,7 @@ class Smarty_Internal_CacheResource_File { if (strpos('/\\', substr($_cache_dir, -1)) === false) { $_cache_dir .= DS; } - - return $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_files[count($_files)-1]) . '.php'; + return $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($source_file_path) . '.php'; } } diff --git a/libs/sysplugins/smarty_internal_compile_function.php b/libs/sysplugins/smarty_internal_compile_function.php index 56f451b7..e5cee180 100644 --- a/libs/sysplugins/smarty_internal_compile_function.php +++ b/libs/sysplugins/smarty_internal_compile_function.php @@ -29,6 +29,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase { $save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code); $this->_open_tag('function', $save); $_name = trim($_attr['name'], "'"); + unset($_attr['name']); foreach ($_attr as $_key => $_data) { $compiler->template->properties['function'][$_name]['parameter'][$_key] = $_data; } @@ -56,20 +57,13 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase { $this->compiler = $compiler; $this->compiler->has_code = false; - // turn off block code extraction - $compiler->template->extract_code = false; - // check and get attributes - $this->optional_attributes = array('name'); $_attr = $this->_get_attributes($args); $saved_data = $this->_close_tag(array('function')); - // 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'] . '"'); - } $_name = trim($saved_data[0]['name'], "'"); - $compiler->template->properties['function'][$_name]['compiled'] = str_replace("\n",'_%n',$compiler->template->extracted_compiled_code); + $compiler->template->properties['function'][$_name]['compiled'] = $compiler->template->extracted_compiled_code; $this->compiler->smarty->template_functions[$_name]['compiled'] = $compiler->template->extracted_compiled_code; $this->compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter']; + // restore old code extraction status $compiler->template->extracted_compiled_code = $saved_data[1]; $compiler->template->extract_code = $saved_data[2]; return true; diff --git a/libs/sysplugins/smarty_internal_compile_include.php b/libs/sysplugins/smarty_internal_compile_include.php index c0a8fd92..933d719a 100644 --- a/libs/sysplugins/smarty_internal_compile_include.php +++ b/libs/sysplugins/smarty_internal_compile_include.php @@ -36,49 +36,17 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { eval("\$tmp = $include_file;"); if ($this->compiler->template->template_resource != $tmp) { $tpl = $compiler->smarty->createTemplate ($tmp, $compiler->template->cache_id, $compiler->template->compile_id, $compiler->template); - if ($tpl->usesCompiler() && $tpl->isExisting()) { - do { - $must_compile = false; - $prop = array(); - $compiled_tpl = $tpl->getCompiledTemplate(); - preg_match('/(\<\?php \$_smarty_tpl-\>decodeProperties\(\')(.*)(\'.*\?\>)/', $compiled_tpl, $matches); - $compiled_tpl = preg_replace(array('/(\<\?php \$_smarty_tpl-\>decodeProperties\(\')(.*)(\'.*\?\>.*\n)/', '/(\<\?php if\(\!defined\(\'SMARTY_DIR\'\)\))(.*)(\?\>.*\n)/'), '', $compiled_tpl); - // var_dump($matches, $compiled_tpl); - if (isset($matches[2])) { - $prop = unserialize($matches[2]); - foreach ($prop['file_dependency'] as $_file_to_check) { - If (is_file($_file_to_check[0])) { - $mtime = filemtime($_file_to_check[0]); - } else { - $tpl->parseResourceName($_file_to_check[0], $resource_type, $resource_name, $resource_handler); - if ($resource_type == 'file') { - $must_compile = true; // subtemplate no longer existing - break; - } - $mtime = $resource_handler->getTemplateTimestampTypeName($resource_type, $resource_name); - } - // If ($mtime != $_file_to_check[1]) { - If ($mtime > $_file_to_check[1]) { - $must_compile = true; - break; - } - } - if ($must_compile) { - // recompile - $tpl->compileTemplateSource(); - } - } - } while ($must_compile); - if (isset($prop['file_dependency'])) { - $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $prop['file_dependency']); - } - if (isset($prop['function'])) { - if (isset($compiler->template->properties['function'])) { - $compiler->template->properties['function'] = array_merge((array)$compiler->template->properties['function'], $prop['function']); - } else { - $compiler->template->properties['function'] = $prop['function']; - } - } + if ($this->compiler->template->caching) { + // needs code for cached page but no cache file + $tpl->caching = 9999; + } + if ($tpl->resource_object->usesCompiler && $tpl->isExisting()) { + // make sure that template is up to date and merge template properties + $tpl->renderTemplate(); + // get compiled code + $compiled_tpl = $tpl->getCompiledTemplate(); + // remove header code + $compiled_tpl = preg_replace('/(<\?php \/\*%%SmartyHeaderCode%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s', '', $compiled_tpl); $has_compiled_template = true; } } @@ -163,6 +131,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase { } $_output .= ""; return $_output; - } -} + } +} + ?> diff --git a/libs/sysplugins/smarty_internal_compile_block_plugin.php b/libs/sysplugins/smarty_internal_compile_private_block_plugin.php similarity index 60% rename from libs/sysplugins/smarty_internal_compile_block_plugin.php rename to libs/sysplugins/smarty_internal_compile_private_block_plugin.php index 0d668239..030f3a2f 100644 --- a/libs/sysplugins/smarty_internal_compile_block_plugin.php +++ b/libs/sysplugins/smarty_internal_compile_private_block_plugin.php @@ -11,7 +11,7 @@ /** * Smarty Internal Plugin Compile Block Plugin Class */ -class Smarty_Internal_Compile_Block_Plugin extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase { /** * Compiles code for the execution of block plugin * @@ -20,7 +20,7 @@ class Smarty_Internal_Compile_Block_Plugin extends Smarty_Internal_CompileBase { * @param object $compiler compiler object * @return string compiled code */ - public function compile($args, $compiler, $tag) + public function compile($args, $compiler, $tag, $function) { $this->compiler = $compiler; if (strlen($tag) < 6 || substr_compare($tag, 'close', -5, 5) != 0) { @@ -41,14 +41,14 @@ class Smarty_Internal_Compile_Block_Plugin extends Smarty_Internal_CompileBase { $_params = 'array(' . implode(",", $_paramsArray) . ')'; $this->_open_tag($tag, array($_params, $this->compiler->nocache)); - // not cachable? - if (isset($this->compiler->smarty->registered_plugins[$tag]) && !$this->compiler->smarty->registered_plugins[$tag][2]) { - $this->compiler->nocache = true; - } - // maybe nocache because of nocache variables + // maybe nocache because of nocache variables or nocache plugin $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; // compile code - $output = 'smarty->plugin_handler->' . $tag . '(array(' . $_params . ', null, $_smarty_tpl->smarty, &$_block_repeat, $_smarty_tpl),\'block\');while ($_block_repeat) { ob_start();?>'; + if (is_array($function)) { + $output = 'smarty, $_block_repeat, $_smarty_tpl));while ($_block_repeat) { ob_start();?>'; + } else { + $output = 'smarty, $_block_repeat, $_smarty_tpl);while ($_block_repeat) { ob_start();?>'; + } } else { // must endblock be nocache? if ($this->compiler->nocache) { @@ -59,7 +59,12 @@ class Smarty_Internal_Compile_Block_Plugin extends Smarty_Internal_CompileBase { // This tag does create output $this->compiler->has_output = true; // compile code - $output = 'smarty->plugin_handler->' . substr($tag, 0, -5) . '(array(' . $_params . ', $_block_content, $_smarty_tpl->smarty, &$_block_repeat, $_smarty_tpl),\'block\'); }?>'; + if (is_array($function)) { + var_dump('error'); + $output = 'smarty, $_block_repeat, $_smarty_tpl)); }?>'; + } else { + $output = 'smarty, $_block_repeat, $_smarty_tpl); }?>'; + } } return $output; } diff --git a/libs/sysplugins/smarty_internal_compile_function_call.php b/libs/sysplugins/smarty_internal_compile_private_function_call.php similarity index 96% rename from libs/sysplugins/smarty_internal_compile_function_call.php rename to libs/sysplugins/smarty_internal_compile_private_function_call.php index 157842bc..05f613fc 100644 --- a/libs/sysplugins/smarty_internal_compile_function_call.php +++ b/libs/sysplugins/smarty_internal_compile_private_function_call.php @@ -12,7 +12,7 @@ /** * Smarty Internal Plugin Compile Function_Call Class */ -class Smarty_Internal_Compile_Function_Call extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Function_Call extends Smarty_Internal_CompileBase { /** * Compiles the calls of user defined tags defined by {function} * diff --git a/libs/sysplugins/smarty_internal_compile_function_plugin.php b/libs/sysplugins/smarty_internal_compile_private_function_plugin.php similarity index 71% rename from libs/sysplugins/smarty_internal_compile_function_plugin.php rename to libs/sysplugins/smarty_internal_compile_private_function_plugin.php index 8d9ffab4..129b5d75 100644 --- a/libs/sysplugins/smarty_internal_compile_function_plugin.php +++ b/libs/sysplugins/smarty_internal_compile_private_function_plugin.php @@ -11,7 +11,7 @@ /** * Smarty Internal Plugin Compile Function Plugin Class */ -class Smarty_Internal_Compile_Function_Plugin extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase { /** * Compiles code for the execution of function plugin * @@ -20,7 +20,7 @@ class Smarty_Internal_Compile_Function_Plugin extends Smarty_Internal_CompileBas * @param object $compiler compiler object * @return string compiled code */ - public function compile($args, $compiler, $tag) + public function compile($args, $compiler, $tag, $function) { $this->compiler = $compiler; // This tag does create output @@ -30,10 +30,6 @@ class Smarty_Internal_Compile_Function_Plugin extends Smarty_Internal_CompileBas $this->optional_attributes = array('_any'); // check and get attributes $_attr = $this->_get_attributes($args); - // not cachable? - if (isset($this->compiler->smarty->registered_plugins[$tag]) && !$this->compiler->smarty->registered_plugins[$tag][2]) { - $this->compiler->tag_nocache = true; - } // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { @@ -45,8 +41,11 @@ class Smarty_Internal_Compile_Function_Plugin extends Smarty_Internal_CompileBas } $_params = 'array(' . implode(",", $_paramsArray) . ')'; // compile code - $output = 'smarty->plugin_handler->' . $tag . '(array(' . $_params . ',$_smarty_tpl->smarty,$_smarty_tpl),\'function\');?>'; - + if (is_array($function)) { + $output = 'smarty,$_smarty_tpl));?>'; + } else { + $output = 'smarty,$_smarty_tpl);?>'; + } return $output; } } diff --git a/libs/sysplugins/smarty_internal_compile_private_modifier.php b/libs/sysplugins/smarty_internal_compile_private_modifier.php new file mode 100644 index 00000000..a559b759 --- /dev/null +++ b/libs/sysplugins/smarty_internal_compile_private_modifier.php @@ -0,0 +1,58 @@ +compiler = $compiler; + $this->smarty = $this->compiler->smarty; + $this->required_attributes = array('modifier', 'params'); + // check and get attributes + $_attr = $this->_get_attributes($args); + // check if modifier allowed + if (!$this->compiler->template->security || $this->smarty->security_handler->isTrustedModifier($_attr['modifier'], $this->compiler)) { + // check for registered or plugin modifier + if (isset($compiler->smarty->registered_plugins['modifier'][$_attr['modifier']])) { + $function = $compiler->smarty->registered_plugins['modifier'][$_attr['modifier']][0]; + if (!is_array($function)) { + $output = "{$function}({$_attr['params']})"; + } else if (is_object($function[0])) { + $output = 'call_user_func_array($_smarty_tpl->smarty->registered_plugins[\'modifier\'][\'' . $_attr['modifier'] . '\'][0],array(' . $_attr['params'] . '))'; + } else { + $output = 'call_user_func_array(array(\'' . $function[0] . '\',\'' . $function[1] . '\'),array(' . $_attr['params'] . '))'; + } + } else if ($function = $this->compiler->getPlugin($_attr['modifier'], 'modifier')) { + if (!is_array($function)) { + $output = "{$function}({$_attr['params']})"; + } else { + $output = 'call_user_func_array(array(\'' . $function[0] . '\',\'' . $function[1] . '\'),array(' . $_attr['params'] . '))'; + } + // check if trusted PHP function + } else if (is_callable($_attr['modifier'])) { + $output = "{$_attr['modifier']}({$_attr['params']})"; + } else { + $this->compiler->trigger_template_error ("unknown modifier \"" . $_attr['modifier'] . "\""); + } + return $output; + } + } +} + +?> diff --git a/libs/sysplugins/smarty_internal_compile_object_block_function.php b/libs/sysplugins/smarty_internal_compile_private_object_block_function.php similarity index 96% rename from libs/sysplugins/smarty_internal_compile_object_block_function.php rename to libs/sysplugins/smarty_internal_compile_private_object_block_function.php index 75a1a7d0..03c2d340 100644 --- a/libs/sysplugins/smarty_internal_compile_object_block_function.php +++ b/libs/sysplugins/smarty_internal_compile_private_object_block_function.php @@ -11,7 +11,7 @@ /** * Smarty Internal Plugin Compile Object Block Function Class */ -class Smarty_Internal_Compile_Object_Block_Function extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase { /** * Compiles code for the execution of block plugin * diff --git a/libs/sysplugins/smarty_internal_compile_object_function.php b/libs/sysplugins/smarty_internal_compile_private_object_function.php similarity index 94% rename from libs/sysplugins/smarty_internal_compile_object_function.php rename to libs/sysplugins/smarty_internal_compile_private_object_function.php index e0962ca3..d147949a 100644 --- a/libs/sysplugins/smarty_internal_compile_object_function.php +++ b/libs/sysplugins/smarty_internal_compile_private_object_function.php @@ -11,7 +11,7 @@ /** * Smarty Internal Plugin Compile Object Function Class */ -class Smarty_Internal_Compile_Object_Function extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase { /** * Compiles code for the execution of function plugin * diff --git a/libs/sysplugins/smarty_internal_compile_print_expression.php b/libs/sysplugins/smarty_internal_compile_private_print_expression.php similarity index 88% rename from libs/sysplugins/smarty_internal_compile_print_expression.php rename to libs/sysplugins/smarty_internal_compile_private_print_expression.php index 57ed85df..5fb7912a 100644 --- a/libs/sysplugins/smarty_internal_compile_print_expression.php +++ b/libs/sysplugins/smarty_internal_compile_private_print_expression.php @@ -11,7 +11,7 @@ /** * Smarty Internal Plugin Compile Print Expression Class */ -class Smarty_Internal_Compile_Print_Expression extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase { /** * Compiles code for gererting output from any expression * @@ -49,7 +49,7 @@ class Smarty_Internal_Compile_Print_Expression extends Smarty_Internal_CompileBa // display value $this->compiler->has_output = true; if (isset($this->compiler->smarty->registered_filters['variable'])) { - $output = 'smarty->filter_handler->execute(\'variable\', ' . $_attr['value'] . ',' . $_attr['filter'] . ');?>'; + $output = 'smarty);?>'; } else { $output = ''; } diff --git a/libs/sysplugins/smarty_internal_compile_private_registered_block.php b/libs/sysplugins/smarty_internal_compile_private_registered_block.php new file mode 100644 index 00000000..218ec0e6 --- /dev/null +++ b/libs/sysplugins/smarty_internal_compile_private_registered_block.php @@ -0,0 +1,79 @@ +compiler = $compiler; + if (strlen($tag) < 6 || substr_compare($tag, 'close', -5, 5) != 0) { + // opening tag of block plugin + $this->required_attributes = array(); + $this->optional_attributes = array('_any'); + // check and get attributes + $_attr = $this->_get_attributes($args); + // convert attributes into parameter array string + $_paramsArray = array(); + foreach ($_attr as $_key => $_value) { + if (is_int($_key)) { + $_paramsArray[] = "$_key=>$_value"; + } else { + $_paramsArray[] = "'$_key'=>$_value"; + } + } + $_params = 'array(' . implode(",", $_paramsArray) . ')'; + + $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]; + // compile code + if (!is_array($function)) { + $output = 'smarty, $_block_repeat, $_smarty_tpl);while ($_block_repeat) { ob_start();?>'; + } else if (is_object($function[0])) { + $output = 'smarty->registered_plugins[\'block\'][\'' . $tag . '\'][0],array(' . $_params . ', null, $_smarty_tpl->smarty, $_block_repeat, $_smarty_tpl));while ($_block_repeat) { ob_start();?>'; + } else { + $output = 'smarty, $_block_repeat, $_smarty_tpl));while ($_block_repeat) { ob_start();?>'; + } + } else { + // must endblock be nocache? + if ($this->compiler->nocache) { + $this->compiler->tag_nocache = true; + } + $base_tag = substr($tag, 0, -5); + // closing tag of block plugin, restore nocache + 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]; + // compile code + if (!is_array($function)) { + $output = 'smarty, $_block_repeat, $_smarty_tpl); }?>'; + } else if (is_object($function[0])) { + $output = 'smarty->registered_plugins[\'block\'][\'' . $base_tag . '\'][0],array(' . $_params . ', $_block_content, $_smarty_tpl->smarty, $_block_repeat, $_smarty_tpl)); }?>'; + } else { + $output = 'smarty, $_block_repeat, $_smarty_tpl)); }?>'; + } + } + return $output; + } +} + +?> diff --git a/libs/sysplugins/smarty_internal_compile_private_registered_function.php b/libs/sysplugins/smarty_internal_compile_private_registered_function.php new file mode 100644 index 00000000..e38ee4b8 --- /dev/null +++ b/libs/sysplugins/smarty_internal_compile_private_registered_function.php @@ -0,0 +1,51 @@ +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); + // not cachable? + $this->compiler->tag_nocache = !$compiler->smarty->registered_plugins['function'][$tag][1]; + // convert attributes into parameter array string + $_paramsArray = array(); + foreach ($_attr as $_key => $_value) { + if (is_int($_key)) { + $_paramsArray[] = "$_key=>$_value"; + } else { + $_paramsArray[] = "'$_key'=>$_value"; + } + } + $_params = 'array(' . implode(",", $_paramsArray) . ')'; + // compile code + $output = 'smarty->registered_plugins[\'function\'][\'' . $tag . '\'][0],array(' . $_params . ',$_smarty_tpl->smarty,$_smarty_tpl));?>'; + return $output; + } +} + +?> diff --git a/libs/sysplugins/smarty_internal_compile_special_smarty_variable.php b/libs/sysplugins/smarty_internal_compile_private_special_variable.php similarity index 94% rename from libs/sysplugins/smarty_internal_compile_special_smarty_variable.php rename to libs/sysplugins/smarty_internal_compile_private_special_variable.php index 2405385d..9e261625 100644 --- a/libs/sysplugins/smarty_internal_compile_special_smarty_variable.php +++ b/libs/sysplugins/smarty_internal_compile_private_special_variable.php @@ -11,7 +11,7 @@ /** * Smarty Internal Plugin Compile special Smarty Variable Class */ -class Smarty_Internal_Compile_Special_Smarty_Variable extends Smarty_Internal_CompileBase { +class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase { /** * Compiles code for the speical $smarty variables * @@ -57,7 +57,7 @@ class Smarty_Internal_Compile_Special_Smarty_Variable extends Smarty_Internal_Co return "'$_template_dir_name'"; case 'version': - $_version = Smarty::$_version; + $_version = Smarty::SMARTY_VERSION; return "'$_version'"; case 'const': @@ -78,7 +78,7 @@ class Smarty_Internal_Compile_Special_Smarty_Variable extends Smarty_Internal_Co return "'$_rdelim'"; default: - $compiler->trigger_template_error('$smarty.' . trim($_index[0], "'") . ' is an unknown reference'); + $compiler->trigger_template_error('$smarty.' . trim($_index[0], "'") . ' is invalid'); break; } if (isset($_index[1])) { diff --git a/libs/sysplugins/smarty_internal_compilebase.php b/libs/sysplugins/smarty_internal_compilebase.php index 61096420..7a398f53 100644 --- a/libs/sysplugins/smarty_internal_compilebase.php +++ b/libs/sysplugins/smarty_internal_compilebase.php @@ -8,12 +8,6 @@ * @author Uwe Tews */ -/* -interface TagCompilerInterface { - public function compile($args, $compiler); -} -*/ - /** * This class does extend all internal compile plugins */ diff --git a/libs/sysplugins/smarty_internal_configfilelexer.php b/libs/sysplugins/smarty_internal_configfilelexer.php index 5034002f..d7e14164 100644 --- a/libs/sysplugins/smarty_internal_configfilelexer.php +++ b/libs/sysplugins/smarty_internal_configfilelexer.php @@ -28,7 +28,7 @@ class Smarty_Internal_Configfilelexer { // set instance object self::instance($this); - $this->data = $data; + $this->data = $data . "\n"; //now all lines are \n-terminated $this->counter = 0; $this->line = 1; $this->smarty = $smarty; @@ -69,6 +69,7 @@ class Smarty_Internal_Configfilelexer + function yylex1() { $tokenMap = array ( @@ -79,16 +80,12 @@ class Smarty_Internal_Configfilelexer 5 => 0, 6 => 0, 7 => 0, - 8 => 1, - 10 => 0, - 11 => 0, - 12 => 0, - 13 => 0, + 8 => 0, ); if ($this->counter >= strlen($this->data)) { return false; // end of input } - $yy_global_pattern = "/^(\\s*#)|^('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*')|^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^((\n|\r\n))|^([\s]+)|^(\\.)|^([0-9]*[a-zA-Z_]\\w*)|^(.)/"; + $yy_global_pattern = "/^(#)|^(\\[)|^(\\])|^(=)|^([ \t\r]+)|^(\n)|^(\\.)|^(\\w+)/"; do { if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { @@ -141,63 +138,321 @@ class Smarty_Internal_Configfilelexer function yy_r1_1($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; + $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; + $this->yypushstate(self::COMMENT); } function yy_r1_2($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_SI_QSTR; + $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; } function yy_r1_3($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_ML_QSTR; + $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; } function yy_r1_4($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_DO_QSTR; + $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; + $this->yypushstate(self::VALUE); } function yy_r1_5($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; + return false; } function yy_r1_6($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; + $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; } function yy_r1_7($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; + $this->token = Smarty_Internal_Configfileparser::TPC_DOT; } function yy_r1_8($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_EOL; + $this->token = Smarty_Internal_Configfileparser::TPC_ID; } - function yy_r1_10($yy_subpatterns) + + + + function yylex2() + { + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 0, + 9 => 0, + ); + if ($this->counter >= strlen($this->data)) { + return false; // end of input + } + $yy_global_pattern = "/^([ \t\r]+)|^(\\d+\\.\\d+(?=[ \t\r]*[\n#]))|^(\\d+(?=[ \t\r]*[\n#]))|^('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#]))|^(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#]))|^(\"\"\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\"\"(?=[ \t\r]*[\n#]))|^([a-zA-Z]+(?=[ \t\r]*[\n#]))|^([^\n]+?(?=[ \t\r]*\n))|^(\n)/"; + + do { + if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { + $yysubmatches = $yymatches; + $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns + if (!count($yymatches)) { + throw new Exception('Error: lexing failed because a rule matched' . + 'an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state VALUE'); + } + next($yymatches); // skip global match + $this->token = key($yymatches); // token number + if ($tokenMap[$this->token]) { + // extract sub-patterns for passing to lex function + $yysubmatches = array_slice($yysubmatches, $this->token + 1, + $tokenMap[$this->token]); + } else { + $yysubmatches = array(); + } + $this->value = current($yymatches); // token value + $r = $this->{'yy_r2_' . $this->token}($yysubmatches); + if ($r === null) { + $this->counter += strlen($this->value); + $this->line += substr_count($this->value, "\n"); + // accept this token + return true; + } elseif ($r === true) { + // we have changed state + // process this token in the new state + return $this->yylex(); + } elseif ($r === false) { + $this->counter += strlen($this->value); + $this->line += substr_count($this->value, "\n"); + if ($this->counter >= strlen($this->data)) { + return false; // end of input + } + // skip this token + continue; + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); + } + break; + } while (true); + + } // end function + + + const VALUE = 2; + function yy_r2_1($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_SPACE; + return false; } - function yy_r1_11($yy_subpatterns) + function yy_r2_2($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_DOT; + $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; + $this->yypopstate(); } - function yy_r1_12($yy_subpatterns) + function yy_r2_3($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_ID; + $this->token = Smarty_Internal_Configfileparser::TPC_INT; + $this->yypopstate(); } - function yy_r1_13($yy_subpatterns) + function yy_r2_4($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; + $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; + $this->yypopstate(); } + function yy_r2_5($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; + $this->yypopstate(); + } + function yy_r2_6($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_DOUBLE_QUOTED_STRING; + $this->yypopstate(); + } + function yy_r2_7($yy_subpatterns) + { + + if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) { + $this->yypopstate(); + $this->yypushstate(self::NAKED_STRING_VALUE); + return true; //reprocess in new state + } else { + $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; + $this->yypopstate(); + } + } + function yy_r2_8($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->yypopstate(); + } + function yy_r2_9($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->value = ""; + $this->yypopstate(); + } + + + + function yylex3() + { + $tokenMap = array ( + 1 => 0, + ); + if ($this->counter >= strlen($this->data)) { + return false; // end of input + } + $yy_global_pattern = "/^([^\n]+?(?=[ \t\r]*\n))/"; + + do { + if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { + $yysubmatches = $yymatches; + $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns + if (!count($yymatches)) { + throw new Exception('Error: lexing failed because a rule matched' . + 'an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state NAKED_STRING_VALUE'); + } + next($yymatches); // skip global match + $this->token = key($yymatches); // token number + if ($tokenMap[$this->token]) { + // extract sub-patterns for passing to lex function + $yysubmatches = array_slice($yysubmatches, $this->token + 1, + $tokenMap[$this->token]); + } else { + $yysubmatches = array(); + } + $this->value = current($yymatches); // token value + $r = $this->{'yy_r3_' . $this->token}($yysubmatches); + if ($r === null) { + $this->counter += strlen($this->value); + $this->line += substr_count($this->value, "\n"); + // accept this token + return true; + } elseif ($r === true) { + // we have changed state + // process this token in the new state + return $this->yylex(); + } elseif ($r === false) { + $this->counter += strlen($this->value); + $this->line += substr_count($this->value, "\n"); + if ($this->counter >= strlen($this->data)) { + return false; // end of input + } + // skip this token + continue; + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); + } + break; + } while (true); + + } // end function + + + const NAKED_STRING_VALUE = 3; + function yy_r3_1($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->yypopstate(); + } + + + + function yylex4() + { + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 0, + ); + if ($this->counter >= strlen($this->data)) { + return false; // end of input + } + $yy_global_pattern = "/^([ \t\r]+)|^([^\n]+?(?=[ \t\r]*\n))|^(\n)/"; + + do { + if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { + $yysubmatches = $yymatches; + $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns + if (!count($yymatches)) { + throw new Exception('Error: lexing failed because a rule matched' . + 'an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state COMMENT'); + } + next($yymatches); // skip global match + $this->token = key($yymatches); // token number + if ($tokenMap[$this->token]) { + // extract sub-patterns for passing to lex function + $yysubmatches = array_slice($yysubmatches, $this->token + 1, + $tokenMap[$this->token]); + } else { + $yysubmatches = array(); + } + $this->value = current($yymatches); // token value + $r = $this->{'yy_r4_' . $this->token}($yysubmatches); + if ($r === null) { + $this->counter += strlen($this->value); + $this->line += substr_count($this->value, "\n"); + // accept this token + return true; + } elseif ($r === true) { + // we have changed state + // process this token in the new state + return $this->yylex(); + } elseif ($r === false) { + $this->counter += strlen($this->value); + $this->line += substr_count($this->value, "\n"); + if ($this->counter >= strlen($this->data)) { + return false; // end of input + } + // skip this token + continue; + } } else { + throw new Exception('Unexpected input at line' . $this->line . + ': ' . $this->data[$this->counter]); + } + break; + } while (true); + + } // end function + + + const COMMENT = 4; + function yy_r4_1($yy_subpatterns) + { + + return false; + } + function yy_r4_2($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + } + function yy_r4_3($yy_subpatterns) + { + + $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; + $this->yypopstate(); + } + } ?> diff --git a/libs/sysplugins/smarty_internal_configfileparser.php b/libs/sysplugins/smarty_internal_configfileparser.php index 299cdbd7..68fe97a0 100644 --- a/libs/sysplugins/smarty_internal_configfileparser.php +++ b/libs/sysplugins/smarty_internal_configfileparser.php @@ -100,8 +100,6 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser $this->lex = $lex; $this->smarty = $compiler->smarty; $this->compiler = $compiler; - $this->current_section = null; - $this->hidden_section = false; } public static function &instance($new_instance = null) { @@ -110,70 +108,145 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser $instance = $new_instance; return $instance; } - -#line 107 "smarty_internal_configfileparser.php" - const TPC_OTHER = 1; - const TPC_OPENB = 2; + private function parse_bool($str) { + if (in_array(strtolower($str) ,array('on','yes','true'))) { + $res = true; + } else { + assert(in_array(strtolower($str), array('off','no','false'))); + $res = false; + } + return $res; + } + + private static $escapes_single = Array('\\' => '\\', + '\'' => '\''); + private static function parse_single_quoted_string($qstr) { + $escaped_string = substr($qstr, 1, strlen($qstr)-2); //remove outer quotes + + $ss = preg_split('/(\\\\.)/', $escaped_string, -1, PREG_SPLIT_DELIM_CAPTURE); + + $str = ""; + foreach ($ss as $s) { + if (strlen($s) === 2 && $s[0] === '\\') { + if (isset(self::$escapes_single[$s[1]])) { + $s = self::$escapes_single[$s[1]]; + } + } + + $str .= $s; + } + + return $str; + } + + private static function parse_double_quoted_string($qstr) { + $inner_str = substr($qstr, 1, strlen($qstr)-2); + return stripcslashes($inner_str); + } + + private static function parse_tripple_double_quoted_string($qstr) { + $inner_str = substr($qstr, 3, strlen($qstr)-6); + return stripcslashes($inner_str); + } + + private function set_var(Array $var, Array &$target_array) { + $key = $var["key"]; + $value = $var["value"]; + + if ($this->smarty->config_overwrite || !isset($target_array['vars'][$key])) { + $target_array['vars'][$key] = $value; + } else { + settype($target_array['vars'][$key], 'array'); + $target_array['vars'][$key][] = $value; + } + } + + private function add_global_vars(Array $vars) { + if (!isset($this->compiler->config_data['vars'])) { + $this->compiler->config_data['vars'] = Array(); + } + foreach ($vars as $var) { + $this->set_var($var, $this->compiler->config_data); + } + } + + private function add_section_vars($section_name, Array $vars) { + if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) { + $this->compiler->config_data['sections'][$section_name]['vars'] = Array(); + } + foreach ($vars as $var) { + $this->set_var($var, $this->compiler->config_data['sections'][$section_name]); + } + } +#line 175 "smarty_internal_configfileparser.php" + + const TPC_OPENB = 1; + const TPC_ID = 2; const TPC_CLOSEB = 3; const TPC_DOT = 4; - const TPC_BOOLEANTRUE = 5; - const TPC_BOOLEANFALSE = 6; - const TPC_SI_QSTR = 7; - const TPC_DO_QSTR = 8; - const TPC_EQUAL = 9; - const TPC_SPACE = 10; - const TPC_ID = 11; - const TPC_EOL = 12; - const TPC_COMMENTSTART = 13; - const TPC_ML_QSTR = 14; - const YY_NO_ACTION = 49; - const YY_ACCEPT_ACTION = 48; - const YY_ERROR_ACTION = 47; + const TPC_EQUAL = 5; + const TPC_FLOAT = 6; + const TPC_INT = 7; + const TPC_BOOL = 8; + const TPC_SINGLE_QUOTED_STRING = 9; + const TPC_DOUBLE_QUOTED_STRING = 10; + const TPC_TRIPPLE_DOUBLE_QUOTED_STRING = 11; + const TPC_NAKED_STRING = 12; + const TPC_NEWLINE = 13; + const TPC_COMMENTSTART = 14; + const YY_NO_ACTION = 58; + const YY_ACCEPT_ACTION = 57; + const YY_ERROR_ACTION = 56; - const YY_SZ_ACTTAB = 37; + const YY_SZ_ACTTAB = 53; static public $yy_action = array( - /* 0 */ 9, 21, 20, 18, 3, 14, 27, 26, 28, 12, - /* 10 */ 15, 2, 21, 6, 16, 7, 5, 14, 48, 4, - /* 20 */ 17, 11, 24, 23, 1, 8, 23, 10, 13, 21, - /* 30 */ 27, 25, 22, 43, 43, 43, 19, + /* 0 */ 24, 34, 33, 32, 31, 35, 21, 57, 6, 14, + /* 10 */ 22, 7, 2, 9, 29, 8, 2, 9, 19, 11, + /* 20 */ 19, 11, 26, 23, 2, 9, 15, 20, 46, 2, + /* 30 */ 9, 12, 25, 46, 2, 9, 10, 17, 18, 27, + /* 40 */ 16, 5, 13, 30, 28, 46, 5, 46, 3, 4, + /* 50 */ 46, 46, 1, ); static public $yy_lookahead = array( - /* 0 */ 2, 1, 19, 19, 21, 22, 22, 7, 8, 11, - /* 10 */ 12, 13, 1, 3, 14, 20, 21, 22, 16, 17, - /* 20 */ 18, 4, 19, 12, 9, 3, 12, 11, 11, 1, - /* 30 */ 22, 19, 19, 23, 23, 23, 18, + /* 0 */ 6, 7, 8, 9, 10, 11, 12, 16, 17, 2, + /* 10 */ 19, 5, 21, 22, 19, 3, 21, 22, 13, 14, + /* 20 */ 13, 14, 19, 13, 21, 22, 2, 19, 24, 21, + /* 30 */ 22, 1, 19, 24, 21, 22, 3, 12, 13, 18, + /* 40 */ 2, 20, 4, 23, 18, 24, 20, 24, 21, 21, + /* 50 */ 24, 24, 21, ); - const YY_SHIFT_USE_DFLT = -3; - const YY_SHIFT_MAX = 13; + const YY_SHIFT_USE_DFLT = -7; + const YY_SHIFT_MAX = 17; static public $yy_shift_ofst = array( - /* 0 */ -2, 0, 11, 11, -2, 28, 14, 14, 14, 17, - /* 10 */ 10, 16, 15, 22, + /* 0 */ 7, 7, 7, 7, 7, 30, 30, -6, 5, 5, + /* 10 */ 5, 25, 38, 24, 6, 12, 33, 10, ); - const YY_REDUCE_USE_DFLT = -18; - const YY_REDUCE_MAX = 8; + const YY_REDUCE_USE_DFLT = -10; + const YY_REDUCE_MAX = 10; static public $yy_reduce_ofst = array( - /* 0 */ 2, -5, -17, -16, 18, 8, 13, 12, 3, + /* 0 */ -9, 8, 13, 3, -5, 21, 26, 20, 31, 28, + /* 10 */ 27, ); static public $yyExpectedTokens = array( - /* 0 */ array(2, 11, 12, 13, ), - /* 1 */ array(1, 7, 8, 14, ), - /* 2 */ array(1, 12, ), - /* 3 */ array(1, 12, ), - /* 4 */ array(2, 11, 12, 13, ), + /* 0 */ array(2, 13, 14, ), + /* 1 */ array(2, 13, 14, ), + /* 2 */ array(2, 13, 14, ), + /* 3 */ array(2, 13, 14, ), + /* 4 */ array(2, 13, 14, ), /* 5 */ array(1, ), - /* 6 */ array(12, ), - /* 7 */ array(12, ), - /* 8 */ array(12, ), - /* 9 */ array(4, 11, ), - /* 10 */ array(3, ), - /* 11 */ array(11, ), - /* 12 */ array(9, ), - /* 13 */ array(3, ), - /* 14 */ array(), - /* 15 */ array(), - /* 16 */ array(), - /* 17 */ array(), + /* 6 */ array(1, ), + /* 7 */ array(6, 7, 8, 9, 10, 11, 12, ), + /* 8 */ array(13, 14, ), + /* 9 */ array(13, 14, ), + /* 10 */ array(13, 14, ), + /* 11 */ array(12, 13, ), + /* 12 */ array(2, 4, ), + /* 13 */ array(2, ), + /* 14 */ array(5, ), + /* 15 */ array(3, ), + /* 16 */ array(3, ), + /* 17 */ array(13, ), /* 18 */ array(), /* 19 */ array(), /* 20 */ array(), @@ -185,35 +258,28 @@ static public $yy_action = array( /* 26 */ array(), /* 27 */ array(), /* 28 */ array(), + /* 29 */ array(), + /* 30 */ array(), + /* 31 */ array(), + /* 32 */ array(), + /* 33 */ array(), + /* 34 */ array(), + /* 35 */ array(), ); static public $yy_default = array( - /* 0 */ 47, 47, 43, 43, 29, 38, 43, 43, 43, 47, - /* 10 */ 47, 47, 47, 47, 45, 35, 41, 30, 37, 31, - /* 20 */ 36, 46, 33, 42, 32, 34, 39, 44, 40, + /* 0 */ 44, 44, 44, 44, 44, 39, 39, 56, 56, 56, + /* 10 */ 56, 56, 56, 56, 56, 56, 56, 56, 54, 53, + /* 20 */ 41, 52, 37, 55, 46, 42, 40, 38, 36, 43, + /* 30 */ 45, 50, 49, 48, 47, 51, ); - const YYNOCODE = 24; + const YYNOCODE = 25; const YYSTACKDEPTH = 100; - const YYNSTATE = 29; - const YYNRULE = 18; + const YYNSTATE = 36; + const YYNRULE = 20; const YYERRORSYMBOL = 15; const YYERRSYMDT = 'yy0'; - const YYFALLBACK = 1; + const YYFALLBACK = 0; static public $yyFallback = array( - 0, /* $ => nothing */ - 0, /* OTHER => nothing */ - 1, /* OPENB => OTHER */ - 1, /* CLOSEB => OTHER */ - 1, /* DOT => OTHER */ - 1, /* BOOLEANTRUE => OTHER */ - 1, /* BOOLEANFALSE => OTHER */ - 1, /* SI_QSTR => OTHER */ - 1, /* DO_QSTR => OTHER */ - 1, /* EQUAL => OTHER */ - 1, /* SPACE => OTHER */ - 1, /* ID => OTHER */ - 0, /* EOL => nothing */ - 0, /* COMMENTSTART => nothing */ - 0, /* ML_QSTR => nothing */ ); static function Trace($TraceFILE, $zTracePrompt) { @@ -239,33 +305,35 @@ static public $yy_action = array( public $yystack = array(); /* The parser's stack */ public $yyTokenName = array( - '$', 'OTHER', 'OPENB', 'CLOSEB', - 'DOT', 'BOOLEANTRUE', 'BOOLEANFALSE', 'SI_QSTR', - 'DO_QSTR', 'EQUAL', 'SPACE', 'ID', - 'EOL', 'COMMENTSTART', 'ML_QSTR', 'error', - 'start', 'config', 'config_element', 'opteol', - 'value', 'text', 'textelement', + '$', 'OPENB', 'ID', 'CLOSEB', + 'DOT', 'EQUAL', 'FLOAT', 'INT', + 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING', 'TRIPPLE_DOUBLE_QUOTED_STRING', + 'NAKED_STRING', 'NEWLINE', 'COMMENTSTART', 'error', + 'start', 'global_vars', 'sections', 'var_list', + 'section', 'newline', 'var', 'value', ); static public $yyRuleName = array( - /* 0 */ "start ::= config", - /* 1 */ "config ::= config_element", - /* 2 */ "config ::= config config_element", - /* 3 */ "config_element ::= OPENB ID CLOSEB opteol", - /* 4 */ "config_element ::= OPENB DOT ID CLOSEB opteol", - /* 5 */ "config_element ::= ID EQUAL value opteol", - /* 6 */ "config_element ::= EOL", - /* 7 */ "config_element ::= COMMENTSTART opteol", - /* 8 */ "config_element ::= COMMENTSTART text opteol", - /* 9 */ "value ::= text", - /* 10 */ "value ::= SI_QSTR", - /* 11 */ "value ::= DO_QSTR", - /* 12 */ "value ::= ML_QSTR", - /* 13 */ "opteol ::= EOL", - /* 14 */ "opteol ::=", - /* 15 */ "text ::= text textelement", - /* 16 */ "text ::= textelement", - /* 17 */ "textelement ::= OTHER", + /* 0 */ "start ::= global_vars sections", + /* 1 */ "global_vars ::= var_list", + /* 2 */ "sections ::= section sections", + /* 3 */ "sections ::=", + /* 4 */ "section ::= OPENB ID CLOSEB newline var_list", + /* 5 */ "section ::= OPENB DOT ID CLOSEB newline var_list", + /* 6 */ "var_list ::= newline var_list", + /* 7 */ "var_list ::= var newline var_list", + /* 8 */ "var_list ::=", + /* 9 */ "var ::= ID EQUAL value", + /* 10 */ "value ::= FLOAT", + /* 11 */ "value ::= INT", + /* 12 */ "value ::= BOOL", + /* 13 */ "value ::= SINGLE_QUOTED_STRING", + /* 14 */ "value ::= DOUBLE_QUOTED_STRING", + /* 15 */ "value ::= TRIPPLE_DOUBLE_QUOTED_STRING", + /* 16 */ "value ::= NAKED_STRING", + /* 17 */ "newline ::= NEWLINE", + /* 18 */ "newline ::= COMMENTSTART NEWLINE", + /* 19 */ "newline ::= COMMENTSTART NAKED_STRING NEWLINE", ); function tokenName($tokenType) @@ -539,95 +607,92 @@ static public $yy_action = array( } static public $yyRuleInfo = array( - array( 'lhs' => 16, 'rhs' => 1 ), + array( 'lhs' => 16, 'rhs' => 2 ), array( 'lhs' => 17, 'rhs' => 1 ), - array( 'lhs' => 17, 'rhs' => 2 ), - array( 'lhs' => 18, 'rhs' => 4 ), - array( 'lhs' => 18, 'rhs' => 5 ), - array( 'lhs' => 18, 'rhs' => 4 ), - array( 'lhs' => 18, 'rhs' => 1 ), array( 'lhs' => 18, 'rhs' => 2 ), - array( 'lhs' => 18, 'rhs' => 3 ), - array( 'lhs' => 20, 'rhs' => 1 ), - array( 'lhs' => 20, 'rhs' => 1 ), - array( 'lhs' => 20, 'rhs' => 1 ), - array( 'lhs' => 20, 'rhs' => 1 ), - array( 'lhs' => 19, 'rhs' => 1 ), + array( 'lhs' => 18, 'rhs' => 0 ), + array( 'lhs' => 20, 'rhs' => 5 ), + array( 'lhs' => 20, 'rhs' => 6 ), + array( 'lhs' => 19, 'rhs' => 2 ), + array( 'lhs' => 19, 'rhs' => 3 ), array( 'lhs' => 19, 'rhs' => 0 ), - array( 'lhs' => 21, 'rhs' => 2 ), + array( 'lhs' => 22, 'rhs' => 3 ), + array( 'lhs' => 23, 'rhs' => 1 ), + array( 'lhs' => 23, 'rhs' => 1 ), + array( 'lhs' => 23, 'rhs' => 1 ), + array( 'lhs' => 23, 'rhs' => 1 ), + array( 'lhs' => 23, 'rhs' => 1 ), + array( 'lhs' => 23, 'rhs' => 1 ), + array( 'lhs' => 23, 'rhs' => 1 ), array( 'lhs' => 21, 'rhs' => 1 ), - array( 'lhs' => 22, 'rhs' => 1 ), + array( 'lhs' => 21, 'rhs' => 2 ), + array( 'lhs' => 21, 'rhs' => 3 ), ); static public $yyReduceMap = array( 0 => 0, + 2 => 0, + 3 => 0, + 17 => 0, + 18 => 0, + 19 => 0, 1 => 1, - 9 => 1, - 16 => 1, - 17 => 1, - 2 => 2, - 15 => 2, - 3 => 3, 4 => 4, 5 => 5, 6 => 6, - 7 => 6, - 8 => 6, + 16 => 6, + 7 => 7, + 8 => 8, + 9 => 9, 10 => 10, 11 => 11, - 12 => 11, + 12 => 12, + 13 => 13, + 14 => 14, + 15 => 15, ); -#line 67 "smarty_internal_configfileparser.y" - function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 577 "smarty_internal_configfileparser.php" -#line 73 "smarty_internal_configfileparser.y" - function yy_r1(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 580 "smarty_internal_configfileparser.php" -#line 75 "smarty_internal_configfileparser.y" - function yy_r2(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 583 "smarty_internal_configfileparser.php" -#line 81 "smarty_internal_configfileparser.y" - function yy_r3(){ $this->hidden_section = false; $this->current_section = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue =''; } -#line 586 "smarty_internal_configfileparser.php" -#line 83 "smarty_internal_configfileparser.y" - function yy_r4(){ if ($this->smarty->config_read_hidden) { - $this->hidden_section = false; $this->current_section = $this->yystack[$this->yyidx + -2]->minor; - } else {$this->hidden_section = true; } $this->_retvalue =''; } -#line 591 "smarty_internal_configfileparser.php" -#line 87 "smarty_internal_configfileparser.y" - function yy_r5(){if (!$this->hidden_section) { - $value=$this->yystack[$this->yyidx + -1]->minor; - if ($this->smarty->config_booleanize) { - if (in_array(strtolower($value),array('on','yes','true'))) - $value = true; - else if (in_array(strtolower($value),array('off','no','false'))) - $value = false; - } - if ($this->current_section == null) { - if ($this->smarty->config_overwrite || !isset($this->compiler->config_data['vars'][$this->yystack[$this->yyidx + -3]->minor])) { - $this->compiler->config_data['vars'][$this->yystack[$this->yyidx + -3]->minor]=$value; - } else { - settype($this->compiler->config_data['vars'][$this->yystack[$this->yyidx + -3]->minor], 'array'); - $this->compiler->config_data['vars'][$this->yystack[$this->yyidx + -3]->minor][]=$value; - } - } else { - if ($this->smarty->config_overwrite || !isset($this->compiler->config_data['sections'][$this->current_section]['vars'][$this->yystack[$this->yyidx + -3]->minor])) { - $this->compiler->config_data['sections'][$this->current_section]['vars'][$this->yystack[$this->yyidx + -3]->minor]=$value; - } else { - settype($this->compiler->config_data['sections'][$this->current_section]['vars'][$this->yystack[$this->yyidx + -3]->minor], 'array'); - $this->compiler->config_data['sections'][$this->current_section]['vars'][$this->yystack[$this->yyidx + -3]->minor][]=$value; - } - }} $this->_retvalue =''; } -#line 616 "smarty_internal_configfileparser.php" -#line 111 "smarty_internal_configfileparser.y" - function yy_r6(){ $this->_retvalue =''; } -#line 619 "smarty_internal_configfileparser.php" -#line 116 "smarty_internal_configfileparser.y" - function yy_r10(){$this->_retvalue = trim($this->yystack[$this->yyidx + 0]->minor,"'"); } -#line 622 "smarty_internal_configfileparser.php" -#line 117 "smarty_internal_configfileparser.y" - function yy_r11(){$this->_retvalue = trim($this->yystack[$this->yyidx + 0]->minor,'"'); } -#line 625 "smarty_internal_configfileparser.php" +#line 127 "smarty_internal_configfileparser.y" + function yy_r0(){ $this->_retvalue = null; } +#line 651 "smarty_internal_configfileparser.php" +#line 130 "smarty_internal_configfileparser.y" + function yy_r1(){ $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null; } +#line 654 "smarty_internal_configfileparser.php" +#line 136 "smarty_internal_configfileparser.y" + function yy_r4(){ $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null; } +#line 657 "smarty_internal_configfileparser.php" +#line 137 "smarty_internal_configfileparser.y" + function yy_r5(){ if ($this->smarty->config_read_hidden) { $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor); } $this->_retvalue = null; } +#line 660 "smarty_internal_configfileparser.php" +#line 141 "smarty_internal_configfileparser.y" + function yy_r6(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 663 "smarty_internal_configfileparser.php" +#line 142 "smarty_internal_configfileparser.y" + function yy_r7(){ $this->_retvalue = array_merge(Array($this->yystack[$this->yyidx + -2]->minor), $this->yystack[$this->yyidx + 0]->minor); } +#line 666 "smarty_internal_configfileparser.php" +#line 143 "smarty_internal_configfileparser.y" + function yy_r8(){ $this->_retvalue = Array(); } +#line 669 "smarty_internal_configfileparser.php" +#line 147 "smarty_internal_configfileparser.y" + function yy_r9(){ $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + -2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor); } +#line 672 "smarty_internal_configfileparser.php" +#line 149 "smarty_internal_configfileparser.y" + function yy_r10(){ $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor; } +#line 675 "smarty_internal_configfileparser.php" +#line 150 "smarty_internal_configfileparser.y" + function yy_r11(){ $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor; } +#line 678 "smarty_internal_configfileparser.php" +#line 151 "smarty_internal_configfileparser.y" + function yy_r12(){ $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor); } +#line 681 "smarty_internal_configfileparser.php" +#line 152 "smarty_internal_configfileparser.y" + function yy_r13(){ $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor); } +#line 684 "smarty_internal_configfileparser.php" +#line 153 "smarty_internal_configfileparser.y" + function yy_r14(){ $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); } +#line 687 "smarty_internal_configfileparser.php" +#line 154 "smarty_internal_configfileparser.y" + function yy_r15(){ $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); } +#line 690 "smarty_internal_configfileparser.php" private $_retvalue; @@ -684,12 +749,12 @@ static public $yy_action = array( function yy_syntax_error($yymajor, $TOKEN) { -#line 52 "smarty_internal_configfileparser.y" +#line 120 "smarty_internal_configfileparser.y" $this->internalError = true; $this->yymajor = $yymajor; $this->compiler->trigger_config_file_error(); -#line 688 "smarty_internal_configfileparser.php" +#line 753 "smarty_internal_configfileparser.php" } function yy_accept() @@ -700,13 +765,13 @@ static public $yy_action = array( while ($this->yyidx >= 0) { $stack = $this->yy_pop_parser_stack(); } -#line 44 "smarty_internal_configfileparser.y" +#line 112 "smarty_internal_configfileparser.y" $this->successful = !$this->internalError; $this->internalError = false; $this->retvalue = $this->_retvalue; //echo $this->retvalue."\n\n"; -#line 706 "smarty_internal_configfileparser.php" +#line 771 "smarty_internal_configfileparser.php" } function doParse($yymajor, $yytokenvalue) diff --git a/libs/sysplugins/smarty_internal_templatebase.php b/libs/sysplugins/smarty_internal_data.php similarity index 94% rename from libs/sysplugins/smarty_internal_templatebase.php rename to libs/sysplugins/smarty_internal_data.php index b523a296..61b9b52b 100644 --- a/libs/sysplugins/smarty_internal_templatebase.php +++ b/libs/sysplugins/smarty_internal_data.php @@ -1,7 +1,7 @@ buildTemplateId ($template, $cache_id, $compile_id); // already in template cache? + $_templateId = crc32($template . $cache_id . $compile_id); if (isset($this->smarty->template_objects[$_templateId]) && $this->smarty->caching) { // return cached template object $tpl = $this->smarty->template_objects[$_templateId]; @@ -323,21 +323,6 @@ class Smarty_Internal_TemplateBase { return $tpl; } - /** - * generates a template id - * - * @param string $_resource the resource handle of the template file - * @param mixed $_cache_id cache id to be used with this template - * @param mixed $_compile_id compile id to be used with this template - * @returns string a unique template id - */ - function buildTemplateId ($_resource, $_cache_id, $_compile_id) - { - $_cache_id = isset($_cache_id) ? preg_replace('![^\w\|]+!','_',$_cache_id) : null; - $_compile_id = isset($_compile_id) ? preg_replace('![^\w\|]+!','_',$_compile_id) : null; - return crc32($_resource . $_cache_id . $_compile_id); - } - /** * return current time * @@ -358,7 +343,7 @@ class Smarty_Internal_TemplateBase { * * @param object $parent tpl_vars next higher level of Smarty variables */ -class Smarty_Data extends Smarty_Internal_TemplateBase { +class Smarty_Data extends Smarty_Internal_Data { // array of variable objects public $tpl_vars = array(); // back pointer to parent object diff --git a/libs/sysplugins/smarty_internal_debug.php b/libs/sysplugins/smarty_internal_debug.php index 6f5d1424..831cabe6 100644 --- a/libs/sysplugins/smarty_internal_debug.php +++ b/libs/sysplugins/smarty_internal_debug.php @@ -12,7 +12,7 @@ /** * Smarty Internal Plugin Debug Class */ -class Smarty_Internal_Debug extends Smarty_Internal_TemplateBase { +class Smarty_Internal_Debug extends Smarty_Internal_Data { // template data static $template_data = array(); diff --git a/libs/sysplugins/smarty_internal_run_filter.php b/libs/sysplugins/smarty_internal_filter_handler.php similarity index 63% rename from libs/sysplugins/smarty_internal_run_filter.php rename to libs/sysplugins/smarty_internal_filter_handler.php index f62cbe75..1d81636e 100644 --- a/libs/sysplugins/smarty_internal_run_filter.php +++ b/libs/sysplugins/smarty_internal_filter_handler.php @@ -1,9 +1,9 @@ smarty = $smarty; - } +class Smarty_Internal_Filter_Handler { /** * Run filters over content * @@ -30,22 +26,22 @@ class Smarty_Internal_Run_Filter { * @param string $content the content which shall be processed by the filters * @return string the filtered content */ - public function execute($type, $content, $flag = null) + static function runFilter($type, $content, $smarty, $flag = null) { $output = $content; - if ($type != 'variable' || ($this->smarty->variable_filter && $flag !== false) || $flag === true) { + if ($type != 'variable' || ($smarty->variable_filter && $flag !== false) || $flag === true) { // loop over autoload filters of specified type - if (!empty($this->smarty->autoload_filters[$type])) { - foreach ((array)$this->smarty->autoload_filters[$type] as $name) { + if (!empty($smarty->autoload_filters[$type])) { + foreach ((array)$smarty->autoload_filters[$type] as $name) { $plugin_name = "Smarty_{$type}filter_{$name}"; - if ($this->smarty->loadPlugin($plugin_name)) { + if ($smarty->loadPlugin($plugin_name)) { // use class plugin if found if (class_exists($plugin_name, false)) { // loaded class of filter plugin - $output = call_user_func_array(array($plugin_name, 'execute'), array($output, $this->smarty)); + $output = call_user_func_array(array($plugin_name, 'execute'), array($output, $smarty)); } elseif (function_exists($plugin_name)) { // use loaded Smarty2 style plugin - $output = call_user_func_array($plugin_name, array($output, $this->smarty)); + $output = call_user_func_array($plugin_name, array($output, $smarty)); } } else { // nothing found, throw exception @@ -54,9 +50,9 @@ class Smarty_Internal_Run_Filter { } } // loop over registerd filters of specified type - if (!empty($this->smarty->registered_filters[$type])) { - foreach ($this->smarty->registered_filters[$type] as $key => $name) { - $output = call_user_func_array($this->smarty->registered_filters[$type][$key], array($output, $this->smarty)); + if (!empty($smarty->registered_filters[$type])) { + foreach ($smarty->registered_filters[$type] as $key => $name) { + $output = call_user_func_array($smarty->registered_filters[$type][$key], array($output, $smarty)); } } } diff --git a/libs/sysplugins/smarty_internal_plugin_handler.php b/libs/sysplugins/smarty_internal_plugin_handler.php deleted file mode 100644 index 367382c0..00000000 --- a/libs/sysplugins/smarty_internal_plugin_handler.php +++ /dev/null @@ -1,104 +0,0 @@ -smarty = $smarty; - } - /** - * Call a Smarty plugin - * - * @param string $name block function name - * @param array $args $args[0] = array of plugin attributes and $args[1] = plugin types to search for - */ - public function __call($name, $args) - { - if ($this->loadSmartyPlugin($name, $args[1])) { - // call plugin - return call_user_func_array($this->smarty->registered_plugins[$name][1], $args[0]); - } else { - // plugin not found - throw new Exception("Unable to load plugin {$name}"); - } - } - public function executeModifier($name, $args, $check_array) - { - if ($this->loadSmartyPlugin($name, 'modifier')) { - // call plugin - if (!$check_array || !is_array($args[0])) { - return call_user_func_array($this->smarty->registered_plugins[$name][1], $args); - } else { - $args0 = $args[0]; - foreach ($args0 as $key => $arg0) { - $args[0] = $arg0; - $result[$key] = call_user_func_array($this->smarty->registered_plugins[$name][1], $args); - } - return $result; - } - } elseif (is_callable($name)) { - if (!$check_array || !is_array($args[0])) { - return call_user_func_array($name, $args); - } else { - $args0 = $args[0]; - foreach ($args0 as $key => $arg0) { - $args[0] = $arg0; - $result[$key] = call_user_func_array($name, $args); - } - return $result; - } - } else { - // plugin not found - throw new Exception("Unable to load plugin {$name}"); - } - } - /** - * Lazy loads plugin files - * class name format: Smarty_PluginType_FuncName - * plugin filename format: plugintype.funcname.php - * - * @param string $name plugin name - * @param array $type array of plugin types to search for - */ - public function loadSmartyPlugin($name, $type) - { - // load plugin if missing - if (isset($this->smarty->registered_plugins[$name])) { - return true; - } else { - foreach ((array)$type as $plugin_type) { - $plugin = 'smarty_' . $plugin_type . '_' . $name; - if ($this->smarty->loadPlugin($plugin)) { - if (class_exists($plugin, false)) { - $plugin = array(new $plugin, 'execute'); - } - if (is_callable($plugin)) { - $this->smarty->registered_plugins[$name] = array($plugin_type, $plugin, true); - return true; - } else { - throw new Exception("Plugin \"{$name}\" not callable"); - } - } - } - } - if (!empty($this->smarty->default_plugin_handler_func)) { - if (!is_callable($this->smarty->default_plugin_handler_func)) { - throw new Exception("Default template handler not callable"); - } else { - return call_user_func_array($this->smarty->default_plugin_handler_func, array($name, $type, &$this)); - } - } - return false; - } -} - -?> diff --git a/libs/sysplugins/smarty_internal_resource_extends.php b/libs/sysplugins/smarty_internal_resource_extends.php index 81f0e78b..4a045767 100644 --- a/libs/sysplugins/smarty_internal_resource_extends.php +++ b/libs/sysplugins/smarty_internal_resource_extends.php @@ -21,6 +21,9 @@ class Smarty_Internal_Resource_Extends { public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; public $template_lexer_class = 'Smarty_Internal_Templatelexer'; public $template_parser_class = 'Smarty_Internal_Templateparser'; + // properties + public $usesCompiler = true; + public $isEvaluated = false; /** * Return flag if template source is existing @@ -135,27 +138,6 @@ class Smarty_Internal_Resource_Extends { } } - /** - * Return flag that this resource uses the compiler - * - * @return boolean true - */ - public function usesCompiler() - { - // template has tags, uses compiler - return true; - } - - /** - * Return flag that this is not evaluated - * - * @return boolean false - */ - public function isEvaluated() - { - // save the compiled file to disk, do not evaluate - return false; - } /** * Get filepath to compiled template * diff --git a/libs/sysplugins/smarty_internal_resource_file.php b/libs/sysplugins/smarty_internal_resource_file.php index db876e5e..b0a5163c 100644 --- a/libs/sysplugins/smarty_internal_resource_file.php +++ b/libs/sysplugins/smarty_internal_resource_file.php @@ -21,6 +21,9 @@ class Smarty_Internal_Resource_File { public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; public $template_lexer_class = 'Smarty_Internal_Templatelexer'; public $template_parser_class = 'Smarty_Internal_Templateparser'; + // properties + public $usesCompiler = true; + public $isEvaluated = false; /** * Return flag if template source is existing @@ -82,27 +85,6 @@ class Smarty_Internal_Resource_File { } } - /** - * Return flag that this resource uses the compiler - * - * @return boolean true - */ - public function usesCompiler() - { - // template has tags, uses compiler - return true; - } - - /** - * Return flag that this is not evaluated - * - * @return boolean false - */ - public function isEvaluated() - { - // save the compiled file to disk, do not evaluate - return false; - } /** * Get filepath to compiled template * diff --git a/libs/sysplugins/smarty_internal_resource_php.php b/libs/sysplugins/smarty_internal_resource_php.php index f3ed97db..7dee7ec7 100644 --- a/libs/sysplugins/smarty_internal_resource_php.php +++ b/libs/sysplugins/smarty_internal_resource_php.php @@ -21,6 +21,9 @@ class Smarty_Internal_Resource_PHP { $this->smarty = $smarty; ini_set('short_open_tag', '1'); } + // properties + public $usesCompiler = false; + public $isEvaluated = false; /** * Return flag if template source is existing @@ -80,27 +83,6 @@ class Smarty_Internal_Resource_PHP { } } - /** - * Return flag that this resource not use the compiler - * - * @return boolean false - */ - public function usesCompiler() - { - // does not use compiler, template is PHP - return false; - } - - /** - * Return flag that this is not evaluated - * - * @return boolean false - */ - public function isEvaluated() - { - // does not use compiler, must be false - return false; - } /** * Get filepath to compiled template diff --git a/libs/sysplugins/smarty_internal_resource_registered.php b/libs/sysplugins/smarty_internal_resource_registered.php index e24b5e3d..33868450 100644 --- a/libs/sysplugins/smarty_internal_resource_registered.php +++ b/libs/sysplugins/smarty_internal_resource_registered.php @@ -22,6 +22,9 @@ class Smarty_Internal_Resource_Registered { public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; public $template_lexer_class = 'Smarty_Internal_Templatelexer'; public $template_parser_class = 'Smarty_Internal_Templateparser'; + // properties + public $usesCompiler = true; + public $isEvaluated = false; /** * Return flag if template source is existing @@ -93,28 +96,6 @@ class Smarty_Internal_Resource_Registered { array($_template->resource_name, &$_template->template_source, $this->smarty)); } - /** - * Return flag that this resource uses the compiler - * - * @return boolean true - */ - public function usesCompiler() - { - // resource string is template, needs compiler - return true; - } - - /** - * Return flag that this resource is evaluated - * - * @return boolean true - */ - public function isEvaluated() - { - // compiled template is evaluated instead of saved to disk - return false; - } - /** * Get filepath to compiled template * diff --git a/libs/sysplugins/smarty_internal_resource_stream.php b/libs/sysplugins/smarty_internal_resource_stream.php index 16e5a417..2024a3a7 100644 --- a/libs/sysplugins/smarty_internal_resource_stream.php +++ b/libs/sysplugins/smarty_internal_resource_stream.php @@ -22,6 +22,9 @@ class Smarty_Internal_Resource_Stream { public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; public $template_lexer_class = 'Smarty_Internal_Templatelexer'; public $template_parser_class = 'Smarty_Internal_Templateparser'; + // properties + public $usesCompiler = true; + public $isEvaluated = true; /** * Return flag if template source is existing @@ -80,28 +83,6 @@ class Smarty_Internal_Resource_Stream { return true; } - /** - * Return flag that this resource uses the compiler - * - * @return boolean true - */ - public function usesCompiler() - { - // resource string is template, needs compiler - return true; - } - - /** - * Return flag that this resource is evaluated - * - * @return boolean true - */ - public function isEvaluated() - { - // compiled template is evaluated instead of saved to disk - return true; - } - /** * Get filepath to compiled template * diff --git a/libs/sysplugins/smarty_internal_resource_string.php b/libs/sysplugins/smarty_internal_resource_string.php index f7b7b853..ad519b38 100644 --- a/libs/sysplugins/smarty_internal_resource_string.php +++ b/libs/sysplugins/smarty_internal_resource_string.php @@ -22,6 +22,9 @@ class Smarty_Internal_Resource_String { public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; public $template_lexer_class = 'Smarty_Internal_Templatelexer'; public $template_parser_class = 'Smarty_Internal_Templateparser'; + // properties + public $usesCompiler = true; + public $isEvaluated = true; /** * Return flag if template source is existing @@ -71,28 +74,6 @@ class Smarty_Internal_Resource_String { return true; } - /** - * Return flag that this resource uses the compiler - * - * @return boolean true - */ - public function usesCompiler() - { - // resource string is template, needs compiler - return true; - } - - /** - * Return flag that this resource is evaluated - * - * @return boolean true - */ - public function isEvaluated() - { - // compiled template is evaluated instead of saved to disk - return true; - } - /** * Get filepath to compiled template * diff --git a/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/libs/sysplugins/smarty_internal_smartytemplatecompiler.php index c627cc19..04799b0c 100644 --- a/libs/sysplugins/smarty_internal_smartytemplatecompiler.php +++ b/libs/sysplugins/smarty_internal_smartytemplatecompiler.php @@ -37,12 +37,12 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom tags in the templates are replaces with PHP code, then written to compiled files. */ // init the lexer/parser to compile the template - $this->lex = new $this->lexer_class($_content,$this->smarty); + $this->lex = new $this->lexer_class($_content, $this); $this->parser = new $this->parser_class($this->lex, $this); - //$this->parser->PrintTrace(); + // $this->parser->PrintTrace(); // get tokens from lexer and parse them while ($this->lex->yylex() && !$this->abort_and_recompile) { - //echo "
Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token ".htmlentities($this->lex->value)."
"; + // echo "
Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token ".htmlentities($this->lex->value)."
"; $this->parser->doParse($this->lex->token, $this->lex->value); } @@ -61,7 +61,8 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom if (!$this->compile_error) { // return compiled code - return str_replace(array("?>\nparser->retvalue); + // return str_replace(array("? >\nparser->retvalue); + return $this->parser->retvalue; } else { // compilation error return false; diff --git a/libs/sysplugins/smarty_internal_template.php b/libs/sysplugins/smarty_internal_template.php index 82fa24bd..33be8d83 100644 --- a/libs/sysplugins/smarty_internal_template.php +++ b/libs/sysplugins/smarty_internal_template.php @@ -13,7 +13,7 @@ /** * Main class with template data structures and methods */ -class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { +class Smarty_Internal_Template extends Smarty_Internal_Data { // object cache public $compiler_object = null; public $cacher_object = null; @@ -30,9 +30,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { public $template_resource = null; public $resource_type = null; public $resource_name = null; - private $resource_object = null; - private $usesCompiler = null; - private $isEvaluated = null; + public $resource_object = null; private $isExisting = null; // Template source public $template_filepath = null; @@ -65,7 +63,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { // special properties public $properties = array(); // storage for block data - public $block_data = array(); + public $block_data = array(); + // required plugins + public $required_plugins = array(); /** * Create template data object @@ -89,7 +89,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { 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->cacher_class = $this->smarty->cacher_class; $this->security = $this->smarty->security; $this->parent = $_parent; $this->properties['file_dependency'] = array(); @@ -102,7 +101,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { throw new Exception ("Unable to parse resource name \"{$template_resource}\""); } // load cache resource - if (!$this->isEvaluated() && ($this->caching == 1 || $this->caching == 2)) { + if (!$this->resource_object->isEvaluated && ($this->caching == 1 || $this->caching == 2)) { $this->cache_resource_object = $this->smarty->loadCacheResource(); } } @@ -169,33 +168,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { } return $this->isExisting; } - /** - * Returns if the template resource uses the Smarty compiler - * - * The status is determined by the actual resource handler - * - * @return boolean true if the template will use the compiler - */ - public function usesCompiler () - { - return $this->usesCompiler === null ? - $this->usesCompiler = $this->resource_object->usesCompiler() : - $this->usesCompiler; - } - - /** - * Returns if the compiled template is stored or just evaluated in memory - * - * The status is determined by the actual resource handler - * - * @return boolean true if the compiled template has to be evaluated - */ - public function isEvaluated () - { - return $this->isEvaluated === null ? - $this->isEvaluated = $this->resource_object->isEvaluated() : - $this->isEvaluated; - } /** * Returns if the current template must be compiled by the Smarty compiler @@ -208,7 +180,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { { $this->isExisting(true); if ($this->mustCompile === null) { - $this->mustCompile = ($this->usesCompiler() && ($this->force_compile || $this->isEvaluated() || $this->getCompiledTimestamp () === false || + $this->mustCompile = ($this->resource_object->usesCompiler && ($this->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 ()))); } @@ -223,7 +195,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { public function getCompiledFilepath () { return $this->compiled_filepath === null ? - ($this->compiled_filepath = !$this->isEvaluated() ? $this->resource_object->getCompiledFilepath($this) : false) : + ($this->compiled_filepath = !$this->resource_object->isEvaluated ? $this->resource_object->getCompiledFilepath($this) : false) : $this->compiled_filepath; } @@ -235,7 +207,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { public function getCompiledTimestamp () { return $this->compiled_timestamp === null ? - ($this->compiled_timestamp = (!$this->isEvaluated() && file_exists($this->getCompiledFilepath())) ? filemtime($this->getCompiledFilepath()) : false) : + ($this->compiled_timestamp = (!$this->resource_object->isEvaluated && file_exists($this->getCompiledFilepath())) ? filemtime($this->getCompiledFilepath()) : false) : $this->compiled_timestamp; } @@ -254,7 +226,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { $this->compileTemplateSource(); } else { if ($this->compiled_template === null) { - $this->compiled_template = !$this->isEvaluated() && $this->usesCompiler() ? file_get_contents($this->getCompiledFilepath()) : false; + $this->compiled_template = !$this->resource_object->isEvaluated && $this->resource_object->usesCompiler ? file_get_contents($this->getCompiledFilepath()) : false; } } } @@ -268,7 +240,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { */ public function compileTemplateSource () { - if (!$this->isEvaluated) { + if (!$this->resource_object->isEvaluated) { + $this->properties['file_dependency'] = array(); $this->properties['file_dependency']['F' . abs(crc32($this->getTemplateFilepath()))] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp()); } if ($this->smarty->debugging) { @@ -278,17 +251,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { if (!is_object($this->compiler_object)) { // load compiler $this->smarty->loadPlugin($this->resource_object->compiler_class); - $this->compiler_object = new $this->resource_object->compiler_class($this->resource_object->template_lexer_class, $this->resource_object->template_parser_class, $this->smarty); - // load cacher - if ($this->caching) { - $this->smarty->loadPlugin($this->cacher_class); - $this->cacher_object = new $this->cacher_class($this->smarty); - } + $this->compiler_object = new $this->resource_object->compiler_class($this->resource_object->template_lexer_class, $this->resource_object->template_parser_class, $this->smarty); } // call compiler if ($this->compiler_object->compileTemplate($this)) { // compiling succeded - if (!$this->isEvaluated()) { + if (!$this->resource_object->isEvaluated) { // write compiled template Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty); // make template and compiled file timestamp match @@ -314,28 +282,28 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { /** * Returns the filepath of the cached template output * - * The filepath is determined by the actual resource handler of the cacher + * The filepath is determined by the actual cache resource * * @return string the cache filepath */ public function getCachedFilepath () { return $this->cached_filepath === null ? - $this->cached_filepath = ($this->isEvaluated() || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->getCachedFilepath($this) : + $this->cached_filepath = ($this->resource_object->isEvaluated || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->getCachedFilepath($this) : $this->cached_filepath; } /** * Returns the timpestamp of the cached template output * - * The timestamp is determined by the actual resource handler of the cacher + * The timestamp is determined by the actual cache resource * * @return integer the template timestamp */ public function getCachedTimestamp () { return $this->cached_timestamp === null ? - $this->cached_timestamp = ($this->isEvaluated() || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->getCachedTimestamp($this) : + $this->cached_timestamp = ($this->resource_object->isEvaluated || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->getCachedTimestamp($this) : $this->cached_timestamp; } @@ -347,7 +315,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { public function getCachedContent () { return $this->rendered_content === null ? - $this->rendered_content = ($this->isEvaluated() || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->getCachedContents($this) : + $this->rendered_content = ($this->resource_object->isEvaluated || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->getCachedContents($this) : $this->rendered_content; } @@ -355,10 +323,17 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { * Writes the cached template output */ public function writeCachedContent () - { + { + if ($this->resource_object->isEvaluated || !($this->caching == 1 || $this->caching == 2)) { + // don't write cache file + return false; + } // build file dependency string $this->properties['cache_lifetime'] = $this->cache_lifetime; - return ($this->isEvaluated() || !($this->caching == 1 || $this->caching == 2)) ? false : $this->cache_resource_object->writeCachedContent($this, $this->createPropertyHeader() . $this->rendered_content); + $this->dynamicId = uniqid(); + $output = preg_replace('/(<%|%>|<\?php|<\?|\?>)/', 'dynamicId . '*/ echo \'$1\'; ?>', $this->rendered_content); + $output = preg_replace_callback('/\/\*%%SmartyNocache%%\*\/(.+?)\/\*\/%%SmartyNocache%%\*\//s', array($this, 'unescapePhp'), $output); + return $this->cache_resource_object->writeCachedContent($this, $this->createPropertyHeader(true) . $output); } /** @@ -372,11 +347,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { { if ($this->isCached === null) { $this->isCached = false; - if (($this->caching == 1 || $this->caching == 2) && !$this->isEvaluated() && !$this->force_compile && !$this->force_cache) { - if ($this->getCachedTimestamp() === false) { + if (($this->caching == 1 || $this->caching == 2) && !$this->resource_object->isEvaluated && !$this->force_compile && !$this->force_cache) { + $cachedTimestamp = $this->getCachedTimestamp(); + if ($cachedTimestamp === false) { return $this->isCached; } - if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED || ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT && (time() <= ($this->getCachedTimestamp() + $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); } @@ -405,7 +381,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { // If ($mtime > $this->getCachedTimestamp()) { If ($mtime > $_file_to_check[1]) { $this->rendered_content = null; - $this->properties['file_dependency'] = array(); return $this->isCached; } } @@ -426,7 +401,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { */ public function renderTemplate () { - if ($this->usesCompiler()) { + if ($this->resource_object->usesCompiler) { if ($this->mustCompile() && $this->compiled_template === null) { $this->compileTemplateSource(); } @@ -435,7 +410,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { } $_smarty_tpl = $this; ob_start(); - if ($this->isEvaluated()) { + if ($this->resource_object->isEvaluated) { eval("?>" . $this->compiled_template); } else { include($this->getCompiledFilepath ()); @@ -453,7 +428,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { } // If ($mtime != $_file_to_check[1]) { If ($mtime > $_file_to_check[1]) { - $this->properties['file_dependency'] = array(); $this->mustCompile = true; break; } @@ -480,18 +454,19 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { } } $this->rendered_content = ob_get_clean(); - if (!$this->isEvaluated) { + if (!$this->resource_object->isEvaluated) { $this->properties['file_dependency']['F' . abs(crc32($this->getTemplateFilepath()))] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp()); } if ($this->parent instanceof Smarty_Template or $this->parent instanceof Smarty_Internal_Template) { // var_dump('merge ', $this->parent->getTemplateFilepath(), $this->parent->properties['file_dependency'], $this->getTemplateFilepath(), $this->properties['file_dependency']); $this->parent->properties['file_dependency'] = array_merge($this->parent->properties['file_dependency'], $this->properties['file_dependency']); + $this->parent->required_plugins = array_merge_recursive($this->parent->required_plugins, $this->required_plugins); } if ($this->smarty->debugging) { Smarty_Internal_Debug::end_render($this); } // write to cache when nessecary - if (!$this->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); } @@ -519,7 +494,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { public function getRenderedTemplate () { // disable caching for evaluated code - if ($this->isEvaluated()) { + if ($this->resource_object->isEvaluated) { $this->caching = false; } // checks if template exists @@ -553,7 +528,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { // do not cache string resources // ***** if ($resource_type != 'string' && $this->smarty->caching) { if ($resource_type != 'string') { - $this->smarty->template_objects[$this->buildTemplateId ($this->template_resource, $this->cache_id, $this->compile_id)] = $this; + $this->smarty->template_objects[crc32($this->template_resource . $this->cache_id . $this->compile_id)] = $this; } return true; } @@ -595,34 +570,17 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { } /** - * Decode saved properties from compiled template and cache files - */ - public function decodeProperties ($properties) - { - $prop = unserialize($properties); - if (isset($prop['cache_lifetime'])) { - $this->properties['cache_lifetime'] = $prop['cache_lifetime']; - } - if (isset($prop['file_dependency'])) { - $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $prop['file_dependency']); - // $this->properties['file_dependency'] = array_unique($this->properties['file_dependency']); - } - if (!empty($prop['function'])) { - foreach ($prop['function'] as $_name => $_data) { - $this->smarty->template_functions[$_name]['compiled'] = str_replace('_%n', "\n", $_data['compiled']); - $this->smarty->template_functions[$_name]['parameter'] = $_data['parameter']; - } - } - } - - /** - * Update Smarty variables in parent variable object + * Update Smarty variables in other scopes */ public function updateParentVariables ($scope = SMARTY_LOCAL_SCOPE) { + $has_root = false; foreach ($this->tpl_vars as $_key => $_variable) { - // copy global vars back to parent - if (isset($this->parent) && ($scope == SMARTY_PARENT_SCOPE || $this->tpl_vars[$_key]->scope == SMARTY_PARENT_SCOPE)) { + $_variable_scope = $this->tpl_vars[$_key]->scope; + if ($scope == SMARTY_LOCAL_SCOPE && $_variable_scope == SMARTY_LOCAL_SCOPE) { + continue; + } + if (isset($this->parent) && ($scope == SMARTY_PARENT_SCOPE || $_variable_scope == SMARTY_PARENT_SCOPE)) { 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; @@ -632,22 +590,28 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { $this->parent->tpl_vars[$_key]->scope = SMARTY_LOCAL_SCOPE; } } - if ($scope == SMARTY_ROOT_SCOPE || $this->tpl_vars[$_key]->scope == SMARTY_ROOT_SCOPE) { - $_ptr = $this; - // find root - while ($_ptr->parent != null) { - $_ptr = $_ptr->parent; + if ($scope == SMARTY_ROOT_SCOPE || $_variable_scope == SMARTY_ROOT_SCOPE) { + if ($this->parent == null) { + continue; } - if (isset($_ptr->tpl_vars[$_key])) { + if (!$has_root) { + // find root + $root_ptr = $this; + while ($root_ptr->parent != null) { + $root_ptr = $root_ptr->parent; + $has_root = true; + } + } + if (isset($root_ptr->tpl_vars[$_key])) { // variable is already defined in root, copy value - $_ptr->tpl_vars[$_key]->value = $this->tpl_vars[$_key]->value; + $root_ptr->tpl_vars[$_key]->value = $this->tpl_vars[$_key]->value; } else { // create variable in root - $_ptr->tpl_vars[$_key] = clone $_variable; - $_ptr->tpl_vars[$_key]->scope = SMARTY_LOCAL_SCOPE; + $root_ptr->tpl_vars[$_key] = clone $_variable; + $root_ptr->tpl_vars[$_key]->scope = SMARTY_LOCAL_SCOPE; } } - if ($scope == SMARTY_GLOBAL_SCOPE || $this->tpl_vars[$_key]->scope == SMARTY_GLOBAL_SCOPE) { + if ($scope == SMARTY_GLOBAL_SCOPE || $_variable_scope == SMARTY_GLOBAL_SCOPE) { if (isset($this->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; @@ -694,58 +658,99 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase { */ private function loadTemplateResourceHandler ($resource_type) { - // load resource handler if required - if (!isset($this->smarty->resource_objects[$resource_type])) { - // try registered resource - if (isset($this->smarty->_plugins['resource'][$resource_type])) { - return $this->smarty->resource_objects[$resource_type] = new Smarty_Internal_Resource_Registered($this->smarty); - } else { - // try sysplugins dir + // try registered resource + if (isset($this->smarty->_plugins['resource'][$resource_type])) { + return new Smarty_Internal_Resource_Registered($this->smarty); + } else { + // try sysplugins dir + if (in_array($resource_type, array('file', 'string', 'extends', 'php', 'registered', 'stream'))) { $_resource_class = 'Smarty_Internal_Resource_' . $resource_type; + return new $_resource_class($this->smarty); + } else { + // try plugins dir + $_resource_class = 'Smarty_Resource_' . $resource_type; if ($this->smarty->loadPlugin($_resource_class)) { - return $this->smarty->resource_objects[$resource_type] = new $_resource_class($this->smarty); - } else { - // try plugins dir - $_resource_class = 'Smarty_Resource_' . $resource_type; - if ($this->smarty->loadPlugin($_resource_class)) { - if (class_exists($_resource_class, false)) { - return $this->smarty->resource_objects[$resource_type] = 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 $this->smarty->resource_objects[$resource_type] = new Smarty_Internal_Resource_Registered($this->smarty); - } + if (class_exists($_resource_class, false)) { + return new $_resource_class($this->smarty); } 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); - } - return $this->smarty->resource_objects[$resource_type] = new Smarty_Internal_Resource_Stream($this->smarty); - } else { - throw new Exception('Unkown resource type \'' . $resource_type . '\''); + $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); + } + } 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); } + return new Smarty_Internal_Resource_Stream($this->smarty); + } else { + throw new Exception('Unkown resource type \'' . $resource_type . '\''); } } } - } else { - return $this->smarty->resource_objects[$resource_type]; } } /** * Create property header */ - public function createPropertyHeader () + public function createPropertyHeader ($cache = false) { - $directory_security = $this->smarty->direct_access_security ? "\n" : ''; - $properties_string = "decodeProperties('" . str_replace("'", "\\'", (serialize($this->properties))) . "'); ?>\n"; - return $directory_security . $properties_string; + $directory_security = $this->smarty->direct_access_security ? "\n" : ''; + // $properties_string = "decodeProperties(" . preg_replace('/\s*/', '',var_export($this->properties, true)) . "); ? >\n"; + $properties_string = "decodeProperties(" . var_export($this->properties, true) . "); /*/%%SmartyHeaderCode%%*/?>\n"; + $plugins_string = ''; + if (!$cache) { + if (!empty($this->required_plugins['compiled'])) { + $plugins_string = 'required_plugins['compiled'] as $plugin_name => $data) { + $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name; + $plugins_string .= "if (!is_callable('{$plugin}')) include '{$data['file']}';\n"; + } + $plugins_string .= '?>'; + } + if (!empty($this->required_plugins['cache'])) { + $plugins_string .= 'required_plugins['cache'] as $plugin_name => $data) { + $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name; + $plugins_string .= "if (!is_callable(\'{$plugin}\')) include \'{$data['file']}\';\n"; + } + $plugins_string .= "?>/*/%%SmartyNocache%%*/';?>\n"; + } + } + return $directory_security . $properties_string . $plugins_string; + } + + /** + * Decode saved properties from compiled template and cache files + */ + public function decodeProperties ($properties) + { + if (isset($properties['cache_lifetime'])) { + $this->properties['cache_lifetime'] = $properties['cache_lifetime']; + } + if (isset($properties['file_dependency'])) { + $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $properties['file_dependency']); + } + if (!empty($properties['function'])) { + foreach ($properties['function'] as $_name => $_data) { + $this->smarty->template_functions[$_name]['compiled'] = $_data['compiled']; + $this->smarty->template_functions[$_name]['parameter'] = $_data['parameter']; + } + } + } + /** + * callback to unescap PHP + */ + public function unescapePhp($match) + { + return preg_replace('{<\?php /\*' . $this->dynamicId . '\*/ echo \'(.+?)\'; \?>}s', '$1', $match[1]); } /** diff --git a/libs/sysplugins/smarty_internal_templatecompilerbase.php b/libs/sysplugins/smarty_internal_templatecompilerbase.php index 8d7859bd..af1352ed 100644 --- a/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ b/libs/sysplugins/smarty_internal_templatecompilerbase.php @@ -17,7 +17,9 @@ class Smarty_Internal_TemplateCompilerBase { // tag stack public $_tag_stack = array(); // current template - public $template = null; + public $template = null; + // required plugins + public $required_plugins_call = array(); /** * Initialize compiler @@ -36,11 +38,7 @@ class Smarty_Internal_TemplateCompilerBase { { /* here is where the compiling takes place. Smarty tags in the templates are replaces with PHP code, - then written to compiled files. */ - if (!is_object($template->cacher_object)) { - $this->smarty->loadPlugin($template->cacher_class); - $template->cacher_object = new $template->cacher_class($this->smarty); - } + then written to compiled files. */ // flag for nochache sections $this->nocache = false; $this->tag_nocache = false; @@ -52,7 +50,7 @@ class Smarty_Internal_TemplateCompilerBase { // template header code $template_header = ''; if (!$template->suppressHeader) { - $template_header .= "template->getTemplateFilepath() . "\" */ ?>\n"; } @@ -63,33 +61,31 @@ class Smarty_Internal_TemplateCompilerBase { $_content = $template->getTemplateSource(); // run prefilter if required if (isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) { - $_content = $this->smarty->filter_handler->execute('pre', $_content); + $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $this->smarty); } // on empty template just return header if ($_content == '') { if ($template->suppressFileDependency) { $template->compiled_template = ''; } else { - $template->compiled_template = $template->createPropertyHeader() . $template_header; + $template->compiled_template = $template_header . $template->createPropertyHeader(); } return true; } - // init cacher plugin - $template->cacher_object->initCacher($this); // call compiler $_compiled_code = $this->doCompile($_content); } while ($this->abort_and_recompile); if (!$this->compile_error) { - // close cacher and return compiled template + // return compiled code to template object if ($template->suppressFileDependency) { - $template->compiled_template = $template->cacher_object->closeCacher($this, $_compiled_code); + $template->compiled_template = $_compiled_code; } else { - $template->compiled_template = $template->createPropertyHeader() . $template_header . $template->cacher_object->closeCacher($this, $_compiled_code); + $template->compiled_template = $template_header . $template->createPropertyHeader() . $_compiled_code; } // run postfilter if required if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) { - $template->compiled_template = $this->smarty->filter_handler->execute('post', $template->compiled_template); + $template->compiled_template = Smarty_Internal_Filter_Handler::runFilter('post', $template->compiled_template, $this->smarty); } return true; } else { @@ -115,12 +111,11 @@ class Smarty_Internal_TemplateCompilerBase { $this->has_code = true; $this->has_output = false; // compile the smarty tag (required compile classes to compile the tag are autoloaded) - if (($_output = $this->generateCode($tag, $args)) === false) { + if (($_output = $this->callTagCompiler($tag, $args)) === false) { if (isset($this->smarty->template_functions[$tag])) { // template defined by {template} tag $args['name'] = $tag; - $tag = 'function_call'; - $_output = $this->generateCode($tag, $args); + $_output = $this->callTagCompiler('private_function_call', $args); } } if ($_output !== false) { @@ -139,49 +134,85 @@ class Smarty_Internal_TemplateCompilerBase { return ''; } else { // not an internal compiler tag - // 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 (!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->generateCode('object_function',$args, $tag, $methode); - } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { - return $this->generateCode('object_block_function',$args, $tag, $methode); - } else { - return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno); - } - } - // check if tag is registered or is Smarty plugin - $this->smarty->plugin_handler->loadSmartyPlugin($tag, $this->smarty->plugin_search_order); - if (isset($this->smarty->registered_plugins[$tag])) { - // if compiler function plugin call it now - if ($this->smarty->registered_plugins[$tag][0] == 'compiler') { - if (!$this->smarty->registered_plugins[$tag][2]) { - $this->tag_nocache = true; + if (strlen($tag) < 6 || substr_compare($tag, 'close', -5, 5) != 0) { + // 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 (!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); + } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { + return $this->callTagCompiler('private_object_block_function', $args, $tag, $methode); + } else { + return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno); } - return call_user_func($this->smarty->registered_plugins[$tag][1], $args, $this); } - // compile function or block plugin - $plugin_type = $this->smarty->registered_plugins[$tag][0] . '_plugin'; - return $this->generateCode($plugin_type, $args, $tag); - } - // compile closing tag of block function - if (strlen($tag) > 5 && substr_compare($tag, 'close', -5, 5) == 0) { + // check if tag is registered + foreach (array('compiler', 'function', 'block') as $type) { + if (isset($this->smarty->registered_plugins[$type][$tag])) { + // if compiler function plugin call it now + if ($type == 'compiler') { + if (!$this->smarty->registered_plugins[$type][$tag][1]) { + $this->tag_nocache = true; + } + return call_user_func_array($this->smarty->registered_plugins[$type][$tag][0], array($args, $this)); + } + // compile registered function or block function + if ($type == 'function' || $type == 'block') { + return $this->callTagCompiler('private_registered_' . $type, $args, $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)) { + $plugin = 'smarty_compiler_' . $tag; + if (class_exists($plugin, false)) { + $plugin = array(new $plugin, 'compile'); + } + if (is_callable($plugin)) { + return call_user_func_array($plugin, array($args, $this)); + } else { + throw new Exception("Plugin \"{$tag}\" not callable"); + } + } else { + if ($function = $this->getPlugin($tag, $plugin_type)) { + return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $tag, $function); + } + } + } + } else { + // 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 (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) { - return $this->generateCode('object_block_function', $args, $tag, $methode); + return $this->callTagCompiler('private_object_block_function', $args, $tag, $methode); } else { return $this->trigger_template_error ('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno); } } - // plugin ? - if (isset($this->smarty->registered_plugins[$base_tag]) && $this->smarty->registered_plugins[$base_tag][0] == 'block') { - return $this->generateCode('block_plugin',$args, $tag); + // registered block tag ? + if (isset($this->smarty->registered_plugins['block'][$base_tag])) { + return $this->callTagCompiler('private_registered_block', $args, $tag); + } + // block plugin? + if ($function = $this->getPlugin($base_tag, 'block')) { + return $this->callTagCompiler('private_block_plugin', $args, $tag, $function); + } + if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { + $plugin = 'smarty_compiler_' . $tag; + if (class_exists($plugin, false)) { + $plugin = array(new $plugin, 'compile'); + } + if (is_callable($plugin)) { + return call_user_func_array($plugin, array($args, $this)); + } else { + throw new Exception("Plugin \"{$tag}\" not callable"); + } } } $this->trigger_template_error ("unknown tag \"" . $tag . "\"", $this->lex->taglineno); @@ -197,16 +228,17 @@ class Smarty_Internal_TemplateCompilerBase { * * @param $tag string tag name * @param $args array with tag attributes - * @param $subtag optional tag name at plugins - * @param $method string optional method on object tags + * @param $param1 optional parameter + * @param $param2 optional parameter + * @param $param3 optional parameter * @return string compiled code */ - public function generateCode($tag, $args, $subtag = null, $method = null) + public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) { // re-use object if already exists if (isset(self::$_tag_objects[$tag])) { // compile this tag - return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $subtag, $method); + return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $param1, $param2, $param3); } // lazy load internal compiler plugin $class_name = 'Smarty_Internal_Compile_' . $tag; @@ -214,12 +246,87 @@ class Smarty_Internal_TemplateCompilerBase { // use plugin if found self::$_tag_objects[$tag] = new $class_name; // compile this tag - return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $subtag, $method); + return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $param1, $param2, $param3); } // no internal compile plugin for this tag return false; } + /** + * Check for plugins and return function name + * + * @param $pugin_name string name of plugin or function + * @param $type string type of plugin + * @return string call name of function + */ + public function getPlugin($plugin_name, $type) + { + if (isset($this->template->required_plugins_call[$plugin_name][$type])) { + if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { + if (isset($this->template->required_plugins['compiled'][$plugin_name])) { + $this->template->required_plugins['cache'][$plugin_name] = $this->template->required_plugins['compiled'][$plugin_name]; + } + } + return $this->template->required_plugins_call[$plugin_name][$type]; + } + // loop through plugin dirs and find the plugin + $plugin = 'smarty_' . $type . '_' . $plugin_name; + $found = false; + foreach((array)$this->smarty->plugins_dir as $_plugin_dir) { + $file = rtrim($_plugin_dir, '/\\') . DS . $type . '.' . $plugin_name . '.php'; + if (file_exists($file)) { + require_once($file); + $found = true; + break; + } + } + if ($found) { + if (is_callable($plugin)) { + $this->template->required_plugins_call[$plugin_name][$type] = $plugin; + if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { + $this->template->required_plugins['cache'][$plugin_name]['file'] = $file; + $this->template->required_plugins['cache'][$plugin_name]['type'] = $type; + } else { + $this->template->required_plugins['compiled'][$plugin_name]['file'] = $file; + $this->template->required_plugins['compiled'][$plugin_name]['type'] = $type; + } + return $plugin; + } else { + throw new Exception("Plugin {$type} \"{$plugin_name}\" not callable"); + } + } + return false; + } + /** + * Inject inline code for nocache template sections + * + * This method gets the content of each template element from the parser. + * If the content is compiled code and it should be not cached the code is injected + * into the rendered output. + * + * @param string $content content of template element + * @param boolean $tag_nocache true if the parser detected a nocache situation + * @param boolean $is_code true if content is compiled code + * @return string content + */ + public function processNocacheCode ($content, $is_code) + { + // If the template is not evaluated and we have a nocache section and or a nocache tag + if ($is_code) { + // generate replacement code + if ((!$this->template->resource_object->isEvaluated || $this->template->forceNocache) && $this->template->caching && + ($this->nocache || $this->tag_nocache)) { + $this->tag_nocache = false; + $_output = str_replace("'", "\'", $content); + $_output = "\n"; + } else { + $_output = $content; + } + } else { + $_output = $content; + } + return $_output; + } /** * display compiler error messages without dying * @@ -228,18 +335,16 @@ class Smarty_Internal_TemplateCompilerBase { * * If parameter $args contains a string this is used as error message * - * @todo output exact position of parse error in source line * @param $args string individual error message or null */ - public function trigger_template_error($args = null, $line= null) - { + public function trigger_template_error($args = null, $line = null) + { // get template source line which has error if (!isset($line)) { $line = $this->lex->line; } $match = preg_split("/\n/", $this->lex->data); $error_text = 'Syntax Error in template "' . $this->template->getTemplateFilepath() . '" on line ' . $line . ' "' . $match[$line-1] . '" '; - if (isset($args)) { // individual error message $error_text .= $args; diff --git a/libs/sysplugins/smarty_internal_templatelexer.php b/libs/sysplugins/smarty_internal_templatelexer.php index 47d9d95f..a54c356f 100644 --- a/libs/sysplugins/smarty_internal_templatelexer.php +++ b/libs/sysplugins/smarty_internal_templatelexer.php @@ -63,7 +63,11 @@ class Smarty_Internal_Templatelexer 'QMARK' => '"?"', 'ID' => 'identifier', 'OTHER' => 'text', - 'PHP' => 'PHP code', + 'FAKEPHPSTARTTAG' => 'Fake PHP start tag', + 'PHPSTARTTAG' => 'PHP start tag', + 'PHPENDTAG' => 'PHP end tag', + 'LITERALSTART' => 'Literal start', + 'LITERALEND' => 'Literal end', 'LDELSLASH' => 'closing tag', 'COMMENT' => 'comment', 'LITERALEND' => 'literal close', @@ -74,14 +78,15 @@ class Smarty_Internal_Templatelexer ); - function __construct($data,$smarty) + function __construct($data,$compiler) { // set instance object self::instance($this); $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data); $this->counter = 0; $this->line = 1; - $this->smarty = $smarty; + $this->smarty = $compiler->smarty; + $this->compiler = $compiler; $this->ldel = preg_quote($this->smarty->left_delimiter,'/'); $this->rdel = preg_quote($this->smarty->right_delimiter,'/'); $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter; @@ -137,16 +142,13 @@ class Smarty_Internal_Templatelexer 10 => 0, 11 => 0, 12 => 0, - 13 => 0, - 14 => 0, - 15 => 0, - 16 => 2, - 19 => 0, + 13 => 2, + 16 => 0, ); if ($this->counter >= strlen($this->data)) { return false; // end of input } - $yy_global_pattern = "/^(\\{\\})|^(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|^(<\\?xml)|^(<\\?php)|^(<\\?=)|^([\t ]*[\r\n]+[\t ]*)|^(".$this->ldel."strip".$this->rdel.")|^(".$this->ldel."\/strip".$this->rdel.")|^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(([\S\s]*?)([\t ]*[\r\n]+[\t ]*|".$this->ldel."|<\\?))|^([\S\s]+)/"; + $yy_global_pattern = "/^(\\{\\})|^(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^([\t ]*[\r\n]+[\t ]*)|^(".$this->ldel."strip".$this->rdel.")|^(".$this->ldel."\/strip".$this->rdel.")|^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(([\S\s]*?)([\t ]*[\r\n]+[\t ]*|".$this->ldel."|<\\?))|^([\S\s]+)/"; do { if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { @@ -209,54 +211,42 @@ class Smarty_Internal_Templatelexer function yy_r1_4($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_XML; - $this->yypushstate(self::PHP); - } + if (in_array($this->value, Array('token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG; + $this->yypushstate(self::PHP); + } else { + $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG; + $this->value = substr($this->value, 0, 2); + } + } function yy_r1_5($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_PHP; - $this->yypushstate(self::PHP); - } - function yy_r1_6($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_SHORTTAGSTART; - $this->yypushstate(self::PHP); - } - function yy_r1_7($yy_subpatterns) - { - if ($this->strip) { return false; } else { $this->token = Smarty_Internal_Templateparser::TP_OTHER; } } - function yy_r1_8($yy_subpatterns) + function yy_r1_6($yy_subpatterns) { $this->strip = true; return false; } - function yy_r1_9($yy_subpatterns) + function yy_r1_7($yy_subpatterns) { $this->strip = false; return false; } - function yy_r1_10($yy_subpatterns) + function yy_r1_8($yy_subpatterns) { - $this->yypushstate(self::LITERAL); - return true; + $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; + $this->yypushstate(self::LITERAL); } - function yy_r1_11($yy_subpatterns) - { - - return false; // unexspected here just ignore - } - function yy_r1_12($yy_subpatterns) + function yy_r1_9($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -267,7 +257,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_13($yy_subpatterns) + function yy_r1_10($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -278,21 +268,21 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_14($yy_subpatterns) + function yy_r1_11($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r1_15($yy_subpatterns) + function yy_r1_12($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r1_16($yy_subpatterns) + function yy_r1_13($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; @@ -307,7 +297,7 @@ class Smarty_Internal_Templatelexer return true; // rescan } } - function yy_r1_19($yy_subpatterns) + function yy_r1_16($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; @@ -318,34 +308,35 @@ class Smarty_Internal_Templatelexer { $tokenMap = array ( 1 => 1, - 3 => 1, + 3 => 0, + 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, - 11 => 0, - 12 => 0, - 13 => 0, - 14 => 1, - 16 => 1, + 11 => 1, + 13 => 1, + 15 => 0, + 16 => 0, + 17 => 0, 18 => 0, 19 => 0, - 20 => 0, - 21 => 0, - 22 => 0, - 23 => 1, - 25 => 1, - 27 => 1, - 29 => 1, - 31 => 1, - 33 => 1, - 35 => 1, - 37 => 1, - 39 => 1, - 41 => 1, - 43 => 1, + 20 => 1, + 22 => 1, + 24 => 1, + 26 => 1, + 28 => 1, + 30 => 1, + 32 => 1, + 34 => 1, + 36 => 1, + 38 => 1, + 40 => 1, + 42 => 0, + 43 => 0, + 44 => 0, 45 => 0, 46 => 0, 47 => 0, @@ -353,20 +344,20 @@ class Smarty_Internal_Templatelexer 49 => 0, 50 => 0, 51 => 0, - 52 => 0, - 53 => 0, - 54 => 0, - 55 => 3, + 52 => 3, + 56 => 0, + 57 => 0, + 58 => 0, 59 => 0, 60 => 0, 61 => 0, 62 => 0, - 63 => 0, - 64 => 0, - 65 => 0, - 66 => 1, - 68 => 1, - 70 => 1, + 63 => 1, + 65 => 1, + 67 => 1, + 69 => 0, + 70 => 0, + 71 => 0, 72 => 0, 73 => 0, 74 => 0, @@ -377,21 +368,18 @@ class Smarty_Internal_Templatelexer 79 => 0, 80 => 0, 81 => 0, - 82 => 0, - 83 => 0, + 82 => 1, 84 => 0, - 85 => 1, + 85 => 0, + 86 => 0, 87 => 0, 88 => 0, 89 => 0, - 90 => 0, - 91 => 0, - 92 => 0, ); if ($this->counter >= strlen($this->data)) { return false; // end of input } - $yy_global_pattern = "/^((\\\\\"|\\\\'))|^(''|'([\S\s]*?)[^\\\\]')|^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$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+instanceof\\s+)|^(true|TRUE|True|false|FALSE|False)|^(null|NULL|Null)|^(\\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*)|^((if|elseif|while)(?![^\s]))|^(foreach(?![^\s]))|^(for(?![^\s]))|^([0-9]*[a-zA-Z_]\\w*)|^(\\d+)|^(\\s+)|^(.)/"; + $yy_global_pattern = "/^((\\\\\"|\\\\'))|^('[^'\\\\]*(?:\\\\['\\\\][^'\\\\]*)*')|^(".$this->ldel."\\s{1,}\/)|^(".$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+instanceof\\s+)|^(true|TRUE|True|false|FALSE|False)|^(null|NULL|Null)|^(\\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*)|^((if|elseif|else if|while)(?![^\s]))|^(foreach(?![^\s]))|^(for(?![^\s]))|^([0-9]*[a-zA-Z_]\\w*)|^(\\d+)|^(\\s+)|^(.)/"; do { if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { @@ -451,18 +439,7 @@ class Smarty_Internal_Templatelexer $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; } - function yy_r2_5($yy_subpatterns) - { - - $this->yypushstate(self::LITERAL); - return true; - } - function yy_r2_6($yy_subpatterns) - { - - return false; // unexspected here just ignore - } - function yy_r2_7($yy_subpatterns) + function yy_r2_4($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -473,7 +450,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r2_8($yy_subpatterns) + function yy_r2_5($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -484,7 +461,7 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r2_9($yy_subpatterns) + function yy_r2_6($yy_subpatterns) { if ($this->smarty->auto_literal) { @@ -494,324 +471,324 @@ class Smarty_Internal_Templatelexer $this->yypopstate(); } } - function yy_r2_10($yy_subpatterns) + function yy_r2_7($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r2_11($yy_subpatterns) + function yy_r2_8($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r2_12($yy_subpatterns) + function yy_r2_9($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_RDEL; $this->yypopstate(); } - function yy_r2_13($yy_subpatterns) + function yy_r2_10($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISIN; } - function yy_r2_14($yy_subpatterns) + function yy_r2_11($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_AS; } - function yy_r2_16($yy_subpatterns) + function yy_r2_13($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TO; } - function yy_r2_18($yy_subpatterns) + function yy_r2_15($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; } - function yy_r2_19($yy_subpatterns) + function yy_r2_16($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_BOOLEAN; } - function yy_r2_20($yy_subpatterns) + function yy_r2_17($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_NULL; } - function yy_r2_21($yy_subpatterns) + function yy_r2_18($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_IDENTITY; } - function yy_r2_22($yy_subpatterns) + function yy_r2_19($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY; } - function yy_r2_23($yy_subpatterns) + function yy_r2_20($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_EQUALS; } - function yy_r2_25($yy_subpatterns) + function yy_r2_22($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS; } - function yy_r2_27($yy_subpatterns) + function yy_r2_24($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL; } - function yy_r2_29($yy_subpatterns) + function yy_r2_26($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL; } - function yy_r2_31($yy_subpatterns) + function yy_r2_28($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN; } - function yy_r2_33($yy_subpatterns) + function yy_r2_30($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN; } - function yy_r2_35($yy_subpatterns) + function yy_r2_32($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_MOD; } - function yy_r2_37($yy_subpatterns) + function yy_r2_34($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_NOT; } - function yy_r2_39($yy_subpatterns) + function yy_r2_36($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LAND; } - function yy_r2_41($yy_subpatterns) + function yy_r2_38($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LOR; } - function yy_r2_43($yy_subpatterns) + function yy_r2_40($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LXOR; } - function yy_r2_45($yy_subpatterns) + function yy_r2_42($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISODDBY; } - function yy_r2_46($yy_subpatterns) + function yy_r2_43($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY; } - function yy_r2_47($yy_subpatterns) + function yy_r2_44($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISODD; } - function yy_r2_48($yy_subpatterns) + function yy_r2_45($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD; } - function yy_r2_49($yy_subpatterns) + function yy_r2_46($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY; } - function yy_r2_50($yy_subpatterns) + function yy_r2_47($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY; } - function yy_r2_51($yy_subpatterns) + function yy_r2_48($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISEVEN; } - function yy_r2_52($yy_subpatterns) + function yy_r2_49($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN; } - function yy_r2_53($yy_subpatterns) + function yy_r2_50($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY; } - function yy_r2_54($yy_subpatterns) + function yy_r2_51($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY; } - function yy_r2_55($yy_subpatterns) + function yy_r2_52($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; } - function yy_r2_59($yy_subpatterns) + function yy_r2_56($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OPENP; } - function yy_r2_60($yy_subpatterns) + function yy_r2_57($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; } - function yy_r2_61($yy_subpatterns) + function yy_r2_58($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OPENB; } - function yy_r2_62($yy_subpatterns) + function yy_r2_59($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; } - function yy_r2_63($yy_subpatterns) + function yy_r2_60($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_PTR; } - function yy_r2_64($yy_subpatterns) + function yy_r2_61($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_APTR; } - function yy_r2_65($yy_subpatterns) + function yy_r2_62($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_EQUAL; } - function yy_r2_66($yy_subpatterns) + function yy_r2_63($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_INCDEC; } - function yy_r2_68($yy_subpatterns) + function yy_r2_65($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; } - function yy_r2_70($yy_subpatterns) + function yy_r2_67($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_MATH; } - function yy_r2_72($yy_subpatterns) + function yy_r2_69($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; } - function yy_r2_73($yy_subpatterns) + function yy_r2_70($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; } - function yy_r2_74($yy_subpatterns) + function yy_r2_71($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; } - function yy_r2_75($yy_subpatterns) + function yy_r2_72($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_COLON; } - function yy_r2_76($yy_subpatterns) + function yy_r2_73($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_AT; } - function yy_r2_77($yy_subpatterns) + function yy_r2_74($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_HATCH; } - function yy_r2_78($yy_subpatterns) + function yy_r2_75($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypushstate(self::DOUBLEQUOTEDSTRING); } - function yy_r2_79($yy_subpatterns) + function yy_r2_76($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->yypopstate(); } - function yy_r2_80($yy_subpatterns) + function yy_r2_77($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_VERT; } - function yy_r2_81($yy_subpatterns) + function yy_r2_78($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOT; } - function yy_r2_82($yy_subpatterns) + function yy_r2_79($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_COMMA; } - function yy_r2_83($yy_subpatterns) + function yy_r2_80($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ANDSYM; } - function yy_r2_84($yy_subpatterns) + function yy_r2_81($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_QMARK; } - function yy_r2_85($yy_subpatterns) + function yy_r2_82($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_IF; } - function yy_r2_87($yy_subpatterns) + function yy_r2_84($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_FOREACH; } - function yy_r2_88($yy_subpatterns) + function yy_r2_85($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_FOR; } - function yy_r2_89($yy_subpatterns) + function yy_r2_86($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ID; } - function yy_r2_90($yy_subpatterns) + function yy_r2_87($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_INTEGER; } - function yy_r2_91($yy_subpatterns) + function yy_r2_88($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_SPACE; } - function yy_r2_92($yy_subpatterns) + function yy_r2_89($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; @@ -881,9 +858,9 @@ class Smarty_Internal_Templatelexer function yy_r3_1($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_SHORTTAGEND; - $this->yypopstate(); - } + $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG; + $this->yypopstate(); + } function yy_r3_2($yy_subpatterns) { @@ -893,7 +870,7 @@ class Smarty_Internal_Templatelexer function yy_r3_4($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_OTHER; + $this->compiler->trigger_template_error ("missing PHP end tag"); } @@ -902,13 +879,15 @@ class Smarty_Internal_Templatelexer $tokenMap = array ( 1 => 0, 2 => 0, - 3 => 1, - 5 => 0, + 3 => 0, + 4 => 0, + 5 => 1, + 7 => 0, ); if ($this->counter >= strlen($this->data)) { return false; // end of input } - $yy_global_pattern = "/^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^(([\S\s]*?)".$this->ldel."\/literal".$this->rdel.")|^([\S\s]+)/"; + $yy_global_pattern = "/^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^([\S\s]+?(".$this->ldel."\/?literal".$this->rdel."|<\\?))|^([\S\s]+)/"; do { if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { @@ -961,30 +940,50 @@ class Smarty_Internal_Templatelexer function yy_r4_1($yy_subpatterns) { - return false; + $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; + $this->yypushstate(self::LITERAL); } function yy_r4_2($yy_subpatterns) { + $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; $this->yypopstate(); - return false; } function yy_r4_3($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_OTHER; - $this->value = substr($this->value,0,-strlen($this->smarty->left_delimiter)-strlen($this->smarty->right_delimiter)-8); - $this->yypopstate(); - if (strlen($this->value) == 0) { - return false; // change state directly - } else { - return; // change state after processiing token - } + if (in_array($this->value, Array('token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG; + } else { + $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG; + $this->value = substr($this->value, 0, 2); + } + } + function yy_r4_4($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_LITERAL; } function yy_r4_5($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_OTHER; + $lenght_literal = strlen($this->smarty->left_delimiter.$this->smarty->right_delimiter)+7; + if (substr($this->value,-2,2) === 'token = Smarty_Internal_Templateparser::TP_LITERAL; + $this->value = substr($this->value,0,-2); + } else if (substr($this->value,-$lenght_literal,$lenght_literal) === $this->smarty->left_delimiter.'literal'.$this->smarty->right_delimiter) { + $this->token = Smarty_Internal_Templateparser::TP_LITERAL; + $this->value = substr($this->value,0,-$lenght_literal); + } else { + assert(substr($this->value,-$lenght_literal-1,$lenght_literal+1) === $this->smarty->left_delimiter.'/literal'.$this->smarty->right_delimiter); + $this->token = Smarty_Internal_Templateparser::TP_LITERAL; + $this->value = substr($this->value,0,-$lenght_literal-1); + } + } + function yy_r4_7($yy_subpatterns) + { + + $this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); } diff --git a/libs/sysplugins/smarty_internal_templateparser.php b/libs/sysplugins/smarty_internal_templateparser.php index 5f31e66b..4977916a 100644 --- a/libs/sysplugins/smarty_internal_templateparser.php +++ b/libs/sysplugins/smarty_internal_templateparser.php @@ -106,7 +106,6 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php } else { $this->sec_obj = $this->smarty; } - $this->cacher = $this->template->cacher_object; $this->compiler->has_variable_string = false; $this->compiler->prefix_code = array(); $this->prefix_number = 0; @@ -118,658 +117,640 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php $instance = $new_instance; return $instance; } + + public static function escape_start_tag($tag_text) { + $tag = preg_replace('/\A<\?(.*)\z/', '<?\1', $tag_text, -1 , $count); //Escape tag + assert($tag !== false && $count === 1); + return $tag; + } + + public static function escape_end_tag($tag_text) { + assert($tag_text === '?>'); + return '?>'; + } + -#line 115 "smarty_internal_templateparser.php" +#line 126 "smarty_internal_templateparser.php" const TP_COMMENT = 1; - const TP_PHP = 2; + const TP_PHPSTARTTAG = 2; const TP_OTHER = 3; - const TP_SHORTTAGEND = 4; - const TP_SHORTTAGSTART = 5; - const TP_XML = 6; - const TP_LDEL = 7; - const TP_RDEL = 8; - const TP_DOLLAR = 9; - const TP_ID = 10; - const TP_EQUAL = 11; - const TP_FOREACH = 12; - const TP_PTR = 13; - const TP_IF = 14; - const TP_SPACE = 15; - const TP_FOR = 16; - const TP_SEMICOLON = 17; - const TP_INCDEC = 18; - const TP_TO = 19; - const TP_AS = 20; - const TP_APTR = 21; - const TP_LDELSLASH = 22; - const TP_INTEGER = 23; - const TP_COMMA = 24; - const TP_COLON = 25; - const TP_UNIMATH = 26; - const TP_OPENP = 27; - const TP_CLOSEP = 28; - const TP_QMARK = 29; - const TP_MATH = 30; - const TP_ANDSYM = 31; - const TP_NOT = 32; - const TP_TYPECAST = 33; - const TP_DOT = 34; - const TP_BOOLEAN = 35; - const TP_NULL = 36; - const TP_SINGLEQUOTESTRING = 37; - const TP_QUOTE = 38; - const TP_DOUBLECOLON = 39; - const TP_AT = 40; - const TP_HATCH = 41; - const TP_OPENB = 42; - const TP_CLOSEB = 43; - const TP_VERT = 44; - const TP_ISIN = 45; - const TP_ISDIVBY = 46; - const TP_ISNOTDIVBY = 47; - const TP_ISEVEN = 48; - const TP_ISNOTEVEN = 49; - const TP_ISEVENBY = 50; - const TP_ISNOTEVENBY = 51; - const TP_ISODD = 52; - const TP_ISNOTODD = 53; - const TP_ISODDBY = 54; - const TP_ISNOTODDBY = 55; - const TP_INSTANCEOF = 56; - const TP_EQUALS = 57; - const TP_NOTEQUALS = 58; - const TP_GREATERTHAN = 59; - const TP_LESSTHAN = 60; - const TP_GREATEREQUAL = 61; - const TP_LESSEQUAL = 62; - const TP_IDENTITY = 63; - const TP_NONEIDENTITY = 64; - const TP_MOD = 65; - const TP_LAND = 66; - const TP_LOR = 67; - const TP_LXOR = 68; - const TP_BACKTICK = 69; - const TP_DOLLARID = 70; - const YY_NO_ACTION = 549; - const YY_ACCEPT_ACTION = 548; - const YY_ERROR_ACTION = 547; + const TP_PHPENDTAG = 4; + const TP_FAKEPHPSTARTTAG = 5; + const TP_LITERALSTART = 6; + const TP_LITERALEND = 7; + const TP_LITERAL = 8; + const TP_LDEL = 9; + const TP_RDEL = 10; + const TP_DOLLAR = 11; + const TP_ID = 12; + const TP_EQUAL = 13; + const TP_FOREACH = 14; + const TP_PTR = 15; + const TP_IF = 16; + const TP_SPACE = 17; + const TP_UNIMATH = 18; + const TP_FOR = 19; + const TP_SEMICOLON = 20; + const TP_INCDEC = 21; + const TP_TO = 22; + const TP_AS = 23; + const TP_APTR = 24; + const TP_LDELSLASH = 25; + const TP_INTEGER = 26; + const TP_COMMA = 27; + const TP_COLON = 28; + const TP_MATH = 29; + const TP_ANDSYM = 30; + const TP_OPENP = 31; + const TP_CLOSEP = 32; + const TP_QMARK = 33; + const TP_NOT = 34; + const TP_TYPECAST = 35; + const TP_DOT = 36; + const TP_BOOLEAN = 37; + const TP_NULL = 38; + const TP_SINGLEQUOTESTRING = 39; + const TP_QUOTE = 40; + const TP_DOUBLECOLON = 41; + const TP_AT = 42; + const TP_HATCH = 43; + const TP_OPENB = 44; + const TP_CLOSEB = 45; + const TP_VERT = 46; + const TP_ISIN = 47; + const TP_ISDIVBY = 48; + const TP_ISNOTDIVBY = 49; + const TP_ISEVEN = 50; + const TP_ISNOTEVEN = 51; + const TP_ISEVENBY = 52; + const TP_ISNOTEVENBY = 53; + const TP_ISODD = 54; + const TP_ISNOTODD = 55; + const TP_ISODDBY = 56; + const TP_ISNOTODDBY = 57; + const TP_INSTANCEOF = 58; + const TP_EQUALS = 59; + const TP_NOTEQUALS = 60; + const TP_GREATERTHAN = 61; + const TP_LESSTHAN = 62; + const TP_GREATEREQUAL = 63; + const TP_LESSEQUAL = 64; + const TP_IDENTITY = 65; + const TP_NONEIDENTITY = 66; + const TP_MOD = 67; + const TP_LAND = 68; + const TP_LOR = 69; + const TP_LXOR = 70; + const TP_BACKTICK = 71; + const TP_DOLLARID = 72; + const YY_NO_ACTION = 561; + const YY_ACCEPT_ACTION = 560; + const YY_ERROR_ACTION = 559; - const YY_SZ_ACTTAB = 1406; + const YY_SZ_ACTTAB = 1246; static public $yy_action = array( - /* 0 */ 14, 332, 77, 49, 50, 88, 264, 209, 270, 211, - /* 10 */ 265, 31, 297, 252, 290, 109, 231, 15, 122, 45, - /* 20 */ 11, 363, 293, 174, 221, 57, 58, 94, 240, 247, - /* 30 */ 345, 48, 109, 276, 51, 6, 14, 161, 75, 176, - /* 40 */ 271, 250, 289, 363, 330, 175, 221, 285, 342, 94, - /* 50 */ 283, 109, 231, 39, 18, 45, 30, 24, 354, 75, - /* 60 */ 135, 57, 58, 250, 240, 247, 345, 48, 226, 285, - /* 70 */ 51, 6, 243, 14, 230, 78, 187, 94, 248, 61, - /* 80 */ 254, 31, 299, 198, 290, 188, 190, 169, 109, 231, - /* 90 */ 94, 51, 45, 30, 210, 206, 252, 285, 57, 58, - /* 100 */ 15, 240, 247, 345, 48, 170, 277, 51, 6, 14, - /* 110 */ 285, 78, 178, 28, 190, 109, 31, 311, 173, 290, - /* 120 */ 548, 68, 253, 353, 109, 231, 333, 190, 45, 30, - /* 130 */ 208, 257, 190, 188, 57, 58, 273, 240, 247, 345, - /* 140 */ 48, 190, 22, 51, 6, 14, 31, 78, 187, 290, - /* 150 */ 29, 268, 363, 213, 133, 221, 295, 331, 94, 422, - /* 160 */ 109, 231, 61, 254, 45, 11, 40, 205, 81, 281, - /* 170 */ 57, 58, 250, 240, 247, 345, 48, 22, 285, 51, - /* 180 */ 6, 14, 288, 75, 180, 284, 227, 263, 94, 133, - /* 190 */ 31, 262, 261, 290, 282, 287, 109, 231, 263, 172, - /* 200 */ 45, 30, 262, 261, 237, 251, 57, 58, 285, 240, - /* 210 */ 247, 345, 48, 142, 328, 51, 6, 14, 173, 75, - /* 220 */ 182, 188, 22, 218, 363, 296, 69, 221, 276, 195, - /* 230 */ 94, 47, 109, 231, 133, 190, 45, 30, 249, 75, - /* 240 */ 217, 258, 57, 58, 250, 240, 247, 345, 48, 55, - /* 250 */ 285, 51, 6, 14, 31, 78, 179, 290, 25, 73, - /* 260 */ 363, 274, 38, 221, 31, 306, 94, 290, 109, 231, - /* 270 */ 321, 51, 45, 11, 292, 291, 173, 188, 57, 58, - /* 280 */ 250, 240, 247, 345, 48, 229, 285, 51, 6, 14, - /* 290 */ 236, 78, 187, 263, 23, 348, 31, 262, 261, 290, - /* 300 */ 25, 37, 188, 199, 109, 231, 144, 188, 45, 13, - /* 310 */ 22, 173, 192, 31, 3, 58, 290, 240, 247, 345, - /* 320 */ 48, 276, 133, 51, 6, 14, 280, 85, 187, 218, - /* 330 */ 272, 190, 412, 123, 233, 193, 190, 188, 171, 188, - /* 340 */ 109, 231, 273, 312, 45, 13, 215, 188, 276, 31, - /* 350 */ 3, 58, 225, 240, 247, 345, 48, 41, 47, 51, - /* 360 */ 6, 2, 5, 324, 325, 12, 7, 327, 322, 10, - /* 370 */ 9, 146, 222, 124, 75, 31, 173, 335, 290, 175, - /* 380 */ 56, 315, 314, 320, 188, 17, 276, 39, 276, 33, - /* 390 */ 2, 5, 324, 325, 12, 7, 327, 322, 10, 9, - /* 400 */ 14, 294, 75, 177, 267, 190, 51, 94, 164, 19, - /* 410 */ 315, 314, 320, 190, 246, 109, 184, 317, 129, 145, - /* 420 */ 30, 188, 191, 173, 188, 57, 58, 285, 240, 247, - /* 430 */ 345, 48, 158, 276, 51, 6, 22, 2, 5, 324, - /* 440 */ 325, 12, 7, 327, 322, 10, 9, 14, 133, 75, - /* 450 */ 182, 349, 341, 190, 113, 21, 139, 315, 314, 320, - /* 460 */ 34, 202, 109, 231, 94, 26, 92, 30, 190, 292, - /* 470 */ 224, 22, 57, 58, 350, 240, 247, 345, 48, 190, - /* 480 */ 121, 51, 6, 133, 285, 31, 190, 42, 189, 2, - /* 490 */ 5, 324, 325, 12, 7, 327, 322, 10, 9, 329, - /* 500 */ 307, 305, 308, 309, 310, 304, 303, 298, 63, 315, - /* 510 */ 314, 320, 273, 119, 2, 5, 324, 325, 12, 7, - /* 520 */ 327, 322, 10, 9, 14, 156, 75, 182, 276, 36, - /* 530 */ 344, 319, 154, 70, 315, 314, 320, 188, 188, 109, - /* 540 */ 231, 294, 356, 16, 30, 47, 157, 35, 292, 57, - /* 550 */ 58, 289, 240, 247, 345, 48, 132, 14, 51, 75, - /* 560 */ 185, 137, 415, 341, 27, 159, 168, 334, 358, 415, - /* 570 */ 289, 276, 109, 231, 188, 188, 276, 30, 279, 190, - /* 580 */ 42, 44, 57, 58, 294, 240, 247, 345, 48, 71, - /* 590 */ 244, 51, 329, 307, 305, 308, 309, 310, 304, 303, - /* 600 */ 298, 269, 363, 219, 292, 221, 67, 323, 94, 340, - /* 610 */ 141, 97, 212, 280, 188, 226, 188, 346, 313, 140, - /* 620 */ 118, 255, 250, 203, 183, 188, 363, 219, 285, 221, - /* 630 */ 65, 339, 94, 301, 276, 96, 363, 219, 188, 221, - /* 640 */ 67, 346, 94, 259, 118, 105, 250, 160, 359, 138, - /* 650 */ 188, 346, 285, 260, 118, 188, 250, 301, 360, 353, - /* 660 */ 188, 326, 285, 318, 276, 117, 336, 301, 363, 219, - /* 670 */ 188, 221, 67, 188, 94, 363, 219, 101, 221, 67, - /* 680 */ 292, 94, 108, 346, 102, 112, 118, 162, 250, 251, - /* 690 */ 346, 234, 289, 118, 285, 250, 23, 292, 229, 301, - /* 700 */ 292, 285, 343, 114, 363, 219, 301, 221, 67, 347, - /* 710 */ 94, 363, 219, 99, 221, 67, 4, 94, 292, 346, - /* 720 */ 106, 116, 118, 128, 250, 364, 346, 239, 143, 118, - /* 730 */ 285, 250, 242, 190, 42, 301, 292, 285, 276, 232, - /* 740 */ 207, 201, 301, 276, 38, 136, 329, 307, 305, 308, - /* 750 */ 309, 310, 304, 303, 298, 363, 219, 266, 221, 67, - /* 760 */ 276, 94, 363, 219, 104, 221, 67, 286, 94, 278, - /* 770 */ 346, 107, 147, 118, 52, 250, 337, 346, 19, 194, - /* 780 */ 118, 285, 250, 245, 256, 32, 301, 276, 285, 1, - /* 790 */ 83, 363, 219, 301, 220, 67, 76, 94, 363, 219, - /* 800 */ 103, 221, 67, 90, 94, 79, 346, 100, 351, 118, - /* 810 */ 80, 250, 204, 346, 84, 302, 118, 285, 250, 62, - /* 820 */ 271, 241, 301, 188, 285, 280, 46, 363, 219, 301, - /* 830 */ 221, 66, 43, 94, 363, 216, 98, 221, 166, 91, - /* 840 */ 94, 130, 346, 20, 82, 118, 200, 250, 41, 346, - /* 850 */ 294, 8, 118, 285, 250, 338, 296, 296, 301, 296, - /* 860 */ 285, 296, 296, 296, 296, 296, 296, 296, 181, 355, - /* 870 */ 363, 275, 296, 221, 127, 296, 94, 363, 275, 296, - /* 880 */ 221, 59, 89, 94, 296, 346, 296, 296, 118, 296, - /* 890 */ 250, 296, 346, 196, 296, 118, 285, 250, 296, 296, - /* 900 */ 296, 296, 296, 285, 363, 86, 296, 72, 53, 93, - /* 910 */ 87, 363, 86, 296, 74, 60, 93, 87, 296, 346, - /* 920 */ 296, 296, 118, 296, 250, 296, 346, 296, 296, 118, - /* 930 */ 285, 250, 296, 296, 296, 296, 296, 285, 296, 296, - /* 940 */ 296, 296, 296, 296, 363, 275, 296, 221, 127, 296, - /* 950 */ 94, 296, 296, 296, 296, 296, 296, 296, 296, 346, - /* 960 */ 296, 296, 118, 296, 250, 296, 296, 357, 363, 228, - /* 970 */ 285, 221, 54, 95, 94, 296, 296, 296, 296, 296, - /* 980 */ 296, 363, 275, 346, 221, 127, 118, 94, 250, 296, - /* 990 */ 296, 296, 296, 296, 285, 296, 346, 296, 296, 118, - /* 1000 */ 296, 250, 363, 216, 223, 221, 166, 285, 94, 316, - /* 1010 */ 235, 361, 362, 214, 300, 14, 296, 346, 296, 296, - /* 1020 */ 118, 296, 250, 363, 275, 296, 221, 127, 285, 94, - /* 1030 */ 109, 296, 296, 296, 296, 296, 296, 352, 346, 296, - /* 1040 */ 296, 118, 296, 250, 296, 296, 197, 363, 186, 285, - /* 1050 */ 221, 151, 238, 94, 296, 296, 296, 363, 275, 296, - /* 1060 */ 221, 167, 346, 94, 296, 118, 296, 250, 296, 296, - /* 1070 */ 296, 296, 346, 285, 296, 118, 296, 250, 363, 275, - /* 1080 */ 296, 221, 134, 285, 94, 296, 296, 296, 296, 296, - /* 1090 */ 296, 296, 296, 346, 296, 296, 118, 296, 250, 363, - /* 1100 */ 275, 296, 221, 126, 285, 94, 296, 296, 296, 296, - /* 1110 */ 296, 296, 296, 296, 346, 296, 296, 118, 296, 250, - /* 1120 */ 296, 296, 296, 363, 275, 285, 221, 131, 296, 94, - /* 1130 */ 296, 296, 296, 363, 275, 296, 221, 155, 346, 94, - /* 1140 */ 296, 118, 296, 250, 296, 296, 296, 296, 346, 285, - /* 1150 */ 296, 118, 296, 250, 363, 275, 296, 221, 153, 285, - /* 1160 */ 94, 296, 296, 296, 296, 296, 296, 296, 296, 346, - /* 1170 */ 296, 296, 118, 296, 250, 363, 275, 296, 221, 125, - /* 1180 */ 285, 94, 296, 296, 296, 296, 296, 296, 296, 296, - /* 1190 */ 346, 296, 296, 118, 296, 250, 296, 296, 296, 363, - /* 1200 */ 275, 285, 221, 163, 296, 94, 296, 296, 296, 363, - /* 1210 */ 275, 296, 221, 165, 346, 94, 296, 118, 296, 250, - /* 1220 */ 296, 296, 296, 296, 346, 285, 296, 118, 296, 250, - /* 1230 */ 363, 275, 296, 221, 150, 285, 94, 296, 296, 296, - /* 1240 */ 296, 296, 296, 296, 296, 346, 296, 296, 118, 296, - /* 1250 */ 250, 363, 275, 296, 221, 64, 285, 94, 296, 296, - /* 1260 */ 296, 296, 296, 296, 296, 296, 346, 296, 296, 118, - /* 1270 */ 296, 250, 296, 296, 296, 363, 275, 285, 221, 120, - /* 1280 */ 296, 94, 296, 296, 296, 363, 275, 296, 221, 152, - /* 1290 */ 346, 94, 296, 118, 296, 250, 296, 296, 296, 296, - /* 1300 */ 346, 285, 296, 118, 296, 250, 363, 275, 296, 221, - /* 1310 */ 149, 285, 94, 296, 296, 296, 296, 296, 296, 296, - /* 1320 */ 296, 346, 296, 296, 118, 296, 250, 363, 275, 296, - /* 1330 */ 221, 148, 285, 94, 296, 296, 296, 296, 296, 296, - /* 1340 */ 296, 296, 346, 296, 296, 118, 296, 250, 296, 296, - /* 1350 */ 296, 363, 275, 285, 221, 363, 275, 94, 221, 296, - /* 1360 */ 296, 94, 296, 296, 296, 296, 346, 296, 296, 115, - /* 1370 */ 346, 250, 296, 110, 296, 250, 296, 285, 296, 363, - /* 1380 */ 275, 285, 221, 296, 296, 94, 296, 296, 296, 296, - /* 1390 */ 296, 296, 296, 296, 346, 296, 296, 111, 296, 250, - /* 1400 */ 296, 296, 296, 296, 296, 285, + /* 0 */ 4, 11, 83, 53, 247, 99, 220, 180, 345, 43, + /* 10 */ 231, 131, 47, 7, 363, 244, 103, 191, 254, 253, + /* 20 */ 263, 185, 15, 49, 45, 42, 63, 226, 326, 323, + /* 30 */ 292, 52, 184, 95, 60, 2, 560, 51, 257, 253, + /* 40 */ 263, 184, 40, 17, 16, 352, 353, 24, 28, 360, + /* 50 */ 361, 25, 34, 269, 268, 265, 266, 267, 273, 274, + /* 60 */ 280, 281, 282, 279, 278, 18, 169, 301, 310, 98, + /* 70 */ 289, 217, 47, 233, 101, 23, 98, 185, 31, 209, + /* 80 */ 208, 349, 11, 49, 45, 291, 260, 8, 72, 50, + /* 90 */ 300, 322, 131, 18, 331, 251, 310, 300, 200, 275, + /* 100 */ 13, 184, 40, 17, 16, 352, 353, 24, 28, 360, + /* 110 */ 361, 25, 34, 269, 268, 265, 266, 267, 273, 274, + /* 120 */ 280, 281, 282, 279, 278, 4, 18, 87, 172, 310, + /* 130 */ 26, 184, 18, 329, 43, 310, 18, 184, 340, 310, + /* 140 */ 27, 103, 191, 132, 246, 229, 235, 19, 236, 54, + /* 150 */ 42, 63, 4, 326, 323, 292, 52, 304, 288, 60, + /* 160 */ 2, 264, 237, 4, 185, 84, 176, 185, 103, 201, + /* 170 */ 239, 365, 43, 369, 366, 54, 344, 334, 39, 103, + /* 180 */ 191, 18, 333, 18, 310, 19, 310, 27, 42, 63, + /* 190 */ 11, 326, 323, 292, 52, 73, 204, 60, 2, 4, + /* 200 */ 131, 87, 187, 118, 328, 350, 364, 243, 43, 196, + /* 210 */ 227, 185, 185, 185, 155, 103, 191, 307, 288, 317, + /* 220 */ 30, 19, 87, 137, 42, 63, 11, 326, 323, 292, + /* 230 */ 52, 166, 293, 60, 2, 4, 131, 84, 176, 349, + /* 240 */ 184, 184, 321, 56, 43, 255, 18, 259, 427, 310, + /* 250 */ 258, 103, 191, 121, 60, 185, 184, 15, 168, 349, + /* 260 */ 42, 63, 32, 326, 323, 292, 52, 135, 288, 60, + /* 270 */ 2, 4, 166, 87, 178, 38, 230, 86, 252, 201, + /* 280 */ 43, 165, 288, 18, 330, 190, 310, 103, 191, 241, + /* 290 */ 50, 309, 245, 19, 9, 21, 42, 63, 202, 326, + /* 300 */ 323, 292, 52, 249, 248, 60, 2, 4, 296, 84, + /* 310 */ 174, 171, 11, 184, 362, 47, 43, 184, 295, 37, + /* 320 */ 341, 185, 131, 103, 191, 185, 49, 45, 315, 19, + /* 330 */ 11, 98, 42, 63, 116, 326, 323, 292, 52, 166, + /* 340 */ 131, 60, 2, 294, 365, 437, 369, 366, 54, 288, + /* 350 */ 334, 164, 300, 184, 184, 218, 269, 268, 265, 266, + /* 360 */ 267, 273, 274, 280, 281, 282, 279, 278, 4, 210, + /* 370 */ 90, 176, 286, 111, 36, 305, 130, 43, 170, 185, + /* 380 */ 348, 166, 87, 232, 103, 191, 14, 184, 288, 250, + /* 390 */ 19, 288, 184, 42, 63, 109, 326, 323, 292, 52, + /* 400 */ 166, 194, 60, 2, 4, 193, 84, 175, 184, 87, + /* 410 */ 288, 22, 234, 43, 60, 98, 123, 332, 338, 55, + /* 420 */ 103, 191, 113, 332, 219, 55, 15, 167, 349, 42, + /* 430 */ 63, 288, 326, 323, 292, 52, 300, 288, 60, 2, + /* 440 */ 4, 60, 87, 173, 335, 293, 298, 303, 134, 43, + /* 450 */ 64, 185, 18, 185, 185, 310, 103, 183, 197, 214, + /* 460 */ 302, 18, 19, 288, 181, 42, 63, 185, 326, 323, + /* 470 */ 292, 52, 10, 284, 60, 2, 4, 293, 87, 177, + /* 480 */ 185, 354, 430, 46, 44, 43, 1, 5, 185, 430, + /* 490 */ 357, 301, 103, 191, 145, 318, 287, 233, 19, 317, + /* 500 */ 98, 42, 63, 185, 326, 323, 292, 52, 41, 291, + /* 510 */ 60, 4, 70, 87, 187, 322, 149, 290, 343, 106, + /* 520 */ 43, 300, 337, 157, 185, 185, 171, 103, 191, 185, + /* 530 */ 133, 285, 239, 19, 37, 320, 42, 63, 185, 326, + /* 540 */ 323, 292, 52, 301, 12, 60, 185, 216, 336, 233, + /* 550 */ 150, 367, 98, 301, 105, 185, 203, 318, 185, 233, + /* 560 */ 112, 291, 98, 18, 72, 59, 195, 322, 75, 276, + /* 570 */ 320, 291, 50, 300, 72, 184, 128, 322, 182, 359, + /* 580 */ 224, 78, 301, 300, 320, 156, 88, 68, 76, 67, + /* 590 */ 94, 81, 301, 115, 207, 179, 217, 320, 233, 101, + /* 600 */ 291, 98, 312, 72, 222, 65, 322, 108, 288, 138, + /* 610 */ 291, 301, 300, 72, 66, 228, 322, 233, 57, 92, + /* 620 */ 98, 301, 300, 320, 288, 318, 126, 233, 112, 291, + /* 630 */ 98, 129, 72, 277, 309, 322, 297, 223, 139, 291, + /* 640 */ 301, 300, 72, 104, 217, 322, 233, 100, 212, 98, + /* 650 */ 13, 300, 211, 288, 110, 79, 301, 120, 291, 320, + /* 660 */ 318, 72, 233, 112, 322, 98, 270, 301, 311, 288, + /* 670 */ 300, 271, 288, 233, 291, 198, 98, 72, 74, 161, + /* 680 */ 322, 301, 107, 215, 317, 186, 300, 233, 141, 256, + /* 690 */ 98, 322, 308, 35, 320, 91, 143, 300, 320, 291, + /* 700 */ 301, 317, 72, 346, 318, 322, 233, 62, 93, 98, + /* 710 */ 301, 300, 339, 102, 318, 213, 233, 112, 291, 98, + /* 720 */ 33, 72, 85, 206, 322, 89, 96, 327, 291, 320, + /* 730 */ 300, 72, 190, 221, 322, 306, 325, 299, 301, 32, + /* 740 */ 300, 262, 88, 347, 77, 58, 94, 81, 301, 160, + /* 750 */ 319, 162, 216, 192, 233, 150, 291, 98, 20, 72, + /* 760 */ 9, 48, 322, 80, 261, 194, 291, 301, 300, 72, + /* 770 */ 351, 217, 322, 233, 101, 307, 98, 97, 300, 225, + /* 780 */ 82, 136, 189, 301, 358, 291, 309, 318, 72, 233, + /* 790 */ 163, 322, 98, 185, 342, 305, 301, 300, 39, 6, + /* 800 */ 318, 291, 233, 158, 72, 98, 305, 322, 293, 305, + /* 810 */ 305, 305, 301, 300, 291, 305, 318, 72, 233, 114, + /* 820 */ 322, 98, 305, 305, 305, 301, 300, 305, 305, 318, + /* 830 */ 291, 188, 125, 72, 98, 305, 322, 305, 305, 305, + /* 840 */ 305, 305, 300, 291, 301, 305, 72, 305, 318, 322, + /* 850 */ 233, 119, 301, 98, 305, 300, 318, 305, 233, 124, + /* 860 */ 305, 98, 291, 301, 305, 72, 305, 318, 322, 233, + /* 870 */ 291, 305, 98, 72, 300, 305, 322, 305, 305, 301, + /* 880 */ 305, 291, 300, 318, 71, 233, 153, 322, 98, 305, + /* 890 */ 305, 305, 301, 300, 305, 305, 318, 291, 233, 152, + /* 900 */ 72, 98, 305, 322, 305, 305, 305, 305, 301, 300, + /* 910 */ 291, 305, 318, 72, 233, 140, 322, 98, 305, 305, + /* 920 */ 305, 301, 300, 305, 305, 318, 291, 233, 159, 72, + /* 930 */ 98, 305, 322, 305, 305, 305, 305, 301, 300, 291, + /* 940 */ 305, 318, 72, 233, 147, 322, 98, 240, 305, 305, + /* 950 */ 240, 300, 305, 3, 305, 291, 3, 305, 72, 305, + /* 960 */ 305, 322, 305, 305, 301, 305, 305, 300, 318, 103, + /* 970 */ 233, 154, 103, 98, 301, 305, 305, 305, 318, 305, + /* 980 */ 233, 122, 291, 98, 242, 72, 305, 370, 322, 305, + /* 990 */ 305, 305, 291, 301, 300, 72, 305, 318, 322, 233, + /* 1000 */ 117, 305, 98, 301, 300, 305, 305, 318, 305, 233, + /* 1010 */ 144, 291, 98, 305, 72, 29, 238, 322, 29, 238, + /* 1020 */ 305, 291, 301, 300, 72, 305, 318, 322, 233, 151, + /* 1030 */ 305, 98, 305, 300, 305, 305, 305, 305, 305, 305, + /* 1040 */ 291, 305, 305, 72, 305, 305, 322, 305, 305, 301, + /* 1050 */ 305, 305, 300, 318, 305, 233, 61, 305, 98, 301, + /* 1060 */ 305, 305, 305, 318, 305, 233, 127, 291, 98, 305, + /* 1070 */ 72, 305, 305, 322, 305, 305, 305, 291, 301, 300, + /* 1080 */ 72, 305, 318, 322, 233, 142, 305, 98, 301, 300, + /* 1090 */ 305, 305, 318, 305, 233, 146, 291, 98, 305, 72, + /* 1100 */ 305, 305, 322, 305, 305, 305, 291, 301, 300, 72, + /* 1110 */ 305, 318, 322, 233, 148, 305, 98, 305, 300, 305, + /* 1120 */ 305, 305, 305, 305, 305, 291, 305, 305, 72, 305, + /* 1130 */ 301, 322, 305, 305, 318, 305, 233, 300, 305, 98, + /* 1140 */ 305, 301, 305, 305, 305, 355, 305, 233, 291, 305, + /* 1150 */ 98, 69, 305, 305, 322, 305, 305, 301, 301, 356, + /* 1160 */ 300, 205, 368, 233, 233, 322, 98, 98, 305, 305, + /* 1170 */ 301, 300, 305, 305, 324, 199, 233, 305, 305, 98, + /* 1180 */ 301, 322, 322, 305, 316, 305, 233, 300, 300, 98, + /* 1190 */ 305, 305, 301, 305, 322, 305, 272, 305, 233, 305, + /* 1200 */ 300, 98, 305, 301, 322, 305, 305, 314, 305, 233, + /* 1210 */ 300, 305, 98, 305, 301, 301, 322, 305, 313, 283, + /* 1220 */ 233, 233, 300, 98, 98, 305, 305, 322, 305, 305, + /* 1230 */ 305, 305, 305, 300, 305, 305, 305, 305, 322, 322, + /* 1240 */ 305, 305, 305, 305, 300, 300, ); static public $yy_lookahead = array( - /* 0 */ 7, 15, 9, 10, 10, 12, 12, 14, 14, 16, - /* 10 */ 16, 7, 8, 3, 10, 22, 23, 7, 77, 26, - /* 20 */ 27, 75, 76, 82, 78, 32, 33, 81, 35, 36, - /* 30 */ 37, 38, 22, 92, 41, 42, 7, 99, 9, 10, - /* 40 */ 102, 95, 104, 75, 76, 34, 78, 101, 38, 81, - /* 50 */ 8, 22, 23, 42, 11, 26, 27, 7, 90, 9, - /* 60 */ 10, 32, 33, 95, 35, 36, 37, 38, 25, 101, - /* 70 */ 41, 42, 43, 7, 78, 9, 10, 81, 8, 69, - /* 80 */ 70, 7, 8, 13, 10, 15, 44, 78, 22, 23, - /* 90 */ 81, 41, 26, 27, 87, 21, 3, 101, 32, 33, - /* 100 */ 7, 35, 36, 37, 38, 8, 97, 41, 42, 7, - /* 110 */ 101, 9, 10, 25, 44, 22, 7, 8, 82, 10, - /* 120 */ 72, 73, 74, 75, 22, 23, 8, 44, 26, 27, - /* 130 */ 21, 38, 44, 15, 32, 33, 18, 35, 36, 37, - /* 140 */ 38, 44, 27, 41, 42, 7, 7, 9, 10, 10, - /* 150 */ 11, 104, 75, 76, 39, 78, 10, 18, 81, 44, - /* 160 */ 22, 23, 69, 70, 26, 27, 7, 90, 9, 10, - /* 170 */ 32, 33, 95, 35, 36, 37, 38, 27, 101, 41, - /* 180 */ 42, 7, 23, 9, 10, 78, 40, 26, 81, 39, - /* 190 */ 7, 30, 31, 10, 35, 36, 22, 23, 26, 8, - /* 200 */ 26, 27, 30, 31, 43, 75, 32, 33, 101, 35, - /* 210 */ 36, 37, 38, 77, 8, 41, 42, 7, 82, 9, - /* 220 */ 10, 15, 27, 40, 75, 76, 96, 78, 92, 34, - /* 230 */ 81, 13, 22, 23, 39, 44, 26, 27, 43, 9, - /* 240 */ 10, 111, 32, 33, 95, 35, 36, 37, 38, 83, - /* 250 */ 101, 41, 42, 7, 7, 9, 10, 10, 11, 88, - /* 260 */ 75, 76, 11, 78, 7, 8, 81, 10, 22, 23, - /* 270 */ 8, 41, 26, 27, 103, 8, 82, 15, 32, 33, - /* 280 */ 95, 35, 36, 37, 38, 34, 101, 41, 42, 7, - /* 290 */ 10, 9, 10, 26, 11, 8, 7, 30, 31, 10, - /* 300 */ 11, 107, 15, 23, 22, 23, 77, 15, 26, 27, - /* 310 */ 27, 82, 89, 7, 32, 33, 10, 35, 36, 37, - /* 320 */ 38, 92, 39, 41, 42, 7, 103, 9, 10, 40, - /* 330 */ 8, 44, 8, 77, 9, 10, 44, 15, 82, 15, - /* 340 */ 22, 23, 18, 28, 26, 27, 40, 15, 92, 7, - /* 350 */ 32, 33, 10, 35, 36, 37, 38, 25, 13, 41, - /* 360 */ 42, 46, 47, 48, 49, 50, 51, 52, 53, 54, - /* 370 */ 55, 77, 28, 77, 9, 7, 82, 8, 10, 34, - /* 380 */ 83, 66, 67, 68, 15, 24, 92, 42, 92, 7, - /* 390 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - /* 400 */ 7, 105, 9, 10, 78, 44, 41, 81, 17, 27, - /* 410 */ 66, 67, 68, 44, 8, 22, 23, 8, 77, 100, - /* 420 */ 27, 15, 13, 82, 15, 32, 33, 101, 35, 36, - /* 430 */ 37, 38, 83, 92, 41, 42, 27, 46, 47, 48, - /* 440 */ 49, 50, 51, 52, 53, 54, 55, 7, 39, 9, - /* 450 */ 10, 8, 28, 44, 88, 24, 100, 66, 67, 68, - /* 460 */ 25, 78, 22, 23, 81, 21, 28, 27, 44, 103, - /* 470 */ 28, 27, 32, 33, 43, 35, 36, 37, 38, 44, - /* 480 */ 100, 41, 42, 39, 101, 7, 44, 45, 10, 46, - /* 490 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, - /* 500 */ 58, 59, 60, 61, 62, 63, 64, 65, 83, 66, - /* 510 */ 67, 68, 18, 77, 46, 47, 48, 49, 50, 51, - /* 520 */ 52, 53, 54, 55, 7, 17, 9, 10, 92, 29, - /* 530 */ 8, 8, 24, 88, 66, 67, 68, 15, 15, 22, - /* 540 */ 23, 105, 28, 11, 27, 13, 99, 29, 103, 32, - /* 550 */ 33, 104, 35, 36, 37, 38, 77, 7, 41, 9, - /* 560 */ 10, 77, 8, 28, 21, 99, 82, 8, 8, 15, - /* 570 */ 104, 92, 22, 23, 15, 15, 92, 27, 10, 44, - /* 580 */ 45, 56, 32, 33, 105, 35, 36, 37, 38, 88, - /* 590 */ 41, 41, 57, 58, 59, 60, 61, 62, 63, 64, - /* 600 */ 65, 10, 75, 76, 103, 78, 79, 8, 81, 8, - /* 610 */ 100, 84, 85, 103, 15, 25, 15, 90, 8, 77, - /* 620 */ 93, 10, 95, 85, 86, 15, 75, 76, 101, 78, - /* 630 */ 79, 8, 81, 106, 92, 84, 75, 76, 15, 78, - /* 640 */ 79, 90, 81, 8, 93, 84, 95, 10, 8, 77, - /* 650 */ 15, 90, 101, 8, 93, 15, 95, 106, 74, 75, - /* 660 */ 15, 4, 101, 8, 92, 88, 8, 106, 75, 76, - /* 670 */ 15, 78, 79, 15, 81, 75, 76, 84, 78, 79, - /* 680 */ 103, 81, 88, 90, 84, 88, 93, 99, 95, 75, - /* 690 */ 90, 3, 104, 93, 101, 95, 11, 103, 34, 106, - /* 700 */ 103, 101, 10, 88, 75, 76, 106, 78, 79, 8, - /* 710 */ 81, 75, 76, 84, 78, 79, 108, 81, 103, 90, - /* 720 */ 84, 88, 93, 77, 95, 111, 90, 23, 77, 93, - /* 730 */ 101, 95, 41, 44, 45, 106, 103, 101, 92, 3, - /* 740 */ 20, 10, 106, 92, 11, 77, 57, 58, 59, 60, - /* 750 */ 61, 62, 63, 64, 65, 75, 76, 8, 78, 79, - /* 760 */ 92, 81, 75, 76, 84, 78, 79, 28, 81, 8, - /* 770 */ 90, 84, 77, 93, 100, 95, 8, 90, 27, 10, - /* 780 */ 93, 101, 95, 43, 69, 19, 106, 92, 101, 15, - /* 790 */ 9, 75, 76, 106, 78, 79, 9, 81, 75, 76, - /* 800 */ 84, 78, 79, 15, 81, 9, 90, 84, 8, 93, - /* 810 */ 9, 95, 20, 90, 9, 4, 93, 101, 95, 10, - /* 820 */ 102, 92, 106, 15, 101, 103, 94, 75, 76, 106, - /* 830 */ 78, 79, 15, 81, 75, 76, 84, 78, 79, 97, - /* 840 */ 81, 100, 90, 27, 9, 93, 91, 95, 25, 90, - /* 850 */ 105, 87, 93, 101, 95, 85, 112, 112, 106, 112, - /* 860 */ 101, 112, 112, 112, 112, 112, 112, 112, 109, 110, - /* 870 */ 75, 76, 112, 78, 79, 112, 81, 75, 76, 112, - /* 880 */ 78, 79, 80, 81, 112, 90, 112, 112, 93, 112, - /* 890 */ 95, 112, 90, 98, 112, 93, 101, 95, 112, 112, - /* 900 */ 112, 112, 112, 101, 75, 76, 112, 78, 79, 80, - /* 910 */ 81, 75, 76, 112, 78, 79, 80, 81, 112, 90, - /* 920 */ 112, 112, 93, 112, 95, 112, 90, 112, 112, 93, - /* 930 */ 101, 95, 112, 112, 112, 112, 112, 101, 112, 112, - /* 940 */ 112, 112, 112, 112, 75, 76, 112, 78, 79, 112, - /* 950 */ 81, 112, 112, 112, 112, 112, 112, 112, 112, 90, - /* 960 */ 112, 112, 93, 112, 95, 112, 112, 98, 75, 76, - /* 970 */ 101, 78, 79, 80, 81, 112, 112, 112, 112, 112, - /* 980 */ 112, 75, 76, 90, 78, 79, 93, 81, 95, 112, - /* 990 */ 112, 112, 112, 112, 101, 112, 90, 112, 112, 93, - /* 1000 */ 112, 95, 75, 76, 98, 78, 79, 101, 81, 1, - /* 1010 */ 2, 3, 4, 5, 6, 7, 112, 90, 112, 112, - /* 1020 */ 93, 112, 95, 75, 76, 112, 78, 79, 101, 81, - /* 1030 */ 22, 112, 112, 112, 112, 112, 112, 110, 90, 112, - /* 1040 */ 112, 93, 112, 95, 112, 112, 98, 75, 76, 101, - /* 1050 */ 78, 79, 80, 81, 112, 112, 112, 75, 76, 112, - /* 1060 */ 78, 79, 90, 81, 112, 93, 112, 95, 112, 112, - /* 1070 */ 112, 112, 90, 101, 112, 93, 112, 95, 75, 76, - /* 1080 */ 112, 78, 79, 101, 81, 112, 112, 112, 112, 112, - /* 1090 */ 112, 112, 112, 90, 112, 112, 93, 112, 95, 75, - /* 1100 */ 76, 112, 78, 79, 101, 81, 112, 112, 112, 112, - /* 1110 */ 112, 112, 112, 112, 90, 112, 112, 93, 112, 95, - /* 1120 */ 112, 112, 112, 75, 76, 101, 78, 79, 112, 81, - /* 1130 */ 112, 112, 112, 75, 76, 112, 78, 79, 90, 81, - /* 1140 */ 112, 93, 112, 95, 112, 112, 112, 112, 90, 101, - /* 1150 */ 112, 93, 112, 95, 75, 76, 112, 78, 79, 101, - /* 1160 */ 81, 112, 112, 112, 112, 112, 112, 112, 112, 90, - /* 1170 */ 112, 112, 93, 112, 95, 75, 76, 112, 78, 79, - /* 1180 */ 101, 81, 112, 112, 112, 112, 112, 112, 112, 112, - /* 1190 */ 90, 112, 112, 93, 112, 95, 112, 112, 112, 75, - /* 1200 */ 76, 101, 78, 79, 112, 81, 112, 112, 112, 75, - /* 1210 */ 76, 112, 78, 79, 90, 81, 112, 93, 112, 95, - /* 1220 */ 112, 112, 112, 112, 90, 101, 112, 93, 112, 95, - /* 1230 */ 75, 76, 112, 78, 79, 101, 81, 112, 112, 112, - /* 1240 */ 112, 112, 112, 112, 112, 90, 112, 112, 93, 112, - /* 1250 */ 95, 75, 76, 112, 78, 79, 101, 81, 112, 112, - /* 1260 */ 112, 112, 112, 112, 112, 112, 90, 112, 112, 93, - /* 1270 */ 112, 95, 112, 112, 112, 75, 76, 101, 78, 79, - /* 1280 */ 112, 81, 112, 112, 112, 75, 76, 112, 78, 79, - /* 1290 */ 90, 81, 112, 93, 112, 95, 112, 112, 112, 112, - /* 1300 */ 90, 101, 112, 93, 112, 95, 75, 76, 112, 78, - /* 1310 */ 79, 101, 81, 112, 112, 112, 112, 112, 112, 112, - /* 1320 */ 112, 90, 112, 112, 93, 112, 95, 75, 76, 112, - /* 1330 */ 78, 79, 101, 81, 112, 112, 112, 112, 112, 112, - /* 1340 */ 112, 112, 90, 112, 112, 93, 112, 95, 112, 112, - /* 1350 */ 112, 75, 76, 101, 78, 75, 76, 81, 78, 112, - /* 1360 */ 112, 81, 112, 112, 112, 112, 90, 112, 112, 93, - /* 1370 */ 90, 95, 112, 93, 112, 95, 112, 101, 112, 75, - /* 1380 */ 76, 101, 78, 112, 112, 81, 112, 112, 112, 112, - /* 1390 */ 112, 112, 112, 112, 90, 112, 112, 93, 112, 95, - /* 1400 */ 112, 112, 112, 112, 112, 101, + /* 0 */ 9, 31, 11, 12, 10, 14, 36, 16, 10, 18, + /* 10 */ 19, 41, 18, 27, 10, 45, 25, 26, 76, 77, + /* 20 */ 78, 17, 31, 29, 30, 34, 35, 32, 37, 38, + /* 30 */ 39, 40, 46, 17, 43, 44, 74, 75, 76, 77, + /* 40 */ 78, 46, 47, 48, 49, 50, 51, 52, 53, 54, + /* 50 */ 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, + /* 60 */ 66, 67, 68, 69, 70, 9, 83, 77, 12, 86, + /* 70 */ 10, 81, 18, 83, 84, 24, 86, 17, 9, 89, + /* 80 */ 90, 21, 31, 29, 30, 95, 103, 13, 98, 15, + /* 90 */ 107, 101, 41, 9, 10, 10, 12, 107, 42, 45, + /* 100 */ 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, + /* 110 */ 55, 56, 57, 59, 60, 61, 62, 63, 64, 65, + /* 120 */ 66, 67, 68, 69, 70, 9, 9, 11, 12, 12, + /* 130 */ 13, 46, 9, 10, 18, 12, 9, 46, 21, 12, + /* 140 */ 13, 25, 26, 82, 1, 2, 3, 31, 5, 6, + /* 150 */ 34, 35, 9, 37, 38, 39, 40, 10, 97, 43, + /* 160 */ 44, 45, 71, 9, 17, 11, 12, 17, 25, 42, + /* 170 */ 77, 2, 18, 4, 5, 6, 7, 8, 28, 25, + /* 180 */ 26, 9, 10, 9, 12, 31, 12, 13, 34, 35, + /* 190 */ 31, 37, 38, 39, 40, 102, 24, 43, 44, 9, + /* 200 */ 41, 11, 12, 82, 10, 10, 10, 114, 18, 15, + /* 210 */ 15, 17, 17, 17, 105, 25, 26, 108, 97, 110, + /* 220 */ 9, 31, 11, 12, 34, 35, 31, 37, 38, 39, + /* 230 */ 40, 87, 111, 43, 44, 9, 41, 11, 12, 21, + /* 240 */ 46, 46, 32, 12, 18, 14, 9, 16, 10, 12, + /* 250 */ 19, 25, 26, 82, 43, 17, 46, 31, 87, 21, + /* 260 */ 34, 35, 13, 37, 38, 39, 40, 82, 97, 43, + /* 270 */ 44, 9, 87, 11, 12, 9, 94, 11, 12, 42, + /* 280 */ 18, 10, 97, 9, 10, 36, 12, 25, 26, 71, + /* 290 */ 15, 109, 26, 31, 13, 28, 34, 35, 24, 37, + /* 300 */ 38, 39, 40, 37, 38, 43, 44, 9, 43, 11, + /* 310 */ 12, 36, 31, 46, 10, 18, 18, 46, 10, 44, + /* 320 */ 17, 17, 41, 25, 26, 17, 29, 30, 83, 31, + /* 330 */ 31, 86, 34, 35, 82, 37, 38, 39, 40, 87, + /* 340 */ 41, 43, 44, 10, 2, 46, 4, 5, 6, 97, + /* 350 */ 8, 10, 107, 46, 46, 12, 59, 60, 61, 62, + /* 360 */ 63, 64, 65, 66, 67, 68, 69, 70, 9, 26, + /* 370 */ 11, 12, 10, 82, 28, 12, 82, 18, 87, 17, + /* 380 */ 10, 87, 11, 12, 25, 26, 13, 46, 97, 32, + /* 390 */ 31, 97, 46, 34, 35, 82, 37, 38, 39, 40, + /* 400 */ 87, 28, 43, 44, 9, 42, 11, 12, 46, 11, + /* 410 */ 97, 33, 83, 18, 43, 86, 82, 78, 79, 80, + /* 420 */ 25, 26, 82, 78, 79, 80, 31, 87, 21, 34, + /* 430 */ 35, 97, 37, 38, 39, 40, 107, 97, 43, 44, + /* 440 */ 9, 43, 11, 12, 10, 111, 10, 10, 82, 18, + /* 450 */ 12, 17, 9, 17, 17, 12, 25, 26, 11, 12, + /* 460 */ 10, 9, 31, 97, 12, 34, 35, 17, 37, 38, + /* 470 */ 39, 40, 27, 10, 43, 44, 9, 111, 11, 12, + /* 480 */ 17, 10, 10, 99, 100, 18, 17, 18, 17, 17, + /* 490 */ 45, 77, 25, 26, 105, 81, 10, 83, 31, 110, + /* 500 */ 86, 34, 35, 17, 37, 38, 39, 40, 17, 95, + /* 510 */ 43, 9, 98, 11, 12, 101, 20, 10, 10, 93, + /* 520 */ 18, 107, 10, 27, 17, 17, 36, 25, 26, 17, + /* 530 */ 106, 10, 77, 31, 44, 109, 34, 35, 17, 37, + /* 540 */ 38, 39, 40, 77, 31, 43, 17, 81, 10, 83, + /* 550 */ 84, 10, 86, 77, 93, 17, 3, 81, 17, 83, + /* 560 */ 84, 95, 86, 9, 98, 106, 12, 101, 93, 114, + /* 570 */ 109, 95, 15, 107, 98, 46, 106, 101, 112, 113, + /* 580 */ 104, 93, 77, 107, 109, 88, 81, 88, 83, 84, + /* 590 */ 85, 86, 77, 82, 90, 91, 81, 109, 83, 84, + /* 600 */ 95, 86, 110, 98, 89, 88, 101, 93, 97, 82, + /* 610 */ 95, 77, 107, 98, 88, 81, 101, 83, 84, 85, + /* 620 */ 86, 77, 107, 109, 97, 81, 106, 83, 84, 95, + /* 630 */ 86, 106, 98, 45, 109, 101, 43, 92, 82, 95, + /* 640 */ 77, 107, 98, 93, 81, 101, 83, 84, 104, 86, + /* 650 */ 31, 107, 89, 97, 82, 11, 77, 82, 95, 109, + /* 660 */ 81, 98, 83, 84, 101, 86, 4, 77, 12, 97, + /* 670 */ 107, 81, 97, 83, 95, 23, 86, 98, 93, 105, + /* 680 */ 101, 77, 93, 104, 110, 81, 107, 83, 84, 85, + /* 690 */ 86, 101, 12, 33, 109, 11, 105, 107, 109, 95, + /* 700 */ 77, 110, 98, 10, 81, 101, 83, 84, 85, 86, + /* 710 */ 77, 107, 10, 93, 81, 32, 83, 84, 95, 86, + /* 720 */ 22, 98, 11, 23, 101, 11, 32, 32, 95, 109, + /* 730 */ 107, 98, 36, 12, 101, 12, 26, 104, 77, 13, + /* 740 */ 107, 10, 81, 7, 83, 84, 85, 86, 77, 20, + /* 750 */ 12, 12, 81, 12, 83, 84, 95, 86, 24, 98, + /* 760 */ 13, 58, 101, 11, 10, 28, 95, 77, 107, 98, + /* 770 */ 97, 81, 101, 83, 84, 108, 86, 103, 107, 89, + /* 780 */ 11, 106, 96, 77, 113, 95, 109, 81, 98, 83, + /* 790 */ 84, 101, 86, 17, 90, 115, 77, 107, 28, 92, + /* 800 */ 81, 95, 83, 84, 98, 86, 115, 101, 111, 115, + /* 810 */ 115, 115, 77, 107, 95, 115, 81, 98, 83, 84, + /* 820 */ 101, 86, 115, 115, 115, 77, 107, 115, 115, 81, + /* 830 */ 95, 83, 84, 98, 86, 115, 101, 115, 115, 115, + /* 840 */ 115, 115, 107, 95, 77, 115, 98, 115, 81, 101, + /* 850 */ 83, 84, 77, 86, 115, 107, 81, 115, 83, 84, + /* 860 */ 115, 86, 95, 77, 115, 98, 115, 81, 101, 83, + /* 870 */ 95, 115, 86, 98, 107, 115, 101, 115, 115, 77, + /* 880 */ 115, 95, 107, 81, 98, 83, 84, 101, 86, 115, + /* 890 */ 115, 115, 77, 107, 115, 115, 81, 95, 83, 84, + /* 900 */ 98, 86, 115, 101, 115, 115, 115, 115, 77, 107, + /* 910 */ 95, 115, 81, 98, 83, 84, 101, 86, 115, 115, + /* 920 */ 115, 77, 107, 115, 115, 81, 95, 83, 84, 98, + /* 930 */ 86, 115, 101, 115, 115, 115, 115, 77, 107, 95, + /* 940 */ 115, 81, 98, 83, 84, 101, 86, 3, 115, 115, + /* 950 */ 3, 107, 115, 9, 115, 95, 9, 115, 98, 115, + /* 960 */ 115, 101, 115, 115, 77, 115, 115, 107, 81, 25, + /* 970 */ 83, 84, 25, 86, 77, 115, 115, 115, 81, 115, + /* 980 */ 83, 84, 95, 86, 40, 98, 115, 40, 101, 115, + /* 990 */ 115, 115, 95, 77, 107, 98, 115, 81, 101, 83, + /* 1000 */ 84, 115, 86, 77, 107, 115, 115, 81, 115, 83, + /* 1010 */ 84, 95, 86, 115, 98, 71, 72, 101, 71, 72, + /* 1020 */ 115, 95, 77, 107, 98, 115, 81, 101, 83, 84, + /* 1030 */ 115, 86, 115, 107, 115, 115, 115, 115, 115, 115, + /* 1040 */ 95, 115, 115, 98, 115, 115, 101, 115, 115, 77, + /* 1050 */ 115, 115, 107, 81, 115, 83, 84, 115, 86, 77, + /* 1060 */ 115, 115, 115, 81, 115, 83, 84, 95, 86, 115, + /* 1070 */ 98, 115, 115, 101, 115, 115, 115, 95, 77, 107, + /* 1080 */ 98, 115, 81, 101, 83, 84, 115, 86, 77, 107, + /* 1090 */ 115, 115, 81, 115, 83, 84, 95, 86, 115, 98, + /* 1100 */ 115, 115, 101, 115, 115, 115, 95, 77, 107, 98, + /* 1110 */ 115, 81, 101, 83, 84, 115, 86, 115, 107, 115, + /* 1120 */ 115, 115, 115, 115, 115, 95, 115, 115, 98, 115, + /* 1130 */ 77, 101, 115, 115, 81, 115, 83, 107, 115, 86, + /* 1140 */ 115, 77, 115, 115, 115, 81, 115, 83, 95, 115, + /* 1150 */ 86, 98, 115, 115, 101, 115, 115, 77, 77, 95, + /* 1160 */ 107, 81, 81, 83, 83, 101, 86, 86, 115, 115, + /* 1170 */ 77, 107, 115, 115, 81, 95, 83, 115, 115, 86, + /* 1180 */ 77, 101, 101, 115, 81, 115, 83, 107, 107, 86, + /* 1190 */ 115, 115, 77, 115, 101, 115, 81, 115, 83, 115, + /* 1200 */ 107, 86, 115, 77, 101, 115, 115, 81, 115, 83, + /* 1210 */ 107, 115, 86, 115, 77, 77, 101, 115, 81, 81, + /* 1220 */ 83, 83, 107, 86, 86, 115, 115, 101, 115, 115, + /* 1230 */ 115, 115, 115, 107, 115, 115, 115, 115, 101, 101, + /* 1240 */ 115, 115, 115, 115, 107, 107, ); - const YY_SHIFT_USE_DFLT = -15; - const YY_SHIFT_MAX = 236; + const YY_SHIFT_USE_DFLT = -31; + const YY_SHIFT_MAX = 234; static public $yy_shift_ofst = array( - /* 0 */ 1008, 318, 282, 282, 282, 282, 102, 282, 282, 282, - /* 10 */ 282, 282, 282, 282, -7, -7, 138, 66, 138, 66, - /* 20 */ 66, 102, 66, 246, 66, 66, 66, 66, 66, 66, - /* 30 */ 66, 66, 66, 66, 66, 66, 66, 66, 66, 29, - /* 40 */ 210, 174, 440, 393, 550, 517, 517, 50, 93, 409, - /* 50 */ 70, 230, 345, 369, 287, 332, 332, 365, 365, 292, - /* 60 */ 292, 365, 292, 332, 292, 442, 535, 689, 1008, 10, - /* 70 */ 139, 289, 118, 183, 324, 368, 368, 478, 342, 368, - /* 80 */ 368, 368, 368, 368, 368, 342, 635, 532, 817, 808, - /* 90 */ 835, 218, 218, 808, 218, 808, 344, 443, 315, 391, - /* 100 */ 468, 468, 468, 468, 468, 468, 468, 468, 109, -6, - /* 110 */ 267, 161, 74, 4, 247, 172, 306, 257, 172, 322, - /* 120 */ 88, 11, 406, 262, 206, 97, 42, 361, 658, 601, - /* 130 */ 11, 191, 599, 325, 424, 382, 610, 655, 645, 11, - /* 140 */ 623, 11, 640, 560, 559, 11, 523, 522, 435, 83, - /* 150 */ 83, 83, 83, 83, 835, 83, -14, 218, 823, 218, - /* 160 */ 816, 218, 218, 83, -14, 83, 83, 83, -15, -15, - /* 170 */ -15, -15, -15, -15, -15, 159, 195, 283, 444, 115, - /* 180 */ 150, 431, 150, 508, 251, 150, 554, 150, 280, 43, - /* 190 */ 146, 809, 768, 751, 740, 769, 438, 739, 731, 733, - /* 200 */ 749, 761, 715, 766, 801, 792, 805, 796, 787, 774, - /* 210 */ 781, 788, 800, 720, 736, 568, 543, 549, 591, 525, - /* 220 */ 494, 494, 500, 514, 518, 590, 611, 692, 701, 704, - /* 230 */ 691, 664, 811, 637, 657, 688, 685, + /* 0 */ 143, 359, 298, -9, -9, 154, 154, 154, 226, 395, + /* 10 */ 298, 154, 154, 154, 226, 154, 154, 154, 154, 154, + /* 20 */ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + /* 30 */ 154, 154, 154, 154, 154, 154, 154, 116, 190, 262, + /* 40 */ 190, 431, 502, 502, 502, 502, 502, 502, 467, 502, + /* 50 */ 211, 143, 944, 195, 169, 342, 194, 308, 362, 275, + /* 60 */ 371, 529, 529, 398, 529, 150, 150, 529, 150, 54, + /* 70 */ -6, 297, 297, 947, 127, 117, 238, 60, 237, 443, + /* 80 */ 443, 74, 443, 452, 554, 443, 443, 443, 541, 443, + /* 90 */ 554, 443, 776, 776, 776, 769, 557, 557, 557, 491, + /* 100 */ -5, 55, 274, 231, 172, 84, 174, 123, 56, 450, + /* 110 */ 437, 436, -14, 463, 346, 471, 304, 85, 147, 267, + /* 120 */ 4, 196, 341, 434, 271, 91, 490, 210, 490, 490, + /* 130 */ 508, 447, 512, 490, 538, 521, 490, 69, 507, 486, + /* 140 */ 307, 307, 307, 557, 307, 557, 307, 307, 307, 303, + /* 150 */ 307, 307, 307, 307, 307, 557, 770, 769, 307, 307, + /* 160 */ 303, 557, 513, 307, -31, -31, -31, -31, -31, -31, + /* 170 */ -31, 266, -30, 281, 51, 299, 159, 159, 159, 496, + /* 180 */ 469, 373, 445, 249, 363, 343, 472, 159, 218, 731, + /* 190 */ 710, 696, 754, 723, 738, 737, 741, 739, 714, 652, + /* 200 */ 680, 656, 644, 662, 684, 700, 711, 698, 693, 702, + /* 210 */ 726, 683, 694, 660, 619, 695, 734, 703, 747, 736, + /* 220 */ 721, 588, 729, 752, 357, 370, 378, 438, 333, 553, + /* 230 */ -2, 16, 265, 407, 593, ); - const YY_REDUCE_USE_DFLT = -63; - const YY_REDUCE_MAX = 174; + const YY_REDUCE_USE_DFLT = -59; + const YY_REDUCE_MAX = 170; static public $yy_reduce_ofst = array( - /* 0 */ 48, 527, 636, 716, 680, 687, 759, 593, 629, 561, - /* 10 */ 600, 551, 723, 752, 836, 829, 802, 869, 893, 948, - /* 20 */ 795, 927, 906, 972, 1100, 1124, 982, 1134, 1079, 1058, - /* 30 */ 1003, 1024, 1176, 1048, 1155, 1200, 1252, 1231, 1210, 1304, - /* 40 */ 1280, 1276, -32, 77, 149, 185, -54, 9, 130, 484, - /* 50 */ -59, -4, -62, 229, 136, 436, 479, 326, 107, 294, - /* 60 */ 229, 383, 256, 296, 341, 194, 194, 194, 584, 614, - /* 70 */ 223, 510, 542, 510, 542, 171, 577, 171, 171, 597, - /* 80 */ 594, 633, 615, 445, 366, 501, 572, 447, 668, 695, - /* 90 */ 538, 466, 588, 646, 447, 651, 608, 608, 608, 608, - /* 100 */ 608, 608, 608, 608, 608, 608, 608, 608, 722, 755, - /* 110 */ 732, 732, 722, 722, 722, 732, 722, 722, 732, 729, - /* 120 */ 36, 718, 729, 729, 729, 36, 36, 36, 729, 729, - /* 130 */ 718, 36, 729, 742, 36, 741, 729, 729, 729, 718, - /* 140 */ 729, 718, 729, 729, 729, 718, 729, 729, 36, 36, - /* 150 */ 36, 36, 36, 36, 770, 36, 764, 47, 745, 47, - /* 160 */ 674, 47, 47, 36, 7, 36, 36, 36, 297, 356, - /* 170 */ 380, 425, 319, 349, 166, + /* 0 */ -38, -10, 466, 661, 505, 690, 515, 633, 623, 604, + /* 10 */ 671, 579, 544, 476, 534, 563, 1030, 945, 916, 982, + /* 20 */ 1001, 887, 767, 802, 860, 831, 719, 844, 815, 748, + /* 30 */ 775, 897, 1011, 972, 926, 735, 706, 1053, 414, 786, + /* 40 */ 1064, 1080, 1126, 1137, 1115, 1138, 590, 1093, 1081, 1103, + /* 50 */ -17, -58, 93, 171, 345, 339, 291, 313, 185, 109, + /* 60 */ 329, 294, 252, 245, 340, 366, 334, 185, 121, 384, + /* 70 */ 384, 384, 384, 455, 525, 182, 527, 527, 525, 461, + /* 80 */ 475, 389, 426, 488, 488, 550, 514, 488, 511, 620, + /* 90 */ 585, 589, 572, 575, 556, 504, 591, 574, 389, 61, + /* 100 */ 144, 144, 677, 686, 677, 677, 677, 677, 677, 673, + /* 110 */ 673, 673, 144, 673, 144, 673, 673, 144, 673, 144, + /* 120 */ 673, 673, 144, 673, 144, 144, 667, 144, 667, 667, + /* 130 */ 673, 674, 673, 667, 673, 673, 667, 675, 673, 673, + /* 140 */ 144, 144, 144, 492, 144, 492, 144, 144, 144, 707, + /* 150 */ 144, 144, 144, 144, 144, 492, 697, 704, 144, 144, + /* 160 */ 545, 492, 459, 144, 424, 470, 497, 526, 517, 520, + /* 170 */ 499, ); static public $yyExpectedTokens = array( - /* 0 */ array(1, 2, 3, 4, 5, 6, 7, 22, ), - /* 1 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 2 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 3 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 4 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 5 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 6 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 7 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 8 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 9 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 10 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 11 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 12 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 13 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 14 */ array(7, 9, 10, 12, 14, 16, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 15 */ array(7, 9, 10, 12, 14, 16, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 16 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 17 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 18 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 19 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 20 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 21 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 22 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 23 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 24 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 25 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 26 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 27 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 28 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 29 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 30 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 31 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 32 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 33 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 34 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 35 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 36 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 37 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 38 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 39 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, 43, ), - /* 40 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 41 */ array(7, 9, 10, 22, 23, 26, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 42 */ array(7, 9, 10, 22, 23, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 43 */ array(7, 9, 10, 22, 23, 27, 32, 33, 35, 36, 37, 38, 41, 42, ), - /* 44 */ array(7, 9, 10, 22, 23, 27, 32, 33, 35, 36, 37, 38, 41, ), - /* 45 */ array(7, 9, 10, 22, 23, 27, 32, 33, 35, 36, 37, 38, 41, ), - /* 46 */ array(7, 9, 10, 22, 23, 27, 32, 33, 35, 36, 37, 38, 41, ), - /* 47 */ array(7, 9, 10, 41, ), - /* 48 */ array(3, 7, 22, 38, 69, 70, ), - /* 49 */ array(8, 13, 15, 27, 39, 44, ), - /* 50 */ array(8, 13, 15, 44, ), - /* 51 */ array(9, 10, 41, ), - /* 52 */ array(13, 34, 42, ), - /* 53 */ array(8, 15, 44, ), - /* 54 */ array(8, 15, 44, ), - /* 55 */ array(15, 25, ), - /* 56 */ array(15, 25, ), - /* 57 */ array(9, 41, ), - /* 58 */ array(9, 41, ), - /* 59 */ array(15, 44, ), - /* 60 */ array(15, 44, ), - /* 61 */ array(9, 41, ), - /* 62 */ array(15, 44, ), - /* 63 */ array(15, 25, ), - /* 64 */ array(15, 44, ), - /* 65 */ array(28, 44, 45, 57, 58, 59, 60, 61, 62, 63, 64, 65, ), - /* 66 */ array(28, 44, 45, 57, 58, 59, 60, 61, 62, 63, 64, 65, ), - /* 67 */ array(44, 45, 57, 58, 59, 60, 61, 62, 63, 64, 65, ), - /* 68 */ array(1, 2, 3, 4, 5, 6, 7, 22, ), - /* 69 */ array(3, 7, 22, 38, 69, 70, ), - /* 70 */ array(7, 10, 11, 18, ), - /* 71 */ array(7, 10, 11, 40, ), - /* 72 */ array(8, 15, 18, ), - /* 73 */ array(7, 10, 40, ), - /* 74 */ array(8, 15, 18, ), - /* 75 */ array(7, 10, ), - /* 76 */ array(7, 10, ), - /* 77 */ array(7, 10, ), - /* 78 */ array(7, 10, ), - /* 79 */ array(7, 10, ), - /* 80 */ array(7, 10, ), - /* 81 */ array(7, 10, ), - /* 82 */ array(7, 10, ), - /* 83 */ array(7, 10, ), - /* 84 */ array(7, 10, ), - /* 85 */ array(7, 10, ), - /* 86 */ array(8, 15, ), - /* 87 */ array(11, 13, ), - /* 88 */ array(15, ), - /* 89 */ array(15, ), - /* 90 */ array(9, ), - /* 91 */ array(13, ), - /* 92 */ array(13, ), - /* 93 */ array(15, ), - /* 94 */ array(13, ), - /* 95 */ array(15, ), - /* 96 */ array(28, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 97 */ array(8, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 98 */ array(28, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 99 */ array(17, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 100 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 101 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 102 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 103 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 104 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 105 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 106 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 107 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, ), - /* 108 */ array(7, 8, 10, 21, ), - /* 109 */ array(10, 12, 14, 16, ), - /* 110 */ array(8, 26, 30, 31, ), - /* 111 */ array(26, 30, 31, 43, ), - /* 112 */ array(7, 8, 10, 21, ), - /* 113 */ array(7, 8, 10, ), - /* 114 */ array(7, 10, 11, ), - /* 115 */ array(26, 30, 31, ), - /* 116 */ array(7, 10, 40, ), - /* 117 */ array(7, 8, 10, ), - /* 118 */ array(26, 30, 31, ), - /* 119 */ array(8, 15, ), - /* 120 */ array(25, 44, ), - /* 121 */ array(34, 42, ), - /* 122 */ array(8, 15, ), - /* 123 */ array(8, 15, ), - /* 124 */ array(8, 15, ), - /* 125 */ array(8, 44, ), - /* 126 */ array(8, 44, ), - /* 127 */ array(24, 44, ), - /* 128 */ array(8, 15, ), - /* 129 */ array(8, 15, ), - /* 130 */ array(34, 42, ), - /* 131 */ array(8, 44, ), - /* 132 */ array(8, 15, ), - /* 133 */ array(9, 10, ), - /* 134 */ array(28, 44, ), - /* 135 */ array(7, 27, ), - /* 136 */ array(8, 15, ), - /* 137 */ array(8, 15, ), - /* 138 */ array(8, 15, ), - /* 139 */ array(34, 42, ), - /* 140 */ array(8, 15, ), - /* 141 */ array(34, 42, ), - /* 142 */ array(8, 15, ), - /* 143 */ array(8, 15, ), - /* 144 */ array(8, 15, ), - /* 145 */ array(34, 42, ), - /* 146 */ array(8, 15, ), - /* 147 */ array(8, 15, ), - /* 148 */ array(25, 44, ), - /* 149 */ array(44, ), - /* 150 */ array(44, ), - /* 151 */ array(44, ), - /* 152 */ array(44, ), - /* 153 */ array(44, ), - /* 154 */ array(9, ), - /* 155 */ array(44, ), - /* 156 */ array(15, ), - /* 157 */ array(13, ), - /* 158 */ array(25, ), - /* 159 */ array(13, ), - /* 160 */ array(27, ), - /* 161 */ array(13, ), - /* 162 */ array(13, ), - /* 163 */ array(44, ), - /* 164 */ array(15, ), - /* 165 */ array(44, ), - /* 166 */ array(44, ), - /* 167 */ array(44, ), + /* 0 */ array(1, 2, 3, 5, 6, 9, 25, ), + /* 1 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 2 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 3 */ array(9, 11, 12, 14, 16, 18, 19, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 4 */ array(9, 11, 12, 14, 16, 18, 19, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 5 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 6 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 7 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 8 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 9 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 10 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 11 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 12 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 13 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 14 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 15 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 16 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 17 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 18 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 19 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 20 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 21 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 22 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 23 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 24 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 25 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 26 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 27 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 28 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 29 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 30 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 31 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 32 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 33 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 34 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 35 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 36 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 37 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, 45, ), + /* 38 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 39 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 40 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 41 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, 44, ), + /* 42 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 43 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 44 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 45 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 46 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 47 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 48 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 49 */ array(9, 11, 12, 18, 25, 26, 31, 34, 35, 37, 38, 39, 40, 43, ), + /* 50 */ array(9, 11, 12, 43, ), + /* 51 */ array(1, 2, 3, 5, 6, 9, 25, ), + /* 52 */ array(3, 9, 25, 40, 71, 72, ), + /* 53 */ array(10, 15, 17, 31, 41, 46, ), + /* 54 */ array(2, 4, 5, 6, 7, 8, ), + /* 55 */ array(2, 4, 5, 6, 8, ), + /* 56 */ array(10, 15, 17, 46, ), + /* 57 */ array(10, 17, 46, ), + /* 58 */ array(10, 17, 46, ), + /* 59 */ array(15, 36, 44, ), + /* 60 */ array(11, 12, 43, ), + /* 61 */ array(17, 46, ), + /* 62 */ array(17, 46, ), + /* 63 */ array(11, 43, ), + /* 64 */ array(17, 46, ), + /* 65 */ array(17, 28, ), + /* 66 */ array(17, 28, ), + /* 67 */ array(17, 46, ), + /* 68 */ array(17, 28, ), + /* 69 */ array(18, 29, 30, 45, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ), + /* 70 */ array(10, 18, 29, 30, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ), + /* 71 */ array(18, 29, 30, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ), + /* 72 */ array(18, 29, 30, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, ), + /* 73 */ array(3, 9, 25, 40, 71, 72, ), + /* 74 */ array(9, 12, 13, 42, ), + /* 75 */ array(9, 12, 13, 21, ), + /* 76 */ array(10, 17, 21, ), + /* 77 */ array(10, 17, 21, ), + /* 78 */ array(9, 12, 42, ), + /* 79 */ array(9, 12, ), + /* 80 */ array(9, 12, ), + /* 81 */ array(13, 15, ), + /* 82 */ array(9, 12, ), + /* 83 */ array(9, 12, ), + /* 84 */ array(9, 12, ), + /* 85 */ array(9, 12, ), + /* 86 */ array(9, 12, ), + /* 87 */ array(9, 12, ), + /* 88 */ array(10, 17, ), + /* 89 */ array(9, 12, ), + /* 90 */ array(9, 12, ), + /* 91 */ array(9, 12, ), + /* 92 */ array(17, ), + /* 93 */ array(17, ), + /* 94 */ array(17, ), + /* 95 */ array(11, ), + /* 96 */ array(15, ), + /* 97 */ array(15, ), + /* 98 */ array(15, ), + /* 99 */ array(17, ), + /* 100 */ array(32, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ), + /* 101 */ array(46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ), + /* 102 */ array(9, 10, 12, 24, ), + /* 103 */ array(12, 14, 16, 19, ), + /* 104 */ array(9, 10, 12, 24, ), + /* 105 */ array(9, 10, 12, ), + /* 106 */ array(9, 12, 13, ), + /* 107 */ array(9, 10, 12, ), + /* 108 */ array(9, 12, 42, ), + /* 109 */ array(10, 17, ), + /* 110 */ array(10, 17, ), + /* 111 */ array(10, 17, ), + /* 112 */ array(27, 46, ), + /* 113 */ array(10, 17, ), + /* 114 */ array(28, 46, ), + /* 115 */ array(10, 17, ), + /* 116 */ array(10, 17, ), + /* 117 */ array(10, 46, ), + /* 118 */ array(10, 17, ), + /* 119 */ array(28, 46, ), + /* 120 */ array(10, 17, ), + /* 121 */ array(10, 17, ), + /* 122 */ array(10, 46, ), + /* 123 */ array(10, 17, ), + /* 124 */ array(10, 46, ), + /* 125 */ array(46, 71, ), + /* 126 */ array(36, 44, ), + /* 127 */ array(32, 46, ), + /* 128 */ array(36, 44, ), + /* 129 */ array(36, 44, ), + /* 130 */ array(10, 17, ), + /* 131 */ array(11, 12, ), + /* 132 */ array(10, 17, ), + /* 133 */ array(36, 44, ), + /* 134 */ array(10, 17, ), + /* 135 */ array(10, 17, ), + /* 136 */ array(36, 44, ), + /* 137 */ array(9, 31, ), + /* 138 */ array(10, 17, ), + /* 139 */ array(10, 17, ), + /* 140 */ array(46, ), + /* 141 */ array(46, ), + /* 142 */ array(46, ), + /* 143 */ array(15, ), + /* 144 */ array(46, ), + /* 145 */ array(15, ), + /* 146 */ array(46, ), + /* 147 */ array(46, ), + /* 148 */ array(46, ), + /* 149 */ array(17, ), + /* 150 */ array(46, ), + /* 151 */ array(46, ), + /* 152 */ array(46, ), + /* 153 */ array(46, ), + /* 154 */ array(46, ), + /* 155 */ array(15, ), + /* 156 */ array(28, ), + /* 157 */ array(11, ), + /* 158 */ array(46, ), + /* 159 */ array(46, ), + /* 160 */ array(17, ), + /* 161 */ array(15, ), + /* 162 */ array(31, ), + /* 163 */ array(46, ), + /* 164 */ array(), + /* 165 */ array(), + /* 166 */ array(), + /* 167 */ array(), /* 168 */ array(), /* 169 */ array(), /* 170 */ array(), - /* 171 */ array(), - /* 172 */ array(), - /* 173 */ array(), - /* 174 */ array(), - /* 175 */ array(7, 9, 10, 23, 35, 36, ), - /* 176 */ array(27, 34, 39, 43, ), - /* 177 */ array(11, 27, 39, ), - /* 178 */ array(21, 27, 39, ), - /* 179 */ array(27, 39, 44, ), - /* 180 */ array(27, 39, ), - /* 181 */ array(24, 43, ), - /* 182 */ array(27, 39, ), - /* 183 */ array(17, 24, ), - /* 184 */ array(11, 34, ), - /* 185 */ array(27, 39, ), - /* 186 */ array(8, 15, ), - /* 187 */ array(27, 39, ), - /* 188 */ array(10, 23, ), - /* 189 */ array(11, 25, ), - /* 190 */ array(10, 40, ), - /* 191 */ array(10, ), - /* 192 */ array(8, ), - /* 193 */ array(27, ), - /* 194 */ array(43, ), - /* 195 */ array(10, ), - /* 196 */ array(28, ), - /* 197 */ array(28, ), - /* 198 */ array(10, ), - /* 199 */ array(11, ), - /* 200 */ array(8, ), - /* 201 */ array(8, ), - /* 202 */ array(69, ), - /* 203 */ array(19, ), - /* 204 */ array(9, ), - /* 205 */ array(20, ), - /* 206 */ array(9, ), - /* 207 */ array(9, ), - /* 208 */ array(9, ), - /* 209 */ array(15, ), - /* 210 */ array(9, ), - /* 211 */ array(15, ), - /* 212 */ array(8, ), - /* 213 */ array(20, ), - /* 214 */ array(3, ), - /* 215 */ array(10, ), - /* 216 */ array(21, ), - /* 217 */ array(41, ), - /* 218 */ array(10, ), - /* 219 */ array(56, ), - /* 220 */ array(18, ), - /* 221 */ array(18, ), - /* 222 */ array(29, ), - /* 223 */ array(28, ), - /* 224 */ array(29, ), - /* 225 */ array(25, ), - /* 226 */ array(10, ), - /* 227 */ array(10, ), - /* 228 */ array(8, ), - /* 229 */ array(23, ), - /* 230 */ array(41, ), - /* 231 */ array(34, ), - /* 232 */ array(4, ), - /* 233 */ array(10, ), - /* 234 */ array(4, ), - /* 235 */ array(3, ), - /* 236 */ array(11, ), + /* 171 */ array(9, 11, 12, 26, 37, 38, ), + /* 172 */ array(31, 36, 41, 45, ), + /* 173 */ array(13, 31, 41, ), + /* 174 */ array(24, 31, 41, ), + /* 175 */ array(31, 41, 46, ), + /* 176 */ array(31, 41, ), + /* 177 */ array(31, 41, ), + /* 178 */ array(31, 41, ), + /* 179 */ array(20, 27, ), + /* 180 */ array(17, 18, ), + /* 181 */ array(13, 28, ), + /* 182 */ array(27, 45, ), + /* 183 */ array(13, 36, ), + /* 184 */ array(12, 42, ), + /* 185 */ array(12, 26, ), + /* 186 */ array(10, 17, ), + /* 187 */ array(31, 41, ), + /* 188 */ array(21, 71, ), + /* 189 */ array(10, ), + /* 190 */ array(26, ), + /* 191 */ array(36, ), + /* 192 */ array(10, ), + /* 193 */ array(12, ), + /* 194 */ array(12, ), + /* 195 */ array(28, ), + /* 196 */ array(12, ), + /* 197 */ array(12, ), + /* 198 */ array(11, ), + /* 199 */ array(23, ), + /* 200 */ array(12, ), + /* 201 */ array(12, ), + /* 202 */ array(11, ), + /* 203 */ array(4, ), + /* 204 */ array(11, ), + /* 205 */ array(23, ), + /* 206 */ array(11, ), + /* 207 */ array(22, ), + /* 208 */ array(10, ), + /* 209 */ array(10, ), + /* 210 */ array(13, ), + /* 211 */ array(32, ), + /* 212 */ array(32, ), + /* 213 */ array(33, ), + /* 214 */ array(31, ), + /* 215 */ array(32, ), + /* 216 */ array(24, ), + /* 217 */ array(58, ), + /* 218 */ array(13, ), + /* 219 */ array(7, ), + /* 220 */ array(12, ), + /* 221 */ array(45, ), + /* 222 */ array(20, ), + /* 223 */ array(11, ), + /* 224 */ array(32, ), + /* 225 */ array(10, ), + /* 226 */ array(33, ), + /* 227 */ array(12, ), + /* 228 */ array(10, ), + /* 229 */ array(3, ), + /* 230 */ array(10, ), + /* 231 */ array(17, ), + /* 232 */ array(43, ), + /* 233 */ array(21, ), + /* 234 */ array(43, ), + /* 235 */ array(), + /* 236 */ array(), /* 237 */ array(), /* 238 */ array(), /* 239 */ array(), @@ -898,51 +879,58 @@ static public $yy_action = array( /* 362 */ array(), /* 363 */ array(), /* 364 */ array(), + /* 365 */ array(), + /* 366 */ array(), + /* 367 */ array(), + /* 368 */ array(), + /* 369 */ array(), + /* 370 */ array(), ); static public $yy_default = array( - /* 0 */ 547, 547, 547, 547, 547, 547, 533, 547, 547, 547, - /* 10 */ 547, 547, 547, 547, 547, 547, 547, 491, 547, 491, - /* 20 */ 491, 547, 491, 547, 547, 547, 547, 547, 547, 547, - /* 30 */ 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, - /* 40 */ 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, - /* 50 */ 547, 547, 453, 547, 547, 412, 412, 547, 547, 412, - /* 60 */ 412, 547, 412, 412, 412, 501, 501, 501, 365, 547, - /* 70 */ 547, 463, 435, 463, 435, 547, 547, 547, 547, 547, - /* 80 */ 547, 547, 547, 547, 547, 547, 426, 456, 412, 412, - /* 90 */ 547, 448, 449, 412, 456, 412, 547, 547, 547, 547, - /* 100 */ 510, 511, 514, 499, 505, 515, 506, 507, 547, 547, - /* 110 */ 547, 547, 547, 547, 547, 496, 464, 547, 423, 547, - /* 120 */ 547, 484, 547, 547, 547, 547, 547, 490, 547, 547, - /* 130 */ 482, 547, 547, 547, 547, 463, 547, 547, 547, 483, - /* 140 */ 547, 461, 547, 547, 547, 485, 547, 547, 547, 502, - /* 150 */ 430, 414, 418, 431, 547, 395, 546, 479, 425, 450, - /* 160 */ 463, 454, 451, 421, 546, 534, 536, 535, 495, 463, - /* 170 */ 463, 495, 463, 495, 495, 547, 547, 417, 422, 413, - /* 180 */ 497, 547, 547, 547, 439, 516, 426, 422, 547, 477, - /* 190 */ 547, 547, 547, 452, 547, 547, 547, 547, 547, 547, - /* 200 */ 547, 547, 547, 419, 547, 547, 547, 547, 547, 547, - /* 210 */ 547, 547, 547, 547, 547, 547, 426, 547, 547, 426, - /* 220 */ 435, 435, 547, 547, 444, 477, 547, 547, 426, 547, - /* 230 */ 547, 439, 547, 547, 547, 547, 417, 473, 416, 440, - /* 240 */ 441, 410, 460, 474, 459, 472, 407, 442, 402, 471, - /* 250 */ 443, 543, 544, 366, 540, 424, 539, 447, 538, 375, - /* 260 */ 376, 434, 433, 432, 406, 405, 403, 436, 481, 457, - /* 270 */ 404, 462, 408, 438, 427, 426, 411, 486, 409, 465, - /* 280 */ 476, 466, 467, 478, 437, 458, 488, 468, 469, 480, - /* 290 */ 477, 470, 475, 428, 494, 493, 517, 399, 526, 398, - /* 300 */ 372, 498, 371, 525, 524, 520, 401, 519, 521, 522, - /* 310 */ 523, 400, 500, 387, 528, 527, 369, 388, 386, 384, - /* 320 */ 529, 389, 513, 390, 508, 509, 370, 512, 391, 518, - /* 330 */ 504, 396, 545, 541, 378, 542, 379, 394, 420, 377, - /* 340 */ 397, 444, 446, 492, 385, 445, 429, 380, 381, 392, - /* 350 */ 530, 393, 532, 368, 503, 531, 487, 489, 383, 382, - /* 360 */ 367, 374, 373, 455, 537, + /* 0 */ 559, 559, 544, 559, 559, 559, 559, 507, 559, 559, + /* 10 */ 559, 507, 507, 507, 559, 559, 559, 559, 559, 559, + /* 20 */ 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + /* 30 */ 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + /* 40 */ 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + /* 50 */ 559, 371, 559, 559, 559, 383, 559, 559, 559, 469, + /* 60 */ 559, 427, 427, 559, 427, 427, 427, 427, 427, 559, + /* 70 */ 559, 512, 438, 559, 479, 559, 450, 450, 479, 559, + /* 80 */ 559, 472, 559, 559, 559, 559, 559, 559, 441, 559, + /* 90 */ 559, 559, 427, 427, 427, 559, 465, 464, 472, 427, + /* 100 */ 559, 514, 559, 559, 559, 559, 559, 559, 480, 559, + /* 110 */ 559, 559, 506, 559, 559, 559, 559, 559, 559, 559, + /* 120 */ 559, 559, 559, 559, 559, 559, 499, 559, 500, 477, + /* 130 */ 559, 559, 559, 501, 559, 559, 498, 479, 559, 559, + /* 140 */ 525, 429, 545, 467, 526, 495, 433, 521, 518, 558, + /* 150 */ 547, 517, 522, 546, 449, 470, 440, 559, 410, 436, + /* 160 */ 558, 466, 479, 448, 479, 479, 511, 511, 511, 479, + /* 170 */ 511, 559, 559, 432, 437, 428, 437, 527, 513, 559, + /* 180 */ 559, 493, 559, 455, 559, 559, 441, 559, 450, 559, + /* 190 */ 559, 455, 559, 559, 559, 493, 559, 559, 559, 559, + /* 200 */ 559, 559, 559, 559, 559, 559, 559, 434, 559, 559, + /* 210 */ 559, 559, 559, 559, 468, 559, 441, 441, 432, 559, + /* 220 */ 559, 559, 559, 559, 559, 559, 460, 559, 441, 559, + /* 230 */ 559, 559, 559, 450, 559, 378, 379, 551, 552, 555, + /* 240 */ 556, 550, 463, 549, 487, 485, 375, 486, 484, 483, + /* 250 */ 504, 494, 482, 374, 373, 421, 431, 372, 420, 419, + /* 260 */ 502, 424, 418, 376, 490, 531, 532, 533, 530, 529, + /* 270 */ 377, 446, 447, 534, 535, 489, 548, 488, 540, 539, + /* 280 */ 536, 537, 538, 444, 403, 392, 554, 393, 426, 553, + /* 290 */ 391, 445, 461, 510, 394, 395, 475, 476, 422, 505, + /* 300 */ 474, 471, 396, 397, 423, 509, 508, 478, 481, 492, + /* 310 */ 493, 473, 497, 451, 452, 453, 442, 496, 441, 439, + /* 320 */ 491, 460, 459, 458, 443, 456, 457, 503, 417, 414, + /* 330 */ 415, 416, 384, 413, 385, 405, 404, 401, 382, 406, + /* 340 */ 411, 557, 435, 412, 380, 409, 408, 381, 407, 454, + /* 350 */ 402, 425, 519, 520, 390, 516, 515, 541, 543, 542, + /* 360 */ 523, 524, 398, 399, 400, 386, 387, 389, 528, 388, + /* 370 */ 462, ); - const YYNOCODE = 113; + const YYNOCODE = 116; const YYSTACKDEPTH = 100; - const YYNSTATE = 365; - const YYNRULE = 182; - const YYERRORSYMBOL = 71; + const YYNSTATE = 371; + const YYNRULE = 188; + const YYERRORSYMBOL = 73; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; static public $yyFallback = array( @@ -971,34 +959,35 @@ static public $yy_action = array( public $yystack = array(); /* The parser's stack */ public $yyTokenName = array( - '$', 'COMMENT', 'PHP', 'OTHER', - 'SHORTTAGEND', 'SHORTTAGSTART', 'XML', 'LDEL', - 'RDEL', 'DOLLAR', 'ID', 'EQUAL', - 'FOREACH', 'PTR', 'IF', 'SPACE', - 'FOR', 'SEMICOLON', 'INCDEC', 'TO', - 'AS', 'APTR', 'LDELSLASH', 'INTEGER', - 'COMMA', 'COLON', 'UNIMATH', 'OPENP', - 'CLOSEP', 'QMARK', 'MATH', 'ANDSYM', - 'NOT', 'TYPECAST', 'DOT', 'BOOLEAN', - 'NULL', 'SINGLEQUOTESTRING', 'QUOTE', 'DOUBLECOLON', - 'AT', 'HATCH', 'OPENB', 'CLOSEB', - 'VERT', 'ISIN', 'ISDIVBY', 'ISNOTDIVBY', - 'ISEVEN', 'ISNOTEVEN', 'ISEVENBY', 'ISNOTEVENBY', - 'ISODD', 'ISNOTODD', 'ISODDBY', 'ISNOTODDBY', - 'INSTANCEOF', 'EQUALS', 'NOTEQUALS', 'GREATERTHAN', - 'LESSTHAN', 'GREATEREQUAL', 'LESSEQUAL', 'IDENTITY', - 'NONEIDENTITY', 'MOD', 'LAND', 'LOR', - 'LXOR', 'BACKTICK', 'DOLLARID', 'error', - 'start', 'template', 'template_element', 'smartytag', - 'value', 'attributes', 'variable', 'expr', - 'ternary', 'varindexed', 'modifier', 'modparameters', - 'ifexprs', 'statement', 'statements', 'optspace', - 'varvar', 'foraction', 'array', 'specialclose', - 'attribute', 'exprs', 'math', 'function', - 'doublequoted', 'method', 'params', 'objectchain', - 'arrayindex', 'object', 'indexdef', 'varvarele', - 'objectelement', 'modparameter', 'ifexpr', 'ifcond', - 'lop', 'arrayelements', 'arrayelement', 'doublequotedcontent', + '$', 'COMMENT', 'PHPSTARTTAG', 'OTHER', + 'PHPENDTAG', 'FAKEPHPSTARTTAG', 'LITERALSTART', 'LITERALEND', + 'LITERAL', 'LDEL', 'RDEL', 'DOLLAR', + 'ID', 'EQUAL', 'FOREACH', 'PTR', + 'IF', 'SPACE', 'UNIMATH', 'FOR', + 'SEMICOLON', 'INCDEC', 'TO', 'AS', + 'APTR', 'LDELSLASH', 'INTEGER', 'COMMA', + 'COLON', 'MATH', 'ANDSYM', 'OPENP', + 'CLOSEP', 'QMARK', 'NOT', 'TYPECAST', + 'DOT', 'BOOLEAN', 'NULL', 'SINGLEQUOTESTRING', + 'QUOTE', 'DOUBLECOLON', 'AT', 'HATCH', + 'OPENB', 'CLOSEB', 'VERT', 'ISIN', + 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN', 'ISNOTEVEN', + 'ISEVENBY', 'ISNOTEVENBY', 'ISODD', 'ISNOTODD', + 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF', 'EQUALS', + 'NOTEQUALS', 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL', + 'LESSEQUAL', 'IDENTITY', 'NONEIDENTITY', 'MOD', + 'LAND', 'LOR', 'LXOR', 'BACKTICK', + 'DOLLARID', 'error', 'start', 'template', + 'template_element', 'smartytag', 'literal', 'literal_elements', + 'literal_element', 'value', 'attributes', 'variable', + 'expr', 'ternary', 'varindexed', 'modifier', + 'modparameters', 'ifexpr', 'statement', 'statements', + 'optspace', 'varvar', 'foraction', 'array', + 'specialclose', 'attribute', 'exprs', 'ifcond', + 'lop', 'function', 'doublequoted', 'method', + 'params', 'objectchain', 'arrayindex', 'object', + 'indexdef', 'varvarele', 'objectelement', 'modparameter', + 'arrayelements', 'arrayelement', 'doublequotedcontent', ); static public $yyRuleName = array( @@ -1007,183 +996,189 @@ static public $yy_action = array( /* 2 */ "template ::= template template_element", /* 3 */ "template_element ::= smartytag", /* 4 */ "template_element ::= COMMENT", - /* 5 */ "template_element ::= PHP OTHER SHORTTAGEND", - /* 6 */ "template_element ::= SHORTTAGSTART OTHER SHORTTAGEND", - /* 7 */ "template_element ::= XML", - /* 8 */ "template_element ::= SHORTTAGEND", - /* 9 */ "template_element ::= OTHER", - /* 10 */ "smartytag ::= LDEL value RDEL", - /* 11 */ "smartytag ::= LDEL value attributes RDEL", - /* 12 */ "smartytag ::= LDEL variable attributes RDEL", - /* 13 */ "smartytag ::= LDEL expr attributes RDEL", - /* 14 */ "smartytag ::= LDEL ternary attributes RDEL", - /* 15 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL", - /* 16 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL", - /* 17 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL", - /* 18 */ "smartytag ::= LDEL DOLLAR ID EQUAL ternary attributes RDEL", - /* 19 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL", - /* 20 */ "smartytag ::= LDEL varindexed EQUAL ternary attributes RDEL", - /* 21 */ "smartytag ::= LDEL ID attributes RDEL", - /* 22 */ "smartytag ::= LDEL FOREACH attributes RDEL", - /* 23 */ "smartytag ::= LDEL ID RDEL", - /* 24 */ "smartytag ::= LDEL ID PTR ID attributes RDEL", - /* 25 */ "smartytag ::= LDEL ID modifier modparameters attributes RDEL", - /* 26 */ "smartytag ::= LDEL ID PTR ID modifier modparameters attributes RDEL", - /* 27 */ "smartytag ::= LDEL IF SPACE ifexprs RDEL", - /* 28 */ "smartytag ::= LDEL IF SPACE statement RDEL", - /* 29 */ "smartytag ::= LDEL FOR SPACE statements SEMICOLON optspace ifexprs SEMICOLON optspace DOLLAR varvar foraction RDEL", - /* 30 */ "foraction ::= EQUAL expr", - /* 31 */ "foraction ::= INCDEC", - /* 32 */ "smartytag ::= LDEL FOR SPACE statement TO expr attributes RDEL", - /* 33 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar RDEL", - /* 34 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL", - /* 35 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar RDEL", - /* 36 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL", - /* 37 */ "smartytag ::= LDELSLASH ID RDEL", - /* 38 */ "smartytag ::= LDELSLASH specialclose RDEL", - /* 39 */ "specialclose ::= IF", - /* 40 */ "specialclose ::= FOR", - /* 41 */ "specialclose ::= FOREACH", - /* 42 */ "smartytag ::= LDELSLASH ID attributes RDEL", - /* 43 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL", - /* 44 */ "smartytag ::= LDELSLASH ID PTR ID RDEL", - /* 45 */ "attributes ::= attributes attribute", - /* 46 */ "attributes ::= attribute", - /* 47 */ "attributes ::=", - /* 48 */ "attribute ::= SPACE ID EQUAL ID", - /* 49 */ "attribute ::= SPACE ID EQUAL expr", - /* 50 */ "attribute ::= SPACE ID EQUAL value", - /* 51 */ "attribute ::= SPACE ID EQUAL ternary", - /* 52 */ "attribute ::= SPACE ID", - /* 53 */ "attribute ::= SPACE INTEGER EQUAL expr", - /* 54 */ "statements ::= statement", - /* 55 */ "statements ::= statements COMMA statement", - /* 56 */ "statement ::= DOLLAR varvar EQUAL expr", - /* 57 */ "expr ::= ID", - /* 58 */ "expr ::= exprs", - /* 59 */ "expr ::= DOLLAR ID COLON ID", - /* 60 */ "expr ::= expr modifier modparameters", - /* 61 */ "exprs ::= value", - /* 62 */ "exprs ::= UNIMATH value", - /* 63 */ "exprs ::= exprs math value", - /* 64 */ "exprs ::= array", - /* 65 */ "ternary ::= OPENP ifexprs CLOSEP QMARK expr COLON expr", - /* 66 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr", - /* 67 */ "math ::= UNIMATH", - /* 68 */ "math ::= MATH", - /* 69 */ "math ::= ANDSYM", - /* 70 */ "value ::= variable", - /* 71 */ "value ::= NOT variable", - /* 72 */ "value ::= TYPECAST variable", - /* 73 */ "value ::= variable INCDEC", - /* 74 */ "value ::= INTEGER", - /* 75 */ "value ::= INTEGER DOT INTEGER", - /* 76 */ "value ::= BOOLEAN", - /* 77 */ "value ::= NULL", - /* 78 */ "value ::= function", - /* 79 */ "value ::= OPENP expr CLOSEP", - /* 80 */ "value ::= SINGLEQUOTESTRING", - /* 81 */ "value ::= QUOTE doublequoted QUOTE", - /* 82 */ "value ::= QUOTE QUOTE", - /* 83 */ "value ::= ID DOUBLECOLON method", - /* 84 */ "value ::= ID DOUBLECOLON DOLLAR ID OPENP params CLOSEP", - /* 85 */ "value ::= ID DOUBLECOLON method objectchain", - /* 86 */ "value ::= ID DOUBLECOLON DOLLAR ID OPENP params CLOSEP objectchain", - /* 87 */ "value ::= ID DOUBLECOLON ID", - /* 88 */ "value ::= ID DOUBLECOLON DOLLAR ID arrayindex", - /* 89 */ "value ::= ID DOUBLECOLON DOLLAR ID arrayindex objectchain", - /* 90 */ "value ::= smartytag", - /* 91 */ "variable ::= varindexed", - /* 92 */ "variable ::= DOLLAR varvar AT ID", - /* 93 */ "variable ::= object", - /* 94 */ "variable ::= HATCH ID HATCH", - /* 95 */ "variable ::= HATCH variable HATCH", - /* 96 */ "varindexed ::= DOLLAR varvar arrayindex", - /* 97 */ "arrayindex ::= arrayindex indexdef", - /* 98 */ "arrayindex ::=", - /* 99 */ "indexdef ::= DOT DOLLAR varvar", - /* 100 */ "indexdef ::= DOT DOLLAR varvar AT ID", - /* 101 */ "indexdef ::= DOT ID", - /* 102 */ "indexdef ::= DOT BOOLEAN", - /* 103 */ "indexdef ::= DOT NULL", - /* 104 */ "indexdef ::= DOT INTEGER", - /* 105 */ "indexdef ::= DOT LDEL exprs RDEL", - /* 106 */ "indexdef ::= OPENB ID CLOSEB", - /* 107 */ "indexdef ::= OPENB ID DOT ID CLOSEB", - /* 108 */ "indexdef ::= OPENB exprs CLOSEB", - /* 109 */ "indexdef ::= OPENB CLOSEB", - /* 110 */ "varvar ::= varvarele", - /* 111 */ "varvar ::= varvar varvarele", - /* 112 */ "varvarele ::= ID", - /* 113 */ "varvarele ::= LDEL expr RDEL", - /* 114 */ "object ::= varindexed objectchain", - /* 115 */ "objectchain ::= objectelement", - /* 116 */ "objectchain ::= objectchain objectelement", - /* 117 */ "objectelement ::= PTR ID arrayindex", - /* 118 */ "objectelement ::= PTR variable arrayindex", - /* 119 */ "objectelement ::= PTR LDEL expr RDEL arrayindex", - /* 120 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex", - /* 121 */ "objectelement ::= PTR method", - /* 122 */ "function ::= ID OPENP params CLOSEP", - /* 123 */ "method ::= ID OPENP params CLOSEP", - /* 124 */ "params ::= expr COMMA params", - /* 125 */ "params ::= expr", - /* 126 */ "params ::=", - /* 127 */ "modifier ::= VERT AT ID", - /* 128 */ "modifier ::= VERT ID", - /* 129 */ "modparameters ::= modparameters modparameter", - /* 130 */ "modparameters ::=", - /* 131 */ "modparameter ::= COLON exprs", - /* 132 */ "modparameter ::= COLON ID", - /* 133 */ "ifexprs ::= ifexpr", - /* 134 */ "ifexprs ::= NOT ifexprs", - /* 135 */ "ifexprs ::= OPENP ifexprs CLOSEP", - /* 136 */ "ifexpr ::= expr", - /* 137 */ "ifexpr ::= expr ifcond expr", - /* 138 */ "ifexpr ::= expr ISIN array", - /* 139 */ "ifexpr ::= expr ISIN value", - /* 140 */ "ifexpr ::= ifexprs lop ifexprs", - /* 141 */ "ifexpr ::= ifexprs ISDIVBY ifexprs", - /* 142 */ "ifexpr ::= ifexprs ISNOTDIVBY ifexprs", - /* 143 */ "ifexpr ::= ifexprs ISEVEN", - /* 144 */ "ifexpr ::= ifexprs ISNOTEVEN", - /* 145 */ "ifexpr ::= ifexprs ISEVENBY ifexprs", - /* 146 */ "ifexpr ::= ifexprs ISNOTEVENBY ifexprs", - /* 147 */ "ifexpr ::= ifexprs ISODD", - /* 148 */ "ifexpr ::= ifexprs ISNOTODD", - /* 149 */ "ifexpr ::= ifexprs ISODDBY ifexprs", - /* 150 */ "ifexpr ::= ifexprs ISNOTODDBY ifexprs", - /* 151 */ "ifexpr ::= value INSTANCEOF ID", - /* 152 */ "ifexpr ::= value INSTANCEOF value", - /* 153 */ "ifcond ::= EQUALS", - /* 154 */ "ifcond ::= NOTEQUALS", - /* 155 */ "ifcond ::= GREATERTHAN", - /* 156 */ "ifcond ::= LESSTHAN", - /* 157 */ "ifcond ::= GREATEREQUAL", - /* 158 */ "ifcond ::= LESSEQUAL", - /* 159 */ "ifcond ::= IDENTITY", - /* 160 */ "ifcond ::= NONEIDENTITY", - /* 161 */ "ifcond ::= MOD", - /* 162 */ "lop ::= LAND", - /* 163 */ "lop ::= LOR", - /* 164 */ "lop ::= LXOR", - /* 165 */ "array ::= OPENB arrayelements CLOSEB", - /* 166 */ "arrayelements ::= arrayelement", - /* 167 */ "arrayelements ::= arrayelements COMMA arrayelement", - /* 168 */ "arrayelements ::=", - /* 169 */ "arrayelement ::= value APTR expr", - /* 170 */ "arrayelement ::= ID APTR expr", - /* 171 */ "arrayelement ::= expr", - /* 172 */ "doublequoted ::= doublequoted doublequotedcontent", - /* 173 */ "doublequoted ::= doublequotedcontent", - /* 174 */ "doublequotedcontent ::= BACKTICK variable BACKTICK", - /* 175 */ "doublequotedcontent ::= DOLLARID", - /* 176 */ "doublequotedcontent ::= LDEL variable RDEL", - /* 177 */ "doublequotedcontent ::= LDEL expr RDEL", - /* 178 */ "doublequotedcontent ::= smartytag", - /* 179 */ "doublequotedcontent ::= OTHER", - /* 180 */ "optspace ::= SPACE", - /* 181 */ "optspace ::=", + /* 5 */ "template_element ::= literal", + /* 6 */ "template_element ::= PHPSTARTTAG OTHER PHPENDTAG", + /* 7 */ "template_element ::= OTHER", + /* 8 */ "template_element ::= FAKEPHPSTARTTAG", + /* 9 */ "literal ::= LITERALSTART LITERALEND", + /* 10 */ "literal ::= LITERALSTART literal_elements LITERALEND", + /* 11 */ "literal_elements ::= literal_element literal_elements", + /* 12 */ "literal_elements ::=", + /* 13 */ "literal_element ::= literal", + /* 14 */ "literal_element ::= LITERAL", + /* 15 */ "literal_element ::= PHPSTARTTAG", + /* 16 */ "literal_element ::= FAKEPHPSTARTTAG", + /* 17 */ "literal_element ::= PHPENDTAG", + /* 18 */ "smartytag ::= LDEL value RDEL", + /* 19 */ "smartytag ::= LDEL value attributes RDEL", + /* 20 */ "smartytag ::= LDEL variable attributes RDEL", + /* 21 */ "smartytag ::= LDEL expr attributes RDEL", + /* 22 */ "smartytag ::= LDEL ternary attributes RDEL", + /* 23 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL", + /* 24 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL", + /* 25 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL", + /* 26 */ "smartytag ::= LDEL DOLLAR ID EQUAL ternary attributes RDEL", + /* 27 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL", + /* 28 */ "smartytag ::= LDEL varindexed EQUAL ternary attributes RDEL", + /* 29 */ "smartytag ::= LDEL ID attributes RDEL", + /* 30 */ "smartytag ::= LDEL FOREACH attributes RDEL", + /* 31 */ "smartytag ::= LDEL ID RDEL", + /* 32 */ "smartytag ::= LDEL ID PTR ID attributes RDEL", + /* 33 */ "smartytag ::= LDEL ID modifier modparameters attributes RDEL", + /* 34 */ "smartytag ::= LDEL ID PTR ID modifier modparameters attributes RDEL", + /* 35 */ "smartytag ::= LDEL IF SPACE ifexpr RDEL", + /* 36 */ "smartytag ::= LDEL IF UNIMATH ifexpr RDEL", + /* 37 */ "smartytag ::= LDEL IF SPACE statement RDEL", + /* 38 */ "smartytag ::= LDEL FOR SPACE statements SEMICOLON optspace ifexpr SEMICOLON optspace DOLLAR varvar foraction RDEL", + /* 39 */ "foraction ::= EQUAL expr", + /* 40 */ "foraction ::= INCDEC", + /* 41 */ "smartytag ::= LDEL FOR SPACE statement TO expr attributes RDEL", + /* 42 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar RDEL", + /* 43 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL", + /* 44 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar RDEL", + /* 45 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL", + /* 46 */ "smartytag ::= LDELSLASH ID RDEL", + /* 47 */ "smartytag ::= LDELSLASH specialclose RDEL", + /* 48 */ "specialclose ::= IF", + /* 49 */ "specialclose ::= FOR", + /* 50 */ "specialclose ::= FOREACH", + /* 51 */ "smartytag ::= LDELSLASH ID attributes RDEL", + /* 52 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL", + /* 53 */ "smartytag ::= LDELSLASH ID PTR ID RDEL", + /* 54 */ "attributes ::= attributes attribute", + /* 55 */ "attributes ::= attribute", + /* 56 */ "attributes ::=", + /* 57 */ "attribute ::= SPACE ID EQUAL ID", + /* 58 */ "attribute ::= SPACE ID EQUAL expr", + /* 59 */ "attribute ::= SPACE ID EQUAL value", + /* 60 */ "attribute ::= SPACE ID EQUAL ternary", + /* 61 */ "attribute ::= SPACE ID", + /* 62 */ "attribute ::= SPACE INTEGER EQUAL expr", + /* 63 */ "statements ::= statement", + /* 64 */ "statements ::= statements COMMA statement", + /* 65 */ "statement ::= DOLLAR varvar EQUAL expr", + /* 66 */ "expr ::= ID", + /* 67 */ "expr ::= exprs", + /* 68 */ "expr ::= DOLLAR ID COLON ID", + /* 69 */ "expr ::= expr modifier modparameters", + /* 70 */ "exprs ::= value", + /* 71 */ "exprs ::= exprs MATH value", + /* 72 */ "exprs ::= exprs UNIMATH value", + /* 73 */ "exprs ::= exprs ANDSYM value", + /* 74 */ "exprs ::= array", + /* 75 */ "exprs ::= exprs ifcond value", + /* 76 */ "exprs ::= exprs lop value", + /* 77 */ "ternary ::= OPENP ifexpr CLOSEP QMARK expr COLON expr", + /* 78 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr", + /* 79 */ "value ::= variable", + /* 80 */ "value ::= UNIMATH value", + /* 81 */ "value ::= NOT value", + /* 82 */ "value ::= TYPECAST variable", + /* 83 */ "value ::= variable INCDEC", + /* 84 */ "value ::= INTEGER", + /* 85 */ "value ::= INTEGER DOT INTEGER", + /* 86 */ "value ::= BOOLEAN", + /* 87 */ "value ::= NULL", + /* 88 */ "value ::= function", + /* 89 */ "value ::= OPENP expr CLOSEP", + /* 90 */ "value ::= SINGLEQUOTESTRING", + /* 91 */ "value ::= QUOTE doublequoted QUOTE", + /* 92 */ "value ::= QUOTE QUOTE", + /* 93 */ "value ::= ID DOUBLECOLON method", + /* 94 */ "value ::= ID DOUBLECOLON DOLLAR ID OPENP params CLOSEP", + /* 95 */ "value ::= ID DOUBLECOLON method objectchain", + /* 96 */ "value ::= ID DOUBLECOLON DOLLAR ID OPENP params CLOSEP objectchain", + /* 97 */ "value ::= ID DOUBLECOLON ID", + /* 98 */ "value ::= ID DOUBLECOLON DOLLAR ID arrayindex", + /* 99 */ "value ::= ID DOUBLECOLON DOLLAR ID arrayindex objectchain", + /* 100 */ "value ::= smartytag", + /* 101 */ "variable ::= varindexed", + /* 102 */ "variable ::= DOLLAR varvar AT ID", + /* 103 */ "variable ::= object", + /* 104 */ "variable ::= HATCH ID HATCH", + /* 105 */ "variable ::= HATCH variable HATCH", + /* 106 */ "varindexed ::= DOLLAR varvar arrayindex", + /* 107 */ "arrayindex ::= arrayindex indexdef", + /* 108 */ "arrayindex ::=", + /* 109 */ "indexdef ::= DOT DOLLAR varvar", + /* 110 */ "indexdef ::= DOT DOLLAR varvar AT ID", + /* 111 */ "indexdef ::= DOT ID", + /* 112 */ "indexdef ::= DOT BOOLEAN", + /* 113 */ "indexdef ::= DOT NULL", + /* 114 */ "indexdef ::= DOT INTEGER", + /* 115 */ "indexdef ::= DOT LDEL exprs RDEL", + /* 116 */ "indexdef ::= OPENB ID CLOSEB", + /* 117 */ "indexdef ::= OPENB ID DOT ID CLOSEB", + /* 118 */ "indexdef ::= OPENB exprs CLOSEB", + /* 119 */ "indexdef ::= OPENB CLOSEB", + /* 120 */ "varvar ::= varvarele", + /* 121 */ "varvar ::= varvar varvarele", + /* 122 */ "varvarele ::= ID", + /* 123 */ "varvarele ::= LDEL expr RDEL", + /* 124 */ "object ::= varindexed objectchain", + /* 125 */ "objectchain ::= objectelement", + /* 126 */ "objectchain ::= objectchain objectelement", + /* 127 */ "objectelement ::= PTR ID arrayindex", + /* 128 */ "objectelement ::= PTR variable arrayindex", + /* 129 */ "objectelement ::= PTR LDEL expr RDEL arrayindex", + /* 130 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex", + /* 131 */ "objectelement ::= PTR method", + /* 132 */ "function ::= ID OPENP params CLOSEP", + /* 133 */ "method ::= ID OPENP params CLOSEP", + /* 134 */ "params ::= expr COMMA params", + /* 135 */ "params ::= expr", + /* 136 */ "params ::=", + /* 137 */ "modifier ::= VERT AT ID", + /* 138 */ "modifier ::= VERT ID", + /* 139 */ "modparameters ::= modparameters modparameter", + /* 140 */ "modparameters ::=", + /* 141 */ "modparameter ::= COLON exprs", + /* 142 */ "modparameter ::= COLON ID", + /* 143 */ "ifexpr ::= expr", + /* 144 */ "ifexpr ::= expr ISIN array", + /* 145 */ "ifexpr ::= expr ISIN value", + /* 146 */ "ifexpr ::= expr ISDIVBY expr", + /* 147 */ "ifexpr ::= expr ISNOTDIVBY expr", + /* 148 */ "ifexpr ::= expr ISEVEN", + /* 149 */ "ifexpr ::= expr ISNOTEVEN", + /* 150 */ "ifexpr ::= expr ISEVENBY expr", + /* 151 */ "ifexpr ::= expr ISNOTEVENBY expr", + /* 152 */ "ifexpr ::= expr ISODD", + /* 153 */ "ifexpr ::= expr ISNOTODD", + /* 154 */ "ifexpr ::= expr ISODDBY expr", + /* 155 */ "ifexpr ::= expr ISNOTODDBY expr", + /* 156 */ "ifexpr ::= value INSTANCEOF ID", + /* 157 */ "ifexpr ::= value INSTANCEOF value", + /* 158 */ "ifcond ::= EQUALS", + /* 159 */ "ifcond ::= NOTEQUALS", + /* 160 */ "ifcond ::= GREATERTHAN", + /* 161 */ "ifcond ::= LESSTHAN", + /* 162 */ "ifcond ::= GREATEREQUAL", + /* 163 */ "ifcond ::= LESSEQUAL", + /* 164 */ "ifcond ::= IDENTITY", + /* 165 */ "ifcond ::= NONEIDENTITY", + /* 166 */ "ifcond ::= MOD", + /* 167 */ "lop ::= LAND", + /* 168 */ "lop ::= LOR", + /* 169 */ "lop ::= LXOR", + /* 170 */ "array ::= OPENB arrayelements CLOSEB", + /* 171 */ "arrayelements ::= arrayelement", + /* 172 */ "arrayelements ::= arrayelements COMMA arrayelement", + /* 173 */ "arrayelements ::=", + /* 174 */ "arrayelement ::= value APTR expr", + /* 175 */ "arrayelement ::= ID APTR expr", + /* 176 */ "arrayelement ::= expr", + /* 177 */ "doublequoted ::= doublequoted doublequotedcontent", + /* 178 */ "doublequoted ::= doublequotedcontent", + /* 179 */ "doublequotedcontent ::= BACKTICK variable BACKTICK", + /* 180 */ "doublequotedcontent ::= BACKTICK expr BACKTICK", + /* 181 */ "doublequotedcontent ::= DOLLARID", + /* 182 */ "doublequotedcontent ::= LDEL variable RDEL", + /* 183 */ "doublequotedcontent ::= LDEL expr RDEL", + /* 184 */ "doublequotedcontent ::= smartytag", + /* 185 */ "doublequotedcontent ::= OTHER", + /* 186 */ "optspace ::= SPACE", + /* 187 */ "optspace ::=", ); function tokenName($tokenType) @@ -1457,355 +1452,361 @@ static public $yy_action = array( } static public $yyRuleInfo = array( - array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 73, 'rhs' => 1 ), - array( 'lhs' => 73, 'rhs' => 2 ), array( 'lhs' => 74, 'rhs' => 1 ), - array( 'lhs' => 74, 'rhs' => 1 ), - array( 'lhs' => 74, 'rhs' => 3 ), - array( 'lhs' => 74, 'rhs' => 3 ), - array( 'lhs' => 74, 'rhs' => 1 ), - array( 'lhs' => 74, 'rhs' => 1 ), - array( 'lhs' => 74, 'rhs' => 1 ), - array( 'lhs' => 75, 'rhs' => 3 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 7 ), - array( 'lhs' => 75, 'rhs' => 7 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 3 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 8 ), - array( 'lhs' => 75, 'rhs' => 5 ), - array( 'lhs' => 75, 'rhs' => 5 ), - array( 'lhs' => 75, 'rhs' => 13 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 75, 'rhs' => 8 ), - array( 'lhs' => 75, 'rhs' => 8 ), - array( 'lhs' => 75, 'rhs' => 11 ), - array( 'lhs' => 75, 'rhs' => 8 ), - array( 'lhs' => 75, 'rhs' => 11 ), - array( 'lhs' => 75, 'rhs' => 3 ), - array( 'lhs' => 75, 'rhs' => 3 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 75, 'rhs' => 4 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 5 ), - array( 'lhs' => 77, 'rhs' => 2 ), - array( 'lhs' => 77, 'rhs' => 1 ), - array( 'lhs' => 77, 'rhs' => 0 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 92, 'rhs' => 2 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 86, 'rhs' => 1 ), - array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 79, 'rhs' => 1 ), - array( 'lhs' => 79, 'rhs' => 1 ), - array( 'lhs' => 79, 'rhs' => 4 ), - array( 'lhs' => 79, 'rhs' => 3 ), - array( 'lhs' => 93, 'rhs' => 1 ), - array( 'lhs' => 93, 'rhs' => 2 ), - array( 'lhs' => 93, 'rhs' => 3 ), - array( 'lhs' => 93, 'rhs' => 1 ), - array( 'lhs' => 80, 'rhs' => 7 ), - array( 'lhs' => 80, 'rhs' => 7 ), - array( 'lhs' => 94, 'rhs' => 1 ), - array( 'lhs' => 94, 'rhs' => 1 ), - array( 'lhs' => 94, 'rhs' => 1 ), - array( 'lhs' => 76, 'rhs' => 1 ), - array( 'lhs' => 76, 'rhs' => 2 ), - array( 'lhs' => 76, 'rhs' => 2 ), - array( 'lhs' => 76, 'rhs' => 2 ), - array( 'lhs' => 76, 'rhs' => 1 ), - array( 'lhs' => 76, 'rhs' => 3 ), + array( 'lhs' => 75, 'rhs' => 1 ), + array( 'lhs' => 75, 'rhs' => 2 ), array( 'lhs' => 76, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 3 ), array( 'lhs' => 76, 'rhs' => 1 ), - array( 'lhs' => 76, 'rhs' => 3 ), - array( 'lhs' => 76, 'rhs' => 2 ), - array( 'lhs' => 76, 'rhs' => 3 ), - array( 'lhs' => 76, 'rhs' => 7 ), - array( 'lhs' => 76, 'rhs' => 4 ), - array( 'lhs' => 76, 'rhs' => 8 ), - array( 'lhs' => 76, 'rhs' => 3 ), - array( 'lhs' => 76, 'rhs' => 5 ), - array( 'lhs' => 76, 'rhs' => 6 ), array( 'lhs' => 76, 'rhs' => 1 ), - array( 'lhs' => 78, 'rhs' => 1 ), - array( 'lhs' => 78, 'rhs' => 4 ), - array( 'lhs' => 78, 'rhs' => 1 ), + array( 'lhs' => 78, 'rhs' => 2 ), array( 'lhs' => 78, 'rhs' => 3 ), - array( 'lhs' => 78, 'rhs' => 3 ), - array( 'lhs' => 81, 'rhs' => 3 ), - array( 'lhs' => 100, 'rhs' => 2 ), - array( 'lhs' => 100, 'rhs' => 0 ), - array( 'lhs' => 102, 'rhs' => 3 ), - array( 'lhs' => 102, 'rhs' => 5 ), - array( 'lhs' => 102, 'rhs' => 2 ), - array( 'lhs' => 102, 'rhs' => 2 ), - array( 'lhs' => 102, 'rhs' => 2 ), - array( 'lhs' => 102, 'rhs' => 2 ), - array( 'lhs' => 102, 'rhs' => 4 ), - array( 'lhs' => 102, 'rhs' => 3 ), - array( 'lhs' => 102, 'rhs' => 5 ), - array( 'lhs' => 102, 'rhs' => 3 ), - array( 'lhs' => 102, 'rhs' => 2 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 2 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 3 ), - array( 'lhs' => 101, 'rhs' => 2 ), - array( 'lhs' => 99, 'rhs' => 1 ), - array( 'lhs' => 99, 'rhs' => 2 ), - array( 'lhs' => 104, 'rhs' => 3 ), - array( 'lhs' => 104, 'rhs' => 3 ), - array( 'lhs' => 104, 'rhs' => 5 ), - array( 'lhs' => 104, 'rhs' => 6 ), - array( 'lhs' => 104, 'rhs' => 2 ), - array( 'lhs' => 95, 'rhs' => 4 ), + 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' => 77, 'rhs' => 3 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 7 ), + array( 'lhs' => 77, 'rhs' => 7 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 3 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 8 ), + array( 'lhs' => 77, 'rhs' => 5 ), + array( 'lhs' => 77, 'rhs' => 5 ), + array( 'lhs' => 77, 'rhs' => 5 ), + array( 'lhs' => 77, 'rhs' => 13 ), + array( 'lhs' => 94, 'rhs' => 2 ), + array( 'lhs' => 94, 'rhs' => 1 ), + array( 'lhs' => 77, 'rhs' => 8 ), + array( 'lhs' => 77, 'rhs' => 8 ), + array( 'lhs' => 77, 'rhs' => 11 ), + array( 'lhs' => 77, 'rhs' => 8 ), + array( 'lhs' => 77, 'rhs' => 11 ), + array( 'lhs' => 77, 'rhs' => 3 ), + array( 'lhs' => 77, 'rhs' => 3 ), + array( 'lhs' => 96, 'rhs' => 1 ), + array( 'lhs' => 96, 'rhs' => 1 ), + array( 'lhs' => 96, 'rhs' => 1 ), + array( 'lhs' => 77, 'rhs' => 4 ), + array( 'lhs' => 77, 'rhs' => 6 ), + array( 'lhs' => 77, 'rhs' => 5 ), + array( 'lhs' => 82, 'rhs' => 2 ), + array( 'lhs' => 82, 'rhs' => 1 ), + array( 'lhs' => 82, 'rhs' => 0 ), array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 97, 'rhs' => 2 ), + array( 'lhs' => 97, 'rhs' => 4 ), + array( 'lhs' => 91, 'rhs' => 1 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 90, 'rhs' => 4 ), + array( 'lhs' => 84, 'rhs' => 1 ), + array( 'lhs' => 84, 'rhs' => 1 ), + array( 'lhs' => 84, 'rhs' => 4 ), + array( 'lhs' => 84, 'rhs' => 3 ), + array( 'lhs' => 98, 'rhs' => 1 ), + array( 'lhs' => 98, 'rhs' => 3 ), + array( 'lhs' => 98, 'rhs' => 3 ), array( 'lhs' => 98, 'rhs' => 3 ), array( 'lhs' => 98, 'rhs' => 1 ), - array( 'lhs' => 98, 'rhs' => 0 ), - array( 'lhs' => 82, 'rhs' => 3 ), - array( 'lhs' => 82, 'rhs' => 2 ), - array( 'lhs' => 83, 'rhs' => 2 ), - array( 'lhs' => 83, 'rhs' => 0 ), - array( 'lhs' => 105, 'rhs' => 2 ), - array( 'lhs' => 105, 'rhs' => 2 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 2 ), - array( 'lhs' => 84, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 1 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), + array( 'lhs' => 98, 'rhs' => 3 ), + array( 'lhs' => 98, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 7 ), + array( 'lhs' => 85, 'rhs' => 7 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 2 ), + array( 'lhs' => 81, 'rhs' => 2 ), + array( 'lhs' => 81, 'rhs' => 2 ), + array( 'lhs' => 81, 'rhs' => 2 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 3 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 3 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 3 ), + array( 'lhs' => 81, 'rhs' => 2 ), + array( 'lhs' => 81, 'rhs' => 3 ), + array( 'lhs' => 81, 'rhs' => 7 ), + array( 'lhs' => 81, 'rhs' => 4 ), + array( 'lhs' => 81, 'rhs' => 8 ), + array( 'lhs' => 81, 'rhs' => 3 ), + array( 'lhs' => 81, 'rhs' => 5 ), + array( 'lhs' => 81, 'rhs' => 6 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 83, 'rhs' => 1 ), + array( 'lhs' => 83, 'rhs' => 4 ), + array( 'lhs' => 83, 'rhs' => 1 ), + array( 'lhs' => 83, 'rhs' => 3 ), + array( 'lhs' => 83, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 3 ), array( 'lhs' => 106, 'rhs' => 2 ), - array( 'lhs' => 106, 'rhs' => 2 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 2 ), - array( 'lhs' => 106, 'rhs' => 2 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 106, 'rhs' => 3 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 1 ), - array( 'lhs' => 108, 'rhs' => 1 ), - array( 'lhs' => 108, 'rhs' => 1 ), - array( 'lhs' => 108, 'rhs' => 1 ), - array( 'lhs' => 90, 'rhs' => 3 ), + array( 'lhs' => 106, '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' => 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' => 93, 'rhs' => 1 ), + array( 'lhs' => 93, 'rhs' => 2 ), array( 'lhs' => 109, 'rhs' => 1 ), array( 'lhs' => 109, 'rhs' => 3 ), - array( 'lhs' => 109, 'rhs' => 0 ), + array( 'lhs' => 107, 'rhs' => 2 ), + array( 'lhs' => 105, 'rhs' => 1 ), + array( 'lhs' => 105, 'rhs' => 2 ), array( 'lhs' => 110, 'rhs' => 3 ), array( 'lhs' => 110, 'rhs' => 3 ), - array( 'lhs' => 110, 'rhs' => 1 ), - array( 'lhs' => 96, 'rhs' => 2 ), - array( 'lhs' => 96, 'rhs' => 1 ), - array( 'lhs' => 111, 'rhs' => 3 ), - array( 'lhs' => 111, 'rhs' => 1 ), - array( 'lhs' => 111, 'rhs' => 3 ), - array( 'lhs' => 111, 'rhs' => 3 ), - array( 'lhs' => 111, 'rhs' => 1 ), - array( 'lhs' => 111, 'rhs' => 1 ), - array( 'lhs' => 87, 'rhs' => 1 ), - array( 'lhs' => 87, 'rhs' => 0 ), + array( 'lhs' => 110, 'rhs' => 5 ), + array( 'lhs' => 110, 'rhs' => 6 ), + array( 'lhs' => 110, 'rhs' => 2 ), + array( 'lhs' => 101, 'rhs' => 4 ), + array( 'lhs' => 103, 'rhs' => 4 ), + array( 'lhs' => 104, 'rhs' => 3 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 0 ), + array( 'lhs' => 87, 'rhs' => 3 ), + array( 'lhs' => 87, 'rhs' => 2 ), + array( 'lhs' => 88, 'rhs' => 2 ), + array( 'lhs' => 88, 'rhs' => 0 ), + array( 'lhs' => 111, 'rhs' => 2 ), + array( 'lhs' => 111, 'rhs' => 2 ), + array( 'lhs' => 89, 'rhs' => 1 ), + 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' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 1 ), + array( 'lhs' => 95, 'rhs' => 3 ), + array( 'lhs' => 112, 'rhs' => 1 ), + array( 'lhs' => 112, 'rhs' => 3 ), + array( 'lhs' => 112, 'rhs' => 0 ), + array( 'lhs' => 113, 'rhs' => 3 ), + array( 'lhs' => 113, 'rhs' => 3 ), + array( 'lhs' => 113, 'rhs' => 1 ), + array( 'lhs' => 102, 'rhs' => 2 ), + array( 'lhs' => 102, 'rhs' => 1 ), + array( 'lhs' => 114, 'rhs' => 3 ), + array( 'lhs' => 114, 'rhs' => 3 ), + array( 'lhs' => 114, 'rhs' => 1 ), + array( 'lhs' => 114, 'rhs' => 3 ), + array( 'lhs' => 114, 'rhs' => 3 ), + array( 'lhs' => 114, 'rhs' => 1 ), + array( 'lhs' => 114, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 0 ), ); static public $yyReduceMap = array( 0 => 0, - 39 => 0, - 40 => 0, - 41 => 0, - 61 => 0, + 5 => 0, + 13 => 0, + 14 => 0, + 48 => 0, + 49 => 0, + 50 => 0, 70 => 0, - 74 => 0, - 76 => 0, - 77 => 0, - 78 => 0, - 80 => 0, - 93 => 0, - 166 => 0, + 79 => 0, + 84 => 0, + 86 => 0, + 87 => 0, + 88 => 0, + 90 => 0, + 103 => 0, + 171 => 0, 1 => 1, - 58 => 1, - 64 => 1, - 67 => 1, - 68 => 1, - 110 => 1, - 133 => 1, - 173 => 1, - 179 => 1, - 180 => 1, 2 => 2, - 129 => 2, 3 => 3, 4 => 4, - 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, + 12 => 9, 10 => 10, 11 => 11, - 12 => 11, - 13 => 11, - 14 => 11, + 80 => 11, + 82 => 11, + 83 => 11, 15 => 15, 16 => 15, 17 => 17, - 18 => 17, + 18 => 18, 19 => 19, 20 => 19, - 21 => 21, - 22 => 21, + 21 => 19, + 22 => 19, 23 => 23, - 24 => 24, + 24 => 23, 25 => 25, - 26 => 26, + 26 => 25, 27 => 27, 28 => 27, 29 => 29, - 30 => 30, + 30 => 29, 31 => 31, - 46 => 31, - 125 => 31, - 171 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, + 37 => 35, 36 => 36, - 37 => 37, - 38 => 37, + 38 => 38, + 39 => 39, + 40 => 40, + 55 => 40, + 135 => 40, + 176 => 40, + 41 => 41, 42 => 42, 43 => 43, 44 => 44, 45 => 45, - 47 => 47, - 48 => 48, - 49 => 49, - 50 => 49, - 51 => 49, - 53 => 49, + 46 => 46, + 47 => 46, + 51 => 51, 52 => 52, + 53 => 53, 54 => 54, - 55 => 55, 56 => 56, 57 => 57, - 59 => 59, - 60 => 60, - 62 => 62, - 72 => 62, - 73 => 62, + 58 => 58, + 59 => 58, + 60 => 58, + 62 => 58, + 61 => 61, 63 => 63, + 64 => 64, 65 => 65, - 66 => 65, + 66 => 66, + 67 => 67, + 74 => 67, + 120 => 67, + 178 => 67, + 185 => 67, + 186 => 67, + 68 => 68, 69 => 69, 71 => 71, + 72 => 71, + 73 => 71, 75 => 75, - 79 => 79, + 76 => 75, + 156 => 75, + 77 => 77, + 78 => 77, 81 => 81, - 82 => 82, - 83 => 83, - 84 => 84, 85 => 85, - 86 => 86, - 87 => 87, - 88 => 88, 89 => 89, - 90 => 90, 91 => 91, 92 => 92, + 93 => 93, 94 => 94, 95 => 95, 96 => 96, 97 => 97, - 172 => 97, 98 => 98, - 130 => 98, 99 => 99, 100 => 100, 101 => 101, - 102 => 101, - 103 => 101, + 102 => 102, 104 => 104, 105 => 105, - 108 => 105, 106 => 106, 107 => 107, + 177 => 107, + 108 => 108, + 140 => 108, 109 => 109, - 181 => 109, + 110 => 110, 111 => 111, - 112 => 112, - 113 => 113, - 135 => 113, + 112 => 111, + 113 => 111, 114 => 114, 115 => 115, + 118 => 115, 116 => 116, 117 => 117, - 118 => 118, 119 => 119, - 120 => 120, + 187 => 119, 121 => 121, 122 => 122, 123 => 123, 124 => 124, + 125 => 125, 126 => 126, 127 => 127, 128 => 128, + 129 => 129, + 130 => 130, 131 => 131, 132 => 132, + 133 => 133, 134 => 134, 136 => 136, 137 => 137, - 140 => 137, - 151 => 137, - 138 => 138, + 138 => 137, 139 => 139, 141 => 141, 142 => 142, 143 => 143, - 148 => 143, 144 => 144, - 147 => 144, 145 => 145, - 150 => 145, 146 => 146, - 149 => 146, - 152 => 152, - 153 => 153, - 154 => 154, - 155 => 155, - 156 => 156, + 147 => 147, + 148 => 148, + 153 => 148, + 149 => 149, + 152 => 149, + 150 => 150, + 155 => 150, + 151 => 151, + 154 => 151, 157 => 157, 158 => 158, 159 => 159, @@ -1815,495 +1816,477 @@ static public $yy_action = array( 163 => 163, 164 => 164, 165 => 165, + 166 => 166, 167 => 167, 168 => 168, 169 => 169, 170 => 170, + 172 => 172, + 173 => 173, 174 => 174, - 176 => 174, 175 => 175, - 177 => 177, - 178 => 178, + 179 => 179, + 182 => 179, + 180 => 180, + 181 => 181, + 183 => 183, + 184 => 184, ); -#line 78 "smarty_internal_templateparser.y" +#line 81 "smarty_internal_templateparser.y" function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1825 "smarty_internal_templateparser.php" -#line 84 "smarty_internal_templateparser.y" - function yy_r1(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1828 "smarty_internal_templateparser.php" -#line 86 "smarty_internal_templateparser.y" - function yy_r2(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 1831 "smarty_internal_templateparser.php" -#line 92 "smarty_internal_templateparser.y" +#line 1832 "smarty_internal_templateparser.php" +#line 87 "smarty_internal_templateparser.y" + function yy_r1(){if ($this->template->extract_code == false) { + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; + } else { + // store code in extract buffer + $this->template->extracted_compiled_code .= $this->yystack[$this->yyidx + 0]->minor; + } + } +#line 1841 "smarty_internal_templateparser.php" +#line 95 "smarty_internal_templateparser.y" + function yy_r2(){if ($this->template->extract_code == false) { + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; + } else { + // store code in extract buffer + $this->template->extracted_compiled_code .= $this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; + } + } +#line 1851 "smarty_internal_templateparser.php" +#line 108 "smarty_internal_templateparser.y" function yy_r3(){ if ($this->compiler->has_code) { $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array(); - $this->_retvalue = $this->cacher->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor, $this->compiler,true); + $this->_retvalue = $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true); } else { $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;} $this->compiler->has_variable_string = false; } -#line 1838 "smarty_internal_templateparser.php" -#line 99 "smarty_internal_templateparser.y" +#line 1858 "smarty_internal_templateparser.php" +#line 115 "smarty_internal_templateparser.y" function yy_r4(){ $this->_retvalue = ''; } -#line 1841 "smarty_internal_templateparser.php" -#line 104 "smarty_internal_templateparser.y" - function yy_r5(){if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { - $this->_retvalue = $this->cacher->processNocacheCode("yystack[$this->yyidx + -1]->minor)."?>', ENT_QUOTES);?>\n", $this->compiler, false); +#line 1861 "smarty_internal_templateparser.php" +#line 121 "smarty_internal_templateparser.y" + function yy_r6(){ + if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { + $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + -2]->minor) . $this->yystack[$this->yyidx + -1]->minor . '?>'; } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) { - $this->_retvalue = $this->cacher->processNocacheCode(htmlspecialchars('yystack[$this->yyidx + -1]->minor.'?>', ENT_QUOTES), $this->compiler, false); + $this->_retvalue = $this->compiler->processNocacheCode(htmlspecialchars($this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'?>', ENT_QUOTES), false); }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) { - $this->_retvalue = $this->cacher->processNocacheCode('yystack[$this->yyidx + -1]->minor.'?>', $this->compiler, true); + $this->_retvalue = $this->compiler->processNocacheCode('yystack[$this->yyidx + -1]->minor.'?>', true); }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) { $this->_retvalue = ''; } } -#line 1853 "smarty_internal_templateparser.php" -#line 115 "smarty_internal_templateparser.y" - function yy_r6(){ - if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) { - $this->_retvalue = $this->cacher->processNocacheCode("yystack[$this->yyidx + -1]->minor."?>'?>\n", $this->compiler, false); - } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) { - $this->_retvalue = $this->cacher->processNocacheCode(htmlspecialchars('yystack[$this->yyidx + -1]->minor.'?>', ENT_QUOTES), $this->compiler, false); - }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) { - $this->_retvalue = $this->cacher->processNocacheCode('yystack[$this->yyidx + -1]->minor.'?>', $this->compiler, true); - }elseif ($this->sec_obj == SMARTY_PHP_REMOVE) { - $this->_retvalue = ''; - } - } -#line 1866 "smarty_internal_templateparser.php" -#line 128 "smarty_internal_templateparser.y" - function yy_r7(){ $this->compiler->tag_nocache = true; $this->_retvalue = $this->cacher->processNocacheCode("", $this->compiler, true); } -#line 1869 "smarty_internal_templateparser.php" -#line 129 "smarty_internal_templateparser.y" - function yy_r8(){$this->compiler->tag_nocache = true; $this->_retvalue = $this->cacher->processNocacheCode("';?>\n", $this->compiler, true); } -#line 1872 "smarty_internal_templateparser.php" -#line 131 "smarty_internal_templateparser.y" - function yy_r9(){if ($this->lex->strip) { - $this->_retvalue = $this->cacher->processNocacheCode(preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor), $this->compiler, false); +#line 1874 "smarty_internal_templateparser.php" +#line 135 "smarty_internal_templateparser.y" + function yy_r7(){if ($this->lex->strip) { + $this->_retvalue = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor); } else { - $this->_retvalue = $this->cacher->processNocacheCode($this->yystack[$this->yyidx + 0]->minor, $this->compiler, false); + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } } -#line 1880 "smarty_internal_templateparser.php" -#line 144 "smarty_internal_templateparser.y" - function yy_r10(){ $this->_retvalue = $this->compiler->compileTag('print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 1883 "smarty_internal_templateparser.php" -#line 145 "smarty_internal_templateparser.y" - function yy_r11(){ $this->_retvalue = $this->compiler->compileTag('print_expression',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)); } -#line 1886 "smarty_internal_templateparser.php" +#line 1882 "smarty_internal_templateparser.php" +#line 141 "smarty_internal_templateparser.y" + function yy_r8(){if ($this->lex->strip) { + $this->_retvalue = preg_replace('![\$this->yystack[$this->yyidx + 0]->minor ]*[\r\n]+[\$this->yystack[$this->yyidx + 0]->minor ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)); + } else { + $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor); + } + } +#line 1890 "smarty_internal_templateparser.php" +#line 148 "smarty_internal_templateparser.y" + function yy_r9(){ $this->_retvalue = ''; } +#line 1893 "smarty_internal_templateparser.php" +#line 149 "smarty_internal_templateparser.y" + function yy_r10(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } +#line 1896 "smarty_internal_templateparser.php" +#line 151 "smarty_internal_templateparser.y" + function yy_r11(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 1899 "smarty_internal_templateparser.php" #line 156 "smarty_internal_templateparser.y" - function yy_r15(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'")); } -#line 1889 "smarty_internal_templateparser.php" + function yy_r15(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor); } +#line 1902 "smarty_internal_templateparser.php" #line 158 "smarty_internal_templateparser.y" - function yy_r17(){ $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 1892 "smarty_internal_templateparser.php" -#line 160 "smarty_internal_templateparser.y" - function yy_r19(){ $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 1895 "smarty_internal_templateparser.php" -#line 163 "smarty_internal_templateparser.y" - function yy_r21(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor); } -#line 1898 "smarty_internal_templateparser.php" -#line 165 "smarty_internal_templateparser.y" - function yy_r23(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array()); } -#line 1901 "smarty_internal_templateparser.php" + function yy_r17(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor); } +#line 1905 "smarty_internal_templateparser.php" +#line 166 "smarty_internal_templateparser.y" + function yy_r18(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 1908 "smarty_internal_templateparser.php" #line 167 "smarty_internal_templateparser.y" - function yy_r24(){ $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 1904 "smarty_internal_templateparser.php" -#line 169 "smarty_internal_templateparser.y" - function yy_r25(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor).'smarty->plugin_handler->loadSmartyPlugin($this->yystack[$this->yyidx + -3]->minor[0],'modifier')) { - $this->_retvalue .= "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -3]->minor[0] . "',array(ob_get_clean()" . $this->yystack[$this->yyidx + -2]->minor. "),".$this->yystack[$this->yyidx + -3]->minor[1].");?>"; - } else { - if (is_callable($this->yystack[$this->yyidx + -3]->minor[0])) { - if (!$this->template->security || $this->smarty->security_handler->isTrustedModifier($this->yystack[$this->yyidx + -3]->minor[0], $this->compiler)) { - $this->_retvalue .= "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -3]->minor[0] . "',array(ob_get_clean()" . $this->yystack[$this->yyidx + -2]->minor. "),".$this->yystack[$this->yyidx + -3]->minor[1].");?>"; - } - } else { - $this->compiler->trigger_template_error ("unknown modifier \"" . $this->yystack[$this->yyidx + -3]->minor[0] . "\""); - } - } - } -#line 1919 "smarty_internal_templateparser.php" -#line 183 "smarty_internal_templateparser.y" - function yy_r26(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -4]->minor),$this->yystack[$this->yyidx + -1]->minor)).'smarty->plugin_handler->loadSmartyPlugin($this->yystack[$this->yyidx + -3]->minor[0],'modifier')) { - $this->_retvalue .= "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -3]->minor[0] . "',array(ob_get_clean()" . $this->yystack[$this->yyidx + -2]->minor. "),".$this->yystack[$this->yyidx + -3]->minor[1].");?>"; - } else { - if (is_callable($this->yystack[$this->yyidx + -3]->minor[0])) { - if (!$this->template->security || $this->smarty->security_handler->isTrustedModifier($this->yystack[$this->yyidx + -3]->minor[0], $this->compiler)) { - $this->_retvalue .= "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -3]->minor[0] . "',array(ob_get_clean()" . $this->yystack[$this->yyidx + -2]->minor. "),".$this->yystack[$this->yyidx + -3]->minor[1].");?>"; - } - } else { - $this->compiler->trigger_template_error ("unknown modifier \"" . $this->yystack[$this->yyidx + -3]->minor[0] . "\""); - } - } - } + function yy_r19(){ $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 1911 "smarty_internal_templateparser.php" +#line 178 "smarty_internal_templateparser.y" + function yy_r23(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'")); } +#line 1914 "smarty_internal_templateparser.php" +#line 180 "smarty_internal_templateparser.y" + function yy_r25(){ $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 1917 "smarty_internal_templateparser.php" +#line 182 "smarty_internal_templateparser.y" + function yy_r27(){ $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 1920 "smarty_internal_templateparser.php" +#line 185 "smarty_internal_templateparser.y" + function yy_r29(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor); } +#line 1923 "smarty_internal_templateparser.php" +#line 187 "smarty_internal_templateparser.y" + function yy_r31(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array()); } +#line 1926 "smarty_internal_templateparser.php" +#line 189 "smarty_internal_templateparser.y" + function yy_r32(){ $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 1929 "smarty_internal_templateparser.php" +#line 191 "smarty_internal_templateparser.y" + function yy_r33(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$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 1934 "smarty_internal_templateparser.php" -#line 197 "smarty_internal_templateparser.y" - function yy_r27(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 1937 "smarty_internal_templateparser.php" +#line 195 "smarty_internal_templateparser.y" + function yy_r34(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -4]->minor),$this->yystack[$this->yyidx + -1]->minor)).'_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 1939 "smarty_internal_templateparser.php" +#line 199 "smarty_internal_templateparser.y" + function yy_r35(){ $this->_retvalue = $this->compiler->compileTag(($this->yystack[$this->yyidx + -3]->minor == 'else if')? 'elseif' : $this->yystack[$this->yyidx + -3]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 1942 "smarty_internal_templateparser.php" #line 200 "smarty_internal_templateparser.y" - function yy_r29(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -11]->minor,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 1941 "smarty_internal_templateparser.php" -#line 202 "smarty_internal_templateparser.y" - function yy_r30(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor; } -#line 1944 "smarty_internal_templateparser.php" + function yy_r36(){ $this->_retvalue = $this->compiler->compileTag(($this->yystack[$this->yyidx + -3]->minor == 'else if')? 'elseif' : $this->yystack[$this->yyidx + -3]->minor,array('if condition'=>trim($this->yystack[$this->yyidx + -2]->minor).$this->yystack[$this->yyidx + -1]->minor)); } +#line 1945 "smarty_internal_templateparser.php" #line 203 "smarty_internal_templateparser.y" - function yy_r31(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1947 "smarty_internal_templateparser.php" -#line 204 "smarty_internal_templateparser.y" - function yy_r32(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('start'=>$this->yystack[$this->yyidx + -4]->minor,'to'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)); } -#line 1950 "smarty_internal_templateparser.php" + function yy_r38(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -11]->minor,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 1949 "smarty_internal_templateparser.php" +#line 205 "smarty_internal_templateparser.y" + function yy_r39(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor; } +#line 1952 "smarty_internal_templateparser.php" +#line 206 "smarty_internal_templateparser.y" + function yy_r40(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 1955 "smarty_internal_templateparser.php" #line 207 "smarty_internal_templateparser.y" - function yy_r33(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 1954 "smarty_internal_templateparser.php" -#line 209 "smarty_internal_templateparser.y" - function yy_r34(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -9]->minor,array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor)); } + function yy_r41(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('start'=>$this->yystack[$this->yyidx + -4]->minor,'to'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)); } #line 1958 "smarty_internal_templateparser.php" -#line 211 "smarty_internal_templateparser.y" - function yy_r35(){ +#line 210 "smarty_internal_templateparser.y" + function yy_r42(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor)); } #line 1962 "smarty_internal_templateparser.php" -#line 213 "smarty_internal_templateparser.y" - function yy_r36(){ +#line 212 "smarty_internal_templateparser.y" + function yy_r43(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -9]->minor,array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor)); } #line 1966 "smarty_internal_templateparser.php" -#line 217 "smarty_internal_templateparser.y" - function yy_r37(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array()); } -#line 1969 "smarty_internal_templateparser.php" -#line 222 "smarty_internal_templateparser.y" - function yy_r42(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor); } -#line 1972 "smarty_internal_templateparser.php" -#line 223 "smarty_internal_templateparser.y" - function yy_r43(){ $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'smarty->plugin_handler->loadSmartyPlugin($this->yystack[$this->yyidx + -3]->minor[0],'modifier')) { - $this->_retvalue .= "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -3]->minor[0] . "',array(ob_get_clean()" . $this->yystack[$this->yyidx + -2]->minor. "),".$this->yystack[$this->yyidx + -3]->minor[1].");?>"; - } else { - if (is_callable($this->yystack[$this->yyidx + -3]->minor[0])) { - if (!$this->template->security || $this->smarty->security_handler->isTrustedModifier($this->yystack[$this->yyidx + -3]->minor[0], $this->compiler)) { - $this->_retvalue .= "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -3]->minor[0] . "',array(ob_get_clean()" . $this->yystack[$this->yyidx + -2]->minor. "),".$this->yystack[$this->yyidx + -3]->minor[1].");?>"; - } - } else { - $this->compiler->trigger_template_error ("unknown modifier \"" . $this->yystack[$this->yyidx + -3]->minor[0] . "\""); - } - } - } -#line 1987 "smarty_internal_templateparser.php" +#line 214 "smarty_internal_templateparser.y" + function yy_r44(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 1970 "smarty_internal_templateparser.php" +#line 216 "smarty_internal_templateparser.y" + function yy_r45(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -9]->minor,array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor)); } +#line 1974 "smarty_internal_templateparser.php" +#line 220 "smarty_internal_templateparser.y" + function yy_r46(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array()); } +#line 1977 "smarty_internal_templateparser.php" +#line 225 "smarty_internal_templateparser.y" + function yy_r51(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor); } +#line 1980 "smarty_internal_templateparser.php" +#line 226 "smarty_internal_templateparser.y" + function yy_r52(){ $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 1985 "smarty_internal_templateparser.php" +#line 230 "smarty_internal_templateparser.y" + function yy_r53(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor)); } +#line 1988 "smarty_internal_templateparser.php" #line 237 "smarty_internal_templateparser.y" - function yy_r44(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 1990 "smarty_internal_templateparser.php" + function yy_r54(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } +#line 1991 "smarty_internal_templateparser.php" +#line 241 "smarty_internal_templateparser.y" + function yy_r56(){ $this->_retvalue = array(); } +#line 1994 "smarty_internal_templateparser.php" #line 244 "smarty_internal_templateparser.y" - function yy_r45(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } -#line 1993 "smarty_internal_templateparser.php" + function yy_r57(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'"); } +#line 1997 "smarty_internal_templateparser.php" +#line 245 "smarty_internal_templateparser.y" + function yy_r58(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2000 "smarty_internal_templateparser.php" #line 248 "smarty_internal_templateparser.y" - function yy_r47(){ $this->_retvalue = array(); } -#line 1996 "smarty_internal_templateparser.php" -#line 251 "smarty_internal_templateparser.y" - function yy_r48(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'"); } -#line 1999 "smarty_internal_templateparser.php" -#line 252 "smarty_internal_templateparser.y" - function yy_r49(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2002 "smarty_internal_templateparser.php" + function yy_r61(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true'); } +#line 2003 "smarty_internal_templateparser.php" #line 255 "smarty_internal_templateparser.y" - function yy_r52(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true'); } -#line 2005 "smarty_internal_templateparser.php" -#line 262 "smarty_internal_templateparser.y" - function yy_r54(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 2008 "smarty_internal_templateparser.php" -#line 263 "smarty_internal_templateparser.y" - function yy_r55(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } -#line 2011 "smarty_internal_templateparser.php" + function yy_r63(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } +#line 2006 "smarty_internal_templateparser.php" +#line 256 "smarty_internal_templateparser.y" + function yy_r64(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } +#line 2009 "smarty_internal_templateparser.php" +#line 258 "smarty_internal_templateparser.y" + function yy_r65(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2012 "smarty_internal_templateparser.php" +#line 264 "smarty_internal_templateparser.y" + function yy_r66(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } +#line 2015 "smarty_internal_templateparser.php" #line 265 "smarty_internal_templateparser.y" - function yy_r56(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2014 "smarty_internal_templateparser.php" -#line 271 "smarty_internal_templateparser.y" - function yy_r57(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } -#line 2017 "smarty_internal_templateparser.php" -#line 274 "smarty_internal_templateparser.y" - function yy_r59(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')'; } -#line 2020 "smarty_internal_templateparser.php" -#line 275 "smarty_internal_templateparser.y" - function yy_r60(){ - if ($this->smarty->plugin_handler->loadSmartyPlugin($this->yystack[$this->yyidx + -1]->minor[0],'modifier')) { - $this->_retvalue = "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -1]->minor[0] . "',array(". $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + 0]->minor. "),".$this->yystack[$this->yyidx + -1]->minor[1].")"; - } else { - if (is_callable($this->yystack[$this->yyidx + -1]->minor[0])) { - if (!$this->template->security || $this->smarty->security_handler->isTrustedModifier($this->yystack[$this->yyidx + -1]->minor[0], $this->compiler)) { - $this->_retvalue = "\$_smarty_tpl->smarty->plugin_handler->executeModifier('".$this->yystack[$this->yyidx + -1]->minor[0] . "',array(". $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + 0]->minor. "),".$this->yystack[$this->yyidx + -1]->minor[1].")"; - } - } else { - $this->compiler->trigger_template_error ("unknown modifier \"" . $this->yystack[$this->yyidx + -1]->minor[0] . "\""); - } - } - } -#line 2035 "smarty_internal_templateparser.php" -#line 292 "smarty_internal_templateparser.y" - function yy_r62(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2038 "smarty_internal_templateparser.php" -#line 294 "smarty_internal_templateparser.y" - function yy_r63(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor; } -#line 2041 "smarty_internal_templateparser.php" -#line 301 "smarty_internal_templateparser.y" - function yy_r65(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } -#line 2044 "smarty_internal_templateparser.php" -#line 315 "smarty_internal_templateparser.y" - function yy_r69(){$this->_retvalue = ' & '; } -#line 2047 "smarty_internal_templateparser.php" -#line 319 "smarty_internal_templateparser.y" - function yy_r71(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2050 "smarty_internal_templateparser.php" -#line 324 "smarty_internal_templateparser.y" - function yy_r75(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2053 "smarty_internal_templateparser.php" -#line 334 "smarty_internal_templateparser.y" - function yy_r79(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")"; } -#line 2056 "smarty_internal_templateparser.php" -#line 338 "smarty_internal_templateparser.y" - function yy_r81(){ $_s = str_replace(array('."".','.""'),array('.',''),'"'.$this->yystack[$this->yyidx + -1]->minor.'"'); + function yy_r67(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2018 "smarty_internal_templateparser.php" +#line 267 "smarty_internal_templateparser.y" + function yy_r68(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')'; } +#line 2021 "smarty_internal_templateparser.php" +#line 268 "smarty_internal_templateparser.y" + function yy_r69(){ $this->_retvalue = $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -1]->minor,'params'=>$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor)); } +#line 2024 "smarty_internal_templateparser.php" +#line 277 "smarty_internal_templateparser.y" + function yy_r71(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor; } +#line 2027 "smarty_internal_templateparser.php" +#line 283 "smarty_internal_templateparser.y" + function yy_r75(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2030 "smarty_internal_templateparser.php" +#line 289 "smarty_internal_templateparser.y" + function yy_r77(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } +#line 2033 "smarty_internal_templateparser.php" +#line 298 "smarty_internal_templateparser.y" + function yy_r81(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2036 "smarty_internal_templateparser.php" +#line 303 "smarty_internal_templateparser.y" + function yy_r85(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2039 "smarty_internal_templateparser.php" +#line 313 "smarty_internal_templateparser.y" + function yy_r89(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")"; } +#line 2042 "smarty_internal_templateparser.php" +#line 317 "smarty_internal_templateparser.y" + function yy_r91(){ $_s = str_replace(array('."".','.""'),array('.',''),'"'.$this->yystack[$this->yyidx + -1]->minor.'"'); if (substr($_s,0,3) == '"".') { $this->_retvalue = substr($_s,3); } else { $this->_retvalue = $_s; } } -#line 2065 "smarty_internal_templateparser.php" -#line 345 "smarty_internal_templateparser.y" - function yy_r82(){ $this->_retvalue = "''"; } -#line 2068 "smarty_internal_templateparser.php" +#line 2051 "smarty_internal_templateparser.php" +#line 324 "smarty_internal_templateparser.y" + function yy_r92(){ $this->_retvalue = "''"; } +#line 2054 "smarty_internal_templateparser.php" +#line 326 "smarty_internal_templateparser.y" + function yy_r93(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2057 "smarty_internal_templateparser.php" +#line 327 "smarty_internal_templateparser.y" + function yy_r94(){ $this->prefix_number++; $this->compiler->prefix_code[] = 'prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.'::$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')'; } +#line 2060 "smarty_internal_templateparser.php" +#line 329 "smarty_internal_templateparser.y" + function yy_r95(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.'::'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2063 "smarty_internal_templateparser.php" +#line 330 "smarty_internal_templateparser.y" + function yy_r96(){ $this->prefix_number++; $this->compiler->prefix_code[] = 'prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -4]->minor .'\')->value;?>'; $this->_retvalue = $this->yystack[$this->yyidx + -7]->minor.'::$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -2]->minor .')'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2066 "smarty_internal_templateparser.php" +#line 332 "smarty_internal_templateparser.y" + function yy_r97(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2069 "smarty_internal_templateparser.php" +#line 334 "smarty_internal_templateparser.y" + function yy_r98(){ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.'::$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2072 "smarty_internal_templateparser.php" +#line 336 "smarty_internal_templateparser.y" + function yy_r99(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.'::$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2075 "smarty_internal_templateparser.php" +#line 338 "smarty_internal_templateparser.y" + function yy_r100(){ $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 2078 "smarty_internal_templateparser.php" #line 347 "smarty_internal_templateparser.y" - function yy_r83(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2071 "smarty_internal_templateparser.php" -#line 348 "smarty_internal_templateparser.y" - function yy_r84(){ $this->prefix_number++; $this->compiler->prefix_code[] = 'prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.'::$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')'; } -#line 2074 "smarty_internal_templateparser.php" -#line 350 "smarty_internal_templateparser.y" - function yy_r85(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.'::'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2077 "smarty_internal_templateparser.php" -#line 351 "smarty_internal_templateparser.y" - function yy_r86(){ $this->prefix_number++; $this->compiler->prefix_code[] = 'prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -4]->minor .'\')->value;?>'; $this->_retvalue = $this->yystack[$this->yyidx + -7]->minor.'::$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -2]->minor .')'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2080 "smarty_internal_templateparser.php" -#line 353 "smarty_internal_templateparser.y" - function yy_r87(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2083 "smarty_internal_templateparser.php" -#line 355 "smarty_internal_templateparser.y" - function yy_r88(){ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.'::$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2086 "smarty_internal_templateparser.php" -#line 357 "smarty_internal_templateparser.y" - function yy_r89(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.'::$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2089 "smarty_internal_templateparser.php" -#line 359 "smarty_internal_templateparser.y" - function yy_r90(){ $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 2092 "smarty_internal_templateparser.php" -#line 368 "smarty_internal_templateparser.y" - function yy_r91(){ if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('special_smarty_variable',$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);} else { + function yy_r101(){if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);} else { $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 2096 "smarty_internal_templateparser.php" +#line 2082 "smarty_internal_templateparser.php" +#line 350 "smarty_internal_templateparser.y" + function yy_r102(){ $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 2085 "smarty_internal_templateparser.php" +#line 354 "smarty_internal_templateparser.y" + function yy_r104(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')'; } +#line 2088 "smarty_internal_templateparser.php" +#line 355 "smarty_internal_templateparser.y" + function yy_r105(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')'; } +#line 2091 "smarty_internal_templateparser.php" +#line 358 "smarty_internal_templateparser.y" + function yy_r106(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } +#line 2094 "smarty_internal_templateparser.php" +#line 364 "smarty_internal_templateparser.y" + function yy_r107(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2097 "smarty_internal_templateparser.php" +#line 366 "smarty_internal_templateparser.y" + function yy_r108(){return; } +#line 2100 "smarty_internal_templateparser.php" +#line 370 "smarty_internal_templateparser.y" + function yy_r109(){ $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 2103 "smarty_internal_templateparser.php" #line 371 "smarty_internal_templateparser.y" - function yy_r92(){ $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 2099 "smarty_internal_templateparser.php" -#line 375 "smarty_internal_templateparser.y" - function yy_r94(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')'; } -#line 2102 "smarty_internal_templateparser.php" -#line 376 "smarty_internal_templateparser.y" - function yy_r95(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')'; } -#line 2105 "smarty_internal_templateparser.php" + function yy_r110(){ $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 2106 "smarty_internal_templateparser.php" +#line 374 "smarty_internal_templateparser.y" + function yy_r111(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']"; } +#line 2109 "smarty_internal_templateparser.php" +#line 378 "smarty_internal_templateparser.y" + function yy_r114(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]"; } +#line 2112 "smarty_internal_templateparser.php" #line 379 "smarty_internal_templateparser.y" - function yy_r96(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2108 "smarty_internal_templateparser.php" -#line 385 "smarty_internal_templateparser.y" - function yy_r97(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2111 "smarty_internal_templateparser.php" -#line 387 "smarty_internal_templateparser.y" - function yy_r98(){return; } -#line 2114 "smarty_internal_templateparser.php" -#line 391 "smarty_internal_templateparser.y" - function yy_r99(){ $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 2117 "smarty_internal_templateparser.php" -#line 392 "smarty_internal_templateparser.y" - function yy_r100(){ $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 2120 "smarty_internal_templateparser.php" -#line 395 "smarty_internal_templateparser.y" - function yy_r101(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']"; } -#line 2123 "smarty_internal_templateparser.php" + function yy_r115(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]"; } +#line 2115 "smarty_internal_templateparser.php" +#line 381 "smarty_internal_templateparser.y" + function yy_r116(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; } +#line 2118 "smarty_internal_templateparser.php" +#line 382 "smarty_internal_templateparser.y" + function yy_r117(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; } +#line 2121 "smarty_internal_templateparser.php" +#line 386 "smarty_internal_templateparser.y" + function yy_r119(){$this->_retvalue = ''; } +#line 2124 "smarty_internal_templateparser.php" +#line 394 "smarty_internal_templateparser.y" + function yy_r121(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2127 "smarty_internal_templateparser.php" +#line 396 "smarty_internal_templateparser.y" + function yy_r122(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } +#line 2130 "smarty_internal_templateparser.php" #line 399 "smarty_internal_templateparser.y" - function yy_r104(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]"; } -#line 2126 "smarty_internal_templateparser.php" -#line 400 "smarty_internal_templateparser.y" - function yy_r105(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]"; } -#line 2129 "smarty_internal_templateparser.php" -#line 402 "smarty_internal_templateparser.y" - function yy_r106(){ $this->_retvalue = '['.$this->compiler->compileTag('special_smarty_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; } -#line 2132 "smarty_internal_templateparser.php" -#line 403 "smarty_internal_templateparser.y" - function yy_r107(){ $this->_retvalue = '['.$this->compiler->compileTag('special_smarty_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; } -#line 2135 "smarty_internal_templateparser.php" -#line 407 "smarty_internal_templateparser.y" - function yy_r109(){$this->_retvalue = ''; } -#line 2138 "smarty_internal_templateparser.php" -#line 415 "smarty_internal_templateparser.y" - function yy_r111(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2141 "smarty_internal_templateparser.php" -#line 417 "smarty_internal_templateparser.y" - function yy_r112(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } -#line 2144 "smarty_internal_templateparser.php" -#line 420 "smarty_internal_templateparser.y" - function yy_r113(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2147 "smarty_internal_templateparser.php" -#line 425 "smarty_internal_templateparser.y" - function yy_r114(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('special_smarty_variable',$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;} else { + function yy_r123(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2133 "smarty_internal_templateparser.php" +#line 404 "smarty_internal_templateparser.y" + function yy_r124(){ 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 2151 "smarty_internal_templateparser.php" -#line 428 "smarty_internal_templateparser.y" - function yy_r115(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 2154 "smarty_internal_templateparser.php" -#line 430 "smarty_internal_templateparser.y" - function yy_r116(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2157 "smarty_internal_templateparser.php" -#line 432 "smarty_internal_templateparser.y" - function yy_r117(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2160 "smarty_internal_templateparser.php" -#line 433 "smarty_internal_templateparser.y" - function yy_r118(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -#line 2163 "smarty_internal_templateparser.php" -#line 434 "smarty_internal_templateparser.y" - function yy_r119(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -#line 2166 "smarty_internal_templateparser.php" -#line 435 "smarty_internal_templateparser.y" - function yy_r120(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -#line 2169 "smarty_internal_templateparser.php" -#line 437 "smarty_internal_templateparser.y" - function yy_r121(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2172 "smarty_internal_templateparser.php" -#line 443 "smarty_internal_templateparser.y" - function yy_r122(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) { +#line 2137 "smarty_internal_templateparser.php" +#line 407 "smarty_internal_templateparser.y" + function yy_r125(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2140 "smarty_internal_templateparser.php" +#line 409 "smarty_internal_templateparser.y" + function yy_r126(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2143 "smarty_internal_templateparser.php" +#line 411 "smarty_internal_templateparser.y" + function yy_r127(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2146 "smarty_internal_templateparser.php" +#line 412 "smarty_internal_templateparser.y" + function yy_r128(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } +#line 2149 "smarty_internal_templateparser.php" +#line 413 "smarty_internal_templateparser.y" + function yy_r129(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } +#line 2152 "smarty_internal_templateparser.php" +#line 414 "smarty_internal_templateparser.y" + function yy_r130(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } +#line 2155 "smarty_internal_templateparser.php" +#line 416 "smarty_internal_templateparser.y" + function yy_r131(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2158 "smarty_internal_templateparser.php" +#line 422 "smarty_internal_templateparser.y" + function yy_r132(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) { if ($this->yystack[$this->yyidx + -3]->minor == 'isset' || $this->yystack[$this->yyidx + -3]->minor == 'empty' || $this->yystack[$this->yyidx + -3]->minor == 'array' || is_callable($this->yystack[$this->yyidx + -3]->minor)) { $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")"; } else { $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\""); } } } -#line 2181 "smarty_internal_templateparser.php" -#line 454 "smarty_internal_templateparser.y" - function yy_r123(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")"; } -#line 2184 "smarty_internal_templateparser.php" -#line 458 "smarty_internal_templateparser.y" - function yy_r124(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor; } -#line 2187 "smarty_internal_templateparser.php" -#line 462 "smarty_internal_templateparser.y" - function yy_r126(){ return; } -#line 2190 "smarty_internal_templateparser.php" -#line 467 "smarty_internal_templateparser.y" - function yy_r127(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor,'false'); } -#line 2193 "smarty_internal_templateparser.php" +#line 2167 "smarty_internal_templateparser.php" +#line 433 "smarty_internal_templateparser.y" + function yy_r133(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")"; } +#line 2170 "smarty_internal_templateparser.php" +#line 437 "smarty_internal_templateparser.y" + function yy_r134(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor; } +#line 2173 "smarty_internal_templateparser.php" +#line 441 "smarty_internal_templateparser.y" + function yy_r136(){ return; } +#line 2176 "smarty_internal_templateparser.php" +#line 446 "smarty_internal_templateparser.y" + function yy_r137(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } +#line 2179 "smarty_internal_templateparser.php" +#line 459 "smarty_internal_templateparser.y" + function yy_r139(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 2182 "smarty_internal_templateparser.php" +#line 463 "smarty_internal_templateparser.y" + function yy_r141(){$this->_retvalue = ','.$this->yystack[$this->yyidx + 0]->minor; } +#line 2185 "smarty_internal_templateparser.php" +#line 464 "smarty_internal_templateparser.y" + function yy_r142(){$this->_retvalue = ',\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } +#line 2188 "smarty_internal_templateparser.php" #line 468 "smarty_internal_templateparser.y" - function yy_r128(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor,'true'); } -#line 2196 "smarty_internal_templateparser.php" + function yy_r143(){$this->_retvalue =$this->yystack[$this->yyidx + 0]->minor; } +#line 2191 "smarty_internal_templateparser.php" +#line 469 "smarty_internal_templateparser.y" + function yy_r144(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2194 "smarty_internal_templateparser.php" +#line 470 "smarty_internal_templateparser.y" + function yy_r145(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2197 "smarty_internal_templateparser.php" +#line 471 "smarty_internal_templateparser.y" + function yy_r146(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2200 "smarty_internal_templateparser.php" +#line 472 "smarty_internal_templateparser.y" + function yy_r147(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2203 "smarty_internal_templateparser.php" +#line 473 "smarty_internal_templateparser.y" + function yy_r148(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2206 "smarty_internal_templateparser.php" +#line 474 "smarty_internal_templateparser.y" + function yy_r149(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2209 "smarty_internal_templateparser.php" +#line 475 "smarty_internal_templateparser.y" + function yy_r150(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2212 "smarty_internal_templateparser.php" +#line 476 "smarty_internal_templateparser.y" + function yy_r151(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } +#line 2215 "smarty_internal_templateparser.php" +#line 482 "smarty_internal_templateparser.y" + function yy_r157(){$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 2218 "smarty_internal_templateparser.php" #line 484 "smarty_internal_templateparser.y" - function yy_r131(){$this->_retvalue = ','.$this->yystack[$this->yyidx + 0]->minor; } -#line 2199 "smarty_internal_templateparser.php" + function yy_r158(){$this->_retvalue = '=='; } +#line 2221 "smarty_internal_templateparser.php" #line 485 "smarty_internal_templateparser.y" - function yy_r132(){$this->_retvalue = ',\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } -#line 2202 "smarty_internal_templateparser.php" + function yy_r159(){$this->_retvalue = '!='; } +#line 2224 "smarty_internal_templateparser.php" +#line 486 "smarty_internal_templateparser.y" + function yy_r160(){$this->_retvalue = '>'; } +#line 2227 "smarty_internal_templateparser.php" +#line 487 "smarty_internal_templateparser.y" + function yy_r161(){$this->_retvalue = '<'; } +#line 2230 "smarty_internal_templateparser.php" +#line 488 "smarty_internal_templateparser.y" + function yy_r162(){$this->_retvalue = '>='; } +#line 2233 "smarty_internal_templateparser.php" +#line 489 "smarty_internal_templateparser.y" + function yy_r163(){$this->_retvalue = '<='; } +#line 2236 "smarty_internal_templateparser.php" +#line 490 "smarty_internal_templateparser.y" + function yy_r164(){$this->_retvalue = '==='; } +#line 2239 "smarty_internal_templateparser.php" +#line 491 "smarty_internal_templateparser.y" + function yy_r165(){$this->_retvalue = '!=='; } +#line 2242 "smarty_internal_templateparser.php" #line 492 "smarty_internal_templateparser.y" - function yy_r134(){$this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2205 "smarty_internal_templateparser.php" -#line 497 "smarty_internal_templateparser.y" - function yy_r136(){$this->_retvalue =$this->yystack[$this->yyidx + 0]->minor; } -#line 2208 "smarty_internal_templateparser.php" -#line 499 "smarty_internal_templateparser.y" - function yy_r137(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2211 "smarty_internal_templateparser.php" -#line 500 "smarty_internal_templateparser.y" - function yy_r138(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2214 "smarty_internal_templateparser.php" + function yy_r166(){$this->_retvalue = '%'; } +#line 2245 "smarty_internal_templateparser.php" +#line 494 "smarty_internal_templateparser.y" + function yy_r167(){$this->_retvalue = '&&'; } +#line 2248 "smarty_internal_templateparser.php" +#line 495 "smarty_internal_templateparser.y" + function yy_r168(){$this->_retvalue = '||'; } +#line 2251 "smarty_internal_templateparser.php" +#line 496 "smarty_internal_templateparser.y" + function yy_r169(){$this->_retvalue = ' XOR '; } +#line 2254 "smarty_internal_templateparser.php" #line 501 "smarty_internal_templateparser.y" - function yy_r139(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2217 "smarty_internal_templateparser.php" + function yy_r170(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } +#line 2257 "smarty_internal_templateparser.php" #line 503 "smarty_internal_templateparser.y" - function yy_r141(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2220 "smarty_internal_templateparser.php" + function yy_r172(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } +#line 2260 "smarty_internal_templateparser.php" #line 504 "smarty_internal_templateparser.y" - function yy_r142(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2223 "smarty_internal_templateparser.php" + function yy_r173(){ return; } +#line 2263 "smarty_internal_templateparser.php" #line 505 "smarty_internal_templateparser.y" - function yy_r143(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2226 "smarty_internal_templateparser.php" + function yy_r174(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2266 "smarty_internal_templateparser.php" #line 506 "smarty_internal_templateparser.y" - function yy_r144(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2229 "smarty_internal_templateparser.php" -#line 507 "smarty_internal_templateparser.y" - function yy_r145(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2232 "smarty_internal_templateparser.php" -#line 508 "smarty_internal_templateparser.y" - function yy_r146(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2235 "smarty_internal_templateparser.php" -#line 514 "smarty_internal_templateparser.y" - function yy_r152(){$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 2238 "smarty_internal_templateparser.php" + function yy_r175(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } +#line 2269 "smarty_internal_templateparser.php" +#line 515 "smarty_internal_templateparser.y" + function yy_r179(){$this->_retvalue = '".'.$this->yystack[$this->yyidx + -1]->minor.'."'; $this->compiler->has_variable_string = true; } +#line 2272 "smarty_internal_templateparser.php" #line 516 "smarty_internal_templateparser.y" - function yy_r153(){$this->_retvalue = '=='; } -#line 2241 "smarty_internal_templateparser.php" + function yy_r180(){$this->_retvalue = '".('.$this->yystack[$this->yyidx + -1]->minor.')."'; $this->compiler->has_variable_string = true; } +#line 2275 "smarty_internal_templateparser.php" #line 517 "smarty_internal_templateparser.y" - function yy_r154(){$this->_retvalue = '!='; } -#line 2244 "smarty_internal_templateparser.php" -#line 518 "smarty_internal_templateparser.y" - function yy_r155(){$this->_retvalue = '>'; } -#line 2247 "smarty_internal_templateparser.php" + function yy_r181(){$this->_retvalue = '".'.'$_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; $this->compiler->has_variable_string = true; } +#line 2278 "smarty_internal_templateparser.php" #line 519 "smarty_internal_templateparser.y" - function yy_r156(){$this->_retvalue = '<'; } -#line 2250 "smarty_internal_templateparser.php" + function yy_r183(){ $this->_retvalue = '".('.$this->yystack[$this->yyidx + -1]->minor.')."'; $this->compiler->has_variable_string = true; } +#line 2281 "smarty_internal_templateparser.php" #line 520 "smarty_internal_templateparser.y" - function yy_r157(){$this->_retvalue = '>='; } -#line 2253 "smarty_internal_templateparser.php" -#line 521 "smarty_internal_templateparser.y" - function yy_r158(){$this->_retvalue = '<='; } -#line 2256 "smarty_internal_templateparser.php" -#line 522 "smarty_internal_templateparser.y" - function yy_r159(){$this->_retvalue = '==='; } -#line 2259 "smarty_internal_templateparser.php" -#line 523 "smarty_internal_templateparser.y" - function yy_r160(){$this->_retvalue = '!=='; } -#line 2262 "smarty_internal_templateparser.php" -#line 524 "smarty_internal_templateparser.y" - function yy_r161(){$this->_retvalue = '%'; } -#line 2265 "smarty_internal_templateparser.php" -#line 526 "smarty_internal_templateparser.y" - function yy_r162(){$this->_retvalue = '&&'; } -#line 2268 "smarty_internal_templateparser.php" -#line 527 "smarty_internal_templateparser.y" - function yy_r163(){$this->_retvalue = '||'; } -#line 2271 "smarty_internal_templateparser.php" -#line 528 "smarty_internal_templateparser.y" - function yy_r164(){$this->_retvalue = ' XOR '; } -#line 2274 "smarty_internal_templateparser.php" -#line 533 "smarty_internal_templateparser.y" - function yy_r165(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2277 "smarty_internal_templateparser.php" -#line 535 "smarty_internal_templateparser.y" - function yy_r167(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } -#line 2280 "smarty_internal_templateparser.php" -#line 536 "smarty_internal_templateparser.y" - function yy_r168(){ return; } -#line 2283 "smarty_internal_templateparser.php" -#line 537 "smarty_internal_templateparser.y" - function yy_r169(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2286 "smarty_internal_templateparser.php" -#line 538 "smarty_internal_templateparser.y" - function yy_r170(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2289 "smarty_internal_templateparser.php" -#line 547 "smarty_internal_templateparser.y" - function yy_r174(){$this->_retvalue = '".'.$this->yystack[$this->yyidx + -1]->minor.'."'; $this->compiler->has_variable_string = true; } -#line 2292 "smarty_internal_templateparser.php" -#line 548 "smarty_internal_templateparser.y" - function yy_r175(){$this->_retvalue = '".'.'$_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; $this->compiler->has_variable_string = true; } -#line 2295 "smarty_internal_templateparser.php" -#line 550 "smarty_internal_templateparser.y" - function yy_r177(){ $this->_retvalue = '".('.$this->yystack[$this->yyidx + -1]->minor.')."'; $this->compiler->has_variable_string = true; } -#line 2298 "smarty_internal_templateparser.php" -#line 551 "smarty_internal_templateparser.y" - function yy_r178(){ $this->prefix_number++; $this->compiler->prefix_code[] = ''.$this->yystack[$this->yyidx + 0]->minor.'prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '".$_tmp'.$this->prefix_number.'."'; $this->compiler->has_variable_string = true; } -#line 2301 "smarty_internal_templateparser.php" + function yy_r184(){ $this->prefix_number++; $this->compiler->prefix_code[] = ''.$this->yystack[$this->yyidx + 0]->minor.'prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '".$_tmp'.$this->prefix_number.'."'; $this->compiler->has_variable_string = true; } +#line 2284 "smarty_internal_templateparser.php" private $_retvalue; @@ -2360,12 +2343,12 @@ static public $yy_action = array( function yy_syntax_error($yymajor, $TOKEN) { -#line 60 "smarty_internal_templateparser.y" +#line 71 "smarty_internal_templateparser.y" $this->internalError = true; $this->yymajor = $yymajor; $this->compiler->trigger_template_error(); -#line 2364 "smarty_internal_templateparser.php" +#line 2347 "smarty_internal_templateparser.php" } function yy_accept() @@ -2376,13 +2359,13 @@ static public $yy_action = array( while ($this->yyidx >= 0) { $stack = $this->yy_pop_parser_stack(); } -#line 52 "smarty_internal_templateparser.y" +#line 63 "smarty_internal_templateparser.y" $this->successful = !$this->internalError; $this->internalError = false; $this->retvalue = $this->_retvalue; //echo $this->retvalue."\n\n"; -#line 2382 "smarty_internal_templateparser.php" +#line 2365 "smarty_internal_templateparser.php" } function doParse($yymajor, $yytokenvalue) diff --git a/libs/sysplugins/smarty_method_register_block.php b/libs/sysplugins/smarty_method_register_block.php index c2bf1cbd..466f8c39 100644 --- a/libs/sysplugins/smarty_method_register_block.php +++ b/libs/sysplugins/smarty_method_register_block.php @@ -23,13 +23,13 @@ */ function Smarty_Method_Register_Block($smarty, $block_tag, $block_impl, $cacheable = true, $cache_attr = array()) { - if (isset($smarty->registered_plugins[$block_tag])) { + if (isset($smarty->registered_plugins['block'][$block_tag])) { throw new Exception("Plugin tag \"{$block_tag}\" already registered"); } elseif (!is_callable($block_impl)) { throw new Exception("Plugin \"{$block_tag}\" not callable"); } else { - $smarty->registered_plugins[$block_tag] = - array('block', $block_impl, $cacheable, $cache_attr); + $smarty->registered_plugins['block'][$block_tag] = + array($block_impl, $cacheable, $cache_attr); } } diff --git a/libs/sysplugins/smarty_method_register_compiler_function.php b/libs/sysplugins/smarty_method_register_compiler_function.php index 5d747441..b338504c 100644 --- a/libs/sysplugins/smarty_method_register_compiler_function.php +++ b/libs/sysplugins/smarty_method_register_compiler_function.php @@ -22,13 +22,13 @@ */ function Smarty_Method_Register_Compiler_Function($smarty, $compiler_tag, $compiler_impl, $cacheable = true) { - if (isset($smarty->registered_plugins[$compiler_tag])) { + if (isset($smarty->registered_plugins['compiler'][$compiler_tag])) { throw new Exception("Plugin tag \"{$compiler_tag}\" already registered"); } elseif (!is_callable($compiler_impl)) { throw new Exception("Plugin \"{$compiler_tag}\" not callable"); } else { - $smarty->registered_plugins[$compiler_tag] = - array('compiler', $compiler_impl, $cacheable); + $smarty->registered_plugins['compiler'][$compiler_tag] = + array($compiler_impl, $cacheable); } } diff --git a/libs/sysplugins/smarty_method_register_function.php b/libs/sysplugins/smarty_method_register_function.php index ceb80487..fbdb7815 100644 --- a/libs/sysplugins/smarty_method_register_function.php +++ b/libs/sysplugins/smarty_method_register_function.php @@ -20,13 +20,13 @@ */ function Smarty_Method_Register_Function($smarty, $function_tag, $function_impl, $cacheable = true, $cache_attr = array()) { - if (isset($smarty->registered_plugins[$function_tag])) { + if (isset($smarty->registered_plugins['function'][$function_tag])) { throw new Exception("Plugin tag \"{$function_tag}\" already registered"); } elseif (!is_callable($function_impl)) { throw new Exception("Plugin \"{$function_tag}\" not callable"); } else { - $smarty->registered_plugins[$function_tag] = - array('function', $function_impl, $cacheable, $cache_attr); + $smarty->registered_plugins['function'][$function_tag] = + array($function_impl, $cacheable, $cache_attr); } } diff --git a/libs/sysplugins/smarty_method_register_modifier.php b/libs/sysplugins/smarty_method_register_modifier.php index 7d9986c7..022f4f30 100644 --- a/libs/sysplugins/smarty_method_register_modifier.php +++ b/libs/sysplugins/smarty_method_register_modifier.php @@ -19,13 +19,13 @@ */ function Smarty_Method_Register_Modifier($smarty, $modifier, $modifier_impl) { - if (isset($smarty->registered_plugins[$modifier])) { + if (isset($smarty->registered_plugins['modifier'][$modifier])) { throw new Exception("Plugin \"{$modifier}\" already registered"); } elseif (!is_callable($modifier_impl)) { throw new Exception("Plugin \"{$modifier}\" not callable"); } else { - $smarty->registered_plugins[$modifier] = - array('modifier', $modifier_impl); + $smarty->registered_plugins['modifier'][$modifier] = + array($modifier_impl); } } ?> diff --git a/libs/sysplugins/smarty_method_unregister_block.php b/libs/sysplugins/smarty_method_unregister_block.php index 2b6867a5..d1fecb7b 100644 --- a/libs/sysplugins/smarty_method_unregister_block.php +++ b/libs/sysplugins/smarty_method_unregister_block.php @@ -21,8 +21,8 @@ */ function Smarty_Method_Unregister_Block($smarty, $block_tag) { - if (isset($smarty->registered_plugins[$block_tag]) && $smarty->registered_plugins[$block_tag][0] == 'block') { - unset($smarty->registered_plugins[$block_tag]); + if (isset($smarty->registered_plugins['block'][$block_tag])) { + unset($smarty->registered_plugins['block'][$block_tag]); } } diff --git a/libs/sysplugins/smarty_method_unregister_compiler_function.php b/libs/sysplugins/smarty_method_unregister_compiler_function.php index 3769b030..049214b4 100644 --- a/libs/sysplugins/smarty_method_unregister_compiler_function.php +++ b/libs/sysplugins/smarty_method_unregister_compiler_function.php @@ -21,8 +21,8 @@ */ function Smarty_Method_Unregister_Compiler_Function($smarty, $compiler_tag) { - if (isset($smarty->registered_plugins[$compiler_tag]) && $smarty->registered_plugins[$compiler_tag][0] == 'compiler') { - unset($smarty->registered_plugins[$compiler_tag]); + if (isset($smarty->registered_plugins['compiler'][$compiler_tag])) { + unset($smarty->registered_plugins['compiler'][$compiler_tag]); } } diff --git a/libs/sysplugins/smarty_method_unregister_function.php b/libs/sysplugins/smarty_method_unregister_function.php index 99c0d43a..f91b9bb9 100644 --- a/libs/sysplugins/smarty_method_unregister_function.php +++ b/libs/sysplugins/smarty_method_unregister_function.php @@ -21,8 +21,8 @@ */ function Smarty_Method_Unregister_Function($smarty, $function_tag) { - if (isset($smarty->registered_plugins[$function_tag]) && $smarty->registered_plugins[$function_tag][0] == 'function') { - unset($smarty->registered_plugins[$function_tag]); + if (isset($smarty->registered_plugins['function'][$function_tag])) { + unset($smarty->registered_plugins['function'][$function_tag]); } } diff --git a/libs/sysplugins/smarty_method_unregister_modifier.php b/libs/sysplugins/smarty_method_unregister_modifier.php index 84c78fca..46191c9f 100644 --- a/libs/sysplugins/smarty_method_unregister_modifier.php +++ b/libs/sysplugins/smarty_method_unregister_modifier.php @@ -21,8 +21,8 @@ */ function Smarty_Method_Unregister_Modifier($smarty, $modifier) { - if (isset($smarty->registered_plugins[$modifier]) && $smarty->registered_plugins[$modifier][0] == 'modifier') { - unset($smarty->registered_plugins[$modifier]); + if (isset($smarty->registered_plugins['modifier'][$modifier])) { + unset($smarty->registered_plugins['modifier'][$modifier]); } }