From 98c1dd29cd8f21e528e8c6177427c17b06405bcb Mon Sep 17 00:00:00 2001 From: "Uwe.Tews@googlemail.com" Date: Sat, 24 Aug 2013 18:46:31 +0000 Subject: [PATCH] - bugfix and enhancement Because several recent problems with template inheritance the {block} tag compiler has been rewriten - Error messages shown now the correct child template file and line number - The compiler could fail on some larger UTF-8 text block (forum topic 24455} - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289} - change SmartyException::$escape is now false by default - change PHP traceback has been remove for SmartyException and SmartyCompilerException --- change_log.txt | 9 + libs/Smarty.class.php | 12 +- .../smarty_internal_compile_block.php | 417 +- .../smarty_internal_compile_break.php | 1 - .../smarty_internal_compile_continue.php | 1 - .../smarty_internal_compile_extends.php | 165 +- .../smarty_internal_compile_function.php | 1 - .../smarty_internal_compile_include.php | 222 +- .../smarty_internal_compile_nocache.php | 9 +- libs/sysplugins/smarty_internal_debug.php | 55 +- .../smarty_internal_resource_extends.php | 134 +- ...smarty_internal_smartytemplatecompiler.php | 4 + libs/sysplugins/smarty_internal_template.php | 13 +- .../smarty_internal_templatebase.php | 6 - .../smarty_internal_templatecompilerbase.php | 1491 ++++--- .../smarty_internal_templatelexer.php | 824 ++-- .../smarty_internal_templateparser.php | 3759 ++++++++--------- libs/sysplugins/smarty_internal_utility.php | 1646 ++++---- 18 files changed, 4577 insertions(+), 4192 deletions(-) diff --git a/change_log.txt b/change_log.txt index 3384d282..11386f01 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,4 +1,13 @@ ===== trunk ===== +24.08.2013 +- bugfix and enhancement + Because several recent problems with template inheritance the {block} tag compiler has been rewriten + - Error messages shown now the correct child template file and line number + - The compiler could fail on some larger UTF-8 text block (forum topic 24455} + - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289} +- change SmartyException::$escape is now false by default +- change PHP traceback has been remove for SmartyException and SmartyCompilerException + 14.08.2013 - bugfix compiled filepath of config file did not observe different config_dir (forum topic 24493) diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php index 030c3392..294e662c 100644 --- a/libs/Smarty.class.php +++ b/libs/Smarty.class.php @@ -1510,10 +1510,11 @@ if (Smarty::$_CHARSET !== 'UTF-8') { */ class SmartyException extends Exception { - public static $escape = true; - public function __construct($message) + public static $escape = false; + + public function __toString() { - $this->message = self::$escape ? htmlentities($message) : $message; + return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; } } @@ -1523,6 +1524,11 @@ class SmartyException extends Exception */ class SmartyCompilerException extends SmartyException { + public function __toString() + { + return ' --> Smarty Compiler: ' . $this->message . ' <-- '; + } + } /** diff --git a/libs/sysplugins/smarty_internal_compile_block.php b/libs/sysplugins/smarty_internal_compile_block.php index 265ddad9..ea62d98b 100644 --- a/libs/sysplugins/smarty_internal_compile_block.php +++ b/libs/sysplugins/smarty_internal_compile_block.php @@ -18,6 +18,8 @@ */ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { + + const parent = '____SMARTY_BLOCK_PARENT____'; /** * Attribute definition: Overwrites base class. * @@ -32,7 +34,7 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase * @var array * @see Smarty_Internal_CompileBase */ - public $shorttag_order = array('name', 'hide'); + public $shorttag_order = array('name'); /** * Attribute definition: Overwrites base class. @@ -40,7 +42,28 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase * @var array * @see Smarty_Internal_CompileBase */ - public $optional_attributes = array('hide'); + public $option_flags = array('hide', 'append', 'prepend', 'nocache'); + + /** + * Attribute definition: Overwrites base class. + * + * @var array + * @see Smarty_Internal_CompileBase + */ + public $optional_attributes = array('internal_file', 'internal_uid', 'internal_line'); + /** + * nested child block names + * + * @var array + */ + public static $nested_block_names = array(); + + /** + * child block source buffer + * + * @var array + */ + public static $block_data = array(); /** * Compiles code for the {block} tag @@ -53,15 +76,37 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { // check and get attributes $_attr = $this->getAttributes($compiler, $args); - $save = array($_attr, $compiler->parser->current_buffer, $compiler->nocache, $compiler->smarty->merge_compiled_includes, $compiler->merged_templates, $compiler->smarty->merged_templates_func, $compiler->template->properties, $compiler->template->has_nocache_code); - $this->openTag($compiler, 'block', $save); - if ($_attr['nocache'] == true) { - $compiler->nocache = true; + $_name = trim($_attr['name'], "\"'"); + + // check if we process an inheritance child template + if ($compiler->inheritance_child) { + array_unshift(self::$nested_block_names, $_name); + $this->template->block_data[$_name]['source'] = ''; + // build {block} for child block + self::$block_data[$_name]['source'] = + "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}'" . + " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}"; + if ($_attr['nocache']) { + self::$block_data[$_name]['source'] .= ' nocache'; + } + self::$block_data[$_name]['source'] .= $compiler->smarty->right_delimiter; + + $save = array($_attr, $compiler->inheritance); + $this->openTag($compiler, 'block', $save); + // set flag for {block} tag + $compiler->inheritance = true; + $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); + $compiler->has_code = false; + return; } - // set flag for {block} tag - $compiler->inheritance = true; // must merge includes - $compiler->smarty->merge_compiled_includes = true; + if ($_attr['nocache'] == true) { + $compiler->tag_nocache = true; + } + $save = array($_attr, $compiler->inheritance, $compiler->parser->current_buffer, $compiler->nocache); + $this->openTag($compiler, 'block', $save); + $compiler->inheritance = true; + $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser); $compiler->has_code = false; @@ -69,167 +114,69 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase return true; } - /** - * Save or replace child block source by block name during parsing - * - * @param string $block_content block source content - * @param string $block_tag opening block tag - * @param object $template template object - * @param string $filepath filepath of template source - */ - static function saveBlockData($block_content, $block_tag, $template, $filepath) - { - $nesting = array(); - $hide_level = 0; - $child_flag = false; - $_rdl = preg_quote($template->smarty->right_delimiter); - $_ldl = preg_quote($template->smarty->left_delimiter); - if (!$template->smarty->auto_literal) { - $al = '\s*'; - } else { - $al = ''; - } - if (0 == preg_match("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")(\s*?)?((append|prepend|nocache)?(\s*)?(hide)?)?(\s*{$_rdl})!", $block_tag, $_match)) { - $error_text = 'Syntax Error in template "' . $template->source->filepath . '" "' . $block_tag . '" illegal options'; - throw new SmartyCompilerException($error_text); - } else { - $_name = trim($_match[3], '\'"'); - // replace {$smarty.block.child} - // get nested block tags - preg_match_all("%({$_ldl}{$al}block\s+)(name=)?(\w+|'.*?'|\".*?\")([\s\S]*?)(hide)?(\s*{$_rdl})|({$_ldl}{$al}/block\s*{$_rdl})|({$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl})|({$_ldl}|{$_rdl})|([\s\S]*?(?=({$_ldl}|{$_rdl})))%", $block_tag . $block_content . "{$template->smarty->left_delimiter}/block{$template->smarty->right_delimiter}", $_match2); - $block_content = ''; - foreach ($_match2[0] as $key => $text) { - // {block} tag - if (!empty($_match2[3][$key])) { - $name = trim($_match2[3][$key], '\'"'); - array_push($nesting, array($name, $block_content, $child_flag)); - $block_content = ''; - // hide option - if (!empty($_match2[5][$key]) && $hide_level == 0 && !isset($template->block_data[$name])) { - $hide_level = count($nesting); - } - continue; - } - // {/block} tag - if (!empty($_match2[7][$key])) { - list($name, $content, $cf) = array_pop($nesting); - if (isset($template->block_data[$name]) && !$child_flag) { - if ($template->block_data[$name]['mode'] == 'prepend') { - $block_content = $content . $template->block_data[$name]['source'] . $block_content; - } elseif ($template->block_data[$name]['mode'] == 'append') { - $block_content = $content . $block_content . $template->block_data[$name]['source']; - } else { - // check if {$smarty.block.parent} will be later replaced - if (strpos($template->block_data[$name]['source'], '%%%%SMARTY_PARENT%%%%') === false) { - $block_content = $content . $template->block_data[$name]['source']; - } - } - } else { - $block_content = $content . $block_content; - $cf = true; - } - $child_flag = $cf; - if (count($nesting) < $hide_level) { - $hide_level = 0; - } - continue; - } - // hide option active - if ($hide_level && $hide_level <= count($nesting)) { - continue; - } - // {$smarty.block.child} tag - if (!empty($_match2[8][$key])) { - list($name, $content, $cf) = end($nesting); - if (isset($template->block_data[$name])) { - $child_flag = true; - $block_content .= $template->block_data[$name]['source']; - } - continue; - } - $block_content .= $_match2[0][$key]; - - } - // $block_content = preg_replace_callback("%({$_ldl}{$al}block\s+)(name=)?(\w+|'.*?'|\".*?\")([\s\S]*?)(hide)?(\s*{$_rdl})|({$_ldl}{$al}/block\s*{$_rdl})|({$_ldl}{$al}\\\$smarty\.block\.child\s*{$_rdl})|({$_ldl}|{$_rdl})|([\s\S]*?(?=({$_ldl}|{$_rdl})))%", array('Smarty_Internal_Compile_Block', 'replaceBlockChild'), $block_tag.$block_content."{$template->smarty->left_delimiter}/block{$template->smarty->right_delimiter}"); - if (isset($template->block_data[$_name])) { - if (strpos($template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) { - $template->block_data[$_name]['source'] = - str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $template->block_data[$_name]['source']); - } elseif ($template->block_data[$_name]['mode'] == 'prepend') { - $template->block_data[$_name]['source'] .= $block_content; - } elseif ($template->block_data[$_name]['mode'] == 'append') { - $template->block_data[$_name]['source'] = $block_content . $template->block_data[$_name]['source']; - } - } else { - $template->block_data[$_name]['source'] = $block_content; - $template->block_data[$_name]['file'] = $filepath; - } - if ($child_flag) { - $template->block_data[$_name]['source'] = $block_content; - $template->block_data[$_name]['file'] = $filepath; - } - if ($_match[6] == 'append') { - $template->block_data[$_name]['mode'] = 'append'; - } elseif ($_match[6] == 'prepend') { - $template->block_data[$_name]['mode'] = 'prepend'; - } else { - $template->block_data[$_name]['mode'] = 'replace'; - } - } - } /** * Compile saved child block source * * @param object $compiler compiler object * @param string $_name optional name of child block - * @return string compiled code of schild block + * @return string compiled code of child block */ static function compileChildBlock($compiler, $_name = null) { - $_output = ''; + if ($compiler->inheritance_child) { + $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; + if (isset($compiler->template->block_data[$name1])) { + // replace inner block name with generic + Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= $compiler->template->block_data[$name1]['source']; + Smarty_Internal_Compile_Block::$block_data[$name1]['child'] = true; + } + $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); + $compiler->has_code = false; + return; + } // if called by {$smarty.block.child} we must search the name of enclosing {block} if ($_name == null) { $stack_count = count($compiler->_tag_stack); while (--$stack_count >= 0) { if ($compiler->_tag_stack[$stack_count][0] == 'block') { - $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "'\""); + $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'"); break; } } - // flag that child is already compile by {$smarty.block.child} inclusion - $compiler->template->block_data[$_name]['compiled'] = true; } if ($_name == null) { - $compiler->trigger_template_error('{$smarty.block.child} used out of context', $compiler->lex->taglineno); + $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', $compiler->lex->taglineno); } // undefined child? if (!isset($compiler->template->block_data[$_name]['source'])) { + $compiler->popTrace(); return ''; } + // flag that child is already compile by {$smarty.block.child} inclusion + $compiler->template->block_data[$_name]['compiled'] = true; $_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime); + if ($compiler->smarty->debugging) { + Smarty_Internal_Debug::ignore($_tpl); + } $_tpl->variable_filters = $compiler->template->variable_filters; $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; - $_tpl->source->filepath = $compiler->template->block_data[$_name]['file']; $_tpl->allow_relative_path = true; - if ($compiler->nocache) { - $_tpl->compiler->forceNocache = 2; - } else { - $_tpl->compiler->forceNocache = 1; - } + $_tpl->compiler->inheritance = true; $_tpl->compiler->suppressHeader = true; $_tpl->compiler->suppressFilter = true; $_tpl->compiler->suppressTemplatePropertyHeader = true; $_tpl->compiler->suppressMergedTemplates = true; - if (strpos($compiler->template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) { - $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl)); + $nocache = $compiler->nocache || $compiler->tag_nocache; + if (strpos($compiler->template->block_data[$_name]['source'], self::parent) !== false) { + $_output = str_replace(self::parent, $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl, $nocache)); } elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') { - $_output = $_tpl->compiler->compileTemplate($_tpl) . $compiler->parser->current_buffer->to_smarty_php(); + $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache) . $compiler->parser->current_buffer->to_smarty_php(); } elseif ($compiler->template->block_data[$_name]['mode'] == 'append') { - $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl); + $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl, $nocache); } elseif (!empty($compiler->template->block_data[$_name])) { - $_output = $_tpl->compiler->compileTemplate($_tpl); + $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache); } $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']); $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']); @@ -251,12 +198,55 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase } } unset($_tpl); - + $compiler->has_code = true; return $_output; } + /** + * Compile $smarty.block.parent + * + * @param object $compiler compiler object + * @param string $_name optional name of child block + * @return string compiled code of schild block + */ + static function compileParentBlock($compiler, $_name = null) + { + // if called by {$smarty.block.parent} we must search the name of enclosing {block} + if ($_name == null) { + $stack_count = count($compiler->_tag_stack); + while (--$stack_count >= 0) { + if ($compiler->_tag_stack[$stack_count][0] == 'block') { + $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'"); + break; + } + } + } + if ($_name == null) { + $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', $compiler->lex->taglineno); + } + if (empty(Smarty_Internal_Compile_Block::$nested_block_names)) { + $compiler->trigger_template_error(' illegal {$smarty.block.parent} in parent template ', $compiler->lex->taglineno); + } + Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= Smarty_Internal_Compile_Block::parent; + $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); + $compiler->has_code = false; + return; + } + + /** + * Process block source + * + * @param string $source source text + * @return '' + */ + static function blockSource($compiler, $source) + { + Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source; + } + } + /** * Smarty Internal Plugin Compile BlockClose Class * @@ -279,19 +269,63 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase $_attr = $this->getAttributes($compiler, $args); $saved_data = $this->closeTag($compiler, array('block')); $_name = trim($saved_data[0]['name'], "\"'"); + // reset flag for {block} tag + $compiler->inheritance = $saved_data[1]; + // check if we process an inheritance child template + if ($compiler->inheritance_child) { + $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0]; + Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}"; + $level = count(Smarty_Internal_Compile_Block::$nested_block_names); + array_shift(Smarty_Internal_Compile_Block::$nested_block_names); + if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) { + $name2 = Smarty_Internal_Compile_Block::$nested_block_names[0]; + if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) { + if (isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child']) || !isset($compiler->template->block_data[$name1])) { + Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source']; + } else { + if ($compiler->template->block_data[$name1]['mode'] == 'append') { + Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source']; + } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') { + Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'] . Smarty_Internal_Compile_Block::$block_data[$name1]['source']; + } else { + Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source']; + } + } + } + unset(Smarty_Internal_Compile_Block::$block_data[$name1]); + $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK); + } else { + if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) { + if (isset($compiler->template->block_data[$name1]) && !isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child'])) { + if (strpos($compiler->template->block_data[$name1]['source'], Smarty_Internal_Compile_Block::parent) !== false) { + $compiler->template->block_data[$name1]['source'] = + str_replace(Smarty_Internal_Compile_Block::parent, Smarty_Internal_Compile_Block::$block_data[$name1]['source'], $compiler->template->block_data[$name1]['source']); + } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') { + $compiler->template->block_data[$name1]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source']; + } elseif ($compiler->template->block_data[$name1]['mode'] == 'append') { + $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source']; + } + } else { + $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source']; + } + $compiler->template->block_data[$name1]['mode'] = 'replace'; + if ($saved_data[0]['append']) { + $compiler->template->block_data[$name1]['mode'] = 'append'; + } + if ($saved_data[0]['prepend']) { + $compiler->template->block_data[$name1]['mode'] = 'prepend'; + } + } + unset(Smarty_Internal_Compile_Block::$block_data[$name1]); + $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); + } + $compiler->has_code = false; + return; + } if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) { - // restore to status before {block} tag as new subtemplate code of parent {block} is not needed - // TODO: Below code was disabled in 3.1.8 because of problems with {include} in nested {block} tags in child templates - // combined with append/prepend or $smarty.block.parent - // For later versions it should be checked under which conditions it could run for optimisation - // - //$compiler->merged_templates = $saved_data[4]; - //$compiler->smarty->merged_templates_func = $saved_data[5]; - //$compiler->template->properties = $saved_data[6]; - //$compiler->template->has_nocache_code = $saved_data[7]; $_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name); } else { - if (isset($saved_data[0]['hide']) && !isset($compiler->template->block_data[$_name]['source'])) { + if ($saved_data[0]['hide'] && !isset($compiler->template->block_data[$_name]['source'])) { $_output = ''; } else { $_output = $compiler->parser->current_buffer->to_smarty_php(); @@ -299,15 +333,96 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase unset($compiler->template->block_data[$_name]['compiled']); } // reset flags - $compiler->parser->current_buffer = $saved_data[1]; - $compiler->nocache = $saved_data[2]; - $compiler->smarty->merge_compiled_includes = $saved_data[3]; - // reset flag for {block} tag - $compiler->inheritance = false; + $compiler->parser->current_buffer = $saved_data[2]; + if ($compiler->nocache) { + $compiler->tag_nocache = true; + } + $compiler->nocache = $saved_data[3]; // $_output content has already nocache code processed $compiler->suppressNocacheProcessing = true; return $_output; } - +} + +/** + * Smarty Internal Plugin Compile Child Block Class + * + * @package Smarty + * @subpackage Compiler + */ +class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase +{ + + /** + * Attribute definition: Overwrites base class. + * + * @var array + * @see Smarty_Internal_CompileBase + */ + public $required_attributes = array('name', 'file', 'uid', 'line'); + + + /** + * Compiles code for the {private_child_block} tag + * + * @param array $args array with attributes from parser + * @param object $compiler compiler object + * @return boolean true + */ + public function compile($args, $compiler) + { + // check and get attributes + $_attr = $this->getAttributes($compiler, $args); + + // must merge includes + if ($_attr['nocache'] == true) { + $compiler->tag_nocache = true; + } + $save = array($_attr, $compiler->nocache); + + // set trace back to child block + $compiler->pushTrace(trim($_attr['file'], "\"'"), trim($_attr['uid'], "\"'"), $_attr['line'] - $compiler->lex->line); + + $this->openTag($compiler, 'private_child_block', $save); + + $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; + $compiler->has_code = false; + + return true; + } +} + +/** + * Smarty Internal Plugin Compile Child Block Close Class + * + * @package Smarty + * @subpackage Compiler + */ +class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase +{ + + + /** + * Compiles code for the {/private_child_block} tag + * + * @param array $args array with attributes from parser + * @param object $compiler compiler object + * @return boolean true + */ + public function compile($args, $compiler) + { + // check and get attributes + $_attr = $this->getAttributes($compiler, $args); + + $saved_data = $this->closeTag($compiler, array('private_child_block')); + + // end of child block + $compiler->popTrace(); + + $compiler->nocache = $saved_data[1]; + $compiler->has_code = false; + + return true; + } } diff --git a/libs/sysplugins/smarty_internal_compile_break.php b/libs/sysplugins/smarty_internal_compile_break.php index 4ba9cc3c..5df51ba1 100644 --- a/libs/sysplugins/smarty_internal_compile_break.php +++ b/libs/sysplugins/smarty_internal_compile_break.php @@ -68,7 +68,6 @@ class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase if ($level_count != 0) { $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno); } - $compiler->has_code = true; return ""; } diff --git a/libs/sysplugins/smarty_internal_compile_continue.php b/libs/sysplugins/smarty_internal_compile_continue.php index 03095bf7..40c564a2 100644 --- a/libs/sysplugins/smarty_internal_compile_continue.php +++ b/libs/sysplugins/smarty_internal_compile_continue.php @@ -69,7 +69,6 @@ class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase if ($level_count != 0) { $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno); } - $compiler->has_code = true; return ""; } diff --git a/libs/sysplugins/smarty_internal_compile_extends.php b/libs/sysplugins/smarty_internal_compile_extends.php index 737d75c2..aa3d6df3 100644 --- a/libs/sysplugins/smarty_internal_compile_extends.php +++ b/libs/sysplugins/smarty_internal_compile_extends.php @@ -1,132 +1,87 @@ true, 'eval' => true); - $this->_rdl = preg_quote($compiler->smarty->right_delimiter); - $this->_ldl = preg_quote($compiler->smarty->left_delimiter); - if (!$compiler->smarty->auto_literal) { - $al = '\s*'; - } else { - $al = ''; - } - $filepath = $compiler->template->source->filepath; - $this->mbstring_overload = ini_get('mbstring.func_overload') & 2; // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); } - - $_smarty_tpl = $compiler->template; - $include_file = null; if (strpos($_attr['file'], '$_tmp') !== false) { $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno); } - eval('$include_file = ' . $_attr['file'] . ';'); - // create template object - $_template = new $compiler->smarty->template_class($include_file, $compiler->smarty, $compiler->template); - // save file dependency - if (isset($_is_stringy[$_template->source->type])) { - $template_sha1 = sha1($include_file); - } else { - $template_sha1 = sha1($_template->source->filepath); - } - if (isset($compiler->template->properties['file_dependency'][$template_sha1])) { - $compiler->trigger_template_error("illegal recursive call of \"{$include_file}\"", $compiler->lex->line - 1); - } - $compiler->template->properties['file_dependency'][$template_sha1] = array($_template->source->filepath, $_template->source->timestamp, $_template->source->type); - $_content = ($this->mbstring_overload ? mb_substr($compiler->lex->data, $compiler->lex->counter - 1, 20000000, 'latin1') : substr($compiler->lex->data, $compiler->lex->counter - 1)); - if (preg_match_all("!({$this->_ldl}{$al}block\s(.+?)\s*{$this->_rdl})!", $_content, $s) != - preg_match_all("!({$this->_ldl}{$al}/block\s*{$this->_rdl})!", $_content, $c)) { - $compiler->trigger_template_error('unmatched {block} {/block} pairs'); - } - preg_match_all("!{$this->_ldl}{$al}block\s(.+?)\s*{$this->_rdl}|{$this->_ldl}{$al}/block\s*{$this->_rdl}|{$this->_ldl}\*([\S\s]*?)\*{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE); - $_result_count = count($_result[0]); - $_start = 0; - while ($_start+1 < $_result_count) { - $_end = 0; - $_level = 1; - if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') { - $_start++; - continue; - } - while ($_level != 0) { - $_end++; - if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') { - continue; - } - if (!strpos($_result[0][$_start + $_end][0], '/')) { - $_level++; - } else { - $_level--; - } - } - $_block_content = str_replace($compiler->smarty->left_delimiter . '$smarty.block.parent' . $compiler->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%', - ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0])))); - Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $compiler->template, $filepath); - $_start = $_start + $_end + 1; - } - if ($_template->source->type == 'extends') { - $_template->block_data = $compiler->template->block_data; - } - $compiler->template->source->content = $_template->source->content; - if ($_template->source->type == 'extends') { - $compiler->template->block_data = $_template->block_data; - foreach ($_template->source->components as $key => $component) { - $compiler->template->properties['file_dependency'][$key] = array($component->filepath, $component->timestamp, $component->type); - } - } - $compiler->template->source->filepath = $_template->source->filepath; - $compiler->abort_and_recompile = true; + // add tag to call parent template at the end of source + if ($compiler->has_variable_string || !((substr_count($_attr['file'], '"') == 2 || substr_count($_attr['file'], "'") == 2)) + || substr_count($_attr['file'], '(') != 0 || substr_count($_attr['file'], '$_smarty_tpl->') != 0 + ) { + $compiler->trigger_template_error('variable template file name not allowed', $compiler->lex->taglineno); + } + + $name = trim($_attr['file'],"\"'"); + // create template object + $_template = new $compiler->smarty->template_class($name, $compiler->smarty, $compiler->template); + // check for recursion + $uid = $_template->source->uid; + if (isset($compiler->extends_uid[$uid])) { + $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $this->lex->line - 1); + } + $compiler->extends_uid[$uid] = true; + if (empty($_template->source->components)) { + array_unshift($compiler->sources, $_template->source); + } else { + foreach ($_template->source->components as $source) { + array_unshift($compiler->sources, $source); + $uid = $source->uid; + if (isset($compiler->extends_uid[$uid])) { + $compiler->trigger_template_error("illegal recursive call of \"{$sorce->filepath}\"", $this->lex->line - 1); + } + $compiler->extends_uid[$uid] = true; + } + } + unset ($_template); + $compiler->inheritance_child = true; + $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); return ''; } - } diff --git a/libs/sysplugins/smarty_internal_compile_function.php b/libs/sysplugins/smarty_internal_compile_function.php index f2d7a5bd..f04dc4e5 100644 --- a/libs/sysplugins/smarty_internal_compile_function.php +++ b/libs/sysplugins/smarty_internal_compile_function.php @@ -86,7 +86,6 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase $compiler->template->has_nocache_code = false; $compiler->has_code = false; $compiler->template->properties['function'][$_name]['compiled'] = ''; - return true; } diff --git a/libs/sysplugins/smarty_internal_compile_include.php b/libs/sysplugins/smarty_internal_compile_include.php index 3f3e0789..3bd2095c 100644 --- a/libs/sysplugins/smarty_internal_compile_include.php +++ b/libs/sysplugins/smarty_internal_compile_include.php @@ -1,61 +1,61 @@ nocache || $compiler->tag_nocache) { - $_caching = Smarty::CACHING_OFF; - } - // default for included templates - if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) { + + $_caching = Smarty::CACHING_OFF; + + // flag if included template code should be merged into caller + $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->recompiled; + + // set default when in nocache mode +// if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) { + if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache ||$compiler->tag_nocache)))) { $_caching = self::CACHING_NOCACHE_CODE; } /* @@ -118,53 +121,89 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase } if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; + if ($merge_compiled_includes || $compiler->inheritance) { + $_caching = self::CACHING_NOCACHE_CODE; + } else { $_caching = Smarty::CACHING_OFF; + } } $has_compiled_template = false; - if (($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->recompiled - && !($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache)) && $_caching != Smarty::CACHING_LIFETIME_CURRENT) { - // check if compiled code can be merged (contains no variable part) - if (!$compiler->has_variable_string && (substr_count($include_file, '"') == 2 or substr_count($include_file, "'") == 2) - and substr_count($include_file, '(') == 0 and substr_count($include_file, '$_smarty_tpl->') == 0) { - $tpl_name = null; - eval("\$tpl_name = $include_file;"); - if (!isset($compiler->smarty->merged_templates_func[$tpl_name]) || $compiler->inheritance) { - $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id); - // save unique function name - $compiler->smarty->merged_templates_func[$tpl_name]['func'] = $tpl->properties['unifunc'] = 'content_'. str_replace('.', '_', uniqid('', true)); - // use current nocache hash for inlined code - $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; - if ($compiler->template->caching) { - // needs code for cached page but no cache file - $tpl->caching = self::CACHING_NOCACHE_CODE; - } - // make sure whole chain gest compiled - $tpl->mustCompile = true; - if (!($tpl->source->uncompiled) && $tpl->source->exists) { - // get compiled code - $compiled_code = $tpl->compiler->compileTemplate($tpl); - // release compiler object to free memory - unset($tpl->compiler); - // merge compiled code for {function} tags - $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']); - // merge filedependency - $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp,$tpl->source->type); - $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']); - // remove header code - $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code); - if ($tpl->has_nocache_code) { - // replace nocache_hash - $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code); - $compiler->template->has_nocache_code = true; - } - $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code; - $has_compiled_template = true; - } - } else { - $has_compiled_template = true; + if ($merge_compiled_includes || $compiler->inheritance) { + // variable template name ? + if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2)) + || substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0 + ) { + $merge_compiled_includes = false; + if ($compiler->inheritance) { + $compiler->trigger_template_error(' variable template file names not allow within {block} tags'); } } + // variable compile_id? + if (isset($_attr['compile_id'])) { + if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2)) + || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0 + ) { + $merge_compiled_includes = false; + if ($compiler->inheritance) { + $compiler->trigger_template_error(' variable compile_id not allow within {block} tags'); + } + } + } + if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) { + $merge_compiled_includes = false; + if ($compiler->inheritance) { + $compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags'); + } + } + } + if ($merge_compiled_includes || $compiler->inheritance) { + // we must observe different compile_id + $uid = sha1($_compile_id); + $tpl_name = null; + $nocache = false; + eval("\$tpl_name = $include_file;"); + if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid]) || $compiler->inheritance) { + $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id); + // save unique function name + $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true)); + // use current nocache hash for inlined code + $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash']; + if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) { + // all code must be nocache + $nocache = true; + } + if ($compiler->inheritance) { + $tpl->compiler->inheritance = true; + } + // make sure whole chain gets compiled + $tpl->mustCompile = true; + if (!($tpl->source->uncompiled) && $tpl->source->exists) { + + + // get compiled code + $compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache); + // release compiler object to free memory + unset($tpl->compiler); + // merge compiled code for {function} tags + $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']); + // merge filedependency + $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp, $tpl->source->type); + $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']); + // remove header code + $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code); + if ($tpl->has_nocache_code) { + // replace nocache_hash + $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code); + $compiler->template->has_nocache_code = true; + } + $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code; + $has_compiled_template = true; + unset ($tpl); + } + } else { + $has_compiled_template = true; + } } // delete {include} standard attributes unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline']); @@ -175,7 +214,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase foreach ($_attr as $key => $value) { $_pairs[] = "'$key'=>$value"; } - $_vars = 'array('.join(',',$_pairs).')'; + $_vars = 'array(' . join(',', $_pairs) . ')'; $_has_vars = true; } else { $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno); @@ -185,19 +224,21 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase $_has_vars = false; } if ($has_compiled_template) { - $_hash = $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash']; + // never call inline templates in nocache mode + $compiler->suppressNocacheProcessing = true; + $_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash']; $_output = "setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n"; if (isset($_assign)) { $_output .= 'ob_start(); '; } - $_output .= $compiler->smarty->merged_templates_func[$tpl_name]['func']. "(\$_smarty_tpl);\n"; + $_output .= $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] . "(\$_smarty_tpl);\n"; $_output .= "\$_smarty_tpl = array_pop(\$_tpl_stack); "; if (isset($_assign)) { $_output .= " \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_variable(ob_get_clean());"; } - $_output .= "/* End of included template \"" . $tpl_name . "\" */?>"; + $_output .= "\n/* End of included template \"" . $tpl_name . "\" */?>"; return $_output; } @@ -211,5 +252,4 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase return $_output; } - } diff --git a/libs/sysplugins/smarty_internal_compile_nocache.php b/libs/sysplugins/smarty_internal_compile_nocache.php index f4e623c6..a0e15385 100644 --- a/libs/sysplugins/smarty_internal_compile_nocache.php +++ b/libs/sysplugins/smarty_internal_compile_nocache.php @@ -32,8 +32,11 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno); } + if ($compiler->template->caching) { // enter nocache mode + $this->openTag($compiler, 'nocache', $compiler->nocache); $compiler->nocache = true; + } // this tag does not return compiled code $compiler->has_code = false; @@ -62,8 +65,10 @@ class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase public function compile($args, $compiler) { $_attr = $this->getAttributes($compiler, $args); - // leave nocache mode - $compiler->nocache = false; + if ($compiler->template->caching) { + // restore old nocache mode + $compiler->nocache = $this->closeTag($compiler, 'nocache'); + } // this tag does not return compiled code $compiler->has_code = false; diff --git a/libs/sysplugins/smarty_internal_debug.php b/libs/sysplugins/smarty_internal_debug.php index 802a19ab..6239eb6a 100644 --- a/libs/sysplugins/smarty_internal_debug.php +++ b/libs/sysplugins/smarty_internal_debug.php @@ -24,6 +24,27 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data */ public static $template_data = array(); + /** + * List of uid's which shall be ignored + * + * @var array + */ + public static $ignore_uid = array(); + + /** + * Ignore template + * + * @param object $template + */ + public static function ignore($template) + { + // calculate Uid if not already done + if ($template->source->uid == '') { + $template->source->filepath; + } + self::$ignore_uid[$template->source->uid] = true; + } + /** * Start logging of compile time * @@ -31,7 +52,25 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data */ public static function start_compile($template) { - $key = self::get_key($template); + static $_is_stringy = array('string' => true, 'eval' => true); + if (!empty($template->compiler->trace_uid)) { + $key = $template->compiler->trace_uid; + if (!isset(self::$template_data[$key])) { + if (isset($_is_stringy[$template->source->type])) { + self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; + } else { + self::$template_data[$key]['name'] = $template->source->filepath; + } + self::$template_data[$key]['compile_time'] = 0; + self::$template_data[$key]['render_time'] = 0; + self::$template_data[$key]['cache_time'] = 0; + } + } else { + if (isset(self::$ignore_uid[$template->source->uid])) { + return; + } + $key = self::get_key($template); + } self::$template_data[$key]['start_time'] = microtime(true); } @@ -42,7 +81,15 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data */ public static function end_compile($template) { - $key = self::get_key($template); + if (!empty($template->compiler->trace_uid)) { + $key = $template->compiler->trace_uid; + } else { + if (isset(self::$ignore_uid[$template->source->uid])) { + return; + } + + $key = self::get_key($template); + } self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time']; } @@ -171,7 +218,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data } } - return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); + return (object)array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); } /** @@ -192,7 +239,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data return $key; } else { if (isset($_is_stringy[$template->source->type])) { - self::$template_data[$key]['name'] = '\''.substr($template->source->name,0,25).'...\''; + self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; } else { self::$template_data[$key]['name'] = $template->source->filepath; } diff --git a/libs/sysplugins/smarty_internal_resource_extends.php b/libs/sysplugins/smarty_internal_resource_extends.php index a7103862..dbbbd7d7 100644 --- a/libs/sysplugins/smarty_internal_resource_extends.php +++ b/libs/sysplugins/smarty_internal_resource_extends.php @@ -1,37 +1,37 @@ exists = true; @@ -74,84 +74,34 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource } /** - * Load template's source from files into current template object - * - * @param Smarty_Template_Source $source source object - * @return string template source - * @throws SmartyException if source cannot be loaded - */ + * Load template's source from files into current template object + * + * @param Smarty_Template_Source $source source object + * @return string template source + * @throws SmartyException if source cannot be loaded + */ public function getContent(Smarty_Template_Source $source) { if (!$source->exists) { throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); } - $this->mbstring_overload = ini_get('mbstring.func_overload') & 2; - $_rdl = preg_quote($source->smarty->right_delimiter); - $_ldl = preg_quote($source->smarty->left_delimiter); - if (!$source->smarty->auto_literal) { - $al = '\s*'; - } else { - $al = ''; - } $_components = array_reverse($source->components); - $_first = reset($_components); - $_last = end($_components); + $_content = ''; foreach ($_components as $_component) { - // register dependency - if ($_component != $_first) { - $source->template->properties['file_dependency'][$_component->uid] = array($_component->filepath, $_component->timestamp, $_component->type); - } - // read content - $source->filepath = $_component->filepath; - $_content = $_component->content; - - // extend sources - if ($_component != $_last) { - if (preg_match_all("!({$_ldl}{$al}block\s(.+?)\s*{$_rdl})!", $_content, $_open) != - preg_match_all("!({$_ldl}{$al}/block\s*{$_rdl})!", $_content, $_close)) { - throw new SmartyException("unmatched {block} {/block} pairs in template {$_component->type} '{$_component->name}'"); - } - preg_match_all("!{$_ldl}{$al}block\s(.+?)\s*{$_rdl}|{$_ldl}{$al}/block\s*{$_rdl}|{$_ldl}\*([\S\s]*?)\*{$_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE); - $_result_count = count($_result[0]); - $_start = 0; - while ($_start+1 < $_result_count) { - $_end = 0; - $_level = 1; - if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') { - $_start++; - continue; - } - while ($_level != 0) { - $_end++; - if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') { - continue; - } - if (!strpos($_result[0][$_start + $_end][0], '/')) { - $_level++; - } else { - $_level--; - } - } - $_block_content = str_replace($source->smarty->left_delimiter . '$smarty.block.parent' . $source->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%', - ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0])))); - Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $source->template, $_component->filepath); - $_start = $_start + $_end + 1; - } - } else { - return $_content; - } + $_content .= $_component->content; } + return $_content; } /** - * Determine basename for compiled filename - * - * @param Smarty_Template_Source $source source object - * @return string resource's basename - */ + * Determine basename for compiled filename + * + * @param Smarty_Template_Source $source source object + * @return string resource's basename + */ public function getBasename(Smarty_Template_Source $source) { return str_replace(':', '.', basename($source->filepath)); diff --git a/libs/sysplugins/smarty_internal_smartytemplatecompiler.php b/libs/sysplugins/smarty_internal_smartytemplatecompiler.php index e4f2726e..2f73b91f 100644 --- a/libs/sysplugins/smarty_internal_smartytemplatecompiler.php +++ b/libs/sysplugins/smarty_internal_smartytemplatecompiler.php @@ -94,6 +94,10 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom // init the lexer/parser to compile the template $this->lex = new $this->lexer_class($_content, $this); $this->parser = new $this->parser_class($this->lex, $this); + if ($this->inheritance_child) { + // start state on child templates + $this->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY); + } if ($this->smarty->_parserdebug) $this->parser->PrintTrace(); // get tokens from lexer and parse them diff --git a/libs/sysplugins/smarty_internal_template.php b/libs/sysplugins/smarty_internal_template.php index 1387972a..d60fc6bf 100644 --- a/libs/sysplugins/smarty_internal_template.php +++ b/libs/sysplugins/smarty_internal_template.php @@ -167,16 +167,14 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase if (!$this->source->recompiled) { $this->properties['file_dependency'] = array(); if ($this->source->components) { + // for the extends resource the compiler will fill it // uses real resource for file dependency - $source = end($this->source->components); - $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type); + // $source = end($this->source->components); + // $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type); } else { $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $this->source->type); } } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($this); - } // compile locking if ($this->smarty->compile_locking && !$this->source->recompiled) { if ($saved_timestamp = $this->compiled->timestamp) { @@ -203,9 +201,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase $this->compiled->exists = true; $this->compiled->isCompiled = true; } - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($this); - } // release compiler object to free memory unset($this->compiler); } @@ -413,7 +408,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase $output .= $plugins_string; $output .= $content; if (!$this->source->recompiled) { - $output .= ''; + $output .= "\n"; } return $output; diff --git a/libs/sysplugins/smarty_internal_templatebase.php b/libs/sysplugins/smarty_internal_templatebase.php index 92894c7e..6e323701 100644 --- a/libs/sysplugins/smarty_internal_templatebase.php +++ b/libs/sysplugins/smarty_internal_templatebase.php @@ -132,13 +132,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data if (!$_template->source->uncompiled) { $_smarty_tpl = $_template; if ($_template->source->recompiled) { - if ($this->smarty->debugging) { - Smarty_Internal_Debug::start_compile($_template); - } $code = $_template->compiler->compileTemplate($_template); - if ($this->smarty->debugging) { - Smarty_Internal_Debug::end_compile($_template); - } if ($this->smarty->debugging) { Smarty_Internal_Debug::start_render($_template); } diff --git a/libs/sysplugins/smarty_internal_templatecompilerbase.php b/libs/sysplugins/smarty_internal_templatecompilerbase.php index 789499b9..c7b242c8 100644 --- a/libs/sysplugins/smarty_internal_templatecompilerbase.php +++ b/libs/sysplugins/smarty_internal_templatecompilerbase.php @@ -1,687 +1,804 @@ -nocache_hash = str_replace('.', '-', uniqid(rand(), true)); - } - - /** - * Method to compile a Smarty template - * - * @param Smarty_Internal_Template $template template object to compile - * @return bool true if compiling succeeded, false if it failed - */ - public function compileTemplate(Smarty_Internal_Template $template) - { - if (empty($template->properties['nocache_hash'])) { - $template->properties['nocache_hash'] = $this->nocache_hash; - } else { - $this->nocache_hash = $template->properties['nocache_hash']; - } - // flag for nochache sections - $this->nocache = false; - $this->tag_nocache = false; - // save template object in compiler class - $this->template = $template; - // reset has noche code flag - $this->template->has_nocache_code = false; - $this->smarty->_current_file = $saved_filepath = $this->template->source->filepath; - // template header code - $template_header = ''; - if (!$this->suppressHeader) { - $template_header .= "template->source->filepath . "\" */ ?>\n"; - } - - do { - // flag for aborting current and start recompile - $this->abort_and_recompile = false; - // get template source - $_content = $template->source->content; - // run prefilter if required - if ((isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) && !$this->suppressFilter) { - $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template); - } - // on empty template just return header - if ($_content == '') { - if ($this->suppressTemplatePropertyHeader) { - $code = ''; - } else { - $code = $template_header . $template->createTemplateCodeFrame(); - } - - return $code; - } - // call compiler - $_compiled_code = $this->doCompile($_content); - } while ($this->abort_and_recompile); - $this->template->source->filepath = $saved_filepath; - // free memory - unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template); - self::$_tag_objects = array(); - // return compiled code to template object - $merged_code = ''; - if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) { - foreach ($this->merged_templates as $code) { - $merged_code .= $code; - } - } - // run postfilter if required on compiled template code - if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter) { - $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template); - } - if ($this->suppressTemplatePropertyHeader) { - $code = $_compiled_code . $merged_code; - } else { - $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code; - } - // unset content because template inheritance could have replace source with parent code - unset ($template->source->content); - - return $code; - } - - /** - * Compile Tag - * - * This is a call back from the lexer/parser - * It executes the required compile plugin for the Smarty tag - * - * @param string $tag tag name - * @param array $args array with tag attributes - * @param array $parameter array with compilation parameter - * @return string compiled code - */ - public function compileTag($tag, $args, $parameter = array()) - { - // $args contains the attributes parsed and compiled by the lexer/parser - // assume that tag does compile into code, but creates no HTML output - $this->has_code = true; - $this->has_output = false; - // log tag/attributes - if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) { - $this->template->used_tags[] = array($tag, $args); - } - // check nocache option flag - if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) - || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)) { - $this->tag_nocache = true; - } - // compile the smarty tag (required compile classes to compile the tag are autoloaded) - if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { - if (isset($this->smarty->template_functions[$tag])) { - // template defined by {template} tag - $args['_attr']['name'] = "'" . $tag . "'"; - $_output = $this->callTagCompiler('call', $args, $parameter); - } - } - if ($_output !== false) { - if ($_output !== true) { - // did we get compiled code - if ($this->has_code) { - // Does it create output? - if ($this->has_output) { - $_output .= "\n"; - } - // return compiled code - return $_output; - } - } - // tag did not produce compiled code - return ''; - } else { - // map_named attributes - if (isset($args['_attr'])) { - foreach ($args['_attr'] as $key => $attribute) { - if (is_array($attribute)) { - $args = array_merge($args, $attribute); - } - } - } - // not an internal compiler tag - if (strlen($tag) < 6 || substr($tag, -5) != 'close') { - // check if tag is a registered object - if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_methode'])) { - $methode = $parameter['object_methode']; - if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) && - (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) { - return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $methode); - } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode); - } else { - return $this->trigger_template_error('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno); - } - } - // check if tag is registered - foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) { - if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) { - // if compiler function plugin call it now - if ($plugin_type == Smarty::PLUGIN_COMPILER) { - $new_args = array(); - foreach ($args as $key => $mixed) { - if (is_array($mixed)) { - $new_args = array_merge($new_args, $mixed); - } else { - $new_args[$key] = $mixed; - } - } - if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) { - $this->tag_nocache = true; - } - $function = $this->smarty->registered_plugins[$plugin_type][$tag][0]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[0])) { - return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } - // compile registered function or block function - if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); - } - } - } - // check plugins from plugins folder - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - // convert arguments format for old compiler plugins - $new_args = array(); - foreach ($args as $key => $mixed) { - if (is_array($mixed)) { - $new_args = array_merge($new_args, $mixed); - } else { - $new_args[$key] = $mixed; - } - } - - return $plugin($new_args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } else { - if ($function = $this->getPlugin($tag, $plugin_type)) { - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { - return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function); - } - } - } - } - if (is_callable($this->smarty->default_plugin_handler_func)) { - $found = false; - // look for already resolved tags - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if (isset($this->default_handler_plugins[$plugin_type][$tag])) { - $found = true; - break; - } - } - if (!$found) { - // call default handler - foreach ($this->smarty->plugin_search_order as $plugin_type) { - if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) { - $found = true; - break; - } - } - } - if ($found) { - // if compiler function plugin call it now - if ($plugin_type == Smarty::PLUGIN_COMPILER) { - $new_args = array(); - foreach ($args as $mixed) { - $new_args = array_merge($new_args, $mixed); - } - $function = $this->default_handler_plugins[$plugin_type][$tag][0]; - if (!is_array($function)) { - return $function($new_args, $this); - } elseif (is_object($function[0])) { - return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); - } else { - return call_user_func_array($function, array($new_args, $this)); - } - } else { - return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); - } - } - } - } 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($parameter['object_methode'])) { - $methode = $parameter['object_methode']; - if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) { - return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode); - } else { - return $this->trigger_template_error('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno); - } - } - // registered block tag ? - if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { - return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag); - } - // block plugin? - if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) { - return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function); - } - // registered compiler plugin ? - if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) { - // if compiler function plugin call it now - $args = array(); - if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) { - $this->tag_nocache = true; - } - $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0]; - if (!is_array($function)) { - return $function($args, $this); - } elseif (is_object($function[0])) { - return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this); - } else { - return call_user_func_array($function, array($args, $this)); - } - } - if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { - $plugin = 'smarty_compiler_' . $tag; - if (is_callable($plugin)) { - return $plugin($args, $this->smarty); - } - if (class_exists($plugin, false)) { - $plugin_object = new $plugin; - if (method_exists($plugin_object, 'compile')) { - return $plugin_object->compile($args, $this); - } - } - throw new SmartyException("Plugin \"{$tag}\" not callable"); - } - } - $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno); - } - } - - /** - * lazy loads internal compile plugin for tag and calls the compile methode - * - * compile objects cached for reuse. - * class name format: Smarty_Internal_Compile_TagName - * plugin filename format: Smarty_Internal_Tagname.php - * - * @param string $tag tag name - * @param array $args list of tag attributes - * @param mixed $param1 optional parameter - * @param mixed $param2 optional parameter - * @param mixed $param3 optional parameter - * @return string compiled code - */ - 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 self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3); - } - // lazy load internal compiler plugin - $class_name = 'Smarty_Internal_Compile_' . $tag; - if ($this->smarty->loadPlugin($class_name)) { - // check if tag allowed by security - if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { - // use plugin if found - self::$_tag_objects[$tag] = new $class_name; - // compile this tag - return 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 string $pugin_name name of plugin or function - * @param string $plugin_type type of plugin - * @return string call name of function - */ - public function getPlugin($plugin_name, $plugin_type) - { - $function = null; - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { - $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; - } elseif (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]; - $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; - } - } else { - if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { - $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; - } elseif (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]; - $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; - } - } - if (isset($function)) { - if ($plugin_type == 'modifier') { - $this->modifier_plugins[$plugin_name] = true; - } - - return $function; - } - // loop through plugin dirs and find the plugin - $function = 'smarty_' . $plugin_type . '_' . $plugin_name; - $file = $this->smarty->loadPlugin($function, false); - - if (is_string($file)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file; - $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function; - } else { - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file; - $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function; - } - if ($plugin_type == 'modifier') { - $this->modifier_plugins[$plugin_name] = true; - } - - return $function; - } - if (is_callable($function)) { - // plugin function is defined in the script - return $function; - } - - return false; - } - - /** - * Check for plugins by default plugin handler - * - * @param string $tag name of tag - * @param string $plugin_type type of plugin - * @return boolean true if found - */ - public function getPluginFromDefaultHandler($tag, $plugin_type) - { - $callback = null; - $script = null; - $cacheable = true; - $result = call_user_func_array( - $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable) - ); - if ($result) { - $this->tag_nocache = $this->tag_nocache || !$cacheable; - if ($script !== null) { - if (is_file($script)) { - if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { - $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script; - $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback; - } else { - $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script; - $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback; - } - include_once $script; - } else { - $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); - } - } - if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); - } - if (is_callable($callback)) { - $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array()); - - return true; - } else { - $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" 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 $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 && !empty($content)) { - // generate replacement code - if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing && - ($this->nocache || $this->tag_nocache || $this->forceNocache == 2)) { - $this->template->has_nocache_code = true; - $_output = addcslashes($content,'\'\\'); - $_output = str_replace("^#^", "'", $_output); - $_output = "nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n"; - // make sure we include modifier plugins for nocache code - foreach ($this->modifier_plugins as $plugin_name => $dummy) { - if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) { - $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier']; - } - } - } else { - $_output = $content; - } - } else { - $_output = $content; - } - $this->modifier_plugins = array(); - $this->suppressNocacheProcessing = false; - $this->tag_nocache = false; - - return $_output; - } - - /** - * display compiler error messages without dying - * - * If parameter $args is empty it is a parser detected syntax error. - * In this case the parser is called to obtain information about expected tokens. - * - * If parameter $args contains a string this is used as error message - * - * @param string $args individual error message or null - * @param string $line line-number - * @throws SmartyCompilerException when an unexpected token is found - */ - 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->source->filepath . '" on line ' . $line . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])) . '" '; - if (isset($args)) { - // individual error message - $error_text .= $args; - } else { - // expected token from parser - $error_text .= ' - Unexpected "' . $this->lex->value . '"'; - if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) { - foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { - $exp_token = $this->parser->yyTokenName[$token]; - if (isset($this->lex->smarty_token_names[$exp_token])) { - // token type from lexer - $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; - } else { - // otherwise internal token name - $expect[] = $this->parser->yyTokenName[$token]; - } - } - $error_text .= ', expected one of: ' . implode(' , ', $expect); - } - } - throw new SmartyCompilerException($error_text); - } - -} +nocache_hash = str_replace('.', '-', uniqid(rand(), true)); + } + + /** + * Method to compile a Smarty template + * + * @param Smarty_Internal_Template $template template object to compile + * @param bool $nocache true is shall be compiled in nocache mode + * @return bool true if compiling succeeded, false if it failed + */ + public function compileTemplate(Smarty_Internal_Template $template, $nocache = false) + { + if (empty($template->properties['nocache_hash'])) { + $template->properties['nocache_hash'] = $this->nocache_hash; + } else { + $this->nocache_hash = $template->properties['nocache_hash']; + } + // flag for nochache sections + $this->nocache = $nocache; + $this->tag_nocache = false; + // save template object in compiler class + $this->template = $template; + // reset has nocache code flag + $this->template->has_nocache_code = false; + $save_source = $this->template->source; + // template header code + $template_header = ''; + if (!$this->suppressHeader) { + $template_header .= "template->source->filepath . "\" */ ?>\n"; + } + + if (empty($this->template->source->components)) { + $this->sources = array($template->source); + } else { + // we have array of inheritance templates by extends: resource + $this->sources = array_reverse($template->source->components); + } + $loop = 0; + // the $this->sources array can get additional elements while compiling by the {extends} tag + while ($this->template->source = array_shift($this->sources)) { + $this->smarty->_current_file = $this->template->source->filepath; + if ($this->smarty->debugging) { + Smarty_Internal_Debug::start_compile($this->template); + } + $no_sources = count($this->sources); + if ($loop || $no_sources) { + $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->filepath, $this->template->source->timestamp, $this->template->source->type); + } + $loop++; + if ($no_sources) { + $this->inheritance_child = true; + } else { + $this->inheritance_child = false; + } + do { + $_compiled_code = ''; + // flag for aborting current and start recompile + $this->abort_and_recompile = false; + // get template source + $_content = $this->template->source->content; + if ($_content != '') { + // run prefilter if required + if ((isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) && !$this->suppressFilter) { + $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template); + } + // call compiler + $_compiled_code = $this->doCompile($_content); + } + } while ($this->abort_and_recompile); + if ($this->smarty->debugging) { + Smarty_Internal_Debug::end_compile($this->template); + } + } + // restore source + $this->template->source = $save_source; + unset($save_source); + $this->smarty->_current_file = $this->template->source->filepath; + // free memory + unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template); + self::$_tag_objects = array(); + // return compiled code to template object + $merged_code = ''; + if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) { + foreach ($this->merged_templates as $code) { + $merged_code .= $code; + } + } + // run postfilter if required on compiled template code + if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter && $_compiled_code != '') { + $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template); + } + if ($this->suppressTemplatePropertyHeader) { + $code = $_compiled_code . $merged_code; + } else { + $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code; + } + // unset content because template inheritance could have replace source with parent code + unset ($template->source->content); + + return $code; + } + + /** + * Compile Tag + * + * This is a call back from the lexer/parser + * It executes the required compile plugin for the Smarty tag + * + * @param string $tag tag name + * @param array $args array with tag attributes + * @param array $parameter array with compilation parameter + * @return string compiled code + */ + public function compileTag($tag, $args, $parameter = array()) + { + // $args contains the attributes parsed and compiled by the lexer/parser + // assume that tag does compile into code, but creates no HTML output + $this->has_code = true; + $this->has_output = false; + // log tag/attributes + if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) { + $this->template->used_tags[] = array($tag, $args); + } + // check nocache option flag + if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) + || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args) + ) { + $this->tag_nocache = true; + } + // compile the smarty tag (required compile classes to compile the tag are autoloaded) + if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { + if (isset($this->smarty->template_functions[$tag])) { + // template defined by {template} tag + $args['_attr']['name'] = "'" . $tag . "'"; + $_output = $this->callTagCompiler('call', $args, $parameter); + } + } + if ($_output !== false) { + if ($_output !== true) { + // did we get compiled code + if ($this->has_code) { + // Does it create output? + if ($this->has_output) { + $_output .= "\n"; + } + // return compiled code + return $_output; + } + } + // tag did not produce compiled code + return null; + } else { + // map_named attributes + if (isset($args['_attr'])) { + foreach ($args['_attr'] as $key => $attribute) { + if (is_array($attribute)) { + $args = array_merge($args, $attribute); + } + } + } + // not an internal compiler tag + if (strlen($tag) < 6 || substr($tag, -5) != 'close') { + // check if tag is a registered object + if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_methode'])) { + $methode = $parameter['object_methode']; + if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) && + (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1])) + ) { + return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $methode); + } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { + return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode); + } else { + return $this->trigger_template_error('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno); + } + } + // check if tag is registered + foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) { + if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) { + // if compiler function plugin call it now + if ($plugin_type == Smarty::PLUGIN_COMPILER) { + $new_args = array(); + foreach ($args as $key => $mixed) { + if (is_array($mixed)) { + $new_args = array_merge($new_args, $mixed); + } else { + $new_args[$key] = $mixed; + } + } + if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) { + $this->tag_nocache = true; + } + $function = $this->smarty->registered_plugins[$plugin_type][$tag][0]; + if (!is_array($function)) { + return $function($new_args, $this); + } elseif (is_object($function[0])) { + return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); + } else { + return call_user_func_array($function, array($new_args, $this)); + } + } + // compile registered function or block function + if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) { + return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); + } + } + } + // check plugins from plugins folder + foreach ($this->smarty->plugin_search_order as $plugin_type) { + if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) { + $plugin = 'smarty_compiler_' . $tag; + if (is_callable($plugin)) { + // convert arguments format for old compiler plugins + $new_args = array(); + foreach ($args as $key => $mixed) { + if (is_array($mixed)) { + $new_args = array_merge($new_args, $mixed); + } else { + $new_args[$key] = $mixed; + } + } + + return $plugin($new_args, $this->smarty); + } + if (class_exists($plugin, false)) { + $plugin_object = new $plugin; + if (method_exists($plugin_object, 'compile')) { + return $plugin_object->compile($args, $this); + } + } + throw new SmartyException("Plugin \"{$tag}\" not callable"); + } else { + if ($function = $this->getPlugin($tag, $plugin_type)) { + if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { + return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function); + } + } + } + } + if (is_callable($this->smarty->default_plugin_handler_func)) { + $found = false; + // look for already resolved tags + foreach ($this->smarty->plugin_search_order as $plugin_type) { + if (isset($this->default_handler_plugins[$plugin_type][$tag])) { + $found = true; + break; + } + } + if (!$found) { + // call default handler + foreach ($this->smarty->plugin_search_order as $plugin_type) { + if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) { + $found = true; + break; + } + } + } + if ($found) { + // if compiler function plugin call it now + if ($plugin_type == Smarty::PLUGIN_COMPILER) { + $new_args = array(); + foreach ($args as $mixed) { + $new_args = array_merge($new_args, $mixed); + } + $function = $this->default_handler_plugins[$plugin_type][$tag][0]; + if (!is_array($function)) { + return $function($new_args, $this); + } elseif (is_object($function[0])) { + return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); + } else { + return call_user_func_array($function, array($new_args, $this)); + } + } else { + return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); + } + } + } + } 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($parameter['object_methode'])) { + $methode = $parameter['object_methode']; + if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) { + return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode); + } else { + return $this->trigger_template_error('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno); + } + } + // registered block tag ? + if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { + return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag); + } + // block plugin? + if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) { + return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function); + } + // registered compiler plugin ? + if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) { + // if compiler function plugin call it now + $args = array(); + if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) { + $this->tag_nocache = true; + } + $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0]; + if (!is_array($function)) { + return $function($args, $this); + } elseif (is_object($function[0])) { + return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this); + } else { + return call_user_func_array($function, array($args, $this)); + } + } + if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { + $plugin = 'smarty_compiler_' . $tag; + if (is_callable($plugin)) { + return $plugin($args, $this->smarty); + } + if (class_exists($plugin, false)) { + $plugin_object = new $plugin; + if (method_exists($plugin_object, 'compile')) { + return $plugin_object->compile($args, $this); + } + } + throw new SmartyException("Plugin \"{$tag}\" not callable"); + } + } + $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno); + } + } + + /** + * lazy loads internal compile plugin for tag and calls the compile methode + * + * compile objects cached for reuse. + * class name format: Smarty_Internal_Compile_TagName + * plugin filename format: Smarty_Internal_Tagname.php + * + * @param string $tag tag name + * @param array $args list of tag attributes + * @param mixed $param1 optional parameter + * @param mixed $param2 optional parameter + * @param mixed $param3 optional parameter + * @return string compiled code + */ + 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 self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3); + } + // lazy load internal compiler plugin + $class_name = 'Smarty_Internal_Compile_' . $tag; + if ($this->smarty->loadPlugin($class_name)) { + // check if tag allowed by security + if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) { + // use plugin if found + self::$_tag_objects[$tag] = new $class_name; + // compile this tag + return 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 string $pugin_name name of plugin or function + * @param string $plugin_type type of plugin + * @return string call name of function + */ + public function getPlugin($plugin_name, $plugin_type) + { + $function = null; + if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { + if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { + $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; + } elseif (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { + $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]; + $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function']; + } + } else { + if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) { + $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; + } elseif (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) { + $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]; + $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function']; + } + } + if (isset($function)) { + if ($plugin_type == 'modifier') { + $this->modifier_plugins[$plugin_name] = true; + } + + return $function; + } + // loop through plugin dirs and find the plugin + $function = 'smarty_' . $plugin_type . '_' . $plugin_name; + $file = $this->smarty->loadPlugin($function, false); + + if (is_string($file)) { + if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { + $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file; + $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function; + } else { + $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file; + $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function; + } + if ($plugin_type == 'modifier') { + $this->modifier_plugins[$plugin_name] = true; + } + + return $function; + } + if (is_callable($function)) { + // plugin function is defined in the script + return $function; + } + + return false; + } + + /** + * Check for plugins by default plugin handler + * + * @param string $tag name of tag + * @param string $plugin_type type of plugin + * @return boolean true if found + */ + public function getPluginFromDefaultHandler($tag, $plugin_type) + { + $callback = null; + $script = null; + $cacheable = true; + $result = call_user_func_array( + $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable) + ); + if ($result) { + $this->tag_nocache = $this->tag_nocache || !$cacheable; + if ($script !== null) { + if (is_file($script)) { + if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { + $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script; + $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback; + } else { + $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script; + $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback; + } + include_once $script; + } else { + $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); + } + } + if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) { + $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); + } + if (is_callable($callback)) { + $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array()); + + return true; + } else { + $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" 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 $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 && !empty($content)) { + // generate replacement code + if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing && + ($this->nocache || $this->tag_nocache) + ) { + $this->template->has_nocache_code = true; + $_output = addcslashes($content, '\'\\'); + $_output = str_replace("^#^", "'", $_output); + $_output = "nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n"; + // make sure we include modifier plugins for nocache code + foreach ($this->modifier_plugins as $plugin_name => $dummy) { + if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) { + $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier']; + } + } + } else { + $_output = $content; + } + } else { + $_output = $content; + } + $this->modifier_plugins = array(); + $this->suppressNocacheProcessing = false; + $this->tag_nocache = false; + + return $_output; + } + + /** + * push current file and line offset on stack for tracing {block} source lines + * + * @param string $file new filename + * @param string $uid uid of file + * @param string $debug false debug end_compile shall not be called + * @param int $line line offset to source + */ + public function pushTrace($file, $uid, $line, $debug = true) + { + if ($this->smarty->debugging && $debug) { + Smarty_Internal_Debug::end_compile($this->template); + } + array_push($this->trace_stack, array($this->smarty->_current_file, $this->trace_filepath, $this->trace_uid, $this->trace_line_offset)); + $this->trace_filepath = $this->smarty->_current_file = $file; + $this->trace_uid = $uid; + $this->trace_line_offset = $line ; + if ($this->smarty->debugging) { + Smarty_Internal_Debug::start_compile($this->template); + } + } + + /** + * restore file and line offset + * + */ + public function popTrace() + { + if ($this->smarty->debugging) { + Smarty_Internal_Debug::end_compile($this->template); + } + $r = array_pop($this->trace_stack); + $this->smarty->_current_file = $r[0]; + $this->trace_filepath = $r[1]; + $this->trace_uid = $r[2]; + $this->trace_line_offset = $r[3]; + if ($this->smarty->debugging) { + Smarty_Internal_Debug::start_compile($this->template); + } + } + + /** + * display compiler error messages without dying + * + * If parameter $args is empty it is a parser detected syntax error. + * In this case the parser is called to obtain information about expected tokens. + * + * If parameter $args contains a string this is used as error message + * + * @param string $args individual error message or null + * @param string $line line-number + * @throws SmartyCompilerException when an unexpected token is found + */ + public function trigger_template_error($args = null, $line = null) + { + // get template source line which has error + if (!isset($line)) { + $line = $this->lex->line; + } +// $line += $this->trace_line_offset; + $match = preg_split("/\n/", $this->lex->data); + $error_text = 'Syntax error in template "' . (empty($this->trace_filepath) ? $this->template->source->filepath : $this->trace_filepath) . '" on line ' . ($line + $this->trace_line_offset) . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])) . '" '; + if (isset($args)) { + // individual error message + $error_text .= $args; + } else { + // expected token from parser + $error_text .= ' - Unexpected "' . $this->lex->value . '"'; + if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) { + foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { + $exp_token = $this->parser->yyTokenName[$token]; + if (isset($this->lex->smarty_token_names[$exp_token])) { + // token type from lexer + $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; + } else { + // otherwise internal token name + $expect[] = $this->parser->yyTokenName[$token]; + } + } + $error_text .= ', expected one of: ' . implode(' , ', $expect); + } + } + throw new SmartyCompilerException($error_text); + } + +} diff --git a/libs/sysplugins/smarty_internal_templatelexer.php b/libs/sysplugins/smarty_internal_templatelexer.php index ecea36f6..8bfe507f 100644 --- a/libs/sysplugins/smarty_internal_templatelexer.php +++ b/libs/sysplugins/smarty_internal_templatelexer.php @@ -122,15 +122,15 @@ class Smarty_Internal_Templatelexer { $tokenMap = array ( 1 => 0, - 2 => 0, - 3 => 1, + 2 => 1, + 4 => 0, 5 => 0, 6 => 0, - 7 => 0, - 8 => 0, + 7 => 1, 9 => 0, 10 => 0, - 11 => 1, + 11 => 0, + 12 => 0, 13 => 0, 14 => 0, 15 => 0, @@ -138,16 +138,11 @@ class Smarty_Internal_Templatelexer 17 => 0, 18 => 0, 19 => 0, - 20 => 0, - 21 => 0, - 22 => 0, - 23 => 0, - 24 => 0, ); if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { return false; // end of input } - $yy_global_pattern = "/\G(".$this->ldel."[$]smarty\\.block\\.child".$this->rdel.")|\G(\\{\\})|\G(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|\G(".$this->ldel."strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*setfilter\\s+)|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(".$this->rdel.")|\G(<%)|\G(%>)|\G([\S\s])/iS"; + $yy_global_pattern = "/\G(\\{\\})|\G(".$this->ldel."\\s*\\*([\S\s]*?)\\*\\s*".$this->rdel.")|\G(".$this->ldel."\\s*strip\\s*".$this->rdel.")|\G(".$this->ldel."\\s*\/strip\\s*".$this->rdel.")|\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*setfilter\\s+)|\G(".$this->ldel."\\s*\/)|\G(".$this->ldel."\\s*)|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(\\s*".$this->rdel.")|\G(<%)|\G(%>)|\G([\S\s])/iS"; do { if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { @@ -200,67 +195,45 @@ class Smarty_Internal_Templatelexer function yy_r1_1($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILD; + $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r1_2($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - function yy_r1_3($yy_subpatterns) - { - $this->token = Smarty_Internal_Templateparser::TP_COMMENT; } - function yy_r1_5($yy_subpatterns) + function yy_r1_4($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_STRIPON; - } - function yy_r1_6($yy_subpatterns) - { - - if ($this->smarty->auto_literal) { + if ($this->smarty->auto_literal&& substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_STRIPON; } + } + function yy_r1_5($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; + } + } + function yy_r1_6($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; + $this->yypushstate(self::LITERAL); + } } function yy_r1_7($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; - } - function yy_r1_8($yy_subpatterns) - { - - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; - } - } - function yy_r1_9($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - function yy_r1_10($yy_subpatterns) - { - - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - function yy_r1_11($yy_subpatterns) - { - - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELIF; @@ -268,10 +241,10 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_13($yy_subpatterns) + function yy_r1_9($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; @@ -279,10 +252,10 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_14($yy_subpatterns) + function yy_r1_10($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; @@ -290,10 +263,10 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_15($yy_subpatterns) + function yy_r1_11($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; @@ -301,32 +274,29 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r1_16($yy_subpatterns) + function yy_r1_12($yy_subpatterns) { - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; + } + } + function yy_r1_13($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } } - function yy_r1_17($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - function yy_r1_18($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - function yy_r1_19($yy_subpatterns) + function yy_r1_14($yy_subpatterns) { if (in_array($this->value, Array('value = substr($this->value, 0, 2); } } - function yy_r1_20($yy_subpatterns) + function yy_r1_15($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG; } - function yy_r1_21($yy_subpatterns) + function yy_r1_16($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } - function yy_r1_22($yy_subpatterns) + function yy_r1_17($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG; } - function yy_r1_23($yy_subpatterns) + function yy_r1_18($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG; } - function yy_r1_24($yy_subpatterns) + function yy_r1_19($yy_subpatterns) { if ($this->mbstring_overload) { @@ -395,14 +365,14 @@ class Smarty_Internal_Templatelexer 12 => 0, 13 => 0, 14 => 0, - 15 => 0, - 16 => 0, - 17 => 0, - 18 => 0, - 19 => 0, - 20 => 1, - 22 => 1, - 24 => 1, + 15 => 1, + 17 => 1, + 19 => 1, + 21 => 0, + 22 => 0, + 23 => 0, + 24 => 0, + 25 => 0, 26 => 0, 27 => 0, 28 => 0, @@ -415,22 +385,22 @@ class Smarty_Internal_Templatelexer 35 => 0, 36 => 0, 37 => 0, - 38 => 0, - 39 => 0, - 40 => 0, - 41 => 0, + 38 => 3, 42 => 0, - 43 => 3, + 43 => 0, + 44 => 0, + 45 => 0, + 46 => 0, 47 => 0, 48 => 0, 49 => 0, - 50 => 0, - 51 => 0, - 52 => 0, - 53 => 0, + 50 => 1, + 52 => 1, 54 => 0, - 55 => 1, - 57 => 1, + 55 => 0, + 56 => 0, + 57 => 0, + 58 => 0, 59 => 0, 60 => 0, 61 => 0, @@ -442,19 +412,17 @@ class Smarty_Internal_Templatelexer 67 => 0, 68 => 0, 69 => 0, - 70 => 0, - 71 => 0, + 70 => 1, 72 => 0, 73 => 0, 74 => 0, 75 => 0, 76 => 0, - 77 => 0, ); if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { return false; // end of input } - $yy_global_pattern = "/\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(".$this->rdel.")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(\\$)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(@)|\G(#)|\G(\")|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*=\\s*)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(\\s+)|\G([\S\s])/iS"; + $yy_global_pattern = "/\G(\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G(\\$)|\G(\\s*".$this->rdel.")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(@)|\G(#)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*=\\s*)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*\/)|\G(".$this->ldel."\\s*)|\G([\S\s])/iS"; do { if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { @@ -507,357 +475,237 @@ class Smarty_Internal_Templatelexer function yy_r2_1($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; + $this->token = Smarty_Internal_Templateparser::TP_QUOTE; + $this->yypushstate(self::DOUBLEQUOTEDSTRING); } function yy_r2_2($yy_subpatterns) { - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } + $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; } function yy_r2_3($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yypushstate(self::SMARTY); + $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; $this->taglineno = $this->line; - } } function yy_r2_5($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } + $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; } function yy_r2_6($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } + $this->token = Smarty_Internal_Templateparser::TP_RDEL; + $this->yypopstate(); } function yy_r2_7($yy_subpatterns) { - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } + $this->token = Smarty_Internal_Templateparser::TP_ISIN; } function yy_r2_8($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); + $this->token = Smarty_Internal_Templateparser::TP_AS; } function yy_r2_9($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; + $this->token = Smarty_Internal_Templateparser::TP_TO; } function yy_r2_10($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; + $this->token = Smarty_Internal_Templateparser::TP_STEP; } function yy_r2_11($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); + $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; } function yy_r2_12($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_ISIN; + $this->token = Smarty_Internal_Templateparser::TP_IDENTITY; } function yy_r2_13($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_AS; + $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY; } function yy_r2_14($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_TO; + $this->token = Smarty_Internal_Templateparser::TP_EQUALS; } function yy_r2_15($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } - function yy_r2_16($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; + $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS; } function yy_r2_17($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_IDENTITY; - } - function yy_r2_18($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY; + $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL; } function yy_r2_19($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_EQUALS; - } - function yy_r2_20($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS; - } - function yy_r2_22($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL; - } - function yy_r2_24($yy_subpatterns) - { - $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL; } - function yy_r2_26($yy_subpatterns) + function yy_r2_21($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN; } - function yy_r2_27($yy_subpatterns) + function yy_r2_22($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN; } - function yy_r2_28($yy_subpatterns) + function yy_r2_23($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_MOD; } - function yy_r2_29($yy_subpatterns) + function yy_r2_24($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_NOT; } - function yy_r2_30($yy_subpatterns) + function yy_r2_25($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LAND; } - function yy_r2_31($yy_subpatterns) + function yy_r2_26($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LOR; } - function yy_r2_32($yy_subpatterns) + function yy_r2_27($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_LXOR; } - function yy_r2_33($yy_subpatterns) + function yy_r2_28($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISODDBY; } - function yy_r2_34($yy_subpatterns) + function yy_r2_29($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY; } - function yy_r2_35($yy_subpatterns) + function yy_r2_30($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISODD; } - function yy_r2_36($yy_subpatterns) + function yy_r2_31($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD; } - function yy_r2_37($yy_subpatterns) + function yy_r2_32($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY; } - function yy_r2_38($yy_subpatterns) + function yy_r2_33($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY; } - function yy_r2_39($yy_subpatterns) + function yy_r2_34($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISEVEN; } - function yy_r2_40($yy_subpatterns) + function yy_r2_35($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN; } - function yy_r2_41($yy_subpatterns) + function yy_r2_36($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY; } - function yy_r2_42($yy_subpatterns) + function yy_r2_37($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY; } - function yy_r2_43($yy_subpatterns) + function yy_r2_38($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; } - function yy_r2_47($yy_subpatterns) + function yy_r2_42($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OPENP; } - function yy_r2_48($yy_subpatterns) + function yy_r2_43($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; } - function yy_r2_49($yy_subpatterns) + function yy_r2_44($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_OPENB; } - function yy_r2_50($yy_subpatterns) + function yy_r2_45($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; } - function yy_r2_51($yy_subpatterns) + function yy_r2_46($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_PTR; } - function yy_r2_52($yy_subpatterns) + function yy_r2_47($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_APTR; } - function yy_r2_53($yy_subpatterns) + function yy_r2_48($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_EQUAL; } - function yy_r2_54($yy_subpatterns) + function yy_r2_49($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_INCDEC; } - function yy_r2_55($yy_subpatterns) + function yy_r2_50($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; } - function yy_r2_57($yy_subpatterns) + function yy_r2_52($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_MATH; } - function yy_r2_59($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } - function yy_r2_60($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } - function yy_r2_61($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } - function yy_r2_62($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } - function yy_r2_63($yy_subpatterns) + function yy_r2_54($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_AT; } - function yy_r2_64($yy_subpatterns) + function yy_r2_55($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_HATCH; } - function yy_r2_65($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypushstate(self::DOUBLEQUOTEDSTRING); - } - function yy_r2_66($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->yypopstate(); - } - function yy_r2_67($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } - function yy_r2_68($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } - function yy_r2_69($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } - function yy_r2_70($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_ANDSYM; - } - function yy_r2_71($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } - function yy_r2_72($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } - function yy_r2_73($yy_subpatterns) + function yy_r2_56($yy_subpatterns) { // resolve conflicts with shorttag and right_delimiter starting with '=' @@ -869,22 +717,128 @@ class Smarty_Internal_Templatelexer $this->token = Smarty_Internal_Templateparser::TP_ATTR; } } - function yy_r2_74($yy_subpatterns) + function yy_r2_57($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_ID; } - function yy_r2_75($yy_subpatterns) + function yy_r2_58($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_INTEGER; } - function yy_r2_76($yy_subpatterns) + function yy_r2_59($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; + $this->yypopstate(); + } + function yy_r2_60($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_VERT; + } + function yy_r2_61($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_DOT; + } + function yy_r2_62($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_COMMA; + } + function yy_r2_63($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; + } + function yy_r2_64($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; + } + function yy_r2_65($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_COLON; + } + function yy_r2_66($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_ANDSYM; + } + function yy_r2_67($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_QMARK; + } + function yy_r2_68($yy_subpatterns) + { + + $this->token = Smarty_Internal_Templateparser::TP_HEX; + } + function yy_r2_69($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_SPACE; } - function yy_r2_77($yy_subpatterns) + function yy_r2_70($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDELIF; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; + } + } + function yy_r2_72($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; + } + } + function yy_r2_73($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; + } + } + function yy_r2_74($yy_subpatterns) + { + + if ($this->smarty->auto_literal&& substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; + } + } + function yy_r2_75($yy_subpatterns) + { + + if ($this->smarty->auto_literal&& substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDEL; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; + } + } + function yy_r2_76($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; @@ -959,14 +913,22 @@ class Smarty_Internal_Templatelexer function yy_r3_1($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; + $this->yypushstate(self::LITERAL); + } } function yy_r3_2($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypopstate(); + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; + $this->yypopstate(); + } } function yy_r3_3($yy_subpatterns) { @@ -1019,8 +981,8 @@ class Smarty_Internal_Templatelexer public function yylex4() { $tokenMap = array ( - 1 => 0, - 2 => 1, + 1 => 1, + 3 => 0, 4 => 0, 5 => 0, 6 => 0, @@ -1028,15 +990,13 @@ class Smarty_Internal_Templatelexer 8 => 0, 9 => 0, 10 => 0, - 11 => 0, - 12 => 0, - 13 => 3, - 17 => 0, + 11 => 3, + 15 => 0, ); if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { return false; // end of input } - $yy_global_pattern = "/\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|\G([\S\s])/iS"; + $yy_global_pattern = "/\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*\/)|\G(".$this->ldel."\\s*)|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|\G([\S\s])/iS"; do { if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { @@ -1089,18 +1049,7 @@ class Smarty_Internal_Templatelexer function yy_r4_1($yy_subpatterns) { - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - } - function yy_r4_2($yy_subpatterns) - { - - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELIF; @@ -1108,10 +1057,10 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r4_4($yy_subpatterns) + function yy_r4_3($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; @@ -1119,22 +1068,33 @@ class Smarty_Internal_Templatelexer $this->taglineno = $this->line; } } - function yy_r4_5($yy_subpatterns) + function yy_r4_4($yy_subpatterns) { - if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') { + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; + } + } + function yy_r4_5($yy_subpatterns) + { + + if ($this->smarty->auto_literal&& substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; + } else { + $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; + $this->yypushstate(self::SMARTY); + $this->taglineno = $this->line; } } function yy_r4_6($yy_subpatterns) { - if ($this->smarty->auto_literal) { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; + if ($this->smarty->auto_literal&& substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yypushstate(self::SMARTY); @@ -1144,24 +1104,10 @@ class Smarty_Internal_Templatelexer function yy_r4_7($yy_subpatterns) { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - function yy_r4_8($yy_subpatterns) - { - - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yypushstate(self::SMARTY); - $this->taglineno = $this->line; - } - function yy_r4_9($yy_subpatterns) - { - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypopstate(); } - function yy_r4_10($yy_subpatterns) + function yy_r4_8($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; @@ -1169,22 +1115,22 @@ class Smarty_Internal_Templatelexer $this->yypushstate(self::SMARTY); $this->taglineno = $this->line; } - function yy_r4_11($yy_subpatterns) + function yy_r4_9($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; } - function yy_r4_12($yy_subpatterns) + function yy_r4_10($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } - function yy_r4_13($yy_subpatterns) + function yy_r4_11($yy_subpatterns) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } - function yy_r4_17($yy_subpatterns) + function yy_r4_15($yy_subpatterns) { if ($this->mbstring_overload) { @@ -1200,4 +1146,226 @@ class Smarty_Internal_Templatelexer $this->token = Smarty_Internal_Templateparser::TP_TEXT; } + + public function yylex5() + { + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + ); + if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { + return false; // end of input + } + $yy_global_pattern = "/\G(".$this->ldel."\\s*strip\\s*".$this->rdel.")|\G(".$this->ldel."\\s*\/strip\\s*".$this->rdel.")|\G(".$this->ldel."\\s*block)|\G([\S\s])/iS"; + + do { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { + $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 CHILDBODY'); + } + 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_r5_' . $this->token}($yysubmatches); + if ($r === null) { + $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): 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 += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); + $this->line += substr_count($this->value, "\n"); + if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): 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 CHILDBODY = 5; + function yy_r5_1($yy_subpatterns) + { + + if ($this->smarty->auto_literal&& substr($this->value,$this->ldel_length,1) == ' ') { + return false; + } else { + $this->token = Smarty_Internal_Templateparser::TP_STRIPON; + } + } + function yy_r5_2($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + return false; + } else { + $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF; + } + } + function yy_r5_3($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + return false; + } else { + $this->yypopstate(); + return true; + } + } + function yy_r5_4($yy_subpatterns) + { + + if ($this->mbstring_overload) { + $to = mb_strlen($this->data,'latin1'); + } else { + $to = strlen($this->data); + } + preg_match("/".$this->ldel."\s*((\/)?strip\s*".$this->rdel."|block\s+)/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); + if (isset($match[0][1])) { + $to = $match[0][1]; + } + if ($this->mbstring_overload) { + $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1'); + } else { + $this->value = substr($this->data,$this->counter,$to-$this->counter); + } + return false; + } + + + public function yylex6() + { + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 1, + 5 => 0, + ); + if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) { + return false; // end of input + } + $yy_global_pattern = "/\G(".$this->ldel."\\s*block)|\G(".$this->ldel."\\s*\/block)|\G(".$this->ldel."\\s*[$]smarty\\.block\\.(child|parent))|\G([\S\s])/iS"; + + do { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { + $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 CHILDBLOCK'); + } + 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_r6_' . $this->token}($yysubmatches); + if ($r === null) { + $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): 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 += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value)); + $this->line += substr_count($this->value, "\n"); + if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): 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 CHILDBLOCK = 6; + function yy_r6_1($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; + } else { + $this->yypopstate(); + return true; + } + } + function yy_r6_2($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; + } else { + $this->yypopstate(); + return true; + } + } + function yy_r6_3($yy_subpatterns) + { + + if ($this->smarty->auto_literal && substr($this->value,$this->ldel_length,1) == ' ') { + $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; + } else { + $this->yypopstate(); + return true; + } + } + function yy_r6_5($yy_subpatterns) + { + + if ($this->mbstring_overload) { + $to = mb_strlen($this->data,'latin1'); + } else { + $to = strlen($this->data); + } + preg_match("/".$this->ldel."\s*((\/)?block(\s|".$this->rdel.")|[\$]smarty\.block\.(child|parent)\s*".$this->rdel.")/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); + if (isset($match[0][1])) { + $to = $match[0][1]; + } + if ($this->mbstring_overload) { + $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1'); + } else { + $this->value = substr($this->data,$this->counter,$to-$this->counter); + } + $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE; + } + } diff --git a/libs/sysplugins/smarty_internal_templateparser.php b/libs/sysplugins/smarty_internal_templateparser.php index 69d4cd62..06ec28e4 100644 --- a/libs/sysplugins/smarty_internal_templateparser.php +++ b/libs/sysplugins/smarty_internal_templateparser.php @@ -141,887 +141,892 @@ class Smarty_Internal_Templateparser#line 80 "smarty_internal_templateparser.php const TP_VERT = 1; const TP_COLON = 2; - const TP_COMMENT = 3; - const TP_PHPSTARTTAG = 4; - const TP_PHPENDTAG = 5; - const TP_ASPSTARTTAG = 6; - const TP_ASPENDTAG = 7; - const TP_FAKEPHPSTARTTAG = 8; - const TP_XMLTAG = 9; - const TP_TEXT = 10; - const TP_STRIPON = 11; - const TP_STRIPOFF = 12; - const TP_LITERALSTART = 13; - const TP_LITERALEND = 14; - const TP_LITERAL = 15; - const TP_LDEL = 16; - const TP_RDEL = 17; - const TP_DOLLAR = 18; - const TP_ID = 19; - const TP_EQUAL = 20; - const TP_PTR = 21; - const TP_LDELIF = 22; - const TP_LDELFOR = 23; - const TP_SEMICOLON = 24; - const TP_INCDEC = 25; - const TP_TO = 26; - const TP_STEP = 27; - const TP_LDELFOREACH = 28; - const TP_SPACE = 29; - const TP_AS = 30; - const TP_APTR = 31; - const TP_LDELSETFILTER = 32; - const TP_SMARTYBLOCKCHILD = 33; - const TP_LDELSLASH = 34; - const TP_ATTR = 35; - const TP_INTEGER = 36; - const TP_COMMA = 37; - const TP_OPENP = 38; - const TP_CLOSEP = 39; - const TP_MATH = 40; - const TP_UNIMATH = 41; - const TP_ANDSYM = 42; - const TP_ISIN = 43; - const TP_ISDIVBY = 44; - const TP_ISNOTDIVBY = 45; - const TP_ISEVEN = 46; - const TP_ISNOTEVEN = 47; - const TP_ISEVENBY = 48; - const TP_ISNOTEVENBY = 49; - const TP_ISODD = 50; - const TP_ISNOTODD = 51; - const TP_ISODDBY = 52; - const TP_ISNOTODDBY = 53; - const TP_INSTANCEOF = 54; - const TP_QMARK = 55; - const TP_NOT = 56; - const TP_TYPECAST = 57; - const TP_HEX = 58; - const TP_DOT = 59; - const TP_SINGLEQUOTESTRING = 60; - const TP_DOUBLECOLON = 61; - const TP_AT = 62; - const TP_HATCH = 63; - const TP_OPENB = 64; - const TP_CLOSEB = 65; - const TP_EQUALS = 66; - const TP_NOTEQUALS = 67; - const TP_GREATERTHAN = 68; - const TP_LESSTHAN = 69; - const TP_GREATEREQUAL = 70; - const TP_LESSEQUAL = 71; - const TP_IDENTITY = 72; - const TP_NONEIDENTITY = 73; - const TP_MOD = 74; - const TP_LAND = 75; - const TP_LOR = 76; - const TP_LXOR = 77; - const TP_QUOTE = 78; - const TP_BACKTICK = 79; - const TP_DOLLARID = 80; - const YY_NO_ACTION = 597; - const YY_ACCEPT_ACTION = 596; - const YY_ERROR_ACTION = 595; + const TP_RDEL = 3; + const TP_COMMENT = 4; + const TP_PHPSTARTTAG = 5; + const TP_PHPENDTAG = 6; + const TP_ASPSTARTTAG = 7; + const TP_ASPENDTAG = 8; + const TP_FAKEPHPSTARTTAG = 9; + const TP_XMLTAG = 10; + const TP_TEXT = 11; + const TP_STRIPON = 12; + const TP_STRIPOFF = 13; + const TP_BLOCKSOURCE = 14; + const TP_LITERALSTART = 15; + const TP_LITERALEND = 16; + const TP_LITERAL = 17; + const TP_LDEL = 18; + const TP_DOLLAR = 19; + const TP_ID = 20; + const TP_EQUAL = 21; + const TP_PTR = 22; + const TP_LDELIF = 23; + const TP_LDELFOR = 24; + const TP_SEMICOLON = 25; + const TP_INCDEC = 26; + const TP_TO = 27; + const TP_STEP = 28; + const TP_LDELFOREACH = 29; + const TP_SPACE = 30; + const TP_AS = 31; + const TP_APTR = 32; + const TP_LDELSETFILTER = 33; + const TP_SMARTYBLOCKCHILDPARENT = 34; + const TP_LDELSLASH = 35; + const TP_ATTR = 36; + const TP_INTEGER = 37; + const TP_COMMA = 38; + const TP_OPENP = 39; + const TP_CLOSEP = 40; + const TP_MATH = 41; + const TP_UNIMATH = 42; + const TP_ANDSYM = 43; + const TP_ISIN = 44; + const TP_ISDIVBY = 45; + const TP_ISNOTDIVBY = 46; + const TP_ISEVEN = 47; + const TP_ISNOTEVEN = 48; + const TP_ISEVENBY = 49; + const TP_ISNOTEVENBY = 50; + const TP_ISODD = 51; + const TP_ISNOTODD = 52; + const TP_ISODDBY = 53; + const TP_ISNOTODDBY = 54; + const TP_INSTANCEOF = 55; + const TP_QMARK = 56; + const TP_NOT = 57; + const TP_TYPECAST = 58; + const TP_HEX = 59; + const TP_DOT = 60; + const TP_SINGLEQUOTESTRING = 61; + const TP_DOUBLECOLON = 62; + const TP_AT = 63; + const TP_HATCH = 64; + const TP_OPENB = 65; + const TP_CLOSEB = 66; + const TP_EQUALS = 67; + const TP_NOTEQUALS = 68; + const TP_GREATERTHAN = 69; + const TP_LESSTHAN = 70; + const TP_GREATEREQUAL = 71; + const TP_LESSEQUAL = 72; + const TP_IDENTITY = 73; + const TP_NONEIDENTITY = 74; + const TP_MOD = 75; + const TP_LAND = 76; + const TP_LOR = 77; + const TP_LXOR = 78; + const TP_QUOTE = 79; + const TP_BACKTICK = 80; + const TP_DOLLARID = 81; + const YY_NO_ACTION = 570; + const YY_ACCEPT_ACTION = 569; + const YY_ERROR_ACTION = 568; - const YY_SZ_ACTTAB = 2383; + const YY_SZ_ACTTAB = 2407; static public $yy_action = array( - /* 0 */ 225, 275, 263, 276, 259, 257, 260, 390, 356, 359, - /* 10 */ 353, 193, 18, 127, 42, 317, 381, 351, 196, 350, - /* 20 */ 6, 108, 24, 98, 128, 190, 134, 318, 41, 41, - /* 30 */ 249, 329, 231, 18, 43, 43, 317, 26, 298, 50, - /* 40 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340, - /* 50 */ 341, 40, 20, 387, 308, 307, 309, 374, 254, 248, - /* 60 */ 252, 217, 193, 385, 291, 375, 376, 377, 373, 372, - /* 70 */ 368, 367, 369, 370, 371, 378, 379, 225, 312, 255, - /* 80 */ 225, 225, 118, 2, 207, 76, 135, 596, 95, 281, - /* 90 */ 271, 264, 2, 366, 315, 386, 461, 383, 232, 294, - /* 100 */ 303, 388, 313, 389, 227, 41, 144, 225, 461, 245, - /* 110 */ 282, 43, 218, 358, 461, 144, 50, 47, 48, 44, - /* 120 */ 10, 13, 305, 306, 12, 11, 340, 341, 40, 20, - /* 130 */ 105, 177, 522, 46, 46, 41, 19, 522, 143, 297, - /* 140 */ 325, 43, 375, 376, 377, 373, 372, 368, 367, 369, - /* 150 */ 370, 371, 378, 379, 225, 312, 293, 206, 225, 141, - /* 160 */ 124, 225, 54, 119, 123, 225, 459, 38, 173, 246, - /* 170 */ 319, 315, 386, 347, 455, 232, 294, 303, 459, 313, - /* 180 */ 139, 321, 41, 31, 459, 41, 41, 2, 43, 188, - /* 190 */ 2, 43, 43, 50, 47, 48, 44, 10, 13, 305, - /* 200 */ 306, 12, 11, 340, 341, 40, 20, 225, 136, 301, - /* 210 */ 144, 194, 350, 144, 46, 202, 206, 328, 198, 375, - /* 220 */ 376, 377, 373, 372, 368, 367, 369, 370, 371, 378, - /* 230 */ 379, 21, 9, 28, 185, 41, 318, 225, 265, 271, - /* 240 */ 264, 43, 206, 27, 173, 206, 50, 47, 48, 44, - /* 250 */ 10, 13, 305, 306, 12, 11, 340, 341, 40, 20, - /* 260 */ 225, 178, 18, 212, 330, 317, 17, 32, 8, 14, - /* 270 */ 325, 267, 375, 376, 377, 373, 372, 368, 367, 369, - /* 280 */ 370, 371, 378, 379, 136, 363, 363, 207, 41, 4, - /* 290 */ 46, 5, 131, 233, 43, 25, 186, 289, 318, 50, - /* 300 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340, - /* 310 */ 341, 40, 20, 225, 100, 161, 18, 355, 361, 317, - /* 320 */ 26, 109, 360, 346, 325, 375, 376, 377, 373, 372, - /* 330 */ 368, 367, 369, 370, 371, 378, 379, 106, 201, 172, - /* 340 */ 25, 206, 288, 25, 18, 261, 181, 317, 325, 45, - /* 350 */ 339, 129, 50, 47, 48, 44, 10, 13, 305, 306, - /* 360 */ 12, 11, 340, 341, 40, 20, 225, 104, 162, 18, - /* 370 */ 16, 205, 317, 206, 248, 238, 43, 325, 375, 376, - /* 380 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379, - /* 390 */ 255, 354, 243, 229, 206, 342, 18, 239, 242, 241, - /* 400 */ 248, 266, 300, 330, 240, 50, 47, 48, 44, 10, - /* 410 */ 13, 305, 306, 12, 11, 340, 341, 40, 20, 225, - /* 420 */ 165, 176, 184, 18, 18, 18, 253, 215, 251, 325, - /* 430 */ 325, 375, 376, 377, 373, 372, 368, 367, 369, 370, - /* 440 */ 371, 378, 379, 304, 268, 159, 207, 207, 247, 206, - /* 450 */ 148, 41, 195, 350, 325, 27, 33, 43, 50, 47, - /* 460 */ 48, 44, 10, 13, 305, 306, 12, 11, 340, 341, - /* 470 */ 40, 20, 163, 225, 328, 199, 133, 29, 187, 23, - /* 480 */ 250, 325, 101, 225, 375, 376, 377, 373, 372, 368, - /* 490 */ 367, 369, 370, 371, 378, 379, 225, 298, 207, 334, - /* 500 */ 225, 45, 312, 103, 299, 192, 154, 364, 18, 302, - /* 510 */ 135, 317, 285, 35, 173, 203, 320, 3, 236, 6, - /* 520 */ 108, 41, 232, 294, 303, 134, 313, 43, 130, 249, - /* 530 */ 329, 231, 250, 225, 280, 50, 47, 48, 44, 10, - /* 540 */ 13, 305, 306, 12, 11, 340, 341, 40, 20, 336, - /* 550 */ 36, 166, 212, 230, 332, 228, 338, 8, 132, 330, - /* 560 */ 325, 375, 376, 377, 373, 372, 368, 367, 369, 370, - /* 570 */ 371, 378, 379, 225, 312, 345, 37, 362, 141, 312, - /* 580 */ 94, 77, 135, 156, 236, 182, 173, 135, 122, 204, - /* 590 */ 315, 386, 365, 225, 232, 294, 303, 137, 313, 232, - /* 600 */ 294, 303, 125, 313, 41, 222, 333, 180, 277, 337, - /* 610 */ 43, 225, 50, 47, 48, 44, 10, 13, 305, 306, - /* 620 */ 12, 11, 340, 341, 40, 20, 136, 335, 316, 5, - /* 630 */ 22, 197, 269, 34, 173, 148, 126, 116, 375, 376, - /* 640 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379, - /* 650 */ 225, 312, 298, 225, 292, 141, 312, 258, 77, 135, - /* 660 */ 153, 183, 318, 301, 135, 175, 284, 315, 386, 461, - /* 670 */ 117, 232, 294, 303, 325, 313, 232, 294, 303, 382, - /* 680 */ 313, 461, 220, 110, 329, 298, 318, 461, 329, 50, - /* 690 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340, - /* 700 */ 341, 40, 20, 225, 30, 191, 46, 189, 314, 107, - /* 710 */ 329, 329, 146, 97, 102, 375, 376, 377, 373, 372, - /* 720 */ 368, 367, 369, 370, 371, 378, 379, 298, 298, 298, - /* 730 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - /* 740 */ 329, 329, 50, 47, 48, 44, 10, 13, 305, 306, - /* 750 */ 12, 11, 340, 341, 40, 20, 225, 329, 329, 329, - /* 760 */ 329, 329, 329, 329, 329, 114, 160, 115, 375, 376, - /* 770 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379, - /* 780 */ 298, 298, 298, 329, 329, 329, 329, 329, 329, 329, - /* 790 */ 329, 329, 329, 329, 283, 50, 47, 48, 44, 10, - /* 800 */ 13, 305, 306, 12, 11, 340, 341, 40, 20, 329, - /* 810 */ 225, 329, 329, 329, 329, 329, 329, 329, 329, 329, - /* 820 */ 329, 375, 376, 377, 373, 372, 368, 367, 369, 370, - /* 830 */ 371, 378, 379, 200, 329, 329, 329, 329, 329, 329, - /* 840 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 50, - /* 850 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340, - /* 860 */ 341, 40, 20, 225, 329, 329, 329, 329, 329, 329, - /* 870 */ 329, 329, 329, 329, 329, 375, 376, 377, 373, 372, - /* 880 */ 368, 367, 369, 370, 371, 378, 379, 329, 329, 329, - /* 890 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - /* 900 */ 329, 329, 50, 47, 48, 44, 10, 13, 305, 306, - /* 910 */ 12, 11, 340, 341, 40, 20, 329, 329, 329, 329, - /* 920 */ 329, 329, 329, 329, 329, 329, 329, 290, 375, 376, - /* 930 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379, - /* 940 */ 225, 312, 329, 225, 329, 141, 312, 329, 77, 135, - /* 950 */ 152, 329, 329, 329, 135, 158, 208, 315, 386, 458, - /* 960 */ 329, 232, 294, 303, 325, 313, 232, 294, 303, 329, - /* 970 */ 313, 458, 223, 329, 329, 329, 318, 458, 329, 50, - /* 980 */ 47, 48, 44, 10, 13, 305, 306, 12, 11, 340, - /* 990 */ 341, 40, 20, 225, 329, 329, 46, 329, 329, 329, - /* 1000 */ 329, 329, 329, 329, 329, 375, 376, 377, 373, 372, - /* 1010 */ 368, 367, 369, 370, 371, 378, 379, 329, 329, 329, - /* 1020 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - /* 1030 */ 329, 329, 50, 47, 48, 44, 10, 13, 305, 306, - /* 1040 */ 12, 11, 340, 341, 40, 20, 329, 329, 329, 329, - /* 1050 */ 329, 329, 329, 329, 329, 329, 329, 329, 375, 376, - /* 1060 */ 377, 373, 372, 368, 367, 369, 370, 371, 378, 379, - /* 1070 */ 329, 329, 329, 50, 47, 48, 44, 10, 13, 305, - /* 1080 */ 306, 12, 11, 340, 341, 40, 20, 329, 329, 329, - /* 1090 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 375, - /* 1100 */ 376, 377, 373, 372, 368, 367, 369, 370, 371, 378, - /* 1110 */ 379, 329, 329, 329, 329, 329, 42, 329, 145, 211, - /* 1120 */ 329, 329, 6, 108, 329, 279, 329, 312, 134, 329, - /* 1130 */ 329, 150, 249, 329, 231, 135, 235, 41, 39, 329, - /* 1140 */ 329, 52, 329, 43, 311, 329, 312, 232, 294, 303, - /* 1150 */ 147, 313, 329, 170, 135, 329, 51, 49, 331, 237, - /* 1160 */ 296, 329, 325, 106, 1, 278, 232, 294, 303, 329, - /* 1170 */ 313, 155, 329, 42, 318, 145, 216, 329, 96, 6, - /* 1180 */ 108, 18, 329, 226, 317, 134, 329, 313, 329, 249, - /* 1190 */ 329, 231, 329, 235, 41, 39, 256, 329, 52, 329, - /* 1200 */ 43, 329, 312, 329, 329, 329, 141, 329, 329, 66, - /* 1210 */ 119, 238, 329, 51, 49, 331, 237, 296, 315, 386, - /* 1220 */ 106, 1, 232, 294, 303, 329, 313, 270, 329, 329, - /* 1230 */ 42, 329, 140, 92, 329, 96, 6, 108, 18, 41, - /* 1240 */ 169, 317, 134, 329, 273, 43, 249, 329, 231, 325, - /* 1250 */ 235, 41, 39, 244, 329, 52, 41, 43, 329, 312, - /* 1260 */ 329, 318, 43, 141, 329, 329, 67, 135, 225, 329, - /* 1270 */ 51, 49, 331, 237, 296, 315, 386, 106, 1, 224, - /* 1280 */ 294, 303, 329, 313, 310, 329, 329, 42, 329, 145, - /* 1290 */ 213, 329, 96, 6, 108, 329, 41, 329, 329, 134, - /* 1300 */ 329, 323, 43, 249, 329, 231, 329, 235, 329, 39, - /* 1310 */ 329, 329, 52, 41, 329, 329, 312, 329, 329, 43, - /* 1320 */ 141, 46, 329, 86, 135, 329, 329, 51, 49, 331, - /* 1330 */ 237, 296, 315, 386, 106, 1, 232, 294, 303, 329, - /* 1340 */ 313, 274, 329, 329, 42, 329, 142, 216, 329, 96, - /* 1350 */ 6, 108, 329, 41, 329, 329, 134, 329, 348, 43, - /* 1360 */ 249, 329, 231, 329, 235, 329, 7, 329, 329, 52, - /* 1370 */ 41, 329, 329, 312, 329, 329, 43, 141, 329, 329, - /* 1380 */ 90, 135, 329, 329, 51, 49, 331, 237, 296, 315, - /* 1390 */ 386, 106, 1, 232, 294, 303, 329, 313, 295, 329, - /* 1400 */ 329, 42, 329, 138, 216, 329, 96, 6, 108, 329, - /* 1410 */ 41, 329, 329, 134, 329, 322, 43, 249, 329, 231, - /* 1420 */ 329, 235, 329, 39, 329, 329, 52, 41, 329, 329, - /* 1430 */ 312, 329, 329, 43, 141, 329, 329, 87, 135, 329, - /* 1440 */ 329, 51, 49, 331, 237, 296, 315, 386, 106, 1, - /* 1450 */ 232, 294, 303, 329, 313, 384, 329, 329, 42, 329, - /* 1460 */ 131, 216, 329, 96, 6, 108, 329, 41, 329, 329, - /* 1470 */ 134, 329, 380, 43, 249, 329, 231, 329, 235, 329, - /* 1480 */ 15, 329, 329, 52, 41, 329, 329, 312, 329, 329, - /* 1490 */ 43, 141, 329, 329, 79, 135, 329, 329, 51, 49, - /* 1500 */ 331, 237, 296, 315, 386, 106, 1, 232, 294, 303, - /* 1510 */ 329, 313, 272, 329, 329, 42, 329, 145, 210, 329, - /* 1520 */ 96, 6, 108, 329, 41, 329, 329, 134, 329, 349, - /* 1530 */ 43, 249, 329, 231, 329, 221, 329, 39, 329, 329, - /* 1540 */ 52, 41, 329, 329, 312, 329, 329, 43, 141, 329, - /* 1550 */ 329, 70, 135, 329, 329, 51, 49, 331, 237, 296, - /* 1560 */ 315, 386, 106, 1, 232, 294, 303, 329, 313, 324, - /* 1570 */ 329, 329, 42, 329, 145, 209, 329, 96, 6, 108, - /* 1580 */ 329, 41, 329, 329, 134, 329, 326, 43, 249, 329, - /* 1590 */ 231, 329, 235, 329, 39, 329, 329, 52, 41, 329, - /* 1600 */ 329, 312, 329, 329, 43, 141, 329, 329, 74, 135, - /* 1610 */ 329, 329, 51, 49, 331, 237, 296, 315, 386, 106, - /* 1620 */ 1, 232, 294, 303, 329, 313, 262, 329, 329, 42, - /* 1630 */ 329, 131, 214, 329, 96, 6, 108, 329, 41, 329, - /* 1640 */ 329, 134, 329, 327, 43, 249, 329, 231, 329, 235, - /* 1650 */ 329, 15, 329, 329, 52, 41, 329, 329, 312, 329, - /* 1660 */ 329, 43, 141, 329, 329, 53, 135, 329, 329, 51, - /* 1670 */ 49, 331, 237, 296, 315, 386, 106, 329, 232, 294, - /* 1680 */ 303, 329, 313, 286, 329, 329, 42, 329, 131, 216, - /* 1690 */ 329, 96, 6, 108, 329, 41, 329, 329, 134, 329, - /* 1700 */ 343, 43, 249, 329, 231, 329, 235, 329, 15, 329, - /* 1710 */ 329, 52, 41, 329, 329, 312, 329, 329, 43, 118, - /* 1720 */ 329, 329, 76, 135, 329, 329, 51, 49, 331, 237, - /* 1730 */ 296, 315, 386, 106, 329, 232, 294, 303, 329, 313, - /* 1740 */ 329, 329, 329, 329, 504, 329, 329, 329, 96, 329, - /* 1750 */ 357, 504, 329, 504, 504, 364, 504, 504, 329, 329, - /* 1760 */ 329, 35, 504, 329, 504, 2, 504, 6, 108, 329, - /* 1770 */ 198, 174, 329, 134, 329, 329, 329, 249, 329, 231, - /* 1780 */ 325, 504, 329, 21, 9, 329, 329, 329, 144, 329, - /* 1790 */ 329, 329, 504, 329, 312, 99, 179, 206, 141, 329, - /* 1800 */ 329, 58, 135, 329, 329, 325, 504, 329, 21, 9, - /* 1810 */ 315, 386, 329, 312, 232, 294, 303, 141, 313, 329, - /* 1820 */ 71, 135, 206, 344, 37, 362, 329, 329, 329, 315, - /* 1830 */ 386, 329, 329, 232, 294, 303, 312, 313, 329, 329, - /* 1840 */ 141, 329, 329, 72, 135, 329, 329, 312, 329, 329, - /* 1850 */ 329, 141, 315, 386, 65, 135, 232, 294, 303, 329, - /* 1860 */ 313, 329, 329, 315, 386, 329, 329, 232, 294, 303, - /* 1870 */ 329, 313, 329, 329, 312, 198, 167, 329, 141, 329, - /* 1880 */ 329, 69, 135, 329, 329, 325, 329, 329, 21, 9, - /* 1890 */ 315, 386, 329, 329, 232, 294, 303, 312, 313, 329, - /* 1900 */ 329, 141, 206, 329, 85, 135, 329, 312, 329, 329, - /* 1910 */ 329, 149, 329, 315, 386, 135, 312, 232, 294, 303, - /* 1920 */ 141, 313, 329, 81, 135, 329, 329, 232, 294, 303, - /* 1930 */ 329, 313, 315, 386, 329, 329, 232, 294, 303, 312, - /* 1940 */ 313, 329, 329, 141, 329, 329, 82, 135, 329, 329, - /* 1950 */ 312, 329, 329, 329, 141, 315, 386, 63, 135, 232, - /* 1960 */ 294, 303, 329, 313, 329, 329, 315, 386, 329, 329, - /* 1970 */ 232, 294, 303, 329, 313, 329, 312, 329, 329, 329, - /* 1980 */ 141, 329, 329, 73, 135, 329, 329, 312, 329, 329, - /* 1990 */ 329, 141, 315, 386, 83, 135, 232, 294, 303, 329, - /* 2000 */ 313, 329, 329, 315, 386, 329, 312, 232, 294, 303, - /* 2010 */ 141, 313, 329, 89, 135, 329, 329, 329, 329, 329, - /* 2020 */ 329, 329, 315, 386, 329, 312, 232, 294, 303, 111, - /* 2030 */ 313, 329, 68, 135, 329, 329, 312, 329, 329, 329, - /* 2040 */ 141, 315, 386, 62, 135, 232, 294, 303, 329, 313, - /* 2050 */ 329, 329, 315, 386, 329, 329, 232, 294, 303, 329, - /* 2060 */ 313, 329, 312, 329, 329, 329, 141, 329, 329, 61, - /* 2070 */ 135, 329, 329, 312, 329, 329, 329, 141, 315, 386, - /* 2080 */ 91, 135, 232, 294, 303, 329, 313, 329, 329, 315, - /* 2090 */ 386, 329, 312, 232, 294, 303, 141, 313, 329, 78, - /* 2100 */ 135, 329, 329, 329, 329, 329, 329, 329, 315, 386, - /* 2110 */ 329, 312, 232, 294, 303, 141, 313, 329, 66, 135, - /* 2120 */ 329, 329, 312, 329, 329, 329, 141, 315, 386, 80, - /* 2130 */ 135, 232, 294, 303, 329, 313, 329, 329, 315, 386, - /* 2140 */ 329, 329, 232, 294, 303, 329, 313, 329, 312, 329, - /* 2150 */ 329, 329, 113, 329, 329, 88, 135, 329, 329, 312, - /* 2160 */ 329, 329, 329, 112, 315, 386, 84, 135, 232, 294, - /* 2170 */ 303, 329, 313, 329, 329, 315, 386, 329, 312, 232, - /* 2180 */ 294, 303, 141, 313, 329, 57, 135, 329, 329, 329, - /* 2190 */ 329, 329, 329, 329, 315, 386, 329, 312, 232, 294, - /* 2200 */ 303, 93, 313, 329, 59, 121, 329, 329, 312, 329, - /* 2210 */ 329, 329, 141, 315, 386, 75, 135, 232, 294, 303, - /* 2220 */ 329, 313, 329, 329, 315, 386, 329, 329, 232, 294, - /* 2230 */ 303, 329, 313, 329, 312, 329, 329, 329, 141, 329, - /* 2240 */ 329, 60, 135, 329, 329, 312, 329, 329, 329, 141, - /* 2250 */ 315, 386, 64, 135, 232, 294, 303, 329, 313, 329, - /* 2260 */ 329, 315, 386, 329, 312, 232, 294, 303, 120, 313, - /* 2270 */ 329, 55, 135, 329, 329, 329, 329, 329, 329, 329, - /* 2280 */ 315, 386, 329, 312, 232, 294, 303, 93, 313, 329, - /* 2290 */ 56, 121, 225, 329, 312, 329, 198, 164, 157, 315, - /* 2300 */ 386, 329, 135, 219, 294, 303, 325, 313, 352, 21, - /* 2310 */ 9, 287, 234, 329, 232, 294, 303, 329, 313, 329, - /* 2320 */ 41, 329, 329, 206, 312, 329, 43, 329, 151, 2, - /* 2330 */ 329, 329, 135, 329, 329, 329, 329, 329, 329, 329, - /* 2340 */ 198, 168, 329, 329, 232, 294, 303, 329, 313, 329, - /* 2350 */ 325, 329, 144, 21, 9, 198, 171, 329, 329, 329, - /* 2360 */ 329, 329, 329, 329, 329, 325, 329, 206, 21, 9, - /* 2370 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, - /* 2380 */ 329, 329, 206, + /* 0 */ 219, 309, 305, 301, 302, 303, 304, 310, 311, 317, + /* 10 */ 318, 319, 201, 30, 273, 9, 33, 238, 280, 15, + /* 20 */ 5, 108, 235, 234, 220, 7, 126, 42, 30, 30, + /* 30 */ 259, 211, 256, 495, 15, 15, 10, 33, 495, 280, + /* 40 */ 46, 47, 51, 45, 24, 14, 352, 353, 39, 37, + /* 50 */ 278, 359, 12, 25, 219, 219, 326, 434, 219, 192, + /* 60 */ 434, 569, 95, 263, 227, 306, 360, 361, 358, 357, + /* 70 */ 354, 355, 356, 342, 341, 328, 329, 330, 292, 219, + /* 80 */ 202, 322, 242, 30, 434, 231, 207, 434, 143, 15, + /* 90 */ 434, 35, 158, 434, 46, 47, 51, 45, 24, 14, + /* 100 */ 352, 353, 39, 37, 278, 359, 12, 25, 219, 48, + /* 110 */ 32, 219, 48, 391, 196, 2, 31, 138, 321, 4, + /* 120 */ 360, 361, 358, 357, 354, 355, 356, 342, 341, 328, + /* 130 */ 329, 330, 127, 48, 290, 349, 251, 30, 145, 140, + /* 140 */ 30, 207, 264, 15, 200, 322, 15, 334, 46, 47, + /* 150 */ 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, + /* 160 */ 12, 25, 219, 289, 219, 48, 431, 297, 219, 33, + /* 170 */ 396, 280, 18, 191, 360, 361, 358, 357, 354, 355, + /* 180 */ 356, 342, 341, 328, 329, 330, 300, 285, 286, 287, + /* 190 */ 299, 206, 219, 431, 428, 194, 201, 315, 314, 431, + /* 200 */ 207, 281, 46, 47, 51, 45, 24, 14, 352, 353, + /* 210 */ 39, 37, 278, 359, 12, 25, 219, 33, 48, 280, + /* 220 */ 34, 30, 48, 197, 322, 276, 158, 15, 360, 361, + /* 230 */ 358, 357, 354, 355, 356, 342, 341, 328, 329, 330, + /* 240 */ 230, 338, 16, 289, 103, 179, 244, 219, 295, 2, + /* 250 */ 41, 33, 265, 280, 283, 148, 46, 47, 51, 45, + /* 260 */ 24, 14, 352, 353, 39, 37, 278, 359, 12, 25, + /* 270 */ 219, 207, 145, 43, 132, 189, 109, 333, 307, 227, + /* 280 */ 306, 190, 360, 361, 358, 357, 354, 355, 356, 342, + /* 290 */ 341, 328, 329, 330, 20, 22, 248, 339, 219, 99, + /* 300 */ 174, 48, 324, 33, 346, 280, 18, 288, 207, 283, + /* 310 */ 46, 47, 51, 45, 24, 14, 352, 353, 39, 37, + /* 320 */ 278, 359, 12, 25, 219, 289, 207, 30, 41, 110, + /* 330 */ 275, 2, 41, 15, 272, 266, 360, 361, 358, 357, + /* 340 */ 354, 355, 356, 342, 341, 328, 329, 330, 242, 40, + /* 350 */ 236, 347, 104, 177, 145, 219, 44, 316, 148, 135, + /* 360 */ 228, 27, 283, 269, 46, 47, 51, 45, 24, 14, + /* 370 */ 352, 353, 39, 37, 278, 359, 12, 25, 219, 207, + /* 380 */ 208, 33, 7, 280, 245, 239, 136, 173, 241, 279, + /* 390 */ 360, 361, 358, 357, 354, 355, 356, 342, 341, 328, + /* 400 */ 329, 330, 29, 158, 106, 13, 122, 171, 181, 6, + /* 410 */ 33, 15, 226, 33, 219, 237, 283, 283, 46, 47, + /* 420 */ 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, + /* 430 */ 12, 25, 219, 205, 205, 252, 313, 238, 312, 235, + /* 440 */ 232, 195, 97, 127, 360, 361, 358, 357, 354, 355, + /* 450 */ 356, 342, 341, 328, 329, 330, 28, 320, 230, 105, + /* 460 */ 182, 164, 176, 33, 279, 254, 282, 186, 207, 283, + /* 470 */ 283, 253, 46, 47, 51, 45, 24, 14, 352, 353, + /* 480 */ 39, 37, 278, 359, 12, 25, 219, 205, 260, 107, + /* 490 */ 235, 262, 33, 193, 214, 332, 166, 198, 360, 361, + /* 500 */ 358, 357, 354, 355, 356, 342, 341, 328, 329, 330, + /* 510 */ 137, 175, 167, 291, 308, 344, 185, 261, 267, 161, + /* 520 */ 283, 283, 128, 337, 124, 283, 46, 47, 51, 45, + /* 530 */ 24, 14, 352, 353, 39, 37, 278, 359, 12, 25, + /* 540 */ 219, 38, 205, 203, 141, 169, 257, 134, 35, 130, + /* 550 */ 156, 114, 360, 361, 358, 357, 354, 355, 356, 342, + /* 560 */ 341, 328, 329, 330, 320, 158, 320, 241, 36, 293, + /* 570 */ 298, 94, 21, 26, 284, 219, 292, 168, 271, 162, + /* 580 */ 46, 47, 51, 45, 24, 14, 352, 353, 39, 37, + /* 590 */ 278, 359, 12, 25, 219, 279, 229, 205, 44, 281, + /* 600 */ 187, 17, 270, 331, 98, 127, 360, 361, 358, 357, + /* 610 */ 354, 355, 356, 342, 341, 328, 329, 330, 199, 320, + /* 620 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + /* 630 */ 331, 331, 331, 331, 46, 47, 51, 45, 24, 14, + /* 640 */ 352, 353, 39, 37, 278, 359, 12, 25, 219, 331, + /* 650 */ 268, 331, 331, 331, 331, 331, 331, 331, 125, 115, + /* 660 */ 360, 361, 358, 357, 354, 355, 356, 342, 341, 328, + /* 670 */ 329, 330, 279, 331, 320, 331, 331, 331, 331, 331, + /* 680 */ 331, 331, 331, 331, 331, 331, 331, 331, 46, 47, + /* 690 */ 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, + /* 700 */ 12, 25, 219, 331, 204, 331, 331, 331, 331, 331, + /* 710 */ 331, 159, 100, 116, 360, 361, 358, 357, 354, 355, + /* 720 */ 356, 342, 341, 328, 329, 330, 320, 320, 320, 331, + /* 730 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + /* 740 */ 331, 331, 46, 47, 51, 45, 24, 14, 352, 353, + /* 750 */ 39, 37, 278, 359, 12, 25, 219, 331, 331, 331, + /* 760 */ 331, 331, 331, 331, 331, 102, 117, 331, 360, 361, + /* 770 */ 358, 357, 354, 355, 356, 342, 341, 328, 329, 330, + /* 780 */ 320, 320, 331, 331, 331, 331, 331, 331, 331, 331, + /* 790 */ 331, 331, 331, 331, 331, 331, 46, 47, 51, 45, + /* 800 */ 24, 14, 352, 353, 39, 37, 278, 359, 12, 25, + /* 810 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + /* 820 */ 158, 331, 360, 361, 358, 357, 354, 355, 356, 342, + /* 830 */ 341, 328, 329, 330, 331, 331, 331, 331, 46, 47, + /* 840 */ 51, 45, 24, 14, 352, 353, 39, 37, 278, 359, + /* 850 */ 12, 25, 331, 331, 331, 331, 331, 331, 211, 331, + /* 860 */ 331, 331, 331, 10, 360, 361, 358, 357, 354, 355, + /* 870 */ 356, 342, 341, 328, 329, 330, 331, 331, 331, 331, + /* 880 */ 331, 331, 331, 9, 142, 212, 331, 331, 5, 108, + /* 890 */ 331, 246, 331, 331, 126, 157, 183, 331, 259, 123, + /* 900 */ 256, 331, 250, 331, 23, 283, 331, 52, 277, 331, + /* 910 */ 331, 255, 350, 348, 331, 345, 331, 279, 180, 178, + /* 920 */ 331, 331, 49, 50, 296, 240, 351, 283, 283, 106, + /* 930 */ 1, 274, 331, 147, 331, 331, 331, 331, 331, 279, + /* 940 */ 279, 9, 144, 92, 96, 233, 5, 108, 331, 345, + /* 950 */ 331, 331, 126, 331, 331, 246, 259, 323, 256, 146, + /* 960 */ 250, 331, 23, 123, 184, 52, 331, 331, 331, 331, + /* 970 */ 246, 331, 343, 283, 153, 255, 350, 348, 123, 345, + /* 980 */ 49, 50, 296, 240, 351, 279, 331, 106, 1, 331, + /* 990 */ 255, 350, 348, 331, 345, 33, 331, 280, 331, 9, + /* 1000 */ 142, 224, 96, 331, 5, 108, 331, 30, 331, 247, + /* 1010 */ 126, 246, 331, 15, 259, 149, 256, 331, 250, 123, + /* 1020 */ 23, 331, 331, 52, 331, 331, 331, 331, 331, 331, + /* 1030 */ 331, 255, 350, 348, 331, 345, 331, 331, 49, 50, + /* 1040 */ 296, 240, 351, 331, 331, 106, 1, 331, 331, 331, + /* 1050 */ 331, 331, 33, 331, 280, 331, 331, 9, 135, 224, + /* 1060 */ 96, 331, 5, 108, 30, 246, 258, 331, 126, 151, + /* 1070 */ 15, 246, 259, 123, 256, 154, 250, 331, 11, 123, + /* 1080 */ 331, 52, 331, 331, 331, 255, 350, 348, 331, 345, + /* 1090 */ 331, 255, 350, 348, 331, 345, 49, 50, 296, 240, + /* 1100 */ 351, 331, 331, 106, 1, 331, 331, 331, 331, 331, + /* 1110 */ 331, 331, 331, 331, 331, 9, 142, 210, 96, 331, + /* 1120 */ 5, 108, 331, 331, 331, 331, 126, 246, 331, 331, + /* 1130 */ 259, 155, 256, 331, 216, 123, 23, 331, 331, 52, + /* 1140 */ 331, 331, 331, 331, 331, 331, 331, 255, 350, 348, + /* 1150 */ 331, 345, 331, 331, 49, 50, 296, 240, 351, 331, + /* 1160 */ 331, 106, 1, 331, 331, 331, 331, 331, 331, 331, + /* 1170 */ 331, 331, 331, 9, 131, 224, 96, 331, 5, 108, + /* 1180 */ 331, 331, 331, 331, 126, 246, 331, 331, 259, 152, + /* 1190 */ 256, 331, 250, 123, 3, 331, 331, 52, 331, 331, + /* 1200 */ 331, 331, 331, 331, 331, 255, 350, 348, 331, 345, + /* 1210 */ 331, 331, 49, 50, 296, 240, 351, 331, 331, 106, + /* 1220 */ 1, 331, 331, 331, 331, 331, 331, 331, 331, 331, + /* 1230 */ 331, 9, 142, 213, 96, 331, 5, 108, 331, 331, + /* 1240 */ 331, 331, 126, 246, 331, 331, 259, 150, 256, 331, + /* 1250 */ 250, 123, 23, 331, 331, 52, 331, 331, 331, 331, + /* 1260 */ 331, 331, 331, 255, 350, 348, 331, 345, 331, 331, + /* 1270 */ 49, 50, 296, 240, 351, 331, 331, 106, 1, 331, + /* 1280 */ 219, 331, 401, 331, 331, 331, 331, 331, 331, 9, + /* 1290 */ 142, 209, 96, 331, 5, 108, 331, 331, 331, 331, + /* 1300 */ 126, 249, 331, 331, 259, 331, 256, 331, 250, 30, + /* 1310 */ 23, 190, 163, 52, 331, 15, 331, 331, 2, 331, + /* 1320 */ 331, 283, 331, 331, 20, 22, 331, 331, 49, 50, + /* 1330 */ 296, 240, 351, 331, 331, 106, 1, 331, 207, 331, + /* 1340 */ 331, 145, 331, 331, 331, 432, 331, 9, 139, 224, + /* 1350 */ 96, 331, 5, 108, 331, 331, 331, 331, 126, 331, + /* 1360 */ 331, 331, 259, 243, 256, 331, 250, 331, 23, 190, + /* 1370 */ 188, 52, 432, 331, 331, 331, 331, 331, 432, 283, + /* 1380 */ 331, 2, 20, 22, 331, 331, 49, 50, 296, 240, + /* 1390 */ 351, 331, 331, 106, 1, 331, 207, 331, 331, 331, + /* 1400 */ 331, 331, 331, 331, 145, 9, 135, 224, 96, 331, + /* 1410 */ 5, 108, 331, 331, 331, 331, 126, 331, 331, 331, + /* 1420 */ 259, 331, 256, 331, 250, 331, 11, 101, 160, 52, + /* 1430 */ 331, 331, 331, 331, 331, 331, 331, 283, 331, 331, + /* 1440 */ 20, 22, 331, 331, 49, 50, 296, 240, 351, 331, + /* 1450 */ 331, 106, 331, 331, 207, 331, 331, 331, 331, 331, + /* 1460 */ 331, 331, 331, 9, 135, 225, 96, 331, 5, 108, + /* 1470 */ 331, 331, 331, 331, 126, 331, 331, 331, 259, 331, + /* 1480 */ 256, 331, 250, 331, 11, 331, 477, 52, 331, 331, + /* 1490 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, + /* 1500 */ 331, 331, 49, 50, 296, 240, 351, 331, 477, 106, + /* 1510 */ 477, 477, 331, 477, 477, 331, 331, 331, 331, 477, + /* 1520 */ 331, 477, 2, 477, 96, 331, 331, 331, 331, 331, + /* 1530 */ 331, 331, 331, 331, 331, 246, 331, 331, 477, 120, + /* 1540 */ 331, 331, 84, 123, 331, 145, 331, 331, 331, 477, + /* 1550 */ 331, 294, 327, 331, 331, 255, 350, 348, 331, 345, + /* 1560 */ 331, 331, 331, 477, 331, 331, 331, 246, 331, 218, + /* 1570 */ 362, 120, 331, 331, 84, 123, 331, 331, 331, 331, + /* 1580 */ 331, 331, 331, 294, 327, 331, 331, 255, 350, 348, + /* 1590 */ 246, 345, 331, 331, 129, 331, 331, 61, 119, 232, + /* 1600 */ 331, 246, 335, 331, 331, 129, 294, 327, 80, 123, + /* 1610 */ 255, 350, 348, 331, 345, 331, 331, 294, 327, 331, + /* 1620 */ 331, 255, 350, 348, 331, 345, 246, 331, 331, 331, + /* 1630 */ 129, 331, 215, 80, 123, 331, 331, 331, 331, 331, + /* 1640 */ 331, 331, 294, 327, 331, 331, 255, 350, 348, 331, + /* 1650 */ 345, 331, 331, 331, 246, 190, 170, 221, 129, 331, + /* 1660 */ 331, 55, 119, 133, 331, 283, 331, 331, 20, 22, + /* 1670 */ 294, 327, 331, 331, 255, 350, 348, 246, 345, 331, + /* 1680 */ 331, 129, 207, 331, 80, 123, 331, 331, 331, 331, + /* 1690 */ 331, 331, 331, 294, 327, 331, 246, 255, 350, 348, + /* 1700 */ 129, 345, 331, 89, 123, 331, 331, 331, 223, 331, + /* 1710 */ 331, 331, 294, 327, 331, 331, 255, 350, 348, 246, + /* 1720 */ 345, 331, 331, 129, 331, 331, 70, 123, 331, 331, + /* 1730 */ 246, 331, 331, 331, 111, 294, 327, 67, 123, 255, + /* 1740 */ 350, 348, 331, 345, 331, 331, 294, 327, 331, 246, + /* 1750 */ 255, 350, 348, 129, 345, 331, 86, 123, 331, 331, + /* 1760 */ 331, 331, 331, 331, 331, 294, 327, 331, 246, 255, + /* 1770 */ 350, 348, 129, 345, 331, 90, 123, 331, 331, 331, + /* 1780 */ 331, 331, 331, 331, 294, 327, 331, 246, 255, 350, + /* 1790 */ 348, 129, 345, 331, 77, 123, 331, 331, 331, 331, + /* 1800 */ 331, 331, 331, 294, 327, 331, 246, 255, 350, 348, + /* 1810 */ 129, 345, 331, 74, 123, 331, 331, 246, 331, 331, + /* 1820 */ 331, 129, 294, 327, 66, 123, 255, 350, 348, 331, + /* 1830 */ 345, 331, 331, 294, 327, 331, 246, 222, 350, 348, + /* 1840 */ 129, 345, 331, 69, 123, 331, 331, 331, 331, 331, + /* 1850 */ 331, 331, 294, 327, 331, 246, 255, 350, 348, 129, + /* 1860 */ 345, 331, 78, 123, 331, 331, 331, 331, 331, 331, + /* 1870 */ 331, 294, 327, 331, 246, 255, 350, 348, 129, 345, + /* 1880 */ 331, 60, 123, 331, 331, 331, 331, 331, 331, 331, + /* 1890 */ 294, 327, 331, 246, 255, 350, 348, 129, 345, 331, + /* 1900 */ 53, 123, 331, 331, 246, 331, 331, 331, 129, 294, + /* 1910 */ 327, 65, 123, 255, 350, 348, 331, 345, 331, 331, + /* 1920 */ 294, 327, 336, 331, 255, 350, 348, 331, 345, 8, + /* 1930 */ 331, 331, 331, 331, 5, 108, 331, 331, 331, 331, + /* 1940 */ 126, 331, 331, 246, 259, 331, 256, 129, 331, 331, + /* 1950 */ 72, 123, 331, 331, 331, 331, 331, 331, 331, 294, + /* 1960 */ 327, 331, 246, 255, 350, 348, 129, 345, 331, 85, + /* 1970 */ 123, 331, 331, 331, 331, 331, 331, 331, 294, 327, + /* 1980 */ 331, 246, 255, 350, 348, 129, 345, 331, 81, 123, + /* 1990 */ 331, 19, 340, 331, 331, 331, 331, 294, 327, 331, + /* 2000 */ 246, 255, 350, 348, 113, 345, 331, 82, 123, 331, + /* 2010 */ 331, 246, 331, 331, 331, 93, 294, 327, 54, 121, + /* 2020 */ 255, 350, 348, 331, 345, 331, 331, 294, 327, 331, + /* 2030 */ 246, 217, 350, 348, 129, 345, 331, 58, 123, 331, + /* 2040 */ 331, 331, 331, 331, 331, 331, 294, 327, 331, 336, + /* 2050 */ 255, 350, 348, 331, 345, 331, 8, 331, 331, 331, + /* 2060 */ 331, 5, 108, 331, 331, 331, 331, 126, 246, 331, + /* 2070 */ 331, 259, 129, 256, 331, 88, 123, 331, 331, 246, + /* 2080 */ 331, 331, 331, 129, 294, 327, 56, 123, 255, 350, + /* 2090 */ 348, 331, 345, 331, 331, 294, 327, 331, 331, 255, + /* 2100 */ 350, 348, 331, 345, 246, 331, 331, 331, 129, 331, + /* 2110 */ 331, 68, 123, 331, 331, 331, 331, 325, 19, 340, + /* 2120 */ 294, 327, 331, 331, 255, 350, 348, 331, 345, 331, + /* 2130 */ 331, 331, 331, 246, 331, 331, 331, 118, 331, 331, + /* 2140 */ 59, 123, 331, 331, 331, 331, 190, 172, 331, 294, + /* 2150 */ 327, 331, 331, 255, 350, 348, 283, 345, 246, 20, + /* 2160 */ 22, 331, 93, 331, 331, 57, 121, 331, 331, 331, + /* 2170 */ 331, 331, 331, 207, 294, 327, 331, 246, 255, 350, + /* 2180 */ 348, 129, 345, 331, 64, 123, 331, 331, 246, 331, + /* 2190 */ 331, 331, 129, 294, 327, 63, 123, 255, 350, 348, + /* 2200 */ 331, 345, 331, 331, 294, 327, 331, 246, 255, 350, + /* 2210 */ 348, 129, 345, 331, 73, 123, 331, 331, 331, 331, + /* 2220 */ 190, 165, 331, 294, 327, 331, 331, 255, 350, 348, + /* 2230 */ 283, 345, 331, 20, 22, 331, 246, 331, 331, 331, + /* 2240 */ 129, 331, 331, 87, 123, 331, 331, 207, 331, 331, + /* 2250 */ 331, 331, 294, 327, 331, 331, 255, 350, 348, 331, + /* 2260 */ 345, 246, 331, 331, 331, 129, 331, 331, 75, 123, + /* 2270 */ 331, 331, 246, 331, 331, 331, 129, 294, 327, 61, + /* 2280 */ 123, 255, 350, 348, 331, 345, 331, 331, 294, 327, + /* 2290 */ 331, 246, 255, 350, 348, 129, 345, 331, 71, 123, + /* 2300 */ 331, 331, 246, 331, 331, 331, 129, 294, 327, 83, + /* 2310 */ 123, 255, 350, 348, 331, 345, 331, 331, 294, 327, + /* 2320 */ 331, 331, 255, 350, 348, 331, 345, 246, 331, 331, + /* 2330 */ 331, 112, 331, 331, 76, 123, 331, 331, 331, 331, + /* 2340 */ 331, 331, 331, 294, 327, 331, 331, 255, 350, 348, + /* 2350 */ 331, 345, 246, 331, 331, 331, 129, 331, 331, 91, + /* 2360 */ 123, 331, 331, 246, 331, 331, 331, 129, 294, 327, + /* 2370 */ 62, 123, 255, 350, 348, 331, 345, 331, 331, 294, + /* 2380 */ 327, 331, 246, 255, 350, 348, 129, 345, 331, 79, + /* 2390 */ 123, 331, 331, 331, 331, 331, 331, 331, 294, 327, + /* 2400 */ 331, 331, 255, 350, 348, 331, 345, ); static public $yy_lookahead = array( - /* 0 */ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - /* 10 */ 12, 13, 16, 98, 16, 19, 17, 17, 113, 114, - /* 20 */ 22, 23, 16, 97, 18, 19, 28, 112, 29, 29, - /* 30 */ 32, 33, 34, 16, 35, 35, 19, 20, 112, 40, + /* 0 */ 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, + /* 10 */ 13, 14, 15, 30, 66, 18, 18, 2, 20, 36, + /* 20 */ 23, 24, 94, 95, 96, 39, 29, 28, 30, 30, + /* 30 */ 33, 60, 35, 60, 36, 36, 65, 18, 65, 20, /* 40 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 50 */ 51, 52, 53, 4, 5, 6, 7, 8, 62, 93, - /* 60 */ 94, 95, 13, 14, 15, 66, 67, 68, 69, 70, - /* 70 */ 71, 72, 73, 74, 75, 76, 77, 1, 85, 62, - /* 80 */ 1, 1, 89, 38, 117, 92, 93, 82, 83, 84, - /* 90 */ 85, 86, 38, 17, 101, 102, 17, 17, 105, 106, - /* 100 */ 107, 86, 109, 88, 59, 29, 61, 1, 29, 30, - /* 110 */ 65, 35, 119, 120, 35, 61, 40, 41, 42, 43, - /* 120 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 130 */ 90, 91, 59, 54, 54, 29, 16, 64, 18, 19, - /* 140 */ 100, 35, 66, 67, 68, 69, 70, 71, 72, 73, - /* 150 */ 74, 75, 76, 77, 1, 85, 36, 117, 1, 89, - /* 160 */ 18, 1, 92, 93, 94, 1, 17, 20, 21, 20, - /* 170 */ 17, 101, 102, 17, 17, 105, 106, 107, 29, 109, - /* 180 */ 38, 17, 29, 31, 35, 29, 29, 38, 35, 90, - /* 190 */ 38, 35, 35, 40, 41, 42, 43, 44, 45, 46, - /* 200 */ 47, 48, 49, 50, 51, 52, 53, 1, 61, 111, - /* 210 */ 61, 113, 114, 61, 54, 90, 117, 118, 90, 66, - /* 220 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 230 */ 77, 103, 104, 27, 110, 29, 112, 1, 84, 85, - /* 240 */ 86, 35, 117, 20, 21, 117, 40, 41, 42, 43, - /* 250 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 260 */ 1, 91, 16, 59, 25, 19, 20, 31, 64, 16, - /* 270 */ 100, 25, 66, 67, 68, 69, 70, 71, 72, 73, - /* 280 */ 74, 75, 76, 77, 61, 85, 85, 117, 29, 37, - /* 290 */ 54, 38, 18, 19, 35, 37, 110, 39, 112, 40, - /* 300 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 310 */ 51, 52, 53, 1, 90, 91, 16, 65, 79, 19, - /* 320 */ 20, 121, 122, 122, 100, 66, 67, 68, 69, 70, - /* 330 */ 71, 72, 73, 74, 75, 76, 77, 63, 24, 91, - /* 340 */ 37, 117, 39, 37, 16, 39, 90, 19, 100, 2, - /* 350 */ 19, 37, 40, 41, 42, 43, 44, 45, 46, 47, - /* 360 */ 48, 49, 50, 51, 52, 53, 1, 90, 91, 16, - /* 370 */ 29, 19, 19, 117, 93, 94, 35, 100, 66, 67, - /* 380 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - /* 390 */ 62, 79, 96, 62, 117, 17, 16, 18, 19, 19, - /* 400 */ 93, 94, 19, 25, 39, 40, 41, 42, 43, 44, - /* 410 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 1, - /* 420 */ 91, 91, 90, 16, 16, 16, 19, 19, 19, 100, - /* 430 */ 100, 66, 67, 68, 69, 70, 71, 72, 73, 74, - /* 440 */ 75, 76, 77, 108, 29, 91, 117, 117, 30, 117, - /* 450 */ 115, 29, 113, 114, 100, 20, 96, 35, 40, 41, - /* 460 */ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - /* 470 */ 52, 53, 91, 1, 118, 99, 18, 26, 110, 20, - /* 480 */ 2, 100, 97, 1, 66, 67, 68, 69, 70, 71, - /* 490 */ 72, 73, 74, 75, 76, 77, 1, 112, 117, 17, - /* 500 */ 1, 2, 85, 99, 19, 110, 89, 10, 16, 19, - /* 510 */ 93, 19, 17, 16, 21, 99, 17, 38, 59, 22, - /* 520 */ 23, 29, 105, 106, 107, 28, 109, 35, 18, 32, - /* 530 */ 33, 34, 2, 1, 65, 40, 41, 42, 43, 44, - /* 540 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 17, - /* 550 */ 20, 91, 59, 21, 36, 19, 19, 64, 19, 25, - /* 560 */ 100, 66, 67, 68, 69, 70, 71, 72, 73, 74, - /* 570 */ 75, 76, 77, 1, 85, 78, 79, 80, 89, 85, - /* 580 */ 19, 92, 93, 89, 59, 63, 21, 93, 19, 17, - /* 590 */ 101, 102, 17, 1, 105, 106, 107, 18, 109, 105, - /* 600 */ 106, 107, 18, 109, 29, 116, 36, 63, 19, 17, - /* 610 */ 35, 1, 40, 41, 42, 43, 44, 45, 46, 47, - /* 620 */ 48, 49, 50, 51, 52, 53, 61, 17, 108, 38, - /* 630 */ 2, 19, 39, 55, 21, 115, 18, 97, 66, 67, - /* 640 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - /* 650 */ 1, 85, 112, 1, 100, 89, 85, 115, 92, 93, - /* 660 */ 89, 110, 112, 111, 93, 91, 17, 101, 102, 17, - /* 670 */ 97, 105, 106, 107, 100, 109, 105, 106, 107, 14, - /* 680 */ 109, 29, 116, 87, 123, 112, 112, 35, 123, 40, - /* 690 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 700 */ 51, 52, 53, 1, 2, 110, 54, 110, 114, 110, - /* 710 */ 123, 123, 97, 97, 97, 66, 67, 68, 69, 70, - /* 720 */ 71, 72, 73, 74, 75, 76, 77, 112, 112, 112, - /* 730 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - /* 740 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47, - /* 750 */ 48, 49, 50, 51, 52, 53, 1, 123, 123, 123, - /* 760 */ 123, 123, 123, 123, 123, 97, 97, 97, 66, 67, - /* 770 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - /* 780 */ 112, 112, 112, 123, 123, 123, 123, 123, 123, 123, - /* 790 */ 123, 123, 123, 123, 39, 40, 41, 42, 43, 44, - /* 800 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 123, - /* 810 */ 1, 123, 123, 123, 123, 123, 123, 123, 123, 123, - /* 820 */ 123, 66, 67, 68, 69, 70, 71, 72, 73, 74, - /* 830 */ 75, 76, 77, 24, 123, 123, 123, 123, 123, 123, - /* 840 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 40, - /* 850 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 860 */ 51, 52, 53, 1, 123, 123, 123, 123, 123, 123, - /* 870 */ 123, 123, 123, 123, 123, 66, 67, 68, 69, 70, - /* 880 */ 71, 72, 73, 74, 75, 76, 77, 123, 123, 123, - /* 890 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - /* 900 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47, - /* 910 */ 48, 49, 50, 51, 52, 53, 123, 123, 123, 123, - /* 920 */ 123, 123, 123, 123, 123, 123, 123, 65, 66, 67, - /* 930 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - /* 940 */ 1, 85, 123, 1, 123, 89, 85, 123, 92, 93, - /* 950 */ 89, 123, 123, 123, 93, 91, 17, 101, 102, 17, - /* 960 */ 123, 105, 106, 107, 100, 109, 105, 106, 107, 123, - /* 970 */ 109, 29, 116, 123, 123, 123, 112, 35, 123, 40, - /* 980 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 990 */ 51, 52, 53, 1, 123, 123, 54, 123, 123, 123, - /* 1000 */ 123, 123, 123, 123, 123, 66, 67, 68, 69, 70, - /* 1010 */ 71, 72, 73, 74, 75, 76, 77, 123, 123, 123, - /* 1020 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - /* 1030 */ 123, 123, 40, 41, 42, 43, 44, 45, 46, 47, - /* 1040 */ 48, 49, 50, 51, 52, 53, 123, 123, 123, 123, - /* 1050 */ 123, 123, 123, 123, 123, 123, 123, 123, 66, 67, - /* 1060 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - /* 1070 */ 123, 123, 123, 40, 41, 42, 43, 44, 45, 46, - /* 1080 */ 47, 48, 49, 50, 51, 52, 53, 123, 123, 123, - /* 1090 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 66, - /* 1100 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - /* 1110 */ 77, 123, 123, 123, 123, 123, 16, 123, 18, 19, - /* 1120 */ 123, 123, 22, 23, 123, 17, 123, 85, 28, 123, - /* 1130 */ 123, 89, 32, 33, 34, 93, 36, 29, 38, 123, - /* 1140 */ 123, 41, 123, 35, 102, 123, 85, 105, 106, 107, - /* 1150 */ 89, 109, 123, 91, 93, 123, 56, 57, 58, 59, - /* 1160 */ 60, 123, 100, 63, 64, 65, 105, 106, 107, 123, - /* 1170 */ 109, 93, 123, 16, 112, 18, 19, 123, 78, 22, - /* 1180 */ 23, 16, 123, 105, 19, 28, 123, 109, 123, 32, - /* 1190 */ 33, 34, 123, 36, 29, 38, 31, 123, 41, 123, - /* 1200 */ 35, 123, 85, 123, 123, 123, 89, 123, 123, 92, - /* 1210 */ 93, 94, 123, 56, 57, 58, 59, 60, 101, 102, - /* 1220 */ 63, 64, 105, 106, 107, 123, 109, 17, 123, 123, - /* 1230 */ 16, 123, 18, 19, 123, 78, 22, 23, 16, 29, - /* 1240 */ 91, 19, 28, 123, 17, 35, 32, 33, 34, 100, - /* 1250 */ 36, 29, 38, 31, 123, 41, 29, 35, 123, 85, - /* 1260 */ 123, 112, 35, 89, 123, 123, 92, 93, 1, 123, - /* 1270 */ 56, 57, 58, 59, 60, 101, 102, 63, 64, 105, - /* 1280 */ 106, 107, 123, 109, 17, 123, 123, 16, 123, 18, - /* 1290 */ 19, 123, 78, 22, 23, 123, 29, 123, 123, 28, - /* 1300 */ 123, 17, 35, 32, 33, 34, 123, 36, 123, 38, - /* 1310 */ 123, 123, 41, 29, 123, 123, 85, 123, 123, 35, - /* 1320 */ 89, 54, 123, 92, 93, 123, 123, 56, 57, 58, - /* 1330 */ 59, 60, 101, 102, 63, 64, 105, 106, 107, 123, - /* 1340 */ 109, 17, 123, 123, 16, 123, 18, 19, 123, 78, - /* 1350 */ 22, 23, 123, 29, 123, 123, 28, 123, 17, 35, - /* 1360 */ 32, 33, 34, 123, 36, 123, 38, 123, 123, 41, - /* 1370 */ 29, 123, 123, 85, 123, 123, 35, 89, 123, 123, - /* 1380 */ 92, 93, 123, 123, 56, 57, 58, 59, 60, 101, - /* 1390 */ 102, 63, 64, 105, 106, 107, 123, 109, 17, 123, - /* 1400 */ 123, 16, 123, 18, 19, 123, 78, 22, 23, 123, - /* 1410 */ 29, 123, 123, 28, 123, 17, 35, 32, 33, 34, - /* 1420 */ 123, 36, 123, 38, 123, 123, 41, 29, 123, 123, - /* 1430 */ 85, 123, 123, 35, 89, 123, 123, 92, 93, 123, - /* 1440 */ 123, 56, 57, 58, 59, 60, 101, 102, 63, 64, - /* 1450 */ 105, 106, 107, 123, 109, 17, 123, 123, 16, 123, - /* 1460 */ 18, 19, 123, 78, 22, 23, 123, 29, 123, 123, - /* 1470 */ 28, 123, 17, 35, 32, 33, 34, 123, 36, 123, - /* 1480 */ 38, 123, 123, 41, 29, 123, 123, 85, 123, 123, - /* 1490 */ 35, 89, 123, 123, 92, 93, 123, 123, 56, 57, - /* 1500 */ 58, 59, 60, 101, 102, 63, 64, 105, 106, 107, - /* 1510 */ 123, 109, 17, 123, 123, 16, 123, 18, 19, 123, - /* 1520 */ 78, 22, 23, 123, 29, 123, 123, 28, 123, 17, - /* 1530 */ 35, 32, 33, 34, 123, 36, 123, 38, 123, 123, - /* 1540 */ 41, 29, 123, 123, 85, 123, 123, 35, 89, 123, - /* 1550 */ 123, 92, 93, 123, 123, 56, 57, 58, 59, 60, - /* 1560 */ 101, 102, 63, 64, 105, 106, 107, 123, 109, 17, - /* 1570 */ 123, 123, 16, 123, 18, 19, 123, 78, 22, 23, - /* 1580 */ 123, 29, 123, 123, 28, 123, 17, 35, 32, 33, - /* 1590 */ 34, 123, 36, 123, 38, 123, 123, 41, 29, 123, - /* 1600 */ 123, 85, 123, 123, 35, 89, 123, 123, 92, 93, - /* 1610 */ 123, 123, 56, 57, 58, 59, 60, 101, 102, 63, - /* 1620 */ 64, 105, 106, 107, 123, 109, 17, 123, 123, 16, - /* 1630 */ 123, 18, 19, 123, 78, 22, 23, 123, 29, 123, - /* 1640 */ 123, 28, 123, 17, 35, 32, 33, 34, 123, 36, - /* 1650 */ 123, 38, 123, 123, 41, 29, 123, 123, 85, 123, - /* 1660 */ 123, 35, 89, 123, 123, 92, 93, 123, 123, 56, - /* 1670 */ 57, 58, 59, 60, 101, 102, 63, 123, 105, 106, - /* 1680 */ 107, 123, 109, 17, 123, 123, 16, 123, 18, 19, - /* 1690 */ 123, 78, 22, 23, 123, 29, 123, 123, 28, 123, - /* 1700 */ 17, 35, 32, 33, 34, 123, 36, 123, 38, 123, - /* 1710 */ 123, 41, 29, 123, 123, 85, 123, 123, 35, 89, - /* 1720 */ 123, 123, 92, 93, 123, 123, 56, 57, 58, 59, - /* 1730 */ 60, 101, 102, 63, 123, 105, 106, 107, 123, 109, - /* 1740 */ 123, 123, 123, 123, 17, 123, 123, 123, 78, 123, - /* 1750 */ 120, 24, 123, 26, 27, 10, 29, 30, 123, 123, - /* 1760 */ 123, 16, 35, 123, 37, 38, 39, 22, 23, 123, - /* 1770 */ 90, 91, 123, 28, 123, 123, 123, 32, 33, 34, - /* 1780 */ 100, 54, 123, 103, 104, 123, 123, 123, 61, 123, - /* 1790 */ 123, 123, 65, 123, 85, 90, 91, 117, 89, 123, - /* 1800 */ 123, 92, 93, 123, 123, 100, 79, 123, 103, 104, - /* 1810 */ 101, 102, 123, 85, 105, 106, 107, 89, 109, 123, - /* 1820 */ 92, 93, 117, 78, 79, 80, 123, 123, 123, 101, - /* 1830 */ 102, 123, 123, 105, 106, 107, 85, 109, 123, 123, - /* 1840 */ 89, 123, 123, 92, 93, 123, 123, 85, 123, 123, - /* 1850 */ 123, 89, 101, 102, 92, 93, 105, 106, 107, 123, - /* 1860 */ 109, 123, 123, 101, 102, 123, 123, 105, 106, 107, - /* 1870 */ 123, 109, 123, 123, 85, 90, 91, 123, 89, 123, - /* 1880 */ 123, 92, 93, 123, 123, 100, 123, 123, 103, 104, - /* 1890 */ 101, 102, 123, 123, 105, 106, 107, 85, 109, 123, - /* 1900 */ 123, 89, 117, 123, 92, 93, 123, 85, 123, 123, - /* 1910 */ 123, 89, 123, 101, 102, 93, 85, 105, 106, 107, - /* 1920 */ 89, 109, 123, 92, 93, 123, 123, 105, 106, 107, - /* 1930 */ 123, 109, 101, 102, 123, 123, 105, 106, 107, 85, - /* 1940 */ 109, 123, 123, 89, 123, 123, 92, 93, 123, 123, - /* 1950 */ 85, 123, 123, 123, 89, 101, 102, 92, 93, 105, - /* 1960 */ 106, 107, 123, 109, 123, 123, 101, 102, 123, 123, - /* 1970 */ 105, 106, 107, 123, 109, 123, 85, 123, 123, 123, - /* 1980 */ 89, 123, 123, 92, 93, 123, 123, 85, 123, 123, - /* 1990 */ 123, 89, 101, 102, 92, 93, 105, 106, 107, 123, - /* 2000 */ 109, 123, 123, 101, 102, 123, 85, 105, 106, 107, - /* 2010 */ 89, 109, 123, 92, 93, 123, 123, 123, 123, 123, - /* 2020 */ 123, 123, 101, 102, 123, 85, 105, 106, 107, 89, - /* 2030 */ 109, 123, 92, 93, 123, 123, 85, 123, 123, 123, - /* 2040 */ 89, 101, 102, 92, 93, 105, 106, 107, 123, 109, - /* 2050 */ 123, 123, 101, 102, 123, 123, 105, 106, 107, 123, - /* 2060 */ 109, 123, 85, 123, 123, 123, 89, 123, 123, 92, - /* 2070 */ 93, 123, 123, 85, 123, 123, 123, 89, 101, 102, - /* 2080 */ 92, 93, 105, 106, 107, 123, 109, 123, 123, 101, - /* 2090 */ 102, 123, 85, 105, 106, 107, 89, 109, 123, 92, - /* 2100 */ 93, 123, 123, 123, 123, 123, 123, 123, 101, 102, - /* 2110 */ 123, 85, 105, 106, 107, 89, 109, 123, 92, 93, - /* 2120 */ 123, 123, 85, 123, 123, 123, 89, 101, 102, 92, - /* 2130 */ 93, 105, 106, 107, 123, 109, 123, 123, 101, 102, - /* 2140 */ 123, 123, 105, 106, 107, 123, 109, 123, 85, 123, - /* 2150 */ 123, 123, 89, 123, 123, 92, 93, 123, 123, 85, - /* 2160 */ 123, 123, 123, 89, 101, 102, 92, 93, 105, 106, - /* 2170 */ 107, 123, 109, 123, 123, 101, 102, 123, 85, 105, - /* 2180 */ 106, 107, 89, 109, 123, 92, 93, 123, 123, 123, - /* 2190 */ 123, 123, 123, 123, 101, 102, 123, 85, 105, 106, - /* 2200 */ 107, 89, 109, 123, 92, 93, 123, 123, 85, 123, - /* 2210 */ 123, 123, 89, 101, 102, 92, 93, 105, 106, 107, - /* 2220 */ 123, 109, 123, 123, 101, 102, 123, 123, 105, 106, - /* 2230 */ 107, 123, 109, 123, 85, 123, 123, 123, 89, 123, - /* 2240 */ 123, 92, 93, 123, 123, 85, 123, 123, 123, 89, - /* 2250 */ 101, 102, 92, 93, 105, 106, 107, 123, 109, 123, - /* 2260 */ 123, 101, 102, 123, 85, 105, 106, 107, 89, 109, - /* 2270 */ 123, 92, 93, 123, 123, 123, 123, 123, 123, 123, - /* 2280 */ 101, 102, 123, 85, 105, 106, 107, 89, 109, 123, - /* 2290 */ 92, 93, 1, 123, 85, 123, 90, 91, 89, 101, - /* 2300 */ 102, 123, 93, 105, 106, 107, 100, 109, 17, 103, - /* 2310 */ 104, 102, 21, 123, 105, 106, 107, 123, 109, 123, - /* 2320 */ 29, 123, 123, 117, 85, 123, 35, 123, 89, 38, - /* 2330 */ 123, 123, 93, 123, 123, 123, 123, 123, 123, 123, - /* 2340 */ 90, 91, 123, 123, 105, 106, 107, 123, 109, 123, - /* 2350 */ 100, 123, 61, 103, 104, 90, 91, 123, 123, 123, - /* 2360 */ 123, 123, 123, 123, 123, 100, 123, 117, 103, 104, - /* 2370 */ 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - /* 2380 */ 123, 123, 117, + /* 50 */ 51, 52, 53, 54, 1, 1, 3, 3, 1, 91, + /* 60 */ 3, 83, 84, 85, 86, 87, 67, 68, 69, 70, + /* 70 */ 71, 72, 73, 74, 75, 76, 77, 78, 112, 1, + /* 80 */ 114, 115, 63, 30, 30, 31, 118, 30, 19, 36, + /* 90 */ 36, 21, 22, 36, 41, 42, 43, 44, 45, 46, + /* 100 */ 47, 48, 49, 50, 51, 52, 53, 54, 1, 55, + /* 110 */ 32, 1, 55, 3, 91, 39, 18, 19, 20, 38, + /* 120 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 130 */ 77, 78, 62, 55, 20, 37, 60, 30, 62, 20, + /* 140 */ 30, 118, 66, 36, 114, 115, 36, 66, 41, 42, + /* 150 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + /* 160 */ 53, 54, 1, 26, 1, 55, 3, 37, 1, 18, + /* 170 */ 3, 20, 21, 91, 67, 68, 69, 70, 71, 72, + /* 180 */ 73, 74, 75, 76, 77, 78, 5, 6, 7, 8, + /* 190 */ 9, 20, 1, 30, 3, 100, 15, 16, 17, 36, + /* 200 */ 118, 119, 41, 42, 43, 44, 45, 46, 47, 48, + /* 210 */ 49, 50, 51, 52, 53, 54, 1, 18, 55, 20, + /* 220 */ 21, 30, 55, 114, 115, 26, 22, 36, 67, 68, + /* 230 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 240 */ 86, 80, 32, 26, 91, 92, 31, 1, 109, 39, + /* 250 */ 38, 18, 40, 20, 101, 116, 41, 42, 43, 44, + /* 260 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + /* 270 */ 1, 118, 62, 18, 19, 20, 122, 123, 85, 86, + /* 280 */ 87, 91, 67, 68, 69, 70, 71, 72, 73, 74, + /* 290 */ 75, 76, 77, 78, 104, 105, 63, 80, 1, 91, + /* 300 */ 92, 55, 3, 18, 115, 20, 21, 20, 118, 101, + /* 310 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + /* 320 */ 51, 52, 53, 54, 1, 26, 118, 30, 38, 88, + /* 330 */ 40, 39, 38, 36, 40, 66, 67, 68, 69, 70, + /* 340 */ 71, 72, 73, 74, 75, 76, 77, 78, 63, 21, + /* 350 */ 63, 109, 91, 92, 62, 1, 2, 16, 116, 19, + /* 360 */ 20, 18, 101, 40, 41, 42, 43, 44, 45, 46, + /* 370 */ 47, 48, 49, 50, 51, 52, 53, 54, 1, 118, + /* 380 */ 3, 18, 39, 20, 19, 20, 19, 111, 60, 113, + /* 390 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 400 */ 77, 78, 21, 22, 64, 30, 39, 92, 92, 39, + /* 410 */ 18, 36, 20, 18, 1, 20, 101, 101, 41, 42, + /* 420 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + /* 430 */ 53, 54, 1, 118, 118, 22, 87, 2, 89, 94, + /* 440 */ 95, 91, 98, 62, 67, 68, 69, 70, 71, 72, + /* 450 */ 73, 74, 75, 76, 77, 78, 21, 113, 86, 111, + /* 460 */ 92, 92, 111, 18, 113, 20, 20, 111, 118, 101, + /* 470 */ 101, 40, 41, 42, 43, 44, 45, 46, 47, 48, + /* 480 */ 49, 50, 51, 52, 53, 54, 1, 118, 3, 100, + /* 490 */ 94, 95, 18, 100, 20, 123, 111, 25, 67, 68, + /* 500 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 510 */ 38, 92, 92, 20, 3, 3, 92, 20, 40, 64, + /* 520 */ 101, 101, 19, 3, 19, 101, 41, 42, 43, 44, + /* 530 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + /* 540 */ 1, 2, 118, 20, 19, 64, 20, 19, 21, 98, + /* 550 */ 20, 98, 67, 68, 69, 70, 71, 72, 73, 74, + /* 560 */ 75, 76, 77, 78, 113, 22, 113, 60, 27, 20, + /* 570 */ 37, 20, 56, 2, 101, 1, 112, 111, 116, 111, + /* 580 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + /* 590 */ 51, 52, 53, 54, 1, 113, 97, 118, 2, 119, + /* 600 */ 111, 97, 30, 124, 98, 62, 67, 68, 69, 70, + /* 610 */ 71, 72, 73, 74, 75, 76, 77, 78, 25, 113, + /* 620 */ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + /* 630 */ 124, 124, 124, 124, 41, 42, 43, 44, 45, 46, + /* 640 */ 47, 48, 49, 50, 51, 52, 53, 54, 1, 124, + /* 650 */ 3, 124, 124, 124, 124, 124, 124, 124, 99, 98, + /* 660 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 670 */ 77, 78, 113, 124, 113, 124, 124, 124, 124, 124, + /* 680 */ 124, 124, 124, 124, 124, 124, 124, 124, 41, 42, + /* 690 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + /* 700 */ 53, 54, 1, 124, 3, 124, 124, 124, 124, 124, + /* 710 */ 124, 98, 98, 98, 67, 68, 69, 70, 71, 72, + /* 720 */ 73, 74, 75, 76, 77, 78, 113, 113, 113, 124, + /* 730 */ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + /* 740 */ 124, 124, 41, 42, 43, 44, 45, 46, 47, 48, + /* 750 */ 49, 50, 51, 52, 53, 54, 1, 124, 124, 124, + /* 760 */ 124, 124, 124, 124, 124, 98, 98, 124, 67, 68, + /* 770 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 780 */ 113, 113, 124, 124, 124, 124, 124, 124, 124, 124, + /* 790 */ 124, 124, 124, 124, 124, 124, 41, 42, 43, 44, + /* 800 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + /* 810 */ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + /* 820 */ 22, 124, 67, 68, 69, 70, 71, 72, 73, 74, + /* 830 */ 75, 76, 77, 78, 124, 124, 124, 124, 41, 42, + /* 840 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + /* 850 */ 53, 54, 124, 124, 124, 124, 124, 124, 60, 124, + /* 860 */ 124, 124, 124, 65, 67, 68, 69, 70, 71, 72, + /* 870 */ 73, 74, 75, 76, 77, 78, 124, 124, 124, 124, + /* 880 */ 124, 124, 124, 18, 19, 20, 124, 124, 23, 24, + /* 890 */ 124, 86, 124, 124, 29, 90, 92, 124, 33, 94, + /* 900 */ 35, 124, 37, 124, 39, 101, 124, 42, 103, 124, + /* 910 */ 124, 106, 107, 108, 124, 110, 124, 113, 92, 92, + /* 920 */ 124, 124, 57, 58, 59, 60, 61, 101, 101, 64, + /* 930 */ 65, 66, 124, 94, 124, 124, 124, 124, 124, 113, + /* 940 */ 113, 18, 19, 20, 79, 106, 23, 24, 124, 110, + /* 950 */ 124, 124, 29, 124, 124, 86, 33, 34, 35, 90, + /* 960 */ 37, 124, 39, 94, 92, 42, 124, 124, 124, 124, + /* 970 */ 86, 124, 103, 101, 90, 106, 107, 108, 94, 110, + /* 980 */ 57, 58, 59, 60, 61, 113, 124, 64, 65, 124, + /* 990 */ 106, 107, 108, 124, 110, 18, 124, 20, 124, 18, + /* 1000 */ 19, 20, 79, 124, 23, 24, 124, 30, 124, 32, + /* 1010 */ 29, 86, 124, 36, 33, 90, 35, 124, 37, 94, + /* 1020 */ 39, 124, 124, 42, 124, 124, 124, 124, 124, 124, + /* 1030 */ 124, 106, 107, 108, 124, 110, 124, 124, 57, 58, + /* 1040 */ 59, 60, 61, 124, 124, 64, 65, 124, 124, 124, + /* 1050 */ 124, 124, 18, 124, 20, 124, 124, 18, 19, 20, + /* 1060 */ 79, 124, 23, 24, 30, 86, 32, 124, 29, 90, + /* 1070 */ 36, 86, 33, 94, 35, 90, 37, 124, 39, 94, + /* 1080 */ 124, 42, 124, 124, 124, 106, 107, 108, 124, 110, + /* 1090 */ 124, 106, 107, 108, 124, 110, 57, 58, 59, 60, + /* 1100 */ 61, 124, 124, 64, 65, 124, 124, 124, 124, 124, + /* 1110 */ 124, 124, 124, 124, 124, 18, 19, 20, 79, 124, + /* 1120 */ 23, 24, 124, 124, 124, 124, 29, 86, 124, 124, + /* 1130 */ 33, 90, 35, 124, 37, 94, 39, 124, 124, 42, + /* 1140 */ 124, 124, 124, 124, 124, 124, 124, 106, 107, 108, + /* 1150 */ 124, 110, 124, 124, 57, 58, 59, 60, 61, 124, + /* 1160 */ 124, 64, 65, 124, 124, 124, 124, 124, 124, 124, + /* 1170 */ 124, 124, 124, 18, 19, 20, 79, 124, 23, 24, + /* 1180 */ 124, 124, 124, 124, 29, 86, 124, 124, 33, 90, + /* 1190 */ 35, 124, 37, 94, 39, 124, 124, 42, 124, 124, + /* 1200 */ 124, 124, 124, 124, 124, 106, 107, 108, 124, 110, + /* 1210 */ 124, 124, 57, 58, 59, 60, 61, 124, 124, 64, + /* 1220 */ 65, 124, 124, 124, 124, 124, 124, 124, 124, 124, + /* 1230 */ 124, 18, 19, 20, 79, 124, 23, 24, 124, 124, + /* 1240 */ 124, 124, 29, 86, 124, 124, 33, 90, 35, 124, + /* 1250 */ 37, 94, 39, 124, 124, 42, 124, 124, 124, 124, + /* 1260 */ 124, 124, 124, 106, 107, 108, 124, 110, 124, 124, + /* 1270 */ 57, 58, 59, 60, 61, 124, 124, 64, 65, 124, + /* 1280 */ 1, 124, 3, 124, 124, 124, 124, 124, 124, 18, + /* 1290 */ 19, 20, 79, 124, 23, 24, 124, 124, 124, 124, + /* 1300 */ 29, 22, 124, 124, 33, 124, 35, 124, 37, 30, + /* 1310 */ 39, 91, 92, 42, 124, 36, 124, 124, 39, 124, + /* 1320 */ 124, 101, 124, 124, 104, 105, 124, 124, 57, 58, + /* 1330 */ 59, 60, 61, 124, 124, 64, 65, 124, 118, 124, + /* 1340 */ 124, 62, 124, 124, 124, 3, 124, 18, 19, 20, + /* 1350 */ 79, 124, 23, 24, 124, 124, 124, 124, 29, 124, + /* 1360 */ 124, 124, 33, 21, 35, 124, 37, 124, 39, 91, + /* 1370 */ 92, 42, 30, 124, 124, 124, 124, 124, 36, 101, + /* 1380 */ 124, 39, 104, 105, 124, 124, 57, 58, 59, 60, + /* 1390 */ 61, 124, 124, 64, 65, 124, 118, 124, 124, 124, + /* 1400 */ 124, 124, 124, 124, 62, 18, 19, 20, 79, 124, + /* 1410 */ 23, 24, 124, 124, 124, 124, 29, 124, 124, 124, + /* 1420 */ 33, 124, 35, 124, 37, 124, 39, 91, 92, 42, + /* 1430 */ 124, 124, 124, 124, 124, 124, 124, 101, 124, 124, + /* 1440 */ 104, 105, 124, 124, 57, 58, 59, 60, 61, 124, + /* 1450 */ 124, 64, 124, 124, 118, 124, 124, 124, 124, 124, + /* 1460 */ 124, 124, 124, 18, 19, 20, 79, 124, 23, 24, + /* 1470 */ 124, 124, 124, 124, 29, 124, 124, 124, 33, 124, + /* 1480 */ 35, 124, 37, 124, 39, 124, 3, 42, 124, 124, + /* 1490 */ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + /* 1500 */ 124, 124, 57, 58, 59, 60, 61, 124, 25, 64, + /* 1510 */ 27, 28, 124, 30, 31, 124, 124, 124, 124, 36, + /* 1520 */ 124, 38, 39, 40, 79, 124, 124, 124, 124, 124, + /* 1530 */ 124, 124, 124, 124, 124, 86, 124, 124, 55, 90, + /* 1540 */ 124, 124, 93, 94, 124, 62, 124, 124, 124, 66, + /* 1550 */ 124, 102, 103, 124, 124, 106, 107, 108, 124, 110, + /* 1560 */ 124, 124, 124, 80, 124, 124, 124, 86, 124, 120, + /* 1570 */ 121, 90, 124, 124, 93, 94, 124, 124, 124, 124, + /* 1580 */ 124, 124, 124, 102, 103, 124, 124, 106, 107, 108, + /* 1590 */ 86, 110, 124, 124, 90, 124, 124, 93, 94, 95, + /* 1600 */ 124, 86, 121, 124, 124, 90, 102, 103, 93, 94, + /* 1610 */ 106, 107, 108, 124, 110, 124, 124, 102, 103, 124, + /* 1620 */ 124, 106, 107, 108, 124, 110, 86, 124, 124, 124, + /* 1630 */ 90, 124, 117, 93, 94, 124, 124, 124, 124, 124, + /* 1640 */ 124, 124, 102, 103, 124, 124, 106, 107, 108, 124, + /* 1650 */ 110, 124, 124, 124, 86, 91, 92, 117, 90, 124, + /* 1660 */ 124, 93, 94, 95, 124, 101, 124, 124, 104, 105, + /* 1670 */ 102, 103, 124, 124, 106, 107, 108, 86, 110, 124, + /* 1680 */ 124, 90, 118, 124, 93, 94, 124, 124, 124, 124, + /* 1690 */ 124, 124, 124, 102, 103, 124, 86, 106, 107, 108, + /* 1700 */ 90, 110, 124, 93, 94, 124, 124, 124, 117, 124, + /* 1710 */ 124, 124, 102, 103, 124, 124, 106, 107, 108, 86, + /* 1720 */ 110, 124, 124, 90, 124, 124, 93, 94, 124, 124, + /* 1730 */ 86, 124, 124, 124, 90, 102, 103, 93, 94, 106, + /* 1740 */ 107, 108, 124, 110, 124, 124, 102, 103, 124, 86, + /* 1750 */ 106, 107, 108, 90, 110, 124, 93, 94, 124, 124, + /* 1760 */ 124, 124, 124, 124, 124, 102, 103, 124, 86, 106, + /* 1770 */ 107, 108, 90, 110, 124, 93, 94, 124, 124, 124, + /* 1780 */ 124, 124, 124, 124, 102, 103, 124, 86, 106, 107, + /* 1790 */ 108, 90, 110, 124, 93, 94, 124, 124, 124, 124, + /* 1800 */ 124, 124, 124, 102, 103, 124, 86, 106, 107, 108, + /* 1810 */ 90, 110, 124, 93, 94, 124, 124, 86, 124, 124, + /* 1820 */ 124, 90, 102, 103, 93, 94, 106, 107, 108, 124, + /* 1830 */ 110, 124, 124, 102, 103, 124, 86, 106, 107, 108, + /* 1840 */ 90, 110, 124, 93, 94, 124, 124, 124, 124, 124, + /* 1850 */ 124, 124, 102, 103, 124, 86, 106, 107, 108, 90, + /* 1860 */ 110, 124, 93, 94, 124, 124, 124, 124, 124, 124, + /* 1870 */ 124, 102, 103, 124, 86, 106, 107, 108, 90, 110, + /* 1880 */ 124, 93, 94, 124, 124, 124, 124, 124, 124, 124, + /* 1890 */ 102, 103, 124, 86, 106, 107, 108, 90, 110, 124, + /* 1900 */ 93, 94, 124, 124, 86, 124, 124, 124, 90, 102, + /* 1910 */ 103, 93, 94, 106, 107, 108, 124, 110, 124, 124, + /* 1920 */ 102, 103, 11, 124, 106, 107, 108, 124, 110, 18, + /* 1930 */ 124, 124, 124, 124, 23, 24, 124, 124, 124, 124, + /* 1940 */ 29, 124, 124, 86, 33, 124, 35, 90, 124, 124, + /* 1950 */ 93, 94, 124, 124, 124, 124, 124, 124, 124, 102, + /* 1960 */ 103, 124, 86, 106, 107, 108, 90, 110, 124, 93, + /* 1970 */ 94, 124, 124, 124, 124, 124, 124, 124, 102, 103, + /* 1980 */ 124, 86, 106, 107, 108, 90, 110, 124, 93, 94, + /* 1990 */ 79, 80, 81, 124, 124, 124, 124, 102, 103, 124, + /* 2000 */ 86, 106, 107, 108, 90, 110, 124, 93, 94, 124, + /* 2010 */ 124, 86, 124, 124, 124, 90, 102, 103, 93, 94, + /* 2020 */ 106, 107, 108, 124, 110, 124, 124, 102, 103, 124, + /* 2030 */ 86, 106, 107, 108, 90, 110, 124, 93, 94, 124, + /* 2040 */ 124, 124, 124, 124, 124, 124, 102, 103, 124, 11, + /* 2050 */ 106, 107, 108, 124, 110, 124, 18, 124, 124, 124, + /* 2060 */ 124, 23, 24, 124, 124, 124, 124, 29, 86, 124, + /* 2070 */ 124, 33, 90, 35, 124, 93, 94, 124, 124, 86, + /* 2080 */ 124, 124, 124, 90, 102, 103, 93, 94, 106, 107, + /* 2090 */ 108, 124, 110, 124, 124, 102, 103, 124, 124, 106, + /* 2100 */ 107, 108, 124, 110, 86, 124, 124, 124, 90, 124, + /* 2110 */ 124, 93, 94, 124, 124, 124, 124, 79, 80, 81, + /* 2120 */ 102, 103, 124, 124, 106, 107, 108, 124, 110, 124, + /* 2130 */ 124, 124, 124, 86, 124, 124, 124, 90, 124, 124, + /* 2140 */ 93, 94, 124, 124, 124, 124, 91, 92, 124, 102, + /* 2150 */ 103, 124, 124, 106, 107, 108, 101, 110, 86, 104, + /* 2160 */ 105, 124, 90, 124, 124, 93, 94, 124, 124, 124, + /* 2170 */ 124, 124, 124, 118, 102, 103, 124, 86, 106, 107, + /* 2180 */ 108, 90, 110, 124, 93, 94, 124, 124, 86, 124, + /* 2190 */ 124, 124, 90, 102, 103, 93, 94, 106, 107, 108, + /* 2200 */ 124, 110, 124, 124, 102, 103, 124, 86, 106, 107, + /* 2210 */ 108, 90, 110, 124, 93, 94, 124, 124, 124, 124, + /* 2220 */ 91, 92, 124, 102, 103, 124, 124, 106, 107, 108, + /* 2230 */ 101, 110, 124, 104, 105, 124, 86, 124, 124, 124, + /* 2240 */ 90, 124, 124, 93, 94, 124, 124, 118, 124, 124, + /* 2250 */ 124, 124, 102, 103, 124, 124, 106, 107, 108, 124, + /* 2260 */ 110, 86, 124, 124, 124, 90, 124, 124, 93, 94, + /* 2270 */ 124, 124, 86, 124, 124, 124, 90, 102, 103, 93, + /* 2280 */ 94, 106, 107, 108, 124, 110, 124, 124, 102, 103, + /* 2290 */ 124, 86, 106, 107, 108, 90, 110, 124, 93, 94, + /* 2300 */ 124, 124, 86, 124, 124, 124, 90, 102, 103, 93, + /* 2310 */ 94, 106, 107, 108, 124, 110, 124, 124, 102, 103, + /* 2320 */ 124, 124, 106, 107, 108, 124, 110, 86, 124, 124, + /* 2330 */ 124, 90, 124, 124, 93, 94, 124, 124, 124, 124, + /* 2340 */ 124, 124, 124, 102, 103, 124, 124, 106, 107, 108, + /* 2350 */ 124, 110, 86, 124, 124, 124, 90, 124, 124, 93, + /* 2360 */ 94, 124, 124, 86, 124, 124, 124, 90, 102, 103, + /* 2370 */ 93, 94, 106, 107, 108, 124, 110, 124, 124, 102, + /* 2380 */ 103, 124, 86, 106, 107, 108, 90, 110, 124, 93, + /* 2390 */ 94, 124, 124, 124, 124, 124, 124, 124, 102, 103, + /* 2400 */ 124, 124, 106, 107, 108, 124, 110, ); - const YY_SHIFT_USE_DFLT = -5; - const YY_SHIFT_MAX = 256; + const YY_SHIFT_USE_DFLT = -53; + const YY_SHIFT_MAX = 259; static public $yy_shift_ofst = array( - /* 0 */ -2, 1271, 1157, 1157, 1271, 1157, 1328, 1328, 1100, 1157, - /* 10 */ 1157, 1157, 1157, 1157, 1157, 1157, 1499, 1157, 1157, 1157, - /* 20 */ 1157, 1157, 1556, 1157, 1157, 1157, 1157, 1157, 1157, 1157, - /* 30 */ 1157, 1157, 1157, 1157, 1385, 1214, 1157, 1157, 1157, 1157, - /* 40 */ 1157, 1499, 1214, 1157, 1442, 1442, 1613, 1670, 1670, 1670, - /* 50 */ 1670, 1670, 1670, 206, 153, 76, -1, 259, 259, 259, - /* 60 */ 809, 939, 755, 862, 702, 649, 365, 312, 418, 495, - /* 70 */ 572, 992, 992, 992, 992, 992, 992, 992, 992, 992, - /* 80 */ 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, - /* 90 */ 1033, 1033, 2291, 1267, 106, -2, 1745, 1222, 1165, 157, - /* 100 */ 157, 492, 492, 499, 106, 106, 274, 493, 142, 497, - /* 110 */ 49, 79, 942, 652, 246, 17, 328, 300, 236, 223, - /* 120 */ 80, 147, 532, 1227, 353, 353, 353, 422, 407, 142, - /* 130 */ 353, 353, 610, 353, 341, 565, 379, 353, 380, 142, - /* 140 */ 408, 160, 409, 353, 379, 409, 353, 472, 613, 472, - /* 150 */ 472, 472, 472, 472, 472, 613, 472, -5, 1284, 1210, - /* 160 */ -4, 1108, 0, 156, 575, 1683, 1552, 1512, 1569, 1609, - /* 170 */ 1666, 1324, 1626, 6, 1495, 1398, 1381, 1341, 1438, 1455, - /* 180 */ 73, 482, 73, 204, 592, 204, 204, 204, 164, 204, - /* 190 */ 253, 204, 204, 665, 613, 613, 613, 479, 472, 347, - /* 200 */ 415, 415, 472, 347, -5, -5, -5, -5, -5, 1727, - /* 210 */ 149, 45, 120, 152, 54, 530, 54, 314, 252, 378, - /* 220 */ 306, 459, 258, 303, 239, 331, 522, 536, 469, 537, - /* 230 */ 539, 569, 534, 544, 561, 525, 518, 570, 593, 612, - /* 240 */ 578, 628, 591, 579, 510, 584, 589, 458, 435, 352, - /* 250 */ 485, 478, 451, 479, 490, 383, 618, + /* 0 */ -3, 1213, 981, 1155, 1213, 1155, 981, 981, 923, 923, + /* 10 */ 865, 981, 981, 1097, 981, 981, 981, 981, 981, 981, + /* 20 */ 981, 1329, 981, 981, 981, 981, 1271, 981, 981, 981, + /* 30 */ 1097, 981, 981, 981, 981, 981, 981, 981, 981, 981, + /* 40 */ 981, 981, 981, 981, 1039, 1039, 1387, 1387, 1445, 1387, + /* 50 */ 1387, 1387, 1387, -1, 53, 107, 107, 107, 107, 107, + /* 60 */ 485, 431, 593, 647, 701, 323, 161, 215, 377, 269, + /* 70 */ 539, 755, 755, 755, 755, 755, 755, 755, 755, 755, + /* 80 */ 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, + /* 90 */ 797, 797, 1279, 110, 297, -3, 2038, 977, 1034, 191, + /* 100 */ -2, 191, -2, 297, 297, 798, 340, 354, 367, 1911, + /* 110 */ 181, 54, 57, 163, 199, 285, 19, 151, 167, 70, + /* 120 */ 78, 381, 367, 543, 363, -17, 375, 365, 363, 246, + /* 130 */ 363, 395, 392, -17, 363, 363, 363, 367, 363, 445, + /* 140 */ 413, 363, 395, 363, 474, 365, 574, 204, 204, 574, + /* 150 */ 574, 574, 574, 574, 574, 574, 574, -53, 255, 233, + /* 160 */ -17, -27, -29, -17, -17, -17, -29, -17, -29, -27, + /* 170 */ -17, -17, -17, -29, -17, -17, -29, -17, -17, -17, + /* 180 */ -17, -17, -17, -17, -17, -17, -29, -29, -17, 343, + /* 190 */ 574, 574, 574, 596, 596, 574, 574, 204, 572, 572, + /* 200 */ 204, 341, 204, 370, -53, -53, -53, -53, -53, 1483, + /* 210 */ 1342, 98, 76, 210, 435, 212, 328, 299, 81, 287, + /* 220 */ 472, 294, 217, 290, 292, 292, 370, 511, 455, 505, + /* 230 */ 520, 528, 478, 481, 541, 527, 446, 15, 114, -14, + /* 240 */ 533, 130, 493, 497, 503, 523, 512, 525, 549, 551, + /* 250 */ 507, 526, 530, 516, 571, 137, 119, -52, 69, 171, ); - const YY_REDUCE_USE_DFLT = -96; + const YY_REDUCE_USE_DFLT = -73; const YY_REDUCE_MAX = 208; static public $yy_reduce_ofst = array( - /* 0 */ 5, -7, 489, 566, 1630, 856, 70, 1117, 1865, 1854, - /* 10 */ 1831, 1812, 1891, 1902, 1977, 1951, 1940, 1921, 1789, 1762, - /* 20 */ 1402, 1345, 1288, 1231, 1459, 1516, 1751, 1728, 1709, 1573, - /* 30 */ 1988, 2007, 2123, 2149, 2160, 2198, 2179, 1174, 2093, 2026, - /* 40 */ 2037, 2063, 2112, 2074, 1042, 2209, 1822, 2239, 1061, 861, - /* 50 */ 494, 417, 571, 2265, 2250, 2206, 1705, 1785, 1680, 1705, - /* 60 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - /* 70 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - /* 80 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - /* 90 */ 128, 128, 277, 224, 40, 154, 200, 864, 1062, 170, - /* 100 */ 330, 574, 1149, 99, 329, 381, 1078, 98, -34, 201, - /* 110 */ 15, 125, 125, 125, -85, 124, 124, 124, 125, -95, - /* 120 */ 125, -95, 332, 354, 573, 616, 617, 460, 615, 307, - /* 130 */ 385, 540, 256, -74, 248, -95, 335, 668, 540, 281, - /* 140 */ 540, 125, 670, 669, 520, 540, 186, 125, 339, 125, - /* 150 */ 125, 125, 125, 125, 125, -95, 125, 125, 554, 554, - /* 160 */ 550, 554, 554, 554, 554, 554, 554, 554, 554, 554, - /* 170 */ 554, 554, 554, 542, 554, 554, 554, 554, 554, 554, - /* 180 */ 595, -33, 551, 552, -33, 552, 552, 552, -33, 552, - /* 190 */ 597, 552, 552, 596, 594, 594, 594, 599, -33, 356, - /* 200 */ 296, 360, -33, 356, 395, 404, 376, 416, 368, + /* 0 */ -22, 1449, 1540, 1504, 1481, 1568, 1515, 1591, 1925, 2072, + /* 10 */ 1750, 1818, 1895, 1644, 1663, 1914, 2205, 2277, 1876, 1731, + /* 20 */ 1857, 1633, 1701, 2186, 2150, 2296, 2266, 2091, 2047, 1993, + /* 30 */ 2241, 2102, 1720, 1788, 1982, 1769, 1807, 1610, 1682, 2175, + /* 40 */ 2216, 2121, 1944, 2018, 805, 869, 884, 979, 925, 985, + /* 50 */ 1041, 1157, 1099, 1220, 1336, 2129, 1278, 1336, 1564, 2055, + /* 60 */ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, + /* 70 */ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, + /* 80 */ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, + /* 90 */ 190, 190, 261, 208, 153, 193, 154, 827, 826, 369, + /* 100 */ 804, 315, 872, 316, 424, -34, 839, 82, -72, 372, + /* 110 */ 349, -32, -32, -32, 559, 351, 351, 351, -32, 30, + /* 120 */ -32, 30, 345, 30, 453, 420, 368, 242, 344, -32, + /* 130 */ 276, 561, 451, 419, 506, 615, 668, 396, 613, 615, + /* 140 */ 350, 614, 615, 667, 615, 139, -32, 30, 109, -32, + /* 150 */ -32, -32, -32, -32, -32, -32, 23, -32, 462, 482, + /* 160 */ 473, 466, 464, 473, 473, 473, 464, 473, 464, 468, + /* 170 */ 473, 473, 473, 464, 473, 473, 464, 473, 473, 473, + /* 180 */ 473, 473, 473, 473, 473, 473, 464, 464, 473, 489, + /* 190 */ 479, 479, 479, 480, 480, 479, 479, 189, 504, 499, + /* 200 */ 189, 241, 189, 348, 356, 393, 389, 95, 385, ); static public $yyExpectedTokens = array( - /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ), - /* 1 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 2 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 3 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 4 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 5 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 6 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 7 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 8 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 65, 78, ), - /* 9 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 10 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 11 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 12 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 13 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 14 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 15 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 16 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 17 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 18 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 19 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 20 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 21 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 22 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 23 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 24 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 25 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 26 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 27 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 28 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 29 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 30 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 31 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 32 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 33 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 34 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 35 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 36 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 37 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 38 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 39 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 40 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 41 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 42 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 43 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 44 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 45 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ), - /* 46 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 47 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 48 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 49 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 50 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 51 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 52 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ), - /* 53 */ array(1, 27, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 54 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 55 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 56 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 57 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 58 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 59 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 60 */ array(1, 24, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 61 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 62 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 63 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 64 */ array(1, 2, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 65 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 66 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 67 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, ), - /* 68 */ array(1, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 69 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 70 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 71 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 72 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 73 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 74 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 75 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 76 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 77 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 78 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 79 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 80 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 81 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 82 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 83 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 84 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 85 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 86 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 87 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 88 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 89 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 90 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 91 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ), - /* 92 */ array(1, 17, 21, 29, 35, 38, 61, ), - /* 93 */ array(1, 17, 29, 35, 54, ), - /* 94 */ array(1, 29, 35, ), - /* 95 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ), - /* 96 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ), - /* 97 */ array(16, 19, 29, 31, 35, ), - /* 98 */ array(16, 19, 29, 31, 35, ), - /* 99 */ array(1, 17, 29, 35, ), - /* 100 */ array(1, 17, 29, 35, ), - /* 101 */ array(16, 19, 29, 35, ), - /* 102 */ array(16, 19, 29, 35, ), - /* 103 */ array(1, 2, 17, ), - /* 104 */ array(1, 29, 35, ), - /* 105 */ array(1, 29, 35, ), - /* 106 */ array(18, 19, 63, ), - /* 107 */ array(21, 59, 64, ), - /* 108 */ array(18, 38, ), - /* 109 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ), - /* 110 */ array(4, 5, 6, 7, 8, 13, 14, 15, ), - /* 111 */ array(1, 17, 29, 30, 35, 54, ), - /* 112 */ array(1, 17, 29, 35, 54, ), - /* 113 */ array(1, 17, 29, 35, 54, ), - /* 114 */ array(16, 19, 20, 25, ), - /* 115 */ array(16, 19, 20, 62, ), - /* 116 */ array(16, 19, 62, ), - /* 117 */ array(16, 19, 20, ), - /* 118 */ array(1, 31, 54, ), - /* 119 */ array(20, 21, 61, ), - /* 120 */ array(1, 17, 54, ), - /* 121 */ array(20, 21, 61, ), - /* 122 */ array(1, 17, 21, ), - /* 123 */ array(17, 29, 35, ), - /* 124 */ array(16, 19, ), - /* 125 */ array(16, 19, ), - /* 126 */ array(16, 19, ), - /* 127 */ array(29, 35, ), - /* 128 */ array(16, 19, ), - /* 129 */ array(18, 38, ), - /* 130 */ array(16, 19, ), - /* 131 */ array(16, 19, ), - /* 132 */ array(1, 17, ), - /* 133 */ array(16, 19, ), - /* 134 */ array(29, 35, ), - /* 135 */ array(21, 61, ), - /* 136 */ array(18, 19, ), - /* 137 */ array(16, 19, ), - /* 138 */ array(16, 19, ), - /* 139 */ array(18, 38, ), - /* 140 */ array(16, 19, ), - /* 141 */ array(1, 54, ), - /* 142 */ array(16, 19, ), - /* 143 */ array(16, 19, ), - /* 144 */ array(18, 19, ), - /* 145 */ array(16, 19, ), - /* 146 */ array(16, 19, ), - /* 147 */ array(1, ), - /* 148 */ array(21, ), + /* 0 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35, ), + /* 1 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 2 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 3 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 4 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 5 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 6 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 7 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 8 */ array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 9 */ array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 10 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 66, 79, ), + /* 11 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 12 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 13 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 14 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 15 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 16 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 17 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 18 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 19 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 20 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 21 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 22 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 23 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 24 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 25 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 26 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 27 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 28 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 29 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 30 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 31 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 32 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 33 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 34 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 35 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 36 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 37 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 38 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 39 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 40 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 41 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 42 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 43 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 44 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 45 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79, ), + /* 46 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 47 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 48 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 49 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 50 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 51 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 52 */ array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79, ), + /* 53 */ array(1, 28, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 54 */ array(1, 3, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 55 */ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 56 */ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 57 */ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 58 */ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 59 */ array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 60 */ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 61 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 62 */ array(1, 25, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 63 */ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 64 */ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 65 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 66 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, ), + /* 67 */ array(1, 31, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 68 */ array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 69 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 70 */ array(1, 2, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 71 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 72 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 73 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 74 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 75 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 76 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 77 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 78 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 79 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 80 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 81 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 82 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 83 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 84 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 85 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 86 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 87 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 88 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 89 */ array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 90 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 91 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, ), + /* 92 */ array(1, 3, 22, 30, 36, 39, 62, ), + /* 93 */ array(1, 3, 30, 36, 55, ), + /* 94 */ array(1, 30, 36, ), + /* 95 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35, ), + /* 96 */ array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81, ), + /* 97 */ array(18, 20, 30, 32, 36, ), + /* 98 */ array(18, 20, 30, 32, 36, ), + /* 99 */ array(1, 3, 30, 36, ), + /* 100 */ array(18, 20, 30, 36, ), + /* 101 */ array(1, 3, 30, 36, ), + /* 102 */ array(18, 20, 30, 36, ), + /* 103 */ array(1, 30, 36, ), + /* 104 */ array(1, 30, 36, ), + /* 105 */ array(22, 60, 65, ), + /* 106 */ array(19, 20, 64, ), + /* 107 */ array(1, 2, ), + /* 108 */ array(19, 39, ), + /* 109 */ array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81, ), + /* 110 */ array(5, 6, 7, 8, 9, 15, 16, 17, ), + /* 111 */ array(1, 3, 30, 31, 36, 55, ), + /* 112 */ array(1, 3, 30, 36, 55, ), + /* 113 */ array(1, 3, 30, 36, 55, ), + /* 114 */ array(18, 20, 21, 26, ), + /* 115 */ array(18, 20, 21, 63, ), + /* 116 */ array(18, 20, 63, ), + /* 117 */ array(18, 20, 21, ), + /* 118 */ array(1, 3, 55, ), + /* 119 */ array(21, 22, 62, ), + /* 120 */ array(1, 32, 55, ), + /* 121 */ array(21, 22, 62, ), + /* 122 */ array(19, 39, ), + /* 123 */ array(22, 62, ), + /* 124 */ array(18, 20, ), + /* 125 */ array(30, 36, ), + /* 126 */ array(30, 36, ), + /* 127 */ array(19, 20, ), + /* 128 */ array(18, 20, ), + /* 129 */ array(1, 55, ), + /* 130 */ array(18, 20, ), + /* 131 */ array(18, 20, ), + /* 132 */ array(18, 20, ), + /* 133 */ array(30, 36, ), + /* 134 */ array(18, 20, ), + /* 135 */ array(18, 20, ), + /* 136 */ array(18, 20, ), + /* 137 */ array(19, 39, ), + /* 138 */ array(18, 20, ), + /* 139 */ array(18, 20, ), + /* 140 */ array(1, 22, ), + /* 141 */ array(18, 20, ), + /* 142 */ array(18, 20, ), + /* 143 */ array(18, 20, ), + /* 144 */ array(18, 20, ), + /* 145 */ array(19, 20, ), + /* 146 */ array(1, ), + /* 147 */ array(22, ), + /* 148 */ array(22, ), /* 149 */ array(1, ), /* 150 */ array(1, ), /* 151 */ array(1, ), /* 152 */ array(1, ), /* 153 */ array(1, ), /* 154 */ array(1, ), - /* 155 */ array(21, ), + /* 155 */ array(1, ), /* 156 */ array(1, ), /* 157 */ array(), - /* 158 */ array(17, 29, 35, ), - /* 159 */ array(17, 29, 35, ), - /* 160 */ array(16, 19, 62, ), - /* 161 */ array(17, 29, 35, ), - /* 162 */ array(17, 29, 35, ), - /* 163 */ array(17, 29, 35, ), - /* 164 */ array(17, 29, 35, ), - /* 165 */ array(17, 29, 35, ), - /* 166 */ array(17, 29, 35, ), - /* 167 */ array(17, 29, 35, ), - /* 168 */ array(17, 29, 35, ), - /* 169 */ array(17, 29, 35, ), - /* 170 */ array(17, 29, 35, ), - /* 171 */ array(17, 29, 35, ), - /* 172 */ array(17, 29, 35, ), - /* 173 */ array(16, 18, 19, ), - /* 174 */ array(17, 29, 35, ), - /* 175 */ array(17, 29, 35, ), - /* 176 */ array(17, 29, 35, ), - /* 177 */ array(17, 29, 35, ), - /* 178 */ array(17, 29, 35, ), - /* 179 */ array(17, 29, 35, ), - /* 180 */ array(59, 64, ), - /* 181 */ array(1, 17, ), - /* 182 */ array(59, 64, ), - /* 183 */ array(59, 64, ), - /* 184 */ array(1, 17, ), - /* 185 */ array(59, 64, ), - /* 186 */ array(59, 64, ), - /* 187 */ array(59, 64, ), - /* 188 */ array(1, 17, ), - /* 189 */ array(59, 64, ), - /* 190 */ array(16, 38, ), - /* 191 */ array(59, 64, ), - /* 192 */ array(59, 64, ), - /* 193 */ array(14, ), - /* 194 */ array(21, ), - /* 195 */ array(21, ), - /* 196 */ array(21, ), - /* 197 */ array(38, ), - /* 198 */ array(1, ), - /* 199 */ array(2, ), - /* 200 */ array(29, ), - /* 201 */ array(29, ), - /* 202 */ array(1, ), - /* 203 */ array(2, ), + /* 158 */ array(18, 19, 20, ), + /* 159 */ array(18, 20, 63, ), + /* 160 */ array(30, 36, ), + /* 161 */ array(60, 65, ), + /* 162 */ array(60, 65, ), + /* 163 */ array(30, 36, ), + /* 164 */ array(30, 36, ), + /* 165 */ array(30, 36, ), + /* 166 */ array(60, 65, ), + /* 167 */ array(30, 36, ), + /* 168 */ array(60, 65, ), + /* 169 */ array(60, 65, ), + /* 170 */ array(30, 36, ), + /* 171 */ array(30, 36, ), + /* 172 */ array(30, 36, ), + /* 173 */ array(60, 65, ), + /* 174 */ array(30, 36, ), + /* 175 */ array(30, 36, ), + /* 176 */ array(60, 65, ), + /* 177 */ array(30, 36, ), + /* 178 */ array(30, 36, ), + /* 179 */ array(30, 36, ), + /* 180 */ array(30, 36, ), + /* 181 */ array(30, 36, ), + /* 182 */ array(30, 36, ), + /* 183 */ array(30, 36, ), + /* 184 */ array(30, 36, ), + /* 185 */ array(30, 36, ), + /* 186 */ array(60, 65, ), + /* 187 */ array(60, 65, ), + /* 188 */ array(30, 36, ), + /* 189 */ array(18, 39, ), + /* 190 */ array(1, ), + /* 191 */ array(1, ), + /* 192 */ array(1, ), + /* 193 */ array(2, ), + /* 194 */ array(2, ), + /* 195 */ array(1, ), + /* 196 */ array(1, ), + /* 197 */ array(22, ), + /* 198 */ array(30, ), + /* 199 */ array(30, ), + /* 200 */ array(22, ), + /* 201 */ array(16, ), + /* 202 */ array(22, ), + /* 203 */ array(39, ), /* 204 */ array(), /* 205 */ array(), /* 206 */ array(), /* 207 */ array(), /* 208 */ array(), - /* 209 */ array(17, 24, 26, 27, 29, 30, 35, 37, 38, 39, 54, 61, 65, 79, ), - /* 210 */ array(17, 20, 29, 35, 38, 61, ), - /* 211 */ array(38, 59, 61, 65, ), - /* 212 */ array(16, 18, 19, 36, ), - /* 213 */ array(31, 38, 61, ), - /* 214 */ array(38, 61, ), - /* 215 */ array(2, 20, ), - /* 216 */ array(38, 61, ), - /* 217 */ array(24, 37, ), - /* 218 */ array(37, 65, ), - /* 219 */ array(17, 25, ), - /* 220 */ array(37, 39, ), - /* 221 */ array(20, 59, ), - /* 222 */ array(37, 39, ), - /* 223 */ array(37, 39, ), - /* 224 */ array(25, 79, ), - /* 225 */ array(19, 62, ), - /* 226 */ array(63, ), - /* 227 */ array(19, ), - /* 228 */ array(65, ), + /* 209 */ array(3, 25, 27, 28, 30, 31, 36, 38, 39, 40, 55, 62, 66, 80, ), + /* 210 */ array(3, 21, 30, 36, 39, 62, ), + /* 211 */ array(18, 19, 20, 37, ), + /* 212 */ array(39, 60, 62, 66, ), + /* 213 */ array(32, 39, 62, ), + /* 214 */ array(2, 21, ), + /* 215 */ array(38, 40, ), + /* 216 */ array(21, 60, ), + /* 217 */ array(3, 26, ), + /* 218 */ array(38, 66, ), + /* 219 */ array(20, 63, ), + /* 220 */ array(25, 38, ), + /* 221 */ array(38, 40, ), + /* 222 */ array(26, 80, ), + /* 223 */ array(38, 40, ), + /* 224 */ array(39, 62, ), + /* 225 */ array(39, 62, ), + /* 226 */ array(39, ), + /* 227 */ array(3, ), + /* 228 */ array(64, ), /* 229 */ array(19, ), - /* 230 */ array(19, ), + /* 230 */ array(3, ), /* 231 */ array(19, ), - /* 232 */ array(25, ), - /* 233 */ array(63, ), - /* 234 */ array(19, ), - /* 235 */ array(59, ), - /* 236 */ array(36, ), - /* 237 */ array(36, ), - /* 238 */ array(39, ), - /* 239 */ array(19, ), - /* 240 */ array(55, ), - /* 241 */ array(2, ), - /* 242 */ array(38, ), - /* 243 */ array(18, ), - /* 244 */ array(18, ), - /* 245 */ array(18, ), - /* 246 */ array(19, ), - /* 247 */ array(18, ), + /* 232 */ array(40, ), + /* 233 */ array(64, ), + /* 234 */ array(27, ), + /* 235 */ array(21, ), + /* 236 */ array(20, ), + /* 237 */ array(2, ), + /* 238 */ array(20, ), + /* 239 */ array(39, ), + /* 240 */ array(37, ), + /* 241 */ array(37, ), + /* 242 */ array(20, ), + /* 243 */ array(20, ), + /* 244 */ array(19, ), + /* 245 */ array(20, ), + /* 246 */ array(3, ), + /* 247 */ array(19, ), /* 248 */ array(20, ), - /* 249 */ array(19, ), - /* 250 */ array(19, ), - /* 251 */ array(2, ), - /* 252 */ array(26, ), - /* 253 */ array(38, ), - /* 254 */ array(19, ), - /* 255 */ array(19, ), - /* 256 */ array(18, ), - /* 257 */ array(), - /* 258 */ array(), - /* 259 */ array(), + /* 249 */ array(20, ), + /* 250 */ array(60, ), + /* 251 */ array(20, ), + /* 252 */ array(20, ), + /* 253 */ array(56, ), + /* 254 */ array(2, ), + /* 255 */ array(26, ), + /* 256 */ array(20, ), + /* 257 */ array(66, ), + /* 258 */ array(19, ), + /* 259 */ array(20, ), /* 260 */ array(), /* 261 */ array(), /* 262 */ array(), @@ -1125,82 +1130,51 @@ static public $yy_action = array( /* 360 */ array(), /* 361 */ array(), /* 362 */ array(), - /* 363 */ array(), - /* 364 */ array(), - /* 365 */ array(), - /* 366 */ array(), - /* 367 */ array(), - /* 368 */ array(), - /* 369 */ array(), - /* 370 */ array(), - /* 371 */ array(), - /* 372 */ array(), - /* 373 */ array(), - /* 374 */ array(), - /* 375 */ array(), - /* 376 */ array(), - /* 377 */ array(), - /* 378 */ array(), - /* 379 */ array(), - /* 380 */ array(), - /* 381 */ array(), - /* 382 */ array(), - /* 383 */ array(), - /* 384 */ array(), - /* 385 */ array(), - /* 386 */ array(), - /* 387 */ array(), - /* 388 */ array(), - /* 389 */ array(), - /* 390 */ array(), ); static public $yy_default = array( - /* 0 */ 394, 578, 549, 549, 595, 549, 595, 595, 595, 595, - /* 10 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - /* 20 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - /* 30 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - /* 40 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - /* 50 */ 595, 595, 595, 455, 595, 595, 595, 455, 455, 455, - /* 60 */ 595, 595, 595, 595, 595, 595, 595, 595, 460, 595, - /* 70 */ 595, 466, 465, 484, 547, 579, 581, 548, 580, 489, - /* 80 */ 488, 480, 479, 481, 457, 485, 462, 476, 460, 437, - /* 90 */ 492, 493, 504, 468, 455, 391, 595, 455, 455, 475, - /* 100 */ 512, 455, 455, 595, 455, 455, 595, 561, 595, 595, - /* 110 */ 595, 468, 468, 468, 595, 522, 522, 522, 468, 513, - /* 120 */ 468, 513, 595, 595, 595, 595, 595, 455, 595, 595, - /* 130 */ 595, 595, 595, 595, 455, 513, 595, 595, 595, 595, - /* 140 */ 595, 468, 595, 595, 595, 595, 522, 473, 558, 491, - /* 150 */ 478, 472, 497, 495, 496, 513, 471, 556, 595, 595, - /* 160 */ 523, 595, 595, 595, 595, 595, 595, 595, 595, 595, - /* 170 */ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - /* 180 */ 516, 595, 518, 519, 595, 520, 540, 542, 595, 539, - /* 190 */ 522, 517, 541, 410, 562, 559, 536, 522, 475, 551, - /* 200 */ 594, 594, 512, 550, 522, 555, 555, 555, 522, 470, - /* 210 */ 504, 504, 595, 504, 490, 534, 504, 595, 595, 494, - /* 220 */ 595, 500, 595, 595, 494, 595, 595, 595, 595, 595, - /* 230 */ 595, 595, 494, 595, 595, 500, 502, 595, 595, 595, - /* 240 */ 506, 534, 560, 595, 595, 595, 595, 595, 595, 595, - /* 250 */ 595, 534, 463, 534, 595, 595, 595, 401, 543, 400, - /* 260 */ 402, 546, 445, 398, 397, 393, 464, 438, 593, 467, - /* 270 */ 435, 395, 440, 434, 439, 396, 399, 456, 531, 420, - /* 280 */ 529, 392, 528, 506, 527, 535, 444, 557, 545, 544, - /* 290 */ 530, 412, 453, 526, 505, 419, 507, 525, 532, 470, - /* 300 */ 514, 521, 524, 508, 510, 482, 483, 416, 415, 417, - /* 310 */ 418, 477, 511, 515, 538, 469, 509, 534, 533, 432, - /* 320 */ 446, 447, 443, 442, 436, 454, 433, 441, 554, 448, - /* 330 */ 498, 499, 501, 503, 452, 451, 449, 450, 552, 553, - /* 340 */ 486, 487, 589, 430, 582, 583, 584, 431, 429, 426, - /* 350 */ 537, 427, 428, 406, 587, 575, 404, 577, 576, 405, - /* 360 */ 585, 586, 588, 591, 592, 425, 424, 569, 568, 570, - /* 370 */ 571, 572, 567, 566, 414, 563, 564, 565, 573, 574, - /* 380 */ 422, 590, 407, 423, 421, 408, 474, 413, 411, 409, - /* 390 */ 403, + /* 0 */ 366, 551, 522, 568, 568, 568, 522, 522, 568, 568, + /* 10 */ 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + /* 20 */ 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + /* 30 */ 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + /* 40 */ 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + /* 50 */ 568, 568, 568, 428, 568, 405, 428, 428, 428, 397, + /* 60 */ 568, 568, 568, 568, 568, 568, 568, 433, 568, 568, + /* 70 */ 568, 553, 449, 520, 552, 457, 433, 452, 439, 462, + /* 80 */ 521, 461, 430, 435, 554, 438, 454, 453, 410, 458, + /* 90 */ 466, 465, 477, 441, 428, 363, 568, 428, 428, 485, + /* 100 */ 428, 448, 428, 428, 428, 534, 568, 419, 568, 568, + /* 110 */ 568, 441, 441, 441, 568, 495, 495, 495, 441, 486, + /* 120 */ 441, 486, 568, 486, 568, 428, 428, 568, 568, 441, + /* 130 */ 495, 568, 568, 407, 568, 568, 568, 568, 568, 568, + /* 140 */ 422, 568, 568, 568, 568, 568, 451, 486, 531, 464, + /* 150 */ 446, 445, 468, 444, 469, 470, 424, 529, 568, 496, + /* 160 */ 395, 489, 492, 412, 392, 406, 514, 409, 490, 491, + /* 170 */ 413, 394, 398, 513, 393, 408, 493, 400, 417, 402, + /* 180 */ 415, 404, 414, 418, 416, 403, 515, 512, 399, 495, + /* 190 */ 448, 420, 485, 523, 524, 423, 425, 532, 567, 567, + /* 200 */ 509, 383, 535, 495, 495, 528, 528, 528, 495, 443, + /* 210 */ 477, 568, 477, 477, 507, 568, 473, 467, 568, 568, + /* 220 */ 568, 568, 467, 568, 477, 463, 507, 568, 568, 568, + /* 230 */ 568, 568, 568, 568, 436, 568, 568, 507, 568, 533, + /* 240 */ 568, 475, 568, 568, 568, 568, 568, 568, 568, 568, + /* 250 */ 473, 568, 568, 479, 507, 467, 568, 568, 568, 568, + /* 260 */ 508, 429, 437, 364, 501, 519, 503, 440, 500, 479, + /* 270 */ 566, 516, 517, 502, 504, 518, 411, 530, 459, 506, + /* 280 */ 507, 527, 525, 427, 426, 388, 389, 390, 526, 471, + /* 290 */ 443, 487, 494, 497, 442, 482, 472, 474, 476, 387, + /* 300 */ 386, 371, 372, 373, 374, 370, 369, 365, 367, 368, + /* 310 */ 375, 376, 382, 384, 385, 381, 380, 377, 378, 379, + /* 320 */ 505, 498, 510, 421, 562, 555, 563, 447, 545, 546, + /* 330 */ 547, 556, 557, 558, 548, 550, 565, 564, 560, 559, + /* 340 */ 561, 544, 543, 450, 484, 488, 511, 483, 481, 499, + /* 350 */ 478, 480, 455, 456, 540, 541, 542, 539, 538, 460, + /* 360 */ 536, 537, 549, ); - const YYNOCODE = 124; + const YYNOCODE = 125; const YYSTACKDEPTH = 500; - const YYNSTATE = 391; - const YYNRULE = 204; - const YYERRORSYMBOL = 81; + const YYNSTATE = 363; + const YYNRULE = 205; + const YYERRORSYMBOL = 82; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; public static $yyFallback = array( @@ -1229,37 +1203,37 @@ static public $yy_action = array( public $yystack = array(); /* The parser's stack */ public $yyTokenName = array( - '$', 'VERT', 'COLON', 'COMMENT', - 'PHPSTARTTAG', 'PHPENDTAG', 'ASPSTARTTAG', 'ASPENDTAG', - 'FAKEPHPSTARTTAG', 'XMLTAG', 'TEXT', 'STRIPON', - 'STRIPOFF', 'LITERALSTART', 'LITERALEND', 'LITERAL', - 'LDEL', 'RDEL', 'DOLLAR', 'ID', - 'EQUAL', 'PTR', 'LDELIF', 'LDELFOR', - 'SEMICOLON', 'INCDEC', 'TO', 'STEP', - 'LDELFOREACH', 'SPACE', 'AS', 'APTR', - 'LDELSETFILTER', 'SMARTYBLOCKCHILD', 'LDELSLASH', 'ATTR', - 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP', - 'MATH', 'UNIMATH', 'ANDSYM', 'ISIN', - 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN', 'ISNOTEVEN', - 'ISEVENBY', 'ISNOTEVENBY', 'ISODD', 'ISNOTODD', - 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF', 'QMARK', - 'NOT', 'TYPECAST', 'HEX', 'DOT', - 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT', 'HATCH', - 'OPENB', 'CLOSEB', 'EQUALS', 'NOTEQUALS', - 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL', 'LESSEQUAL', - 'IDENTITY', 'NONEIDENTITY', 'MOD', 'LAND', - 'LOR', 'LXOR', 'QUOTE', 'BACKTICK', - 'DOLLARID', 'error', 'start', 'template', - 'template_element', 'smartytag', 'literal', 'literal_elements', - 'literal_element', 'value', 'modifierlist', 'attributes', - 'expr', 'varindexed', 'statement', 'statements', - 'optspace', 'varvar', 'foraction', 'modparameters', - 'attribute', 'ternary', 'array', 'ifcond', - 'lop', 'variable', 'function', 'doublequoted_with_quotes', - 'static_class_access', 'object', 'arrayindex', 'indexdef', - 'varvarele', 'objectchain', 'objectelement', 'method', - 'params', 'modifier', 'modparameter', 'arrayelements', - 'arrayelement', 'doublequoted', 'doublequotedcontent', + '$', 'VERT', 'COLON', 'RDEL', + 'COMMENT', 'PHPSTARTTAG', 'PHPENDTAG', 'ASPSTARTTAG', + 'ASPENDTAG', 'FAKEPHPSTARTTAG', 'XMLTAG', 'TEXT', + 'STRIPON', 'STRIPOFF', 'BLOCKSOURCE', 'LITERALSTART', + 'LITERALEND', 'LITERAL', 'LDEL', 'DOLLAR', + 'ID', 'EQUAL', 'PTR', 'LDELIF', + 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', + 'STEP', 'LDELFOREACH', 'SPACE', 'AS', + 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', 'LDELSLASH', + 'ATTR', 'INTEGER', 'COMMA', 'OPENP', + 'CLOSEP', 'MATH', 'UNIMATH', 'ANDSYM', + 'ISIN', 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN', + 'ISNOTEVEN', 'ISEVENBY', 'ISNOTEVENBY', 'ISODD', + 'ISNOTODD', 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF', + 'QMARK', 'NOT', 'TYPECAST', 'HEX', + 'DOT', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT', + 'HATCH', 'OPENB', 'CLOSEB', 'EQUALS', + 'NOTEQUALS', 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL', + 'LESSEQUAL', 'IDENTITY', 'NONEIDENTITY', 'MOD', + 'LAND', 'LOR', 'LXOR', 'QUOTE', + 'BACKTICK', 'DOLLARID', 'error', 'start', + 'template', 'template_element', 'smartytag', 'literal', + 'literal_elements', 'literal_element', 'value', 'modifierlist', + 'attributes', 'expr', 'varindexed', 'statement', + 'statements', 'optspace', 'varvar', 'foraction', + 'modparameters', 'attribute', 'ternary', 'array', + 'ifcond', 'lop', 'variable', 'function', + 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex', + 'indexdef', 'varvarele', 'objectchain', 'objectelement', + 'method', 'params', 'modifier', 'modparameter', + 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent', ); public static $yyRuleName = array( @@ -1267,7 +1241,7 @@ static public $yy_action = array( /* 1 */ "template ::= template_element", /* 2 */ "template ::= template template_element", /* 3 */ "template ::=", - /* 4 */ "template_element ::= smartytag", + /* 4 */ "template_element ::= smartytag RDEL", /* 5 */ "template_element ::= COMMENT", /* 6 */ "template_element ::= literal", /* 7 */ "template_element ::= PHPSTARTTAG", @@ -1279,194 +1253,195 @@ static public $yy_action = array( /* 13 */ "template_element ::= TEXT", /* 14 */ "template_element ::= STRIPON", /* 15 */ "template_element ::= STRIPOFF", - /* 16 */ "literal ::= LITERALSTART LITERALEND", - /* 17 */ "literal ::= LITERALSTART literal_elements LITERALEND", - /* 18 */ "literal_elements ::= literal_elements literal_element", - /* 19 */ "literal_elements ::=", - /* 20 */ "literal_element ::= literal", - /* 21 */ "literal_element ::= LITERAL", - /* 22 */ "literal_element ::= PHPSTARTTAG", - /* 23 */ "literal_element ::= FAKEPHPSTARTTAG", - /* 24 */ "literal_element ::= PHPENDTAG", - /* 25 */ "literal_element ::= ASPSTARTTAG", - /* 26 */ "literal_element ::= ASPENDTAG", - /* 27 */ "smartytag ::= LDEL value RDEL", - /* 28 */ "smartytag ::= LDEL value modifierlist attributes RDEL", - /* 29 */ "smartytag ::= LDEL value attributes RDEL", - /* 30 */ "smartytag ::= LDEL expr modifierlist attributes RDEL", - /* 31 */ "smartytag ::= LDEL expr attributes RDEL", - /* 32 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL", - /* 33 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL", - /* 34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL", - /* 35 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL", - /* 36 */ "smartytag ::= LDEL ID attributes RDEL", - /* 37 */ "smartytag ::= LDEL ID RDEL", - /* 38 */ "smartytag ::= LDEL ID PTR ID attributes RDEL", - /* 39 */ "smartytag ::= LDEL ID modifierlist attributes RDEL", - /* 40 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes RDEL", - /* 41 */ "smartytag ::= LDELIF expr RDEL", - /* 42 */ "smartytag ::= LDELIF expr attributes RDEL", - /* 43 */ "smartytag ::= LDELIF statement RDEL", - /* 44 */ "smartytag ::= LDELIF statement attributes RDEL", - /* 45 */ "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes RDEL", - /* 46 */ "foraction ::= EQUAL expr", - /* 47 */ "foraction ::= INCDEC", - /* 48 */ "smartytag ::= LDELFOR statement TO expr attributes RDEL", - /* 49 */ "smartytag ::= LDELFOR statement TO expr STEP expr attributes RDEL", - /* 50 */ "smartytag ::= LDELFOREACH attributes RDEL", - /* 51 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes RDEL", - /* 52 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL", - /* 53 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes RDEL", - /* 54 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL", - /* 55 */ "smartytag ::= LDELSETFILTER ID modparameters RDEL", - /* 56 */ "smartytag ::= LDELSETFILTER ID modparameters modifierlist RDEL", - /* 57 */ "smartytag ::= SMARTYBLOCKCHILD", - /* 58 */ "smartytag ::= LDELSLASH ID RDEL", - /* 59 */ "smartytag ::= LDELSLASH ID modifierlist RDEL", - /* 60 */ "smartytag ::= LDELSLASH ID PTR ID RDEL", - /* 61 */ "smartytag ::= LDELSLASH ID PTR ID modifierlist RDEL", - /* 62 */ "attributes ::= attributes attribute", - /* 63 */ "attributes ::= attribute", - /* 64 */ "attributes ::=", - /* 65 */ "attribute ::= SPACE ID EQUAL ID", - /* 66 */ "attribute ::= ATTR expr", - /* 67 */ "attribute ::= ATTR value", - /* 68 */ "attribute ::= SPACE ID", - /* 69 */ "attribute ::= SPACE expr", - /* 70 */ "attribute ::= SPACE value", - /* 71 */ "attribute ::= SPACE INTEGER EQUAL expr", - /* 72 */ "statements ::= statement", - /* 73 */ "statements ::= statements COMMA statement", - /* 74 */ "statement ::= DOLLAR varvar EQUAL expr", - /* 75 */ "statement ::= varindexed EQUAL expr", - /* 76 */ "statement ::= OPENP statement CLOSEP", - /* 77 */ "expr ::= value", - /* 78 */ "expr ::= ternary", - /* 79 */ "expr ::= DOLLAR ID COLON ID", - /* 80 */ "expr ::= expr MATH value", - /* 81 */ "expr ::= expr UNIMATH value", - /* 82 */ "expr ::= expr ANDSYM value", - /* 83 */ "expr ::= array", - /* 84 */ "expr ::= expr modifierlist", - /* 85 */ "expr ::= expr ifcond expr", - /* 86 */ "expr ::= expr ISIN array", - /* 87 */ "expr ::= expr ISIN value", - /* 88 */ "expr ::= expr lop expr", - /* 89 */ "expr ::= expr ISDIVBY expr", - /* 90 */ "expr ::= expr ISNOTDIVBY expr", - /* 91 */ "expr ::= expr ISEVEN", - /* 92 */ "expr ::= expr ISNOTEVEN", - /* 93 */ "expr ::= expr ISEVENBY expr", - /* 94 */ "expr ::= expr ISNOTEVENBY expr", - /* 95 */ "expr ::= expr ISODD", - /* 96 */ "expr ::= expr ISNOTODD", - /* 97 */ "expr ::= expr ISODDBY expr", - /* 98 */ "expr ::= expr ISNOTODDBY expr", - /* 99 */ "expr ::= value INSTANCEOF ID", - /* 100 */ "expr ::= value INSTANCEOF value", - /* 101 */ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr", - /* 102 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr", - /* 103 */ "value ::= variable", - /* 104 */ "value ::= UNIMATH value", - /* 105 */ "value ::= NOT value", - /* 106 */ "value ::= TYPECAST value", - /* 107 */ "value ::= variable INCDEC", - /* 108 */ "value ::= HEX", - /* 109 */ "value ::= INTEGER", - /* 110 */ "value ::= INTEGER DOT INTEGER", - /* 111 */ "value ::= INTEGER DOT", - /* 112 */ "value ::= DOT INTEGER", - /* 113 */ "value ::= ID", - /* 114 */ "value ::= function", - /* 115 */ "value ::= OPENP expr CLOSEP", - /* 116 */ "value ::= SINGLEQUOTESTRING", - /* 117 */ "value ::= doublequoted_with_quotes", - /* 118 */ "value ::= ID DOUBLECOLON static_class_access", - /* 119 */ "value ::= varindexed DOUBLECOLON static_class_access", - /* 120 */ "value ::= smartytag", - /* 121 */ "value ::= value modifierlist", - /* 122 */ "variable ::= varindexed", - /* 123 */ "variable ::= DOLLAR varvar AT ID", - /* 124 */ "variable ::= object", - /* 125 */ "variable ::= HATCH ID HATCH", - /* 126 */ "variable ::= HATCH ID HATCH arrayindex", - /* 127 */ "variable ::= HATCH variable HATCH", - /* 128 */ "variable ::= HATCH variable HATCH arrayindex", - /* 129 */ "varindexed ::= DOLLAR varvar arrayindex", - /* 130 */ "arrayindex ::= arrayindex indexdef", - /* 131 */ "arrayindex ::=", - /* 132 */ "indexdef ::= DOT DOLLAR varvar", - /* 133 */ "indexdef ::= DOT DOLLAR varvar AT ID", - /* 134 */ "indexdef ::= DOT ID", - /* 135 */ "indexdef ::= DOT INTEGER", - /* 136 */ "indexdef ::= DOT LDEL expr RDEL", - /* 137 */ "indexdef ::= OPENB ID CLOSEB", - /* 138 */ "indexdef ::= OPENB ID DOT ID CLOSEB", - /* 139 */ "indexdef ::= OPENB expr CLOSEB", - /* 140 */ "indexdef ::= OPENB CLOSEB", - /* 141 */ "varvar ::= varvarele", - /* 142 */ "varvar ::= varvar varvarele", - /* 143 */ "varvarele ::= ID", - /* 144 */ "varvarele ::= LDEL expr RDEL", - /* 145 */ "object ::= varindexed objectchain", - /* 146 */ "objectchain ::= objectelement", - /* 147 */ "objectchain ::= objectchain objectelement", - /* 148 */ "objectelement ::= PTR ID arrayindex", - /* 149 */ "objectelement ::= PTR DOLLAR varvar arrayindex", - /* 150 */ "objectelement ::= PTR LDEL expr RDEL arrayindex", - /* 151 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex", - /* 152 */ "objectelement ::= PTR method", - /* 153 */ "function ::= ID OPENP params CLOSEP", - /* 154 */ "method ::= ID OPENP params CLOSEP", - /* 155 */ "method ::= DOLLAR ID OPENP params CLOSEP", - /* 156 */ "params ::= params COMMA expr", - /* 157 */ "params ::= expr", - /* 158 */ "params ::=", - /* 159 */ "modifierlist ::= modifierlist modifier modparameters", - /* 160 */ "modifierlist ::= modifier modparameters", - /* 161 */ "modifier ::= VERT AT ID", - /* 162 */ "modifier ::= VERT ID", - /* 163 */ "modparameters ::= modparameters modparameter", - /* 164 */ "modparameters ::=", - /* 165 */ "modparameter ::= COLON value", - /* 166 */ "modparameter ::= COLON array", - /* 167 */ "static_class_access ::= method", - /* 168 */ "static_class_access ::= method objectchain", - /* 169 */ "static_class_access ::= ID", - /* 170 */ "static_class_access ::= DOLLAR ID arrayindex", - /* 171 */ "static_class_access ::= DOLLAR ID arrayindex objectchain", - /* 172 */ "ifcond ::= EQUALS", - /* 173 */ "ifcond ::= NOTEQUALS", - /* 174 */ "ifcond ::= GREATERTHAN", - /* 175 */ "ifcond ::= LESSTHAN", - /* 176 */ "ifcond ::= GREATEREQUAL", - /* 177 */ "ifcond ::= LESSEQUAL", - /* 178 */ "ifcond ::= IDENTITY", - /* 179 */ "ifcond ::= NONEIDENTITY", - /* 180 */ "ifcond ::= MOD", - /* 181 */ "lop ::= LAND", - /* 182 */ "lop ::= LOR", - /* 183 */ "lop ::= LXOR", - /* 184 */ "array ::= OPENB arrayelements CLOSEB", - /* 185 */ "arrayelements ::= arrayelement", - /* 186 */ "arrayelements ::= arrayelements COMMA arrayelement", - /* 187 */ "arrayelements ::=", - /* 188 */ "arrayelement ::= value APTR expr", - /* 189 */ "arrayelement ::= ID APTR expr", - /* 190 */ "arrayelement ::= expr", - /* 191 */ "doublequoted_with_quotes ::= QUOTE QUOTE", - /* 192 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE", - /* 193 */ "doublequoted ::= doublequoted doublequotedcontent", - /* 194 */ "doublequoted ::= doublequotedcontent", - /* 195 */ "doublequotedcontent ::= BACKTICK variable BACKTICK", - /* 196 */ "doublequotedcontent ::= BACKTICK expr BACKTICK", - /* 197 */ "doublequotedcontent ::= DOLLARID", - /* 198 */ "doublequotedcontent ::= LDEL variable RDEL", - /* 199 */ "doublequotedcontent ::= LDEL expr RDEL", - /* 200 */ "doublequotedcontent ::= smartytag", - /* 201 */ "doublequotedcontent ::= TEXT", - /* 202 */ "optspace ::= SPACE", - /* 203 */ "optspace ::=", + /* 16 */ "template_element ::= BLOCKSOURCE", + /* 17 */ "literal ::= LITERALSTART LITERALEND", + /* 18 */ "literal ::= LITERALSTART literal_elements LITERALEND", + /* 19 */ "literal_elements ::= literal_elements literal_element", + /* 20 */ "literal_elements ::=", + /* 21 */ "literal_element ::= literal", + /* 22 */ "literal_element ::= LITERAL", + /* 23 */ "literal_element ::= PHPSTARTTAG", + /* 24 */ "literal_element ::= FAKEPHPSTARTTAG", + /* 25 */ "literal_element ::= PHPENDTAG", + /* 26 */ "literal_element ::= ASPSTARTTAG", + /* 27 */ "literal_element ::= ASPENDTAG", + /* 28 */ "smartytag ::= LDEL value", + /* 29 */ "smartytag ::= LDEL value modifierlist attributes", + /* 30 */ "smartytag ::= LDEL value attributes", + /* 31 */ "smartytag ::= LDEL expr modifierlist attributes", + /* 32 */ "smartytag ::= LDEL expr attributes", + /* 33 */ "smartytag ::= LDEL DOLLAR ID EQUAL value", + /* 34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr", + /* 35 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes", + /* 36 */ "smartytag ::= LDEL varindexed EQUAL expr attributes", + /* 37 */ "smartytag ::= LDEL ID attributes", + /* 38 */ "smartytag ::= LDEL ID", + /* 39 */ "smartytag ::= LDEL ID PTR ID attributes", + /* 40 */ "smartytag ::= LDEL ID modifierlist attributes", + /* 41 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes", + /* 42 */ "smartytag ::= LDELIF expr", + /* 43 */ "smartytag ::= LDELIF expr attributes", + /* 44 */ "smartytag ::= LDELIF statement", + /* 45 */ "smartytag ::= LDELIF statement attributes", + /* 46 */ "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes", + /* 47 */ "foraction ::= EQUAL expr", + /* 48 */ "foraction ::= INCDEC", + /* 49 */ "smartytag ::= LDELFOR statement TO expr attributes", + /* 50 */ "smartytag ::= LDELFOR statement TO expr STEP expr attributes", + /* 51 */ "smartytag ::= LDELFOREACH attributes", + /* 52 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes", + /* 53 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes", + /* 54 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes", + /* 55 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes", + /* 56 */ "smartytag ::= LDELSETFILTER ID modparameters", + /* 57 */ "smartytag ::= LDELSETFILTER ID modparameters modifierlist", + /* 58 */ "smartytag ::= LDEL SMARTYBLOCKCHILDPARENT", + /* 59 */ "smartytag ::= LDELSLASH ID", + /* 60 */ "smartytag ::= LDELSLASH ID modifierlist", + /* 61 */ "smartytag ::= LDELSLASH ID PTR ID", + /* 62 */ "smartytag ::= LDELSLASH ID PTR ID modifierlist", + /* 63 */ "attributes ::= attributes attribute", + /* 64 */ "attributes ::= attribute", + /* 65 */ "attributes ::=", + /* 66 */ "attribute ::= SPACE ID EQUAL ID", + /* 67 */ "attribute ::= ATTR expr", + /* 68 */ "attribute ::= ATTR value", + /* 69 */ "attribute ::= SPACE ID", + /* 70 */ "attribute ::= SPACE expr", + /* 71 */ "attribute ::= SPACE value", + /* 72 */ "attribute ::= SPACE INTEGER EQUAL expr", + /* 73 */ "statements ::= statement", + /* 74 */ "statements ::= statements COMMA statement", + /* 75 */ "statement ::= DOLLAR varvar EQUAL expr", + /* 76 */ "statement ::= varindexed EQUAL expr", + /* 77 */ "statement ::= OPENP statement CLOSEP", + /* 78 */ "expr ::= value", + /* 79 */ "expr ::= ternary", + /* 80 */ "expr ::= DOLLAR ID COLON ID", + /* 81 */ "expr ::= expr MATH value", + /* 82 */ "expr ::= expr UNIMATH value", + /* 83 */ "expr ::= expr ANDSYM value", + /* 84 */ "expr ::= array", + /* 85 */ "expr ::= expr modifierlist", + /* 86 */ "expr ::= expr ifcond expr", + /* 87 */ "expr ::= expr ISIN array", + /* 88 */ "expr ::= expr ISIN value", + /* 89 */ "expr ::= expr lop expr", + /* 90 */ "expr ::= expr ISDIVBY expr", + /* 91 */ "expr ::= expr ISNOTDIVBY expr", + /* 92 */ "expr ::= expr ISEVEN", + /* 93 */ "expr ::= expr ISNOTEVEN", + /* 94 */ "expr ::= expr ISEVENBY expr", + /* 95 */ "expr ::= expr ISNOTEVENBY expr", + /* 96 */ "expr ::= expr ISODD", + /* 97 */ "expr ::= expr ISNOTODD", + /* 98 */ "expr ::= expr ISODDBY expr", + /* 99 */ "expr ::= expr ISNOTODDBY expr", + /* 100 */ "expr ::= value INSTANCEOF ID", + /* 101 */ "expr ::= value INSTANCEOF value", + /* 102 */ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr", + /* 103 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr", + /* 104 */ "value ::= variable", + /* 105 */ "value ::= UNIMATH value", + /* 106 */ "value ::= NOT value", + /* 107 */ "value ::= TYPECAST value", + /* 108 */ "value ::= variable INCDEC", + /* 109 */ "value ::= HEX", + /* 110 */ "value ::= INTEGER", + /* 111 */ "value ::= INTEGER DOT INTEGER", + /* 112 */ "value ::= INTEGER DOT", + /* 113 */ "value ::= DOT INTEGER", + /* 114 */ "value ::= ID", + /* 115 */ "value ::= function", + /* 116 */ "value ::= OPENP expr CLOSEP", + /* 117 */ "value ::= SINGLEQUOTESTRING", + /* 118 */ "value ::= doublequoted_with_quotes", + /* 119 */ "value ::= ID DOUBLECOLON static_class_access", + /* 120 */ "value ::= varindexed DOUBLECOLON static_class_access", + /* 121 */ "value ::= smartytag RDEL", + /* 122 */ "value ::= value modifierlist", + /* 123 */ "variable ::= varindexed", + /* 124 */ "variable ::= DOLLAR varvar AT ID", + /* 125 */ "variable ::= object", + /* 126 */ "variable ::= HATCH ID HATCH", + /* 127 */ "variable ::= HATCH ID HATCH arrayindex", + /* 128 */ "variable ::= HATCH variable HATCH", + /* 129 */ "variable ::= HATCH variable HATCH arrayindex", + /* 130 */ "varindexed ::= DOLLAR varvar arrayindex", + /* 131 */ "arrayindex ::= arrayindex indexdef", + /* 132 */ "arrayindex ::=", + /* 133 */ "indexdef ::= DOT DOLLAR varvar", + /* 134 */ "indexdef ::= DOT DOLLAR varvar AT ID", + /* 135 */ "indexdef ::= DOT ID", + /* 136 */ "indexdef ::= DOT INTEGER", + /* 137 */ "indexdef ::= DOT LDEL expr RDEL", + /* 138 */ "indexdef ::= OPENB ID CLOSEB", + /* 139 */ "indexdef ::= OPENB ID DOT ID CLOSEB", + /* 140 */ "indexdef ::= OPENB expr CLOSEB", + /* 141 */ "indexdef ::= OPENB CLOSEB", + /* 142 */ "varvar ::= varvarele", + /* 143 */ "varvar ::= varvar varvarele", + /* 144 */ "varvarele ::= ID", + /* 145 */ "varvarele ::= LDEL expr RDEL", + /* 146 */ "object ::= varindexed objectchain", + /* 147 */ "objectchain ::= objectelement", + /* 148 */ "objectchain ::= objectchain objectelement", + /* 149 */ "objectelement ::= PTR ID arrayindex", + /* 150 */ "objectelement ::= PTR DOLLAR varvar arrayindex", + /* 151 */ "objectelement ::= PTR LDEL expr RDEL arrayindex", + /* 152 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex", + /* 153 */ "objectelement ::= PTR method", + /* 154 */ "function ::= ID OPENP params CLOSEP", + /* 155 */ "method ::= ID OPENP params CLOSEP", + /* 156 */ "method ::= DOLLAR ID OPENP params CLOSEP", + /* 157 */ "params ::= params COMMA expr", + /* 158 */ "params ::= expr", + /* 159 */ "params ::=", + /* 160 */ "modifierlist ::= modifierlist modifier modparameters", + /* 161 */ "modifierlist ::= modifier modparameters", + /* 162 */ "modifier ::= VERT AT ID", + /* 163 */ "modifier ::= VERT ID", + /* 164 */ "modparameters ::= modparameters modparameter", + /* 165 */ "modparameters ::=", + /* 166 */ "modparameter ::= COLON value", + /* 167 */ "modparameter ::= COLON array", + /* 168 */ "static_class_access ::= method", + /* 169 */ "static_class_access ::= method objectchain", + /* 170 */ "static_class_access ::= ID", + /* 171 */ "static_class_access ::= DOLLAR ID arrayindex", + /* 172 */ "static_class_access ::= DOLLAR ID arrayindex objectchain", + /* 173 */ "ifcond ::= EQUALS", + /* 174 */ "ifcond ::= NOTEQUALS", + /* 175 */ "ifcond ::= GREATERTHAN", + /* 176 */ "ifcond ::= LESSTHAN", + /* 177 */ "ifcond ::= GREATEREQUAL", + /* 178 */ "ifcond ::= LESSEQUAL", + /* 179 */ "ifcond ::= IDENTITY", + /* 180 */ "ifcond ::= NONEIDENTITY", + /* 181 */ "ifcond ::= MOD", + /* 182 */ "lop ::= LAND", + /* 183 */ "lop ::= LOR", + /* 184 */ "lop ::= LXOR", + /* 185 */ "array ::= OPENB arrayelements CLOSEB", + /* 186 */ "arrayelements ::= arrayelement", + /* 187 */ "arrayelements ::= arrayelements COMMA arrayelement", + /* 188 */ "arrayelements ::=", + /* 189 */ "arrayelement ::= value APTR expr", + /* 190 */ "arrayelement ::= ID APTR expr", + /* 191 */ "arrayelement ::= expr", + /* 192 */ "doublequoted_with_quotes ::= QUOTE QUOTE", + /* 193 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE", + /* 194 */ "doublequoted ::= doublequoted doublequotedcontent", + /* 195 */ "doublequoted ::= doublequotedcontent", + /* 196 */ "doublequotedcontent ::= BACKTICK variable BACKTICK", + /* 197 */ "doublequotedcontent ::= BACKTICK expr BACKTICK", + /* 198 */ "doublequotedcontent ::= DOLLARID", + /* 199 */ "doublequotedcontent ::= LDEL variable RDEL", + /* 200 */ "doublequotedcontent ::= LDEL expr RDEL", + /* 201 */ "doublequotedcontent ::= smartytag RDEL", + /* 202 */ "doublequotedcontent ::= TEXT", + /* 203 */ "optspace ::= SPACE", + /* 204 */ "optspace ::=", ); public function tokenName($tokenType) @@ -1733,7 +1708,7 @@ static public $yy_action = array( $this->internalError = true; $this->compiler->trigger_template_error("Stack overflow in template parser"); -#line 1732 "smarty_internal_templateparser.php" +#line 1707 "smarty_internal_templateparser.php" return; } @@ -1755,210 +1730,211 @@ static public $yy_action = array( } public static $yyRuleInfo = array( - array( 'lhs' => 82, 'rhs' => 1 ), array( 'lhs' => 83, 'rhs' => 1 ), - array( 'lhs' => 83, 'rhs' => 2 ), - array( 'lhs' => 83, 'rhs' => 0 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), array( 'lhs' => 84, 'rhs' => 1 ), + array( 'lhs' => 84, 'rhs' => 2 ), + array( 'lhs' => 84, 'rhs' => 0 ), + array( 'lhs' => 85, 'rhs' => 2 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 87, 'rhs' => 2 ), + array( 'lhs' => 87, 'rhs' => 3 ), + array( 'lhs' => 88, 'rhs' => 2 ), + array( 'lhs' => 88, 'rhs' => 0 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 4 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 4 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 5 ), + array( 'lhs' => 86, 'rhs' => 5 ), + array( 'lhs' => 86, 'rhs' => 6 ), + array( 'lhs' => 86, 'rhs' => 5 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 5 ), + array( 'lhs' => 86, 'rhs' => 4 ), + array( 'lhs' => 86, 'rhs' => 6 ), array( 'lhs' => 86, 'rhs' => 2 ), array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 87, 'rhs' => 2 ), - array( 'lhs' => 87, 'rhs' => 0 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 5 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 5 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 6 ), - array( 'lhs' => 85, 'rhs' => 6 ), - array( 'lhs' => 85, 'rhs' => 7 ), - array( 'lhs' => 85, 'rhs' => 6 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 6 ), - array( 'lhs' => 85, 'rhs' => 5 ), - array( 'lhs' => 85, 'rhs' => 7 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 12 ), - array( 'lhs' => 98, 'rhs' => 2 ), - array( 'lhs' => 98, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 6 ), - array( 'lhs' => 85, 'rhs' => 8 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 8 ), - array( 'lhs' => 85, 'rhs' => 11 ), - array( 'lhs' => 85, 'rhs' => 8 ), - array( 'lhs' => 85, 'rhs' => 11 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 5 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 85, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 5 ), - array( 'lhs' => 85, 'rhs' => 6 ), - array( 'lhs' => 91, 'rhs' => 2 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 0 ), - array( 'lhs' => 100, 'rhs' => 4 ), - array( 'lhs' => 100, 'rhs' => 2 ), - array( 'lhs' => 100, 'rhs' => 2 ), - array( 'lhs' => 100, 'rhs' => 2 ), - array( 'lhs' => 100, 'rhs' => 2 ), - array( 'lhs' => 100, 'rhs' => 2 ), - array( 'lhs' => 100, 'rhs' => 4 ), - array( 'lhs' => 95, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 11 ), + array( 'lhs' => 99, 'rhs' => 2 ), + array( 'lhs' => 99, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 5 ), + array( 'lhs' => 86, 'rhs' => 7 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 7 ), + array( 'lhs' => 86, 'rhs' => 10 ), + array( 'lhs' => 86, 'rhs' => 7 ), + array( 'lhs' => 86, 'rhs' => 10 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 4 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 2 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 86, 'rhs' => 4 ), + array( 'lhs' => 86, 'rhs' => 5 ), + array( 'lhs' => 92, 'rhs' => 2 ), + array( 'lhs' => 92, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 0 ), + array( 'lhs' => 101, 'rhs' => 4 ), + array( 'lhs' => 101, 'rhs' => 2 ), + array( 'lhs' => 101, 'rhs' => 2 ), + array( 'lhs' => 101, 'rhs' => 2 ), + array( 'lhs' => 101, 'rhs' => 2 ), + array( 'lhs' => 101, 'rhs' => 2 ), + array( 'lhs' => 101, 'rhs' => 4 ), + array( 'lhs' => 96, 'rhs' => 1 ), + array( 'lhs' => 96, 'rhs' => 3 ), + array( 'lhs' => 95, 'rhs' => 4 ), array( 'lhs' => 95, 'rhs' => 3 ), - array( 'lhs' => 94, 'rhs' => 4 ), - array( 'lhs' => 94, 'rhs' => 3 ), - array( 'lhs' => 94, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 1 ), - array( 'lhs' => 92, 'rhs' => 1 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 1 ), - array( 'lhs' => 92, 'rhs' => 2 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 2 ), - array( 'lhs' => 92, 'rhs' => 2 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 2 ), - array( 'lhs' => 92, 'rhs' => 2 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 101, 'rhs' => 8 ), - array( 'lhs' => 101, 'rhs' => 7 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 3 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 3 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 3 ), - array( 'lhs' => 89, 'rhs' => 3 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 105, 'rhs' => 1 ), - array( 'lhs' => 105, 'rhs' => 4 ), - array( 'lhs' => 105, 'rhs' => 1 ), - array( 'lhs' => 105, 'rhs' => 3 ), - array( 'lhs' => 105, 'rhs' => 4 ), - array( 'lhs' => 105, 'rhs' => 3 ), - array( 'lhs' => 105, 'rhs' => 4 ), + array( 'lhs' => 95, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 1 ), + array( 'lhs' => 93, 'rhs' => 1 ), + array( 'lhs' => 93, 'rhs' => 4 ), array( 'lhs' => 93, 'rhs' => 3 ), - array( 'lhs' => 110, 'rhs' => 2 ), - array( 'lhs' => 110, 'rhs' => 0 ), - array( 'lhs' => 111, 'rhs' => 3 ), - array( 'lhs' => 111, 'rhs' => 5 ), - array( 'lhs' => 111, 'rhs' => 2 ), - array( 'lhs' => 111, 'rhs' => 2 ), - array( 'lhs' => 111, 'rhs' => 4 ), - array( 'lhs' => 111, 'rhs' => 3 ), - array( 'lhs' => 111, 'rhs' => 5 ), - array( 'lhs' => 111, 'rhs' => 3 ), - array( 'lhs' => 111, 'rhs' => 2 ), - array( 'lhs' => 97, 'rhs' => 1 ), - array( 'lhs' => 97, 'rhs' => 2 ), - array( 'lhs' => 112, 'rhs' => 1 ), - array( 'lhs' => 112, 'rhs' => 3 ), - array( 'lhs' => 109, 'rhs' => 2 ), - array( 'lhs' => 113, 'rhs' => 1 ), - array( 'lhs' => 113, 'rhs' => 2 ), - array( 'lhs' => 114, 'rhs' => 3 ), - array( 'lhs' => 114, 'rhs' => 4 ), - array( 'lhs' => 114, 'rhs' => 5 ), - array( 'lhs' => 114, 'rhs' => 6 ), - array( 'lhs' => 114, 'rhs' => 2 ), - array( 'lhs' => 106, 'rhs' => 4 ), - array( 'lhs' => 115, 'rhs' => 4 ), - array( 'lhs' => 115, 'rhs' => 5 ), - array( 'lhs' => 116, 'rhs' => 3 ), - array( 'lhs' => 116, 'rhs' => 1 ), - array( 'lhs' => 116, 'rhs' => 0 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 1 ), + array( 'lhs' => 93, 'rhs' => 2 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 2 ), + array( 'lhs' => 93, 'rhs' => 2 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 2 ), + array( 'lhs' => 93, 'rhs' => 2 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 102, 'rhs' => 8 ), + array( 'lhs' => 102, 'rhs' => 7 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 90, 'rhs' => 1 ), array( 'lhs' => 90, 'rhs' => 3 ), array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 90, 'rhs' => 3 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 90, 'rhs' => 3 ), + array( 'lhs' => 90, 'rhs' => 3 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 106, 'rhs' => 1 ), + array( 'lhs' => 106, 'rhs' => 4 ), + array( 'lhs' => 106, 'rhs' => 1 ), + array( 'lhs' => 106, 'rhs' => 3 ), + array( 'lhs' => 106, 'rhs' => 4 ), + array( 'lhs' => 106, 'rhs' => 3 ), + array( 'lhs' => 106, 'rhs' => 4 ), + array( 'lhs' => 94, 'rhs' => 3 ), + array( 'lhs' => 111, 'rhs' => 2 ), + array( 'lhs' => 111, 'rhs' => 0 ), + array( 'lhs' => 112, 'rhs' => 3 ), + array( 'lhs' => 112, 'rhs' => 5 ), + array( 'lhs' => 112, 'rhs' => 2 ), + array( 'lhs' => 112, 'rhs' => 2 ), + array( 'lhs' => 112, 'rhs' => 4 ), + array( 'lhs' => 112, 'rhs' => 3 ), + array( 'lhs' => 112, 'rhs' => 5 ), + array( 'lhs' => 112, 'rhs' => 3 ), + array( 'lhs' => 112, 'rhs' => 2 ), + array( 'lhs' => 98, 'rhs' => 1 ), + array( 'lhs' => 98, 'rhs' => 2 ), + array( 'lhs' => 113, 'rhs' => 1 ), + array( 'lhs' => 113, 'rhs' => 3 ), + array( 'lhs' => 110, 'rhs' => 2 ), + array( 'lhs' => 114, 'rhs' => 1 ), + array( 'lhs' => 114, 'rhs' => 2 ), + array( 'lhs' => 115, 'rhs' => 3 ), + array( 'lhs' => 115, 'rhs' => 4 ), + array( 'lhs' => 115, 'rhs' => 5 ), + array( 'lhs' => 115, 'rhs' => 6 ), + array( 'lhs' => 115, 'rhs' => 2 ), + array( 'lhs' => 107, 'rhs' => 4 ), + array( 'lhs' => 116, 'rhs' => 4 ), + array( 'lhs' => 116, 'rhs' => 5 ), array( 'lhs' => 117, 'rhs' => 3 ), - array( 'lhs' => 117, 'rhs' => 2 ), - array( 'lhs' => 99, 'rhs' => 2 ), - array( 'lhs' => 99, 'rhs' => 0 ), + array( 'lhs' => 117, 'rhs' => 1 ), + array( 'lhs' => 117, 'rhs' => 0 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 2 ), + array( 'lhs' => 118, 'rhs' => 3 ), array( 'lhs' => 118, 'rhs' => 2 ), - array( 'lhs' => 118, 'rhs' => 2 ), - array( 'lhs' => 108, 'rhs' => 1 ), - array( 'lhs' => 108, 'rhs' => 2 ), - array( 'lhs' => 108, 'rhs' => 1 ), - array( 'lhs' => 108, 'rhs' => 3 ), - array( 'lhs' => 108, 'rhs' => 4 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), - array( 'lhs' => 103, 'rhs' => 1 ), + array( 'lhs' => 100, 'rhs' => 2 ), + array( 'lhs' => 100, 'rhs' => 0 ), + array( 'lhs' => 119, 'rhs' => 2 ), + array( 'lhs' => 119, 'rhs' => 2 ), + array( 'lhs' => 109, 'rhs' => 1 ), + array( 'lhs' => 109, 'rhs' => 2 ), + array( 'lhs' => 109, 'rhs' => 1 ), + array( 'lhs' => 109, 'rhs' => 3 ), + array( 'lhs' => 109, 'rhs' => 4 ), array( 'lhs' => 104, 'rhs' => 1 ), array( 'lhs' => 104, 'rhs' => 1 ), array( 'lhs' => 104, 'rhs' => 1 ), - array( 'lhs' => 102, 'rhs' => 3 ), - array( 'lhs' => 119, 'rhs' => 1 ), - array( 'lhs' => 119, 'rhs' => 3 ), - array( 'lhs' => 119, 'rhs' => 0 ), - array( 'lhs' => 120, 'rhs' => 3 ), - array( 'lhs' => 120, 'rhs' => 3 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 104, 'rhs' => 1 ), + array( 'lhs' => 105, 'rhs' => 1 ), + array( 'lhs' => 105, 'rhs' => 1 ), + array( 'lhs' => 105, 'rhs' => 1 ), + array( 'lhs' => 103, 'rhs' => 3 ), array( 'lhs' => 120, 'rhs' => 1 ), - array( 'lhs' => 107, 'rhs' => 2 ), - array( 'lhs' => 107, 'rhs' => 3 ), - array( 'lhs' => 121, 'rhs' => 2 ), + array( 'lhs' => 120, 'rhs' => 3 ), + array( 'lhs' => 120, 'rhs' => 0 ), + array( 'lhs' => 121, 'rhs' => 3 ), + array( 'lhs' => 121, 'rhs' => 3 ), array( 'lhs' => 121, 'rhs' => 1 ), - array( 'lhs' => 122, 'rhs' => 3 ), - array( 'lhs' => 122, 'rhs' => 3 ), + array( 'lhs' => 108, 'rhs' => 2 ), + array( 'lhs' => 108, 'rhs' => 3 ), + array( 'lhs' => 122, 'rhs' => 2 ), array( 'lhs' => 122, 'rhs' => 1 ), - array( 'lhs' => 122, 'rhs' => 3 ), - array( 'lhs' => 122, 'rhs' => 3 ), - array( 'lhs' => 122, 'rhs' => 1 ), - array( 'lhs' => 122, 'rhs' => 1 ), - array( 'lhs' => 96, 'rhs' => 1 ), - array( 'lhs' => 96, 'rhs' => 0 ), + array( 'lhs' => 123, 'rhs' => 3 ), + array( 'lhs' => 123, 'rhs' => 3 ), + array( 'lhs' => 123, 'rhs' => 1 ), + array( 'lhs' => 123, 'rhs' => 3 ), + array( 'lhs' => 123, 'rhs' => 3 ), + array( 'lhs' => 123, 'rhs' => 2 ), + array( 'lhs' => 123, 'rhs' => 1 ), + array( 'lhs' => 97, 'rhs' => 1 ), + array( 'lhs' => 97, 'rhs' => 0 ), ); public static $yyReduceMap = array( @@ -1978,50 +1954,50 @@ static public $yy_action = array( 14 => 14, 15 => 15, 16 => 16, - 19 => 16, - 203 => 16, 17 => 17, - 76 => 17, + 20 => 17, + 204 => 17, 18 => 18, - 104 => 18, - 106 => 18, - 107 => 18, - 130 => 18, - 168 => 18, - 20 => 20, - 21 => 20, - 47 => 20, - 69 => 20, - 70 => 20, - 77 => 20, - 78 => 20, - 83 => 20, - 103 => 20, - 108 => 20, - 109 => 20, - 114 => 20, - 116 => 20, - 117 => 20, - 124 => 20, - 141 => 20, - 167 => 20, - 169 => 20, - 185 => 20, - 190 => 20, - 202 => 20, - 22 => 22, - 23 => 22, - 24 => 24, + 77 => 18, + 19 => 19, + 105 => 19, + 107 => 19, + 108 => 19, + 131 => 19, + 169 => 19, + 21 => 21, + 22 => 21, + 48 => 21, + 70 => 21, + 71 => 21, + 78 => 21, + 79 => 21, + 84 => 21, + 104 => 21, + 109 => 21, + 110 => 21, + 115 => 21, + 117 => 21, + 118 => 21, + 125 => 21, + 142 => 21, + 168 => 21, + 170 => 21, + 186 => 21, + 191 => 21, + 203 => 21, + 23 => 23, + 24 => 23, 25 => 25, 26 => 26, 27 => 27, 28 => 28, 29 => 29, - 31 => 29, 30 => 30, - 32 => 32, - 33 => 32, - 34 => 34, + 32 => 30, + 31 => 31, + 33 => 33, + 34 => 33, 35 => 35, 36 => 36, 37 => 37, @@ -2030,18 +2006,18 @@ static public $yy_action = array( 40 => 40, 41 => 41, 42 => 42, - 44 => 42, 43 => 43, - 45 => 45, + 45 => 43, + 44 => 44, 46 => 46, - 48 => 48, + 47 => 47, 49 => 49, 50 => 50, 51 => 51, 52 => 52, + 54 => 52, 53 => 53, - 54 => 54, - 55 => 55, + 55 => 53, 56 => 56, 57 => 57, 58 => 58, @@ -2050,74 +2026,74 @@ static public $yy_action = array( 61 => 61, 62 => 62, 63 => 63, - 72 => 63, - 157 => 63, - 161 => 63, - 165 => 63, - 166 => 63, 64 => 64, + 73 => 64, 158 => 64, - 164 => 64, + 162 => 64, + 166 => 64, + 167 => 64, 65 => 65, + 159 => 65, + 165 => 65, 66 => 66, - 67 => 66, - 68 => 68, - 71 => 71, - 73 => 73, + 67 => 67, + 68 => 67, + 69 => 69, + 72 => 72, 74 => 74, - 75 => 74, - 79 => 79, + 75 => 75, + 76 => 75, 80 => 80, - 81 => 80, - 82 => 80, - 84 => 84, - 121 => 84, + 81 => 81, + 82 => 81, + 83 => 81, 85 => 85, - 88 => 85, - 99 => 85, + 122 => 85, 86 => 86, + 89 => 86, + 100 => 86, 87 => 87, - 89 => 89, + 88 => 88, 90 => 90, 91 => 91, - 96 => 91, 92 => 92, - 95 => 92, + 97 => 92, 93 => 93, - 98 => 93, + 96 => 93, 94 => 94, - 97 => 94, - 100 => 100, + 99 => 94, + 95 => 95, + 98 => 95, 101 => 101, 102 => 102, - 105 => 105, - 110 => 110, + 103 => 103, + 106 => 106, 111 => 111, 112 => 112, 113 => 113, - 115 => 115, - 118 => 118, + 114 => 114, + 116 => 116, 119 => 119, 120 => 120, - 122 => 122, + 121 => 121, 123 => 123, - 125 => 125, + 124 => 124, 126 => 126, 127 => 127, 128 => 128, 129 => 129, - 131 => 131, - 187 => 131, + 130 => 130, 132 => 132, + 188 => 132, 133 => 133, 134 => 134, 135 => 135, 136 => 136, - 139 => 136, 137 => 137, + 140 => 137, 138 => 138, - 140 => 140, - 142 => 142, + 139 => 139, + 141 => 141, 143 => 143, 144 => 144, 145 => 145, @@ -2132,11 +2108,11 @@ static public $yy_action = array( 154 => 154, 155 => 155, 156 => 156, - 159 => 159, + 157 => 157, 160 => 160, - 162 => 162, + 161 => 161, 163 => 163, - 170 => 170, + 164 => 164, 171 => 171, 172 => 172, 173 => 173, @@ -2151,54 +2127,57 @@ static public $yy_action = array( 182 => 182, 183 => 183, 184 => 184, - 186 => 186, - 188 => 188, + 185 => 185, + 187 => 187, 189 => 189, - 191 => 191, + 190 => 190, 192 => 192, 193 => 193, 194 => 194, 195 => 195, - 196 => 195, - 198 => 195, - 197 => 197, - 199 => 199, + 196 => 196, + 197 => 196, + 199 => 196, + 198 => 198, 200 => 200, 201 => 201, + 202 => 202, ); #line 96 "smarty_internal_templateparser.y" function yy_r0(){ $this->_retvalue = $this->root_buffer->to_smarty_php(); } -#line 2169 "smarty_internal_templateparser.php" +#line 2146 "smarty_internal_templateparser.php" #line 104 "smarty_internal_templateparser.y" function yy_r1(){ - $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor); + if ($this->yystack[$this->yyidx + 0]->minor != null) { + $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor); } -#line 2174 "smarty_internal_templateparser.php" -#line 120 "smarty_internal_templateparser.y" + } +#line 2153 "smarty_internal_templateparser.php" +#line 124 "smarty_internal_templateparser.y" function yy_r4(){ if ($this->compiler->has_code) { $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array(); - $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true)); + $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + -1]->minor,true)); } else { - $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = null; } $this->compiler->has_variable_string = false; $this->block_nesting_level = count($this->compiler->_tag_stack); } -#line 2186 "smarty_internal_templateparser.php" -#line 132 "smarty_internal_templateparser.y" +#line 2165 "smarty_internal_templateparser.php" +#line 136 "smarty_internal_templateparser.y" function yy_r5(){ - $this->_retvalue = new _smarty_tag($this, ''); + $this->_retvalue = null; } -#line 2191 "smarty_internal_templateparser.php" -#line 137 "smarty_internal_templateparser.y" +#line 2170 "smarty_internal_templateparser.php" +#line 141 "smarty_internal_templateparser.y" function yy_r6(){ $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor); } -#line 2196 "smarty_internal_templateparser.php" -#line 142 "smarty_internal_templateparser.y" +#line 2175 "smarty_internal_templateparser.php" +#line 146 "smarty_internal_templateparser.y" function yy_r7(){ if ($this->php_handling == Smarty::PHP_PASSTHRU) { $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)); @@ -2210,11 +2189,11 @@ static public $yy_action = array( } $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('php_handling == Smarty::PHP_REMOVE) { - $this->_retvalue = new _smarty_text($this, ''); + $this->_retvalue = null; } } -#line 2212 "smarty_internal_templateparser.php" -#line 158 "smarty_internal_templateparser.y" +#line 2191 "smarty_internal_templateparser.php" +#line 162 "smarty_internal_templateparser.y" function yy_r8(){ if ($this->is_xml) { $this->compiler->tag_nocache = true; @@ -2229,11 +2208,11 @@ static public $yy_action = array( } elseif ($this->php_handling == Smarty::PHP_ALLOW) { $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true)); } elseif ($this->php_handling == Smarty::PHP_REMOVE) { - $this->_retvalue = new _smarty_text($this, ''); + $this->_retvalue = null; } } -#line 2231 "smarty_internal_templateparser.php" -#line 177 "smarty_internal_templateparser.y" +#line 2210 "smarty_internal_templateparser.php" +#line 181 "smarty_internal_templateparser.y" function yy_r9(){ if ($this->php_handling == Smarty::PHP_PASSTHRU) { $this->_retvalue = new _smarty_text($this, '<%'); @@ -2250,14 +2229,14 @@ static public $yy_action = array( } } elseif ($this->php_handling == Smarty::PHP_REMOVE) { if ($this->asp_tags) { - $this->_retvalue = new _smarty_text($this, ''); + $this->_retvalue = null; } else { $this->_retvalue = new _smarty_text($this, '<%'); } } } -#line 2255 "smarty_internal_templateparser.php" -#line 201 "smarty_internal_templateparser.y" +#line 2234 "smarty_internal_templateparser.php" +#line 205 "smarty_internal_templateparser.y" function yy_r10(){ if ($this->php_handling == Smarty::PHP_PASSTHRU) { $this->_retvalue = new _smarty_text($this, '%>'); @@ -2271,14 +2250,14 @@ static public $yy_action = array( } } elseif ($this->php_handling == Smarty::PHP_REMOVE) { if ($this->asp_tags) { - $this->_retvalue = new _smarty_text($this, ''); + $this->_retvalue = null; } else { $this->_retvalue = new _smarty_text($this, '%>'); } } } -#line 2276 "smarty_internal_templateparser.php" -#line 221 "smarty_internal_templateparser.y" +#line 2255 "smarty_internal_templateparser.php" +#line 225 "smarty_internal_templateparser.y" function yy_r11(){ if ($this->strip) { $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor))); @@ -2286,8 +2265,8 @@ static public $yy_action = array( $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)); } } -#line 2285 "smarty_internal_templateparser.php" -#line 230 "smarty_internal_templateparser.y" +#line 2264 "smarty_internal_templateparser.php" +#line 234 "smarty_internal_templateparser.y" function yy_r12(){ $this->compiler->tag_nocache = true; $this->is_xml = true; @@ -2295,246 +2274,250 @@ static public $yy_action = array( $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("", $this->compiler, true)); $this->template->has_nocache_code = $save; } -#line 2294 "smarty_internal_templateparser.php" -#line 239 "smarty_internal_templateparser.y" +#line 2273 "smarty_internal_templateparser.php" +#line 243 "smarty_internal_templateparser.y" function yy_r13(){ - if ($this->strip) { - $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); - } else { - $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor); + if ($this->strip) { + $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); + } else { + $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor); + } } - } -#line 2303 "smarty_internal_templateparser.php" -#line 248 "smarty_internal_templateparser.y" +#line 2282 "smarty_internal_templateparser.php" +#line 252 "smarty_internal_templateparser.y" function yy_r14(){ $this->strip = true; - $this->_retvalue = new _smarty_text($this, ''); } -#line 2309 "smarty_internal_templateparser.php" -#line 253 "smarty_internal_templateparser.y" +#line 2287 "smarty_internal_templateparser.php" +#line 256 "smarty_internal_templateparser.y" function yy_r15(){ $this->strip = false; - $this->_retvalue = new _smarty_text($this, ''); } -#line 2315 "smarty_internal_templateparser.php" -#line 259 "smarty_internal_templateparser.y" +#line 2292 "smarty_internal_templateparser.php" +#line 260 "smarty_internal_templateparser.y" function yy_r16(){ + if ($this->strip) { + SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor)); + } else { + SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, $this->yystack[$this->yyidx + 0]->minor); + } + } +#line 2301 "smarty_internal_templateparser.php" +#line 269 "smarty_internal_templateparser.y" + function yy_r17(){ $this->_retvalue = ''; } -#line 2320 "smarty_internal_templateparser.php" -#line 263 "smarty_internal_templateparser.y" - function yy_r17(){ +#line 2306 "smarty_internal_templateparser.php" +#line 273 "smarty_internal_templateparser.y" + function yy_r18(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 2325 "smarty_internal_templateparser.php" -#line 267 "smarty_internal_templateparser.y" - function yy_r18(){ +#line 2311 "smarty_internal_templateparser.php" +#line 277 "smarty_internal_templateparser.y" + function yy_r19(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2330 "smarty_internal_templateparser.php" -#line 275 "smarty_internal_templateparser.y" - function yy_r20(){ +#line 2316 "smarty_internal_templateparser.php" +#line 285 "smarty_internal_templateparser.y" + function yy_r21(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 2335 "smarty_internal_templateparser.php" -#line 283 "smarty_internal_templateparser.y" - function yy_r22(){ +#line 2321 "smarty_internal_templateparser.php" +#line 293 "smarty_internal_templateparser.y" + function yy_r23(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor); } -#line 2340 "smarty_internal_templateparser.php" -#line 291 "smarty_internal_templateparser.y" - function yy_r24(){ +#line 2326 "smarty_internal_templateparser.php" +#line 301 "smarty_internal_templateparser.y" + function yy_r25(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor); } -#line 2345 "smarty_internal_templateparser.php" -#line 295 "smarty_internal_templateparser.y" - function yy_r25(){ +#line 2331 "smarty_internal_templateparser.php" +#line 305 "smarty_internal_templateparser.y" + function yy_r26(){ $this->_retvalue = '<%'; } -#line 2350 "smarty_internal_templateparser.php" -#line 299 "smarty_internal_templateparser.y" - function yy_r26(){ +#line 2336 "smarty_internal_templateparser.php" +#line 309 "smarty_internal_templateparser.y" + function yy_r27(){ $this->_retvalue = '%>'; } -#line 2355 "smarty_internal_templateparser.php" -#line 308 "smarty_internal_templateparser.y" - function yy_r27(){ - $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor)); - } -#line 2360 "smarty_internal_templateparser.php" -#line 312 "smarty_internal_templateparser.y" +#line 2341 "smarty_internal_templateparser.php" +#line 318 "smarty_internal_templateparser.y" function yy_r28(){ - $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor)); + $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + 0]->minor)); } -#line 2365 "smarty_internal_templateparser.php" -#line 316 "smarty_internal_templateparser.y" +#line 2346 "smarty_internal_templateparser.php" +#line 322 "smarty_internal_templateparser.y" function yy_r29(){ - $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor)); + $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 2370 "smarty_internal_templateparser.php" -#line 320 "smarty_internal_templateparser.y" +#line 2351 "smarty_internal_templateparser.php" +#line 326 "smarty_internal_templateparser.y" function yy_r30(){ - $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor)); + $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 2375 "smarty_internal_templateparser.php" -#line 333 "smarty_internal_templateparser.y" - function yy_r32(){ - $this->_retvalue = $this->compiler->compileTag('assign',array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"))); +#line 2356 "smarty_internal_templateparser.php" +#line 330 "smarty_internal_templateparser.y" + function yy_r31(){ + $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 2380 "smarty_internal_templateparser.php" -#line 341 "smarty_internal_templateparser.y" - function yy_r34(){ - $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'")),$this->yystack[$this->yyidx + -1]->minor)); +#line 2361 "smarty_internal_templateparser.php" +#line 343 "smarty_internal_templateparser.y" + function yy_r33(){ + $this->_retvalue = $this->compiler->compileTag('assign',array(array('value'=>$this->yystack[$this->yyidx + 0]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -2]->minor."'"))); } -#line 2385 "smarty_internal_templateparser.php" -#line 345 "smarty_internal_templateparser.y" +#line 2366 "smarty_internal_templateparser.php" +#line 351 "smarty_internal_templateparser.y" function yy_r35(){ - $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>$this->yystack[$this->yyidx + -4]->minor['var'])),$this->yystack[$this->yyidx + -1]->minor),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -4]->minor['smarty_internal_index'])); + $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'")),$this->yystack[$this->yyidx + 0]->minor)); } -#line 2390 "smarty_internal_templateparser.php" -#line 350 "smarty_internal_templateparser.y" +#line 2371 "smarty_internal_templateparser.php" +#line 355 "smarty_internal_templateparser.y" function yy_r36(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor); + $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>$this->yystack[$this->yyidx + -3]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -3]->minor['smarty_internal_index'])); } -#line 2395 "smarty_internal_templateparser.php" -#line 354 "smarty_internal_templateparser.y" +#line 2376 "smarty_internal_templateparser.php" +#line 360 "smarty_internal_templateparser.y" function yy_r37(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array()); + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } -#line 2400 "smarty_internal_templateparser.php" -#line 359 "smarty_internal_templateparser.y" - function yy_r38(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor)); - } -#line 2405 "smarty_internal_templateparser.php" +#line 2381 "smarty_internal_templateparser.php" #line 364 "smarty_internal_templateparser.y" + function yy_r38(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array()); + } +#line 2386 "smarty_internal_templateparser.php" +#line 369 "smarty_internal_templateparser.y" function yy_r39(){ - $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>'; + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + 0]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 2411 "smarty_internal_templateparser.php" -#line 370 "smarty_internal_templateparser.y" +#line 2391 "smarty_internal_templateparser.php" +#line 374 "smarty_internal_templateparser.y" function yy_r40(){ - $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -5]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -3]->minor)).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>'; + $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + 0]->minor).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor,'value'=>'ob_get_clean()')).'?>'; } -#line 2417 "smarty_internal_templateparser.php" -#line 376 "smarty_internal_templateparser.y" +#line 2397 "smarty_internal_templateparser.php" +#line 380 "smarty_internal_templateparser.y" function yy_r41(){ - $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); + $this->_retvalue = ''.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor)).'_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor,'value'=>'ob_get_clean()')).'?>'; } -#line 2423 "smarty_internal_templateparser.php" -#line 381 "smarty_internal_templateparser.y" - function yy_r42(){ - $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + -1]->minor,array('if condition'=>$this->yystack[$this->yyidx + -2]->minor)); - } -#line 2429 "smarty_internal_templateparser.php" +#line 2403 "smarty_internal_templateparser.php" #line 386 "smarty_internal_templateparser.y" + function yy_r42(){ + $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->lex->ldel_length)); + $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor)); + } +#line 2409 "smarty_internal_templateparser.php" +#line 391 "smarty_internal_templateparser.y" function yy_r43(){ $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length)); - $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); + $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + 0]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor)); } -#line 2435 "smarty_internal_templateparser.php" -#line 397 "smarty_internal_templateparser.y" - function yy_r45(){ - $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -10]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -7]->minor),array('var'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),1); +#line 2415 "smarty_internal_templateparser.php" +#line 396 "smarty_internal_templateparser.y" + function yy_r44(){ + $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->lex->ldel_length)); + $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor)); } -#line 2440 "smarty_internal_templateparser.php" -#line 401 "smarty_internal_templateparser.y" +#line 2421 "smarty_internal_templateparser.php" +#line 407 "smarty_internal_templateparser.y" function yy_r46(){ + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -9]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -6]->minor),array('var'=>$this->yystack[$this->yyidx + -2]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),1); + } +#line 2426 "smarty_internal_templateparser.php" +#line 411 "smarty_internal_templateparser.y" + function yy_r47(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor; } -#line 2445 "smarty_internal_templateparser.php" -#line 409 "smarty_internal_templateparser.y" - function yy_r48(){ - $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -4]->minor),array('to'=>$this->yystack[$this->yyidx + -2]->minor))),0); - } -#line 2450 "smarty_internal_templateparser.php" -#line 413 "smarty_internal_templateparser.y" +#line 2431 "smarty_internal_templateparser.php" +#line 419 "smarty_internal_templateparser.y" function yy_r49(){ - $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('to'=>$this->yystack[$this->yyidx + -4]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),0); + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -3]->minor),array('to'=>$this->yystack[$this->yyidx + -1]->minor))),0); } -#line 2455 "smarty_internal_templateparser.php" -#line 418 "smarty_internal_templateparser.y" - function yy_r50(){ - $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor); - } -#line 2460 "smarty_internal_templateparser.php" +#line 2436 "smarty_internal_templateparser.php" #line 423 "smarty_internal_templateparser.y" + function yy_r50(){ + $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -5]->minor),array('to'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),0); + } +#line 2441 "smarty_internal_templateparser.php" +#line 428 "smarty_internal_templateparser.y" function yy_r51(){ - $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor)))); + $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor); } -#line 2465 "smarty_internal_templateparser.php" -#line 427 "smarty_internal_templateparser.y" +#line 2446 "smarty_internal_templateparser.php" +#line 433 "smarty_internal_templateparser.y" function yy_r52(){ - $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor)))); + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -4]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor)))); } -#line 2470 "smarty_internal_templateparser.php" -#line 431 "smarty_internal_templateparser.y" - function yy_r53(){ - $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor)))); +#line 2451 "smarty_internal_templateparser.php" +#line 437 "smarty_internal_templateparser.y" + function yy_r53(){ + $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -7]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor),array('key'=>$this->yystack[$this->yyidx + -4]->minor)))); } -#line 2475 "smarty_internal_templateparser.php" -#line 435 "smarty_internal_templateparser.y" - function yy_r54(){ - $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor)))); +#line 2456 "smarty_internal_templateparser.php" +#line 450 "smarty_internal_templateparser.y" + function yy_r56(){ + $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -1]->minor),$this->yystack[$this->yyidx + 0]->minor)))); } -#line 2480 "smarty_internal_templateparser.php" -#line 440 "smarty_internal_templateparser.y" - function yy_r55(){ - $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)))); - } -#line 2485 "smarty_internal_templateparser.php" -#line 444 "smarty_internal_templateparser.y" - function yy_r56(){ - $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -3]->minor),$this->yystack[$this->yyidx + -2]->minor)),$this->yystack[$this->yyidx + -1]->minor))); - } -#line 2490 "smarty_internal_templateparser.php" -#line 449 "smarty_internal_templateparser.y" +#line 2461 "smarty_internal_templateparser.php" +#line 454 "smarty_internal_templateparser.y" function yy_r57(){ - $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); + $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)),$this->yystack[$this->yyidx + 0]->minor))); } -#line 2495 "smarty_internal_templateparser.php" -#line 455 "smarty_internal_templateparser.y" - function yy_r58(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array()); - } -#line 2500 "smarty_internal_templateparser.php" +#line 2466 "smarty_internal_templateparser.php" #line 459 "smarty_internal_templateparser.y" + function yy_r58(){ + $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.'); + if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') { + // {$smarty.block.child} + $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); + } else { + // {$smarty.block.parent} + $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); + } + } +#line 2478 "smarty_internal_templateparser.php" +#line 472 "smarty_internal_templateparser.y" function yy_r59(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + -1]->minor)); + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array()); } -#line 2505 "smarty_internal_templateparser.php" -#line 464 "smarty_internal_templateparser.y" - function yy_r60(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor)); - } -#line 2510 "smarty_internal_templateparser.php" -#line 468 "smarty_internal_templateparser.y" - function yy_r61(){ - $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + -1]->minor)); - } -#line 2515 "smarty_internal_templateparser.php" +#line 2483 "smarty_internal_templateparser.php" #line 476 "smarty_internal_templateparser.y" + function yy_r60(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor)); + } +#line 2488 "smarty_internal_templateparser.php" +#line 481 "smarty_internal_templateparser.y" + function yy_r61(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + 0]->minor)); + } +#line 2493 "smarty_internal_templateparser.php" +#line 485 "smarty_internal_templateparser.y" function yy_r62(){ + $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + 0]->minor)); + } +#line 2498 "smarty_internal_templateparser.php" +#line 493 "smarty_internal_templateparser.y" + function yy_r63(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 2521 "smarty_internal_templateparser.php" -#line 482 "smarty_internal_templateparser.y" - function yy_r63(){ +#line 2504 "smarty_internal_templateparser.php" +#line 499 "smarty_internal_templateparser.y" + function yy_r64(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 2526 "smarty_internal_templateparser.php" -#line 487 "smarty_internal_templateparser.y" - function yy_r64(){ +#line 2509 "smarty_internal_templateparser.php" +#line 504 "smarty_internal_templateparser.y" + function yy_r65(){ $this->_retvalue = array(); } -#line 2531 "smarty_internal_templateparser.php" -#line 492 "smarty_internal_templateparser.y" - function yy_r65(){ +#line 2514 "smarty_internal_templateparser.php" +#line 509 "smarty_internal_templateparser.y" + function yy_r66(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true'); } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) { @@ -2545,132 +2528,132 @@ static public $yy_action = array( $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'"); } } -#line 2544 "smarty_internal_templateparser.php" -#line 504 "smarty_internal_templateparser.y" - function yy_r66(){ +#line 2527 "smarty_internal_templateparser.php" +#line 521 "smarty_internal_templateparser.y" + function yy_r67(){ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2549 "smarty_internal_templateparser.php" -#line 512 "smarty_internal_templateparser.y" - function yy_r68(){ +#line 2532 "smarty_internal_templateparser.php" +#line 529 "smarty_internal_templateparser.y" + function yy_r69(){ $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'"; } -#line 2554 "smarty_internal_templateparser.php" -#line 524 "smarty_internal_templateparser.y" - function yy_r71(){ +#line 2537 "smarty_internal_templateparser.php" +#line 541 "smarty_internal_templateparser.y" + function yy_r72(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2559 "smarty_internal_templateparser.php" -#line 537 "smarty_internal_templateparser.y" - function yy_r73(){ +#line 2542 "smarty_internal_templateparser.php" +#line 554 "smarty_internal_templateparser.y" + function yy_r74(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } -#line 2565 "smarty_internal_templateparser.php" -#line 542 "smarty_internal_templateparser.y" - function yy_r74(){ +#line 2548 "smarty_internal_templateparser.php" +#line 559 "smarty_internal_templateparser.y" + function yy_r75(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2570 "smarty_internal_templateparser.php" -#line 570 "smarty_internal_templateparser.y" - function yy_r79(){ +#line 2553 "smarty_internal_templateparser.php" +#line 587 "smarty_internal_templateparser.y" + function yy_r80(){ $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')'; } -#line 2575 "smarty_internal_templateparser.php" -#line 575 "smarty_internal_templateparser.y" - function yy_r80(){ +#line 2558 "smarty_internal_templateparser.php" +#line 592 "smarty_internal_templateparser.y" + function yy_r81(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor; } -#line 2580 "smarty_internal_templateparser.php" -#line 594 "smarty_internal_templateparser.y" - function yy_r84(){ +#line 2563 "smarty_internal_templateparser.php" +#line 611 "smarty_internal_templateparser.y" + function yy_r85(){ $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor)); } -#line 2585 "smarty_internal_templateparser.php" -#line 600 "smarty_internal_templateparser.y" - function yy_r85(){ +#line 2568 "smarty_internal_templateparser.php" +#line 617 "smarty_internal_templateparser.y" + function yy_r86(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2590 "smarty_internal_templateparser.php" -#line 604 "smarty_internal_templateparser.y" - function yy_r86(){ +#line 2573 "smarty_internal_templateparser.php" +#line 621 "smarty_internal_templateparser.y" + function yy_r87(){ $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2595 "smarty_internal_templateparser.php" -#line 608 "smarty_internal_templateparser.y" - function yy_r87(){ +#line 2578 "smarty_internal_templateparser.php" +#line 625 "smarty_internal_templateparser.y" + function yy_r88(){ $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2600 "smarty_internal_templateparser.php" -#line 616 "smarty_internal_templateparser.y" - function yy_r89(){ +#line 2583 "smarty_internal_templateparser.php" +#line 633 "smarty_internal_templateparser.y" + function yy_r90(){ $this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2605 "smarty_internal_templateparser.php" -#line 620 "smarty_internal_templateparser.y" - function yy_r90(){ +#line 2588 "smarty_internal_templateparser.php" +#line 637 "smarty_internal_templateparser.y" + function yy_r91(){ $this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2610 "smarty_internal_templateparser.php" -#line 624 "smarty_internal_templateparser.y" - function yy_r91(){ +#line 2593 "smarty_internal_templateparser.php" +#line 641 "smarty_internal_templateparser.y" + function yy_r92(){ $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2615 "smarty_internal_templateparser.php" -#line 628 "smarty_internal_templateparser.y" - function yy_r92(){ +#line 2598 "smarty_internal_templateparser.php" +#line 645 "smarty_internal_templateparser.y" + function yy_r93(){ $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2620 "smarty_internal_templateparser.php" -#line 632 "smarty_internal_templateparser.y" - function yy_r93(){ +#line 2603 "smarty_internal_templateparser.php" +#line 649 "smarty_internal_templateparser.y" + function yy_r94(){ $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2625 "smarty_internal_templateparser.php" -#line 636 "smarty_internal_templateparser.y" - function yy_r94(){ +#line 2608 "smarty_internal_templateparser.php" +#line 653 "smarty_internal_templateparser.y" + function yy_r95(){ $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')'; } -#line 2630 "smarty_internal_templateparser.php" -#line 660 "smarty_internal_templateparser.y" - function yy_r100(){ +#line 2613 "smarty_internal_templateparser.php" +#line 677 "smarty_internal_templateparser.y" + function yy_r101(){ self::$prefix_number++; $this->compiler->prefix_code[] = 'yystack[$this->yyidx + 0]->minor.';?>'; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.self::$prefix_number; } -#line 2637 "smarty_internal_templateparser.php" -#line 669 "smarty_internal_templateparser.y" - function yy_r101(){ +#line 2620 "smarty_internal_templateparser.php" +#line 686 "smarty_internal_templateparser.y" + function yy_r102(){ $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.' ? '. $this->compileVariable("'".$this->yystack[$this->yyidx + -2]->minor."'") . ' : '.$this->yystack[$this->yyidx + 0]->minor; } -#line 2642 "smarty_internal_templateparser.php" -#line 673 "smarty_internal_templateparser.y" - function yy_r102(){ +#line 2625 "smarty_internal_templateparser.php" +#line 690 "smarty_internal_templateparser.y" + function yy_r103(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } -#line 2647 "smarty_internal_templateparser.php" -#line 688 "smarty_internal_templateparser.y" - function yy_r105(){ +#line 2630 "smarty_internal_templateparser.php" +#line 705 "smarty_internal_templateparser.y" + function yy_r106(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2652 "smarty_internal_templateparser.php" -#line 709 "smarty_internal_templateparser.y" - function yy_r110(){ +#line 2635 "smarty_internal_templateparser.php" +#line 726 "smarty_internal_templateparser.y" + function yy_r111(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2657 "smarty_internal_templateparser.php" -#line 713 "smarty_internal_templateparser.y" - function yy_r111(){ +#line 2640 "smarty_internal_templateparser.php" +#line 730 "smarty_internal_templateparser.y" + function yy_r112(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; } -#line 2662 "smarty_internal_templateparser.php" -#line 717 "smarty_internal_templateparser.y" - function yy_r112(){ +#line 2645 "smarty_internal_templateparser.php" +#line 734 "smarty_internal_templateparser.y" + function yy_r113(){ $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2667 "smarty_internal_templateparser.php" -#line 722 "smarty_internal_templateparser.y" - function yy_r113(){ +#line 2650 "smarty_internal_templateparser.php" +#line 739 "smarty_internal_templateparser.y" + function yy_r114(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) { $this->_retvalue = 'true'; } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) { @@ -2681,14 +2664,14 @@ static public $yy_action = array( $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'"; } } -#line 2680 "smarty_internal_templateparser.php" -#line 740 "smarty_internal_templateparser.y" - function yy_r115(){ +#line 2663 "smarty_internal_templateparser.php" +#line 757 "smarty_internal_templateparser.y" + function yy_r116(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")"; } -#line 2685 "smarty_internal_templateparser.php" -#line 755 "smarty_internal_templateparser.y" - function yy_r118(){ +#line 2668 "smarty_internal_templateparser.php" +#line 772 "smarty_internal_templateparser.y" + function yy_r119(){ if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) { if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) { $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor; @@ -2699,25 +2682,25 @@ static public $yy_action = array( $this->compiler->trigger_template_error ("static class '".$this->yystack[$this->yyidx + -2]->minor."' is undefined or not allowed by security setting"); } } -#line 2698 "smarty_internal_templateparser.php" -#line 767 "smarty_internal_templateparser.y" - function yy_r119(){ +#line 2681 "smarty_internal_templateparser.php" +#line 784 "smarty_internal_templateparser.y" + function yy_r120(){ if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor; } else { $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor; } } -#line 2707 "smarty_internal_templateparser.php" -#line 776 "smarty_internal_templateparser.y" - function yy_r120(){ +#line 2690 "smarty_internal_templateparser.php" +#line 793 "smarty_internal_templateparser.y" + function yy_r121(){ self::$prefix_number++; - $this->compiler->prefix_code[] = ''.$this->yystack[$this->yyidx + 0]->minor.''; + $this->compiler->prefix_code[] = ''.$this->yystack[$this->yyidx + -1]->minor.''; $this->_retvalue = '$_tmp'.self::$prefix_number; } -#line 2714 "smarty_internal_templateparser.php" -#line 791 "smarty_internal_templateparser.y" - function yy_r122(){ +#line 2697 "smarty_internal_templateparser.php" +#line 808 "smarty_internal_templateparser.y" + function yy_r123(){ if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); $this->_retvalue = $smarty_var; @@ -2728,155 +2711,155 @@ static public $yy_action = array( $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; } } -#line 2727 "smarty_internal_templateparser.php" -#line 804 "smarty_internal_templateparser.y" - function yy_r123(){ +#line 2710 "smarty_internal_templateparser.php" +#line 821 "smarty_internal_templateparser.y" + function yy_r124(){ $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2732 "smarty_internal_templateparser.php" -#line 814 "smarty_internal_templateparser.y" - function yy_r125(){ +#line 2715 "smarty_internal_templateparser.php" +#line 831 "smarty_internal_templateparser.y" + function yy_r126(){ $this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')'; } -#line 2737 "smarty_internal_templateparser.php" -#line 818 "smarty_internal_templateparser.y" - function yy_r126(){ +#line 2720 "smarty_internal_templateparser.php" +#line 835 "smarty_internal_templateparser.y" + function yy_r127(){ $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'\')) ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)'; } -#line 2742 "smarty_internal_templateparser.php" -#line 822 "smarty_internal_templateparser.y" - function yy_r127(){ +#line 2725 "smarty_internal_templateparser.php" +#line 839 "smarty_internal_templateparser.y" + function yy_r128(){ $this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')'; } -#line 2747 "smarty_internal_templateparser.php" -#line 826 "smarty_internal_templateparser.y" - function yy_r128(){ +#line 2730 "smarty_internal_templateparser.php" +#line 843 "smarty_internal_templateparser.y" + function yy_r129(){ $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -2]->minor .')) ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)'; } -#line 2752 "smarty_internal_templateparser.php" -#line 830 "smarty_internal_templateparser.y" - function yy_r129(){ +#line 2735 "smarty_internal_templateparser.php" +#line 847 "smarty_internal_templateparser.y" + function yy_r130(){ $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } -#line 2757 "smarty_internal_templateparser.php" -#line 843 "smarty_internal_templateparser.y" - function yy_r131(){ +#line 2740 "smarty_internal_templateparser.php" +#line 860 "smarty_internal_templateparser.y" + function yy_r132(){ return; } -#line 2762 "smarty_internal_templateparser.php" -#line 849 "smarty_internal_templateparser.y" - function yy_r132(){ +#line 2745 "smarty_internal_templateparser.php" +#line 866 "smarty_internal_templateparser.y" + function yy_r133(){ $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + 0]->minor).']'; } -#line 2767 "smarty_internal_templateparser.php" -#line 853 "smarty_internal_templateparser.y" - function yy_r133(){ +#line 2750 "smarty_internal_templateparser.php" +#line 870 "smarty_internal_templateparser.y" + function yy_r134(){ $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']'; } -#line 2772 "smarty_internal_templateparser.php" -#line 857 "smarty_internal_templateparser.y" - function yy_r134(){ +#line 2755 "smarty_internal_templateparser.php" +#line 874 "smarty_internal_templateparser.y" + function yy_r135(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']"; } -#line 2777 "smarty_internal_templateparser.php" -#line 861 "smarty_internal_templateparser.y" - function yy_r135(){ +#line 2760 "smarty_internal_templateparser.php" +#line 878 "smarty_internal_templateparser.y" + function yy_r136(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]"; } -#line 2782 "smarty_internal_templateparser.php" -#line 865 "smarty_internal_templateparser.y" - function yy_r136(){ +#line 2765 "smarty_internal_templateparser.php" +#line 882 "smarty_internal_templateparser.y" + function yy_r137(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]"; } -#line 2787 "smarty_internal_templateparser.php" -#line 870 "smarty_internal_templateparser.y" - function yy_r137(){ +#line 2770 "smarty_internal_templateparser.php" +#line 887 "smarty_internal_templateparser.y" + function yy_r138(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; } -#line 2792 "smarty_internal_templateparser.php" -#line 874 "smarty_internal_templateparser.y" - function yy_r138(){ +#line 2775 "smarty_internal_templateparser.php" +#line 891 "smarty_internal_templateparser.y" + function yy_r139(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; } -#line 2797 "smarty_internal_templateparser.php" -#line 884 "smarty_internal_templateparser.y" - function yy_r140(){ +#line 2780 "smarty_internal_templateparser.php" +#line 901 "smarty_internal_templateparser.y" + function yy_r141(){ $this->_retvalue = '[]'; } -#line 2802 "smarty_internal_templateparser.php" -#line 897 "smarty_internal_templateparser.y" - function yy_r142(){ +#line 2785 "smarty_internal_templateparser.php" +#line 914 "smarty_internal_templateparser.y" + function yy_r143(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2807 "smarty_internal_templateparser.php" -#line 902 "smarty_internal_templateparser.y" - function yy_r143(){ +#line 2790 "smarty_internal_templateparser.php" +#line 919 "smarty_internal_templateparser.y" + function yy_r144(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } -#line 2812 "smarty_internal_templateparser.php" -#line 907 "smarty_internal_templateparser.y" - function yy_r144(){ +#line 2795 "smarty_internal_templateparser.php" +#line 924 "smarty_internal_templateparser.y" + function yy_r145(){ $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 2817 "smarty_internal_templateparser.php" -#line 914 "smarty_internal_templateparser.y" - function yy_r145(){ +#line 2800 "smarty_internal_templateparser.php" +#line 931 "smarty_internal_templateparser.y" + function yy_r146(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor; } else { $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; } } -#line 2826 "smarty_internal_templateparser.php" -#line 923 "smarty_internal_templateparser.y" - function yy_r146(){ +#line 2809 "smarty_internal_templateparser.php" +#line 940 "smarty_internal_templateparser.y" + function yy_r147(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 2831 "smarty_internal_templateparser.php" -#line 928 "smarty_internal_templateparser.y" - function yy_r147(){ +#line 2814 "smarty_internal_templateparser.php" +#line 945 "smarty_internal_templateparser.y" + function yy_r148(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2836 "smarty_internal_templateparser.php" -#line 933 "smarty_internal_templateparser.y" - function yy_r148(){ +#line 2819 "smarty_internal_templateparser.php" +#line 950 "smarty_internal_templateparser.y" + function yy_r149(){ if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '_') { $this->compiler->trigger_template_error (self::Err1); } $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2844 "smarty_internal_templateparser.php" -#line 940 "smarty_internal_templateparser.y" - function yy_r149(){ +#line 2827 "smarty_internal_templateparser.php" +#line 957 "smarty_internal_templateparser.y" + function yy_r150(){ if ($this->security) { $this->compiler->trigger_template_error (self::Err2); } $this->_retvalue = '->{'.$this->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}'; } -#line 2852 "smarty_internal_templateparser.php" -#line 947 "smarty_internal_templateparser.y" - function yy_r150(){ +#line 2835 "smarty_internal_templateparser.php" +#line 964 "smarty_internal_templateparser.y" + function yy_r151(){ if ($this->security) { $this->compiler->trigger_template_error (self::Err2); } $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -#line 2860 "smarty_internal_templateparser.php" -#line 954 "smarty_internal_templateparser.y" - function yy_r151(){ +#line 2843 "smarty_internal_templateparser.php" +#line 971 "smarty_internal_templateparser.y" + function yy_r152(){ if ($this->security) { $this->compiler->trigger_template_error (self::Err2); } $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -#line 2868 "smarty_internal_templateparser.php" -#line 962 "smarty_internal_templateparser.y" - function yy_r152(){ +#line 2851 "smarty_internal_templateparser.php" +#line 979 "smarty_internal_templateparser.y" + function yy_r153(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; } -#line 2873 "smarty_internal_templateparser.php" -#line 970 "smarty_internal_templateparser.y" - function yy_r153(){ +#line 2856 "smarty_internal_templateparser.php" +#line 987 "smarty_internal_templateparser.y" + function yy_r154(){ if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) { if (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'array') === 0 || is_callable($this->yystack[$this->yyidx + -3]->minor)) { $func_name = strtolower($this->yystack[$this->yyidx + -3]->minor); @@ -2910,17 +2893,17 @@ static public $yy_action = array( } } } -#line 2909 "smarty_internal_templateparser.php" -#line 1008 "smarty_internal_templateparser.y" - function yy_r154(){ +#line 2892 "smarty_internal_templateparser.php" +#line 1025 "smarty_internal_templateparser.y" + function yy_r155(){ if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) == '_') { $this->compiler->trigger_template_error (self::Err1); } $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")"; } -#line 2917 "smarty_internal_templateparser.php" -#line 1015 "smarty_internal_templateparser.y" - function yy_r155(){ +#line 2900 "smarty_internal_templateparser.php" +#line 1032 "smarty_internal_templateparser.y" + function yy_r156(){ if ($this->security) { $this->compiler->trigger_template_error (self::Err2); } @@ -2928,168 +2911,168 @@ static public $yy_action = array( $this->compiler->prefix_code[] = 'compileVariable("'".$this->yystack[$this->yyidx + -3]->minor."'").';?>'; $this->_retvalue = '$_tmp'.self::$prefix_number.'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; } -#line 2927 "smarty_internal_templateparser.php" -#line 1026 "smarty_internal_templateparser.y" - function yy_r156(){ +#line 2910 "smarty_internal_templateparser.php" +#line 1043 "smarty_internal_templateparser.y" + function yy_r157(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor)); } -#line 2932 "smarty_internal_templateparser.php" -#line 1043 "smarty_internal_templateparser.y" - function yy_r159(){ +#line 2915 "smarty_internal_templateparser.php" +#line 1060 "smarty_internal_templateparser.y" + function yy_r160(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor))); } -#line 2937 "smarty_internal_templateparser.php" -#line 1047 "smarty_internal_templateparser.y" - function yy_r160(){ +#line 2920 "smarty_internal_templateparser.php" +#line 1064 "smarty_internal_templateparser.y" + function yy_r161(){ $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)); } -#line 2942 "smarty_internal_templateparser.php" -#line 1055 "smarty_internal_templateparser.y" - function yy_r162(){ +#line 2925 "smarty_internal_templateparser.php" +#line 1072 "smarty_internal_templateparser.y" + function yy_r163(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 2947 "smarty_internal_templateparser.php" -#line 1063 "smarty_internal_templateparser.y" - function yy_r163(){ +#line 2930 "smarty_internal_templateparser.php" +#line 1080 "smarty_internal_templateparser.y" + function yy_r164(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } -#line 2952 "smarty_internal_templateparser.php" -#line 1097 "smarty_internal_templateparser.y" - function yy_r170(){ +#line 2935 "smarty_internal_templateparser.php" +#line 1114 "smarty_internal_templateparser.y" + function yy_r171(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2957 "smarty_internal_templateparser.php" -#line 1102 "smarty_internal_templateparser.y" - function yy_r171(){ +#line 2940 "smarty_internal_templateparser.php" +#line 1119 "smarty_internal_templateparser.y" + function yy_r172(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 2962 "smarty_internal_templateparser.php" -#line 1108 "smarty_internal_templateparser.y" - function yy_r172(){ +#line 2945 "smarty_internal_templateparser.php" +#line 1125 "smarty_internal_templateparser.y" + function yy_r173(){ $this->_retvalue = '=='; } -#line 2967 "smarty_internal_templateparser.php" -#line 1112 "smarty_internal_templateparser.y" - function yy_r173(){ +#line 2950 "smarty_internal_templateparser.php" +#line 1129 "smarty_internal_templateparser.y" + function yy_r174(){ $this->_retvalue = '!='; } -#line 2972 "smarty_internal_templateparser.php" -#line 1116 "smarty_internal_templateparser.y" - function yy_r174(){ +#line 2955 "smarty_internal_templateparser.php" +#line 1133 "smarty_internal_templateparser.y" + function yy_r175(){ $this->_retvalue = '>'; } -#line 2977 "smarty_internal_templateparser.php" -#line 1120 "smarty_internal_templateparser.y" - function yy_r175(){ +#line 2960 "smarty_internal_templateparser.php" +#line 1137 "smarty_internal_templateparser.y" + function yy_r176(){ $this->_retvalue = '<'; } -#line 2982 "smarty_internal_templateparser.php" -#line 1124 "smarty_internal_templateparser.y" - function yy_r176(){ +#line 2965 "smarty_internal_templateparser.php" +#line 1141 "smarty_internal_templateparser.y" + function yy_r177(){ $this->_retvalue = '>='; } -#line 2987 "smarty_internal_templateparser.php" -#line 1128 "smarty_internal_templateparser.y" - function yy_r177(){ +#line 2970 "smarty_internal_templateparser.php" +#line 1145 "smarty_internal_templateparser.y" + function yy_r178(){ $this->_retvalue = '<='; } -#line 2992 "smarty_internal_templateparser.php" -#line 1132 "smarty_internal_templateparser.y" - function yy_r178(){ +#line 2975 "smarty_internal_templateparser.php" +#line 1149 "smarty_internal_templateparser.y" + function yy_r179(){ $this->_retvalue = '==='; } -#line 2997 "smarty_internal_templateparser.php" -#line 1136 "smarty_internal_templateparser.y" - function yy_r179(){ +#line 2980 "smarty_internal_templateparser.php" +#line 1153 "smarty_internal_templateparser.y" + function yy_r180(){ $this->_retvalue = '!=='; } -#line 3002 "smarty_internal_templateparser.php" -#line 1140 "smarty_internal_templateparser.y" - function yy_r180(){ +#line 2985 "smarty_internal_templateparser.php" +#line 1157 "smarty_internal_templateparser.y" + function yy_r181(){ $this->_retvalue = '%'; } -#line 3007 "smarty_internal_templateparser.php" -#line 1144 "smarty_internal_templateparser.y" - function yy_r181(){ +#line 2990 "smarty_internal_templateparser.php" +#line 1161 "smarty_internal_templateparser.y" + function yy_r182(){ $this->_retvalue = '&&'; } -#line 3012 "smarty_internal_templateparser.php" -#line 1148 "smarty_internal_templateparser.y" - function yy_r182(){ +#line 2995 "smarty_internal_templateparser.php" +#line 1165 "smarty_internal_templateparser.y" + function yy_r183(){ $this->_retvalue = '||'; } -#line 3017 "smarty_internal_templateparser.php" -#line 1152 "smarty_internal_templateparser.y" - function yy_r183(){ +#line 3000 "smarty_internal_templateparser.php" +#line 1169 "smarty_internal_templateparser.y" + function yy_r184(){ $this->_retvalue = ' XOR '; } -#line 3022 "smarty_internal_templateparser.php" -#line 1159 "smarty_internal_templateparser.y" - function yy_r184(){ +#line 3005 "smarty_internal_templateparser.php" +#line 1176 "smarty_internal_templateparser.y" + function yy_r185(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } -#line 3027 "smarty_internal_templateparser.php" -#line 1167 "smarty_internal_templateparser.y" - function yy_r186(){ +#line 3010 "smarty_internal_templateparser.php" +#line 1184 "smarty_internal_templateparser.y" + function yy_r187(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } -#line 3032 "smarty_internal_templateparser.php" -#line 1175 "smarty_internal_templateparser.y" - function yy_r188(){ +#line 3015 "smarty_internal_templateparser.php" +#line 1192 "smarty_internal_templateparser.y" + function yy_r189(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } -#line 3037 "smarty_internal_templateparser.php" -#line 1179 "smarty_internal_templateparser.y" - function yy_r189(){ +#line 3020 "smarty_internal_templateparser.php" +#line 1196 "smarty_internal_templateparser.y" + function yy_r190(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } -#line 3042 "smarty_internal_templateparser.php" -#line 1191 "smarty_internal_templateparser.y" - function yy_r191(){ +#line 3025 "smarty_internal_templateparser.php" +#line 1208 "smarty_internal_templateparser.y" + function yy_r192(){ $this->_retvalue = "''"; } -#line 3047 "smarty_internal_templateparser.php" -#line 1195 "smarty_internal_templateparser.y" - function yy_r192(){ +#line 3030 "smarty_internal_templateparser.php" +#line 1212 "smarty_internal_templateparser.y" + function yy_r193(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php(); } -#line 3052 "smarty_internal_templateparser.php" -#line 1200 "smarty_internal_templateparser.y" - function yy_r193(){ +#line 3035 "smarty_internal_templateparser.php" +#line 1217 "smarty_internal_templateparser.y" + function yy_r194(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 3058 "smarty_internal_templateparser.php" -#line 1205 "smarty_internal_templateparser.y" - function yy_r194(){ +#line 3041 "smarty_internal_templateparser.php" +#line 1222 "smarty_internal_templateparser.y" + function yy_r195(){ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor); } -#line 3063 "smarty_internal_templateparser.php" -#line 1209 "smarty_internal_templateparser.y" - function yy_r195(){ +#line 3046 "smarty_internal_templateparser.php" +#line 1226 "smarty_internal_templateparser.y" + function yy_r196(){ $this->_retvalue = new _smarty_code($this, '(string)'.$this->yystack[$this->yyidx + -1]->minor); } -#line 3068 "smarty_internal_templateparser.php" -#line 1217 "smarty_internal_templateparser.y" - function yy_r197(){ +#line 3051 "smarty_internal_templateparser.php" +#line 1234 "smarty_internal_templateparser.y" + function yy_r198(){ $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value'); } -#line 3073 "smarty_internal_templateparser.php" -#line 1225 "smarty_internal_templateparser.y" - function yy_r199(){ +#line 3056 "smarty_internal_templateparser.php" +#line 1242 "smarty_internal_templateparser.y" + function yy_r200(){ $this->_retvalue = new _smarty_code($this, '(string)('.$this->yystack[$this->yyidx + -1]->minor.')'); } -#line 3078 "smarty_internal_templateparser.php" -#line 1229 "smarty_internal_templateparser.y" - function yy_r200(){ - $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor); - } -#line 3083 "smarty_internal_templateparser.php" -#line 1233 "smarty_internal_templateparser.y" +#line 3061 "smarty_internal_templateparser.php" +#line 1246 "smarty_internal_templateparser.y" function yy_r201(){ + $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + -1]->minor); + } +#line 3066 "smarty_internal_templateparser.php" +#line 1250 "smarty_internal_templateparser.y" + function yy_r202(){ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor); } -#line 3088 "smarty_internal_templateparser.php" +#line 3071 "smarty_internal_templateparser.php" private $_retvalue; @@ -3150,7 +3133,7 @@ static public $yy_action = array( $this->internalError = true; $this->yymajor = $yymajor; $this->compiler->trigger_template_error(); -#line 3150 "smarty_internal_templateparser.php" +#line 3133 "smarty_internal_templateparser.php" } public function yy_accept() @@ -3166,7 +3149,7 @@ static public $yy_action = array( $this->internalError = false; $this->retvalue = $this->_retvalue; //echo $this->retvalue."\n\n"; -#line 3167 "smarty_internal_templateparser.php" +#line 3150 "smarty_internal_templateparser.php" } public function doParse($yymajor, $yytokenvalue) diff --git a/libs/sysplugins/smarty_internal_utility.php b/libs/sysplugins/smarty_internal_utility.php index 140fdaf7..33091eaf 100644 --- a/libs/sysplugins/smarty_internal_utility.php +++ b/libs/sysplugins/smarty_internal_utility.php @@ -1,823 +1,823 @@ - - * @author Uwe Tews - * @package Smarty - * @subpackage PluginsInternal - * @version 3-SVN$Rev: 3286 $ - */ - -/** - * Utility class - * - * @package Smarty - * @subpackage Security - */ -class Smarty_Internal_Utility -{ - /** - * private constructor to prevent calls creation of new instances - */ - final private function __construct() - { - // intentionally left blank - } - - /** - * Compile all template files - * - * @param string $extension template file name extension - * @param bool $force_compile force all to recompile - * @param int $time_limit set maximum execution time - * @param int $max_errors set maximum allowed errors - * @param Smarty $smarty Smarty instance - * @return integer number of template files compiled - */ - public static function compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) - { - // switch off time limit - if (function_exists('set_time_limit')) { - @set_time_limit($time_limit); - } - $smarty->force_compile = $force_compile; - $_count = 0; - $_error_count = 0; - // loop over array of template directories - foreach ($smarty->getTemplateDir() as $_dir) { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - $_compile = new RecursiveIteratorIterator($_compileDirs); - foreach ($_compile as $_fileinfo) { - $_file = $_fileinfo->getFilename(); - if (substr(basename($_fileinfo->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue; - if (!substr_compare($_file, $extension, - strlen($extension)) == 0) continue; - if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { - $_template_file = $_file; - } else { - $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; - } - echo '
', $_dir, '---', $_template_file; - flush(); - $_start_time = microtime(true); - try { - $_tpl = $smarty->createTemplate($_template_file,null,null,null,false); - if ($_tpl->mustCompile()) { - $_tpl->compileTemplateSource(); - $_count++; - echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; - flush(); - } else { - echo ' is up to date'; - flush(); - } - } catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "

"; - $_error_count++; - } - // free memory - $smarty->template_objects = array(); - $_tpl->smarty->template_objects = array(); - $_tpl = null; - if ($max_errors !== null && $_error_count == $max_errors) { - echo '

too many errors'; - exit(); - } - } - } - - return $_count; - } - - /** - * Compile all config files - * - * @param string $extension config file name extension - * @param bool $force_compile force all to recompile - * @param int $time_limit set maximum execution time - * @param int $max_errors set maximum allowed errors - * @param Smarty $smarty Smarty instance - * @return integer number of config files compiled - */ - public static function compileAllConfig($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) - { - // switch off time limit - if (function_exists('set_time_limit')) { - @set_time_limit($time_limit); - } - $smarty->force_compile = $force_compile; - $_count = 0; - $_error_count = 0; - // loop over array of template directories - foreach ($smarty->getConfigDir() as $_dir) { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - $_compile = new RecursiveIteratorIterator($_compileDirs); - foreach ($_compile as $_fileinfo) { - $_file = $_fileinfo->getFilename(); - if (substr(basename($_fileinfo->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue; - if (!substr_compare($_file, $extension, - strlen($extension)) == 0) continue; - if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { - $_config_file = $_file; - } else { - $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; - } - echo '
', $_dir, '---', $_config_file; - flush(); - $_start_time = microtime(true); - try { - $_config = new Smarty_Internal_Config($_config_file, $smarty); - if ($_config->mustCompile()) { - $_config->compileConfigSource(); - $_count++; - echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; - flush(); - } else { - echo ' is up to date'; - flush(); - } - } catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "

"; - $_error_count++; - } - if ($max_errors !== null && $_error_count == $max_errors) { - echo '

too many errors'; - exit(); - } - } - } - - return $_count; - } - - /** - * Delete compiled template file - * - * @param string $resource_name template name - * @param string $compile_id compile id - * @param integer $exp_time expiration time - * @param Smarty $smarty Smarty instance - * @return integer number of template files deleted - */ - public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty) - { - $_compile_dir = $smarty->getCompileDir(); - $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; - $_dir_sep = $smarty->use_sub_dirs ? DS : '^'; - if (isset($resource_name)) { - $_save_stat = $smarty->caching; - $smarty->caching = false; - $tpl = new $smarty->template_class($resource_name, $smarty); - $smarty->caching = $_save_stat; - - // remove from template cache - $tpl->source; // have the template registered before unset() - if ($smarty->allow_ambiguous_resources) { - $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; - } else { - $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; - } - if (isset($_templateId[150])) { - $_templateId = sha1($_templateId); - } - unset($smarty->template_objects[$_templateId]); - - if ($tpl->source->exists) { - $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath)); - $_resource_part_1_length = strlen($_resource_part_1); - } else { - return 0; - } - - $_resource_part_2 = str_replace('.php','.cache.php',$_resource_part_1); - $_resource_part_2_length = strlen($_resource_part_2); - } - $_dir = $_compile_dir; - if ($smarty->use_sub_dirs && isset($_compile_id)) { - $_dir .= $_compile_id . $_dir_sep; - } - if (isset($_compile_id)) { - $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep; - $_compile_id_part_length = strlen($_compile_id_part); - } - $_count = 0; - try { - $_compileDirs = new RecursiveDirectoryIterator($_dir); - // NOTE: UnexpectedValueException thrown for PHP >= 5.3 - } catch (Exception $e) { - return 0; - } - $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); - foreach ($_compile as $_file) { - if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) - continue; - - $_filepath = (string) $_file; - - if ($_file->isDir()) { - if (!$_compile->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } - } else { - $unlink = false; - if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) - && (!isset($resource_name) - || (isset($_filepath[$_resource_part_1_length]) - && substr_compare($_filepath, $_resource_part_1, -$_resource_part_1_length, $_resource_part_1_length) == 0) - || (isset($_filepath[$_resource_part_2_length]) - && substr_compare($_filepath, $_resource_part_2, -$_resource_part_2_length, $_resource_part_2_length) == 0))) { - if (isset($exp_time)) { - if (time() - @filemtime($_filepath) >= $exp_time) { - $unlink = true; - } - } else { - $unlink = true; - } - } - - if ($unlink && @unlink($_filepath)) { - $_count++; - } - } - } - // clear compiled cache - Smarty_Resource::$sources = array(); - Smarty_Resource::$compileds = array(); - - return $_count; - } - - /** - * Return array of tag/attributes of all tags used by an template - * - * @param Smarty_Internal_Template $templae template object - * @return array of tag/attributes - */ - public static function getTags(Smarty_Internal_Template $template) - { - $template->smarty->get_used_tags = true; - $template->compileTemplateSource(); - - return $template->used_tags; - } - - /** - * diagnose Smarty setup - * - * If $errors is secified, the diagnostic report will be appended to the array, rather than being output. - * - * @param Smarty $smarty Smarty instance to test - * @param array $errors array to push results into rather than outputting them - * @return bool status, true if everything is fine, false else - */ - public static function testInstall(Smarty $smarty, &$errors=null) - { - $status = true; - - if ($errors === null) { - echo "
\n";
-            echo "Smarty Installation test...\n";
-            echo "Testing template directory...\n";
-        }
-
-        $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
-
-        // test if all registered template_dir are accessible
-        foreach ($smarty->getTemplateDir() as $template_dir) {
-            $_template_dir = $template_dir;
-            $template_dir = realpath($template_dir);
-            // resolve include_path or fail existence
-            if (!$template_dir) {
-                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
-                    // try PHP include_path
-                    if ($_stream_resolve_include_path) {
-                        $template_dir = stream_resolve_include_path($_template_dir);
-                    } else {
-                        $template_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_template_dir);
-                    }
-
-                    if ($template_dir !== false) {
-                        if ($errors === null) {
-                            echo "$template_dir is OK.\n";
-                        }
-
-                        continue;
-                    } else {
-                        $status = false;
-                        $message = "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)";
-                        if ($errors === null) {
-                            echo $message . ".\n";
-                        } else {
-                            $errors['template_dir'] = $message;
-                        }
-
-                        continue;
-                    }
-                } else {
-                    $status = false;
-                    $message = "FAILED: $_template_dir does not exist";
-                    if ($errors === null) {
-                        echo $message . ".\n";
-                    } else {
-                        $errors['template_dir'] = $message;
-                    }
-
-                    continue;
-                }
-            }
-
-            if (!is_dir($template_dir)) {
-                $status = false;
-                $message = "FAILED: $template_dir is not a directory";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['template_dir'] = $message;
-                }
-            } elseif (!is_readable($template_dir)) {
-                $status = false;
-                $message = "FAILED: $template_dir is not readable";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['template_dir'] = $message;
-                }
-            } else {
-                if ($errors === null) {
-                    echo "$template_dir is OK.\n";
-                }
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing compile directory...\n";
-        }
-
-        // test if registered compile_dir is accessible
-        $__compile_dir = $smarty->getCompileDir();
-        $_compile_dir = realpath($__compile_dir);
-        if (!$_compile_dir) {
-            $status = false;
-            $message = "FAILED: {$__compile_dir} does not exist";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } elseif (!is_dir($_compile_dir)) {
-            $status = false;
-            $message = "FAILED: {$_compile_dir} is not a directory";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } elseif (!is_readable($_compile_dir)) {
-            $status = false;
-            $message = "FAILED: {$_compile_dir} is not readable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } elseif (!is_writable($_compile_dir)) {
-            $status = false;
-            $message = "FAILED: {$_compile_dir} is not writable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['compile_dir'] = $message;
-            }
-        } else {
-            if ($errors === null) {
-                echo "{$_compile_dir} is OK.\n";
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing plugins directory...\n";
-        }
-
-        // test if all registered plugins_dir are accessible
-        // and if core plugins directory is still registered
-        $_core_plugins_dir = realpath(dirname(__FILE__) .'/../plugins');
-        $_core_plugins_available = false;
-        foreach ($smarty->getPluginsDir() as $plugin_dir) {
-            $_plugin_dir = $plugin_dir;
-            $plugin_dir = realpath($plugin_dir);
-            // resolve include_path or fail existence
-            if (!$plugin_dir) {
-                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
-                    // try PHP include_path
-                    if ($_stream_resolve_include_path) {
-                        $plugin_dir = stream_resolve_include_path($_plugin_dir);
-                    } else {
-                        $plugin_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_plugin_dir);
-                    }
-
-                    if ($plugin_dir !== false) {
-                        if ($errors === null) {
-                            echo "$plugin_dir is OK.\n";
-                        }
-
-                        continue;
-                    } else {
-                        $status = false;
-                        $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)";
-                        if ($errors === null) {
-                            echo $message . ".\n";
-                        } else {
-                            $errors['plugins_dir'] = $message;
-                        }
-
-                        continue;
-                    }
-                } else {
-                    $status = false;
-                    $message = "FAILED: $_plugin_dir does not exist";
-                    if ($errors === null) {
-                        echo $message . ".\n";
-                    } else {
-                        $errors['plugins_dir'] = $message;
-                    }
-
-                    continue;
-                }
-            }
-
-            if (!is_dir($plugin_dir)) {
-                $status = false;
-                $message = "FAILED: $plugin_dir is not a directory";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['plugins_dir'] = $message;
-                }
-            } elseif (!is_readable($plugin_dir)) {
-                $status = false;
-                $message = "FAILED: $plugin_dir is not readable";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['plugins_dir'] = $message;
-                }
-            } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) {
-                $_core_plugins_available = true;
-                if ($errors === null) {
-                    echo "$plugin_dir is OK.\n";
-                }
-            } else {
-                if ($errors === null) {
-                    echo "$plugin_dir is OK.\n";
-                }
-            }
-        }
-        if (!$_core_plugins_available) {
-            $status = false;
-            $message = "WARNING: Smarty's own libs/plugins is not available";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } elseif (!isset($errors['plugins_dir'])) {
-                $errors['plugins_dir'] = $message;
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing cache directory...\n";
-        }
-
-        // test if all registered cache_dir is accessible
-        $__cache_dir = $smarty->getCacheDir();
-        $_cache_dir = realpath($__cache_dir);
-        if (!$_cache_dir) {
-            $status = false;
-            $message = "FAILED: {$__cache_dir} does not exist";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } elseif (!is_dir($_cache_dir)) {
-            $status = false;
-            $message = "FAILED: {$_cache_dir} is not a directory";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } elseif (!is_readable($_cache_dir)) {
-            $status = false;
-            $message = "FAILED: {$_cache_dir} is not readable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } elseif (!is_writable($_cache_dir)) {
-            $status = false;
-            $message = "FAILED: {$_cache_dir} is not writable";
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['cache_dir'] = $message;
-            }
-        } else {
-            if ($errors === null) {
-                echo "{$_cache_dir} is OK.\n";
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing configs directory...\n";
-        }
-
-        // test if all registered config_dir are accessible
-        foreach ($smarty->getConfigDir() as $config_dir) {
-            $_config_dir = $config_dir;
-            $config_dir = realpath($config_dir);
-            // resolve include_path or fail existence
-            if (!$config_dir) {
-                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
-                    // try PHP include_path
-                    if ($_stream_resolve_include_path) {
-                        $config_dir = stream_resolve_include_path($_config_dir);
-                    } else {
-                        $config_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_config_dir);
-                    }
-
-                    if ($config_dir !== false) {
-                        if ($errors === null) {
-                            echo "$config_dir is OK.\n";
-                        }
-
-                        continue;
-                    } else {
-                        $status = false;
-                        $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)";
-                        if ($errors === null) {
-                            echo $message . ".\n";
-                        } else {
-                            $errors['config_dir'] = $message;
-                        }
-
-                        continue;
-                    }
-                } else {
-                    $status = false;
-                    $message = "FAILED: $_config_dir does not exist";
-                    if ($errors === null) {
-                        echo $message . ".\n";
-                    } else {
-                        $errors['config_dir'] = $message;
-                    }
-
-                    continue;
-                }
-            }
-
-            if (!is_dir($config_dir)) {
-                $status = false;
-                $message = "FAILED: $config_dir is not a directory";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['config_dir'] = $message;
-                }
-            } elseif (!is_readable($config_dir)) {
-                $status = false;
-                $message = "FAILED: $config_dir is not readable";
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['config_dir'] = $message;
-                }
-            } else {
-                if ($errors === null) {
-                    echo "$config_dir is OK.\n";
-                }
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing sysplugin files...\n";
-        }
-        // test if sysplugins are available
-        $source = SMARTY_SYSPLUGINS_DIR;
-        if (is_dir($source)) {
-            $expected = array(
-                "smarty_cacheresource.php" => true,
-                "smarty_cacheresource_custom.php" => true,
-                "smarty_cacheresource_keyvaluestore.php" => true,
-                "smarty_config_source.php" => true,
-                "smarty_internal_cacheresource_file.php" => true,
-                "smarty_internal_compile_append.php" => true,
-                "smarty_internal_compile_assign.php" => true,
-                "smarty_internal_compile_block.php" => true,
-                "smarty_internal_compile_break.php" => true,
-                "smarty_internal_compile_call.php" => true,
-                "smarty_internal_compile_capture.php" => true,
-                "smarty_internal_compile_config_load.php" => true,
-                "smarty_internal_compile_continue.php" => true,
-                "smarty_internal_compile_debug.php" => true,
-                "smarty_internal_compile_eval.php" => true,
-                "smarty_internal_compile_extends.php" => true,
-                "smarty_internal_compile_for.php" => true,
-                "smarty_internal_compile_foreach.php" => true,
-                "smarty_internal_compile_function.php" => true,
-                "smarty_internal_compile_if.php" => true,
-                "smarty_internal_compile_include.php" => true,
-                "smarty_internal_compile_include_php.php" => true,
-                "smarty_internal_compile_insert.php" => true,
-                "smarty_internal_compile_ldelim.php" => true,
-                "smarty_internal_compile_nocache.php" => true,
-                "smarty_internal_compile_private_block_plugin.php" => true,
-                "smarty_internal_compile_private_function_plugin.php" => true,
-                "smarty_internal_compile_private_modifier.php" => true,
-                "smarty_internal_compile_private_object_block_function.php" => true,
-                "smarty_internal_compile_private_object_function.php" => true,
-                "smarty_internal_compile_private_print_expression.php" => true,
-                "smarty_internal_compile_private_registered_block.php" => true,
-                "smarty_internal_compile_private_registered_function.php" => true,
-                "smarty_internal_compile_private_special_variable.php" => true,
-                "smarty_internal_compile_rdelim.php" => true,
-                "smarty_internal_compile_section.php" => true,
-                "smarty_internal_compile_setfilter.php" => true,
-                "smarty_internal_compile_while.php" => true,
-                "smarty_internal_compilebase.php" => true,
-                "smarty_internal_config.php" => true,
-                "smarty_internal_config_file_compiler.php" => true,
-                "smarty_internal_configfilelexer.php" => true,
-                "smarty_internal_configfileparser.php" => true,
-                "smarty_internal_data.php" => true,
-                "smarty_internal_debug.php" => true,
-                "smarty_internal_filter_handler.php" => true,
-                "smarty_internal_function_call_handler.php" => true,
-                "smarty_internal_get_include_path.php" => true,
-                "smarty_internal_nocache_insert.php" => true,
-                "smarty_internal_parsetree.php" => true,
-                "smarty_internal_resource_eval.php" => true,
-                "smarty_internal_resource_extends.php" => true,
-                "smarty_internal_resource_file.php" => true,
-                "smarty_internal_resource_registered.php" => true,
-                "smarty_internal_resource_stream.php" => true,
-                "smarty_internal_resource_string.php" => true,
-                "smarty_internal_smartytemplatecompiler.php" => true,
-                "smarty_internal_template.php" => true,
-                "smarty_internal_templatebase.php" => true,
-                "smarty_internal_templatecompilerbase.php" => true,
-                "smarty_internal_templatelexer.php" => true,
-                "smarty_internal_templateparser.php" => true,
-                "smarty_internal_utility.php" => true,
-                "smarty_internal_write_file.php" => true,
-                "smarty_resource.php" => true,
-                "smarty_resource_custom.php" => true,
-                "smarty_resource_recompiled.php" => true,
-                "smarty_resource_uncompiled.php" => true,
-                "smarty_security.php" => true,
-            );
-            $iterator = new DirectoryIterator($source);
-            foreach ($iterator as $file) {
-                if (!$file->isDot()) {
-                    $filename = $file->getFilename();
-                    if (isset($expected[$filename])) {
-                        unset($expected[$filename]);
-                    }
-                }
-            }
-            if ($expected) {
-                $status = false;
-                $message = "FAILED: files missing from libs/sysplugins: ". join(', ', array_keys($expected));
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['sysplugins'] = $message;
-                }
-            } elseif ($errors === null) {
-                echo "... OK\n";
-            }
-        } else {
-            $status = false;
-            $message = "FAILED: ". SMARTY_SYSPLUGINS_DIR .' is not a directory';
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['sysplugins_dir_constant'] = $message;
-            }
-        }
-
-        if ($errors === null) {
-            echo "Testing plugin files...\n";
-        }
-        // test if core plugins are available
-        $source = SMARTY_PLUGINS_DIR;
-        if (is_dir($source)) {
-            $expected = array(
-                "block.textformat.php" => true,
-                "function.counter.php" => true,
-                "function.cycle.php" => true,
-                "function.fetch.php" => true,
-                "function.html_checkboxes.php" => true,
-                "function.html_image.php" => true,
-                "function.html_options.php" => true,
-                "function.html_radios.php" => true,
-                "function.html_select_date.php" => true,
-                "function.html_select_time.php" => true,
-                "function.html_table.php" => true,
-                "function.mailto.php" => true,
-                "function.math.php" => true,
-                "modifier.capitalize.php" => true,
-                "modifier.date_format.php" => true,
-                "modifier.debug_print_var.php" => true,
-                "modifier.escape.php" => true,
-                "modifier.regex_replace.php" => true,
-                "modifier.replace.php" => true,
-                "modifier.spacify.php" => true,
-                "modifier.truncate.php" => true,
-                "modifiercompiler.cat.php" => true,
-                "modifiercompiler.count_characters.php" => true,
-                "modifiercompiler.count_paragraphs.php" => true,
-                "modifiercompiler.count_sentences.php" => true,
-                "modifiercompiler.count_words.php" => true,
-                "modifiercompiler.default.php" => true,
-                "modifiercompiler.escape.php" => true,
-                "modifiercompiler.from_charset.php" => true,
-                "modifiercompiler.indent.php" => true,
-                "modifiercompiler.lower.php" => true,
-                "modifiercompiler.noprint.php" => true,
-                "modifiercompiler.string_format.php" => true,
-                "modifiercompiler.strip.php" => true,
-                "modifiercompiler.strip_tags.php" => true,
-                "modifiercompiler.to_charset.php" => true,
-                "modifiercompiler.unescape.php" => true,
-                "modifiercompiler.upper.php" => true,
-                "modifiercompiler.wordwrap.php" => true,
-                "outputfilter.trimwhitespace.php" => true,
-                "shared.escape_special_chars.php" => true,
-                "shared.literal_compiler_param.php" => true,
-                "shared.make_timestamp.php" => true,
-                "shared.mb_str_replace.php" => true,
-                "shared.mb_unicode.php" => true,
-                "shared.mb_wordwrap.php" => true,
-                "variablefilter.htmlspecialchars.php" => true,
-            );
-            $iterator = new DirectoryIterator($source);
-            foreach ($iterator as $file) {
-                if (!$file->isDot()) {
-                    $filename = $file->getFilename();
-                    if (isset($expected[$filename])) {
-                        unset($expected[$filename]);
-                    }
-                }
-            }
-            if ($expected) {
-                $status = false;
-                $message = "FAILED: files missing from libs/plugins: ". join(', ', array_keys($expected));
-                if ($errors === null) {
-                    echo $message . ".\n";
-                } else {
-                    $errors['plugins'] = $message;
-                }
-            } elseif ($errors === null) {
-                echo "... OK\n";
-            }
-        } else {
-            $status = false;
-            $message = "FAILED: ". SMARTY_PLUGINS_DIR .' is not a directory';
-            if ($errors === null) {
-                echo $message . ".\n";
-            } else {
-                $errors['plugins_dir_constant'] = $message;
-            }
-        }
-
-        if ($errors === null) {
-            echo "Tests complete.\n";
-            echo "
\n"; - } - - return $status; - } - -} + + * @author Uwe Tews + * @package Smarty + * @subpackage PluginsInternal + * @version 3-SVN$Rev: 3286 $ + */ + +/** + * Utility class + * + * @package Smarty + * @subpackage Security + */ +class Smarty_Internal_Utility +{ + /** + * private constructor to prevent calls creation of new instances + */ + final private function __construct() + { + // intentionally left blank + } + + /** + * Compile all template files + * + * @param string $extension template file name extension + * @param bool $force_compile force all to recompile + * @param int $time_limit set maximum execution time + * @param int $max_errors set maximum allowed errors + * @param Smarty $smarty Smarty instance + * @return integer number of template files compiled + */ + public static function compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) + { + // switch off time limit + if (function_exists('set_time_limit')) { + @set_time_limit($time_limit); + } + $smarty->force_compile = $force_compile; + $_count = 0; + $_error_count = 0; + // loop over array of template directories + foreach ($smarty->getTemplateDir() as $_dir) { + $_compileDirs = new RecursiveDirectoryIterator($_dir); + $_compile = new RecursiveIteratorIterator($_compileDirs); + foreach ($_compile as $_fileinfo) { + $_file = $_fileinfo->getFilename(); + if (substr(basename($_fileinfo->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue; + if (!substr_compare($_file, $extension, - strlen($extension)) == 0) continue; + if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { + $_template_file = $_file; + } else { + $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; + } + echo '
', $_dir, '---', $_template_file; + flush(); + $_start_time = microtime(true); + try { + $_tpl = $smarty->createTemplate($_template_file,null,null,null,false); + if ($_tpl->mustCompile()) { + $_tpl->compileTemplateSource(); + $_count++; + echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; + flush(); + } else { + echo ' is up to date'; + flush(); + } + } catch (Exception $e) { + echo 'Error: ', $e->getMessage(), "

"; + $_error_count++; + } + // free memory + $smarty->template_objects = array(); + $_tpl->smarty->template_objects = array(); + $_tpl = null; + if ($max_errors !== null && $_error_count == $max_errors) { + echo '

too many errors'; + exit(); + } + } + } + + return $_count; + } + + /** + * Compile all config files + * + * @param string $extension config file name extension + * @param bool $force_compile force all to recompile + * @param int $time_limit set maximum execution time + * @param int $max_errors set maximum allowed errors + * @param Smarty $smarty Smarty instance + * @return integer number of config files compiled + */ + public static function compileAllConfig($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty) + { + // switch off time limit + if (function_exists('set_time_limit')) { + @set_time_limit($time_limit); + } + $smarty->force_compile = $force_compile; + $_count = 0; + $_error_count = 0; + // loop over array of template directories + foreach ($smarty->getConfigDir() as $_dir) { + $_compileDirs = new RecursiveDirectoryIterator($_dir); + $_compile = new RecursiveIteratorIterator($_compileDirs); + foreach ($_compile as $_fileinfo) { + $_file = $_fileinfo->getFilename(); + if (substr(basename($_fileinfo->getPathname()),0,1) == '.' || strpos($_file, '.svn') !== false) continue; + if (!substr_compare($_file, $extension, - strlen($extension)) == 0) continue; + if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { + $_config_file = $_file; + } else { + $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; + } + echo '
', $_dir, '---', $_config_file; + flush(); + $_start_time = microtime(true); + try { + $_config = new Smarty_Internal_Config($_config_file, $smarty); + if ($_config->mustCompile()) { + $_config->compileConfigSource(); + $_count++; + echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; + flush(); + } else { + echo ' is up to date'; + flush(); + } + } catch (Exception $e) { + echo 'Error: ', $e->getMessage(), "

"; + $_error_count++; + } + if ($max_errors !== null && $_error_count == $max_errors) { + echo '

too many errors'; + exit(); + } + } + } + + return $_count; + } + + /** + * Delete compiled template file + * + * @param string $resource_name template name + * @param string $compile_id compile id + * @param integer $exp_time expiration time + * @param Smarty $smarty Smarty instance + * @return integer number of template files deleted + */ + public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty) + { + $_compile_dir = $smarty->getCompileDir(); + $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; + $_dir_sep = $smarty->use_sub_dirs ? DS : '^'; + if (isset($resource_name)) { + $_save_stat = $smarty->caching; + $smarty->caching = false; + $tpl = new $smarty->template_class($resource_name, $smarty); + $smarty->caching = $_save_stat; + + // remove from template cache + $tpl->source; // have the template registered before unset() + if ($smarty->allow_ambiguous_resources) { + $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id; + } else { + $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id; + } + if (isset($_templateId[150])) { + $_templateId = sha1($_templateId); + } + unset($smarty->template_objects[$_templateId]); + + if ($tpl->source->exists) { + $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath)); + $_resource_part_1_length = strlen($_resource_part_1); + } else { + return 0; + } + + $_resource_part_2 = str_replace('.php','.cache.php',$_resource_part_1); + $_resource_part_2_length = strlen($_resource_part_2); + } + $_dir = $_compile_dir; + if ($smarty->use_sub_dirs && isset($_compile_id)) { + $_dir .= $_compile_id . $_dir_sep; + } + if (isset($_compile_id)) { + $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep; + $_compile_id_part_length = strlen($_compile_id_part); + } + $_count = 0; + try { + $_compileDirs = new RecursiveDirectoryIterator($_dir); + // NOTE: UnexpectedValueException thrown for PHP >= 5.3 + } catch (Exception $e) { + return 0; + } + $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); + foreach ($_compile as $_file) { + if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) + continue; + + $_filepath = (string) $_file; + + if ($_file->isDir()) { + if (!$_compile->isDot()) { + // delete folder if empty + @rmdir($_file->getPathname()); + } + } else { + $unlink = false; + if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) + && (!isset($resource_name) + || (isset($_filepath[$_resource_part_1_length]) + && substr_compare($_filepath, $_resource_part_1, -$_resource_part_1_length, $_resource_part_1_length) == 0) + || (isset($_filepath[$_resource_part_2_length]) + && substr_compare($_filepath, $_resource_part_2, -$_resource_part_2_length, $_resource_part_2_length) == 0))) { + if (isset($exp_time)) { + if (time() - @filemtime($_filepath) >= $exp_time) { + $unlink = true; + } + } else { + $unlink = true; + } + } + + if ($unlink && @unlink($_filepath)) { + $_count++; + } + } + } + // clear compiled cache + Smarty_Resource::$sources = array(); + Smarty_Resource::$compileds = array(); + + return $_count; + } + + /** + * Return array of tag/attributes of all tags used by an template + * + * @param Smarty_Internal_Template $templae template object + * @return array of tag/attributes + */ + public static function getTags(Smarty_Internal_Template $template) + { + $template->smarty->get_used_tags = true; + $template->compileTemplateSource(); + + return $template->used_tags; + } + + /** + * diagnose Smarty setup + * + * If $errors is secified, the diagnostic report will be appended to the array, rather than being output. + * + * @param Smarty $smarty Smarty instance to test + * @param array $errors array to push results into rather than outputting them + * @return bool status, true if everything is fine, false else + */ + public static function testInstall(Smarty $smarty, &$errors=null) + { + $status = true; + + if ($errors === null) { + echo "
\n";
+            echo "Smarty Installation test...\n";
+            echo "Testing template directory...\n";
+        }
+
+        $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
+
+        // test if all registered template_dir are accessible
+        foreach ($smarty->getTemplateDir() as $template_dir) {
+            $_template_dir = $template_dir;
+            $template_dir = realpath($template_dir);
+            // resolve include_path or fail existence
+            if (!$template_dir) {
+                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
+                    // try PHP include_path
+                    if ($_stream_resolve_include_path) {
+                        $template_dir = stream_resolve_include_path($_template_dir);
+                    } else {
+                        $template_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_template_dir);
+                    }
+
+                    if ($template_dir !== false) {
+                        if ($errors === null) {
+                            echo "$template_dir is OK.\n";
+                        }
+
+                        continue;
+                    } else {
+                        $status = false;
+                        $message = "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)";
+                        if ($errors === null) {
+                            echo $message . ".\n";
+                        } else {
+                            $errors['template_dir'] = $message;
+                        }
+
+                        continue;
+                    }
+                } else {
+                    $status = false;
+                    $message = "FAILED: $_template_dir does not exist";
+                    if ($errors === null) {
+                        echo $message . ".\n";
+                    } else {
+                        $errors['template_dir'] = $message;
+                    }
+
+                    continue;
+                }
+            }
+
+            if (!is_dir($template_dir)) {
+                $status = false;
+                $message = "FAILED: $template_dir is not a directory";
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['template_dir'] = $message;
+                }
+            } elseif (!is_readable($template_dir)) {
+                $status = false;
+                $message = "FAILED: $template_dir is not readable";
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['template_dir'] = $message;
+                }
+            } else {
+                if ($errors === null) {
+                    echo "$template_dir is OK.\n";
+                }
+            }
+        }
+
+        if ($errors === null) {
+            echo "Testing compile directory...\n";
+        }
+
+        // test if registered compile_dir is accessible
+        $__compile_dir = $smarty->getCompileDir();
+        $_compile_dir = realpath($__compile_dir);
+        if (!$_compile_dir) {
+            $status = false;
+            $message = "FAILED: {$__compile_dir} does not exist";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['compile_dir'] = $message;
+            }
+        } elseif (!is_dir($_compile_dir)) {
+            $status = false;
+            $message = "FAILED: {$_compile_dir} is not a directory";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['compile_dir'] = $message;
+            }
+        } elseif (!is_readable($_compile_dir)) {
+            $status = false;
+            $message = "FAILED: {$_compile_dir} is not readable";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['compile_dir'] = $message;
+            }
+        } elseif (!is_writable($_compile_dir)) {
+            $status = false;
+            $message = "FAILED: {$_compile_dir} is not writable";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['compile_dir'] = $message;
+            }
+        } else {
+            if ($errors === null) {
+                echo "{$_compile_dir} is OK.\n";
+            }
+        }
+
+        if ($errors === null) {
+            echo "Testing plugins directory...\n";
+        }
+
+        // test if all registered plugins_dir are accessible
+        // and if core plugins directory is still registered
+        $_core_plugins_dir = realpath(dirname(__FILE__) .'/../plugins');
+        $_core_plugins_available = false;
+        foreach ($smarty->getPluginsDir() as $plugin_dir) {
+            $_plugin_dir = $plugin_dir;
+            $plugin_dir = realpath($plugin_dir);
+            // resolve include_path or fail existence
+            if (!$plugin_dir) {
+                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
+                    // try PHP include_path
+                    if ($_stream_resolve_include_path) {
+                        $plugin_dir = stream_resolve_include_path($_plugin_dir);
+                    } else {
+                        $plugin_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_plugin_dir);
+                    }
+
+                    if ($plugin_dir !== false) {
+                        if ($errors === null) {
+                            echo "$plugin_dir is OK.\n";
+                        }
+
+                        continue;
+                    } else {
+                        $status = false;
+                        $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)";
+                        if ($errors === null) {
+                            echo $message . ".\n";
+                        } else {
+                            $errors['plugins_dir'] = $message;
+                        }
+
+                        continue;
+                    }
+                } else {
+                    $status = false;
+                    $message = "FAILED: $_plugin_dir does not exist";
+                    if ($errors === null) {
+                        echo $message . ".\n";
+                    } else {
+                        $errors['plugins_dir'] = $message;
+                    }
+
+                    continue;
+                }
+            }
+
+            if (!is_dir($plugin_dir)) {
+                $status = false;
+                $message = "FAILED: $plugin_dir is not a directory";
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['plugins_dir'] = $message;
+                }
+            } elseif (!is_readable($plugin_dir)) {
+                $status = false;
+                $message = "FAILED: $plugin_dir is not readable";
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['plugins_dir'] = $message;
+                }
+            } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) {
+                $_core_plugins_available = true;
+                if ($errors === null) {
+                    echo "$plugin_dir is OK.\n";
+                }
+            } else {
+                if ($errors === null) {
+                    echo "$plugin_dir is OK.\n";
+                }
+            }
+        }
+        if (!$_core_plugins_available) {
+            $status = false;
+            $message = "WARNING: Smarty's own libs/plugins is not available";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } elseif (!isset($errors['plugins_dir'])) {
+                $errors['plugins_dir'] = $message;
+            }
+        }
+
+        if ($errors === null) {
+            echo "Testing cache directory...\n";
+        }
+
+        // test if all registered cache_dir is accessible
+        $__cache_dir = $smarty->getCacheDir();
+        $_cache_dir = realpath($__cache_dir);
+        if (!$_cache_dir) {
+            $status = false;
+            $message = "FAILED: {$__cache_dir} does not exist";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['cache_dir'] = $message;
+            }
+        } elseif (!is_dir($_cache_dir)) {
+            $status = false;
+            $message = "FAILED: {$_cache_dir} is not a directory";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['cache_dir'] = $message;
+            }
+        } elseif (!is_readable($_cache_dir)) {
+            $status = false;
+            $message = "FAILED: {$_cache_dir} is not readable";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['cache_dir'] = $message;
+            }
+        } elseif (!is_writable($_cache_dir)) {
+            $status = false;
+            $message = "FAILED: {$_cache_dir} is not writable";
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['cache_dir'] = $message;
+            }
+        } else {
+            if ($errors === null) {
+                echo "{$_cache_dir} is OK.\n";
+            }
+        }
+
+        if ($errors === null) {
+            echo "Testing configs directory...\n";
+        }
+
+        // test if all registered config_dir are accessible
+        foreach ($smarty->getConfigDir() as $config_dir) {
+            $_config_dir = $config_dir;
+            $config_dir = realpath($config_dir);
+            // resolve include_path or fail existence
+            if (!$config_dir) {
+                if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
+                    // try PHP include_path
+                    if ($_stream_resolve_include_path) {
+                        $config_dir = stream_resolve_include_path($_config_dir);
+                    } else {
+                        $config_dir = Smarty_Internal_Get_Include_Path::getIncludePath($_config_dir);
+                    }
+
+                    if ($config_dir !== false) {
+                        if ($errors === null) {
+                            echo "$config_dir is OK.\n";
+                        }
+
+                        continue;
+                    } else {
+                        $status = false;
+                        $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)";
+                        if ($errors === null) {
+                            echo $message . ".\n";
+                        } else {
+                            $errors['config_dir'] = $message;
+                        }
+
+                        continue;
+                    }
+                } else {
+                    $status = false;
+                    $message = "FAILED: $_config_dir does not exist";
+                    if ($errors === null) {
+                        echo $message . ".\n";
+                    } else {
+                        $errors['config_dir'] = $message;
+                    }
+
+                    continue;
+                }
+            }
+
+            if (!is_dir($config_dir)) {
+                $status = false;
+                $message = "FAILED: $config_dir is not a directory";
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['config_dir'] = $message;
+                }
+            } elseif (!is_readable($config_dir)) {
+                $status = false;
+                $message = "FAILED: $config_dir is not readable";
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['config_dir'] = $message;
+                }
+            } else {
+                if ($errors === null) {
+                    echo "$config_dir is OK.\n";
+                }
+            }
+        }
+
+        if ($errors === null) {
+            echo "Testing sysplugin files...\n";
+        }
+        // test if sysplugins are available
+        $source = SMARTY_SYSPLUGINS_DIR;
+        if (is_dir($source)) {
+            $expected = array(
+                "smarty_cacheresource.php" => true,
+                "smarty_cacheresource_custom.php" => true,
+                "smarty_cacheresource_keyvaluestore.php" => true,
+                "smarty_config_source.php" => true,
+                "smarty_internal_cacheresource_file.php" => true,
+                "smarty_internal_compile_append.php" => true,
+                "smarty_internal_compile_assign.php" => true,
+                "smarty_internal_compile_block.php" => true,
+                "smarty_internal_compile_break.php" => true,
+                "smarty_internal_compile_call.php" => true,
+                "smarty_internal_compile_capture.php" => true,
+                "smarty_internal_compile_config_load.php" => true,
+                "smarty_internal_compile_continue.php" => true,
+                "smarty_internal_compile_debug.php" => true,
+                "smarty_internal_compile_eval.php" => true,
+                "smarty_internal_compile_extends.php" => true,
+                "smarty_internal_compile_for.php" => true,
+                "smarty_internal_compile_foreach.php" => true,
+                "smarty_internal_compile_function.php" => true,
+                "smarty_internal_compile_if.php" => true,
+                "smarty_internal_compile_include.php" => true,
+                "smarty_internal_compile_include_php.php" => true,
+                "smarty_internal_compile_insert.php" => true,
+                "smarty_internal_compile_ldelim.php" => true,
+                "smarty_internal_compile_nocache.php" => true,
+                "smarty_internal_compile_private_block_plugin.php" => true,
+                "smarty_internal_compile_private_function_plugin.php" => true,
+                "smarty_internal_compile_private_modifier.php" => true,
+                "smarty_internal_compile_private_object_block_function.php" => true,
+                "smarty_internal_compile_private_object_function.php" => true,
+                "smarty_internal_compile_private_print_expression.php" => true,
+                "smarty_internal_compile_private_registered_block.php" => true,
+                "smarty_internal_compile_private_registered_function.php" => true,
+                "smarty_internal_compile_private_special_variable.php" => true,
+                "smarty_internal_compile_rdelim.php" => true,
+                "smarty_internal_compile_section.php" => true,
+                "smarty_internal_compile_setfilter.php" => true,
+                "smarty_internal_compile_while.php" => true,
+                "smarty_internal_compilebase.php" => true,
+                "smarty_internal_config.php" => true,
+                "smarty_internal_config_file_compiler.php" => true,
+                "smarty_internal_configfilelexer.php" => true,
+                "smarty_internal_configfileparser.php" => true,
+                "smarty_internal_data.php" => true,
+                "smarty_internal_debug.php" => true,
+                "smarty_internal_filter_handler.php" => true,
+                "smarty_internal_function_call_handler.php" => true,
+                "smarty_internal_get_include_path.php" => true,
+                "smarty_internal_nocache_insert.php" => true,
+                "smarty_internal_parsetree.php" => true,
+                "smarty_internal_resource_eval.php" => true,
+                "smarty_internal_resource_extends.php" => true,
+                "smarty_internal_resource_file.php" => true,
+                "smarty_internal_resource_registered.php" => true,
+                "smarty_internal_resource_stream.php" => true,
+                "smarty_internal_resource_string.php" => true,
+                "smarty_internal_smartytemplatecompiler.php" => true,
+                "smarty_internal_template.php" => true,
+                "smarty_internal_templatebase.php" => true,
+                "smarty_internal_templatecompilerbase.php" => true,
+                "smarty_internal_templatelexer.php" => true,
+                "smarty_internal_templateparser.php" => true,
+                "smarty_internal_utility.php" => true,
+                "smarty_internal_write_file.php" => true,
+                "smarty_resource.php" => true,
+                "smarty_resource_custom.php" => true,
+                "smarty_resource_recompiled.php" => true,
+                "smarty_resource_uncompiled.php" => true,
+                "smarty_security.php" => true,
+            );
+            $iterator = new DirectoryIterator($source);
+            foreach ($iterator as $file) {
+                if (!$file->isDot()) {
+                    $filename = $file->getFilename();
+                    if (isset($expected[$filename])) {
+                        unset($expected[$filename]);
+                    }
+                }
+            }
+            if ($expected) {
+                $status = false;
+                $message = "FAILED: files missing from libs/sysplugins: ". join(', ', array_keys($expected));
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['sysplugins'] = $message;
+                }
+            } elseif ($errors === null) {
+                echo "... OK\n";
+            }
+        } else {
+            $status = false;
+            $message = "FAILED: ". SMARTY_SYSPLUGINS_DIR .' is not a directory';
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['sysplugins_dir_constant'] = $message;
+            }
+        }
+
+        if ($errors === null) {
+            echo "Testing plugin files...\n";
+        }
+        // test if core plugins are available
+        $source = SMARTY_PLUGINS_DIR;
+        if (is_dir($source)) {
+            $expected = array(
+                "block.textformat.php" => true,
+                "function.counter.php" => true,
+                "function.cycle.php" => true,
+                "function.fetch.php" => true,
+                "function.html_checkboxes.php" => true,
+                "function.html_image.php" => true,
+                "function.html_options.php" => true,
+                "function.html_radios.php" => true,
+                "function.html_select_date.php" => true,
+                "function.html_select_time.php" => true,
+                "function.html_table.php" => true,
+                "function.mailto.php" => true,
+                "function.math.php" => true,
+                "modifier.capitalize.php" => true,
+                "modifier.date_format.php" => true,
+                "modifier.debug_print_var.php" => true,
+                "modifier.escape.php" => true,
+                "modifier.regex_replace.php" => true,
+                "modifier.replace.php" => true,
+                "modifier.spacify.php" => true,
+                "modifier.truncate.php" => true,
+                "modifiercompiler.cat.php" => true,
+                "modifiercompiler.count_characters.php" => true,
+                "modifiercompiler.count_paragraphs.php" => true,
+                "modifiercompiler.count_sentences.php" => true,
+                "modifiercompiler.count_words.php" => true,
+                "modifiercompiler.default.php" => true,
+                "modifiercompiler.escape.php" => true,
+                "modifiercompiler.from_charset.php" => true,
+                "modifiercompiler.indent.php" => true,
+                "modifiercompiler.lower.php" => true,
+                "modifiercompiler.noprint.php" => true,
+                "modifiercompiler.string_format.php" => true,
+                "modifiercompiler.strip.php" => true,
+                "modifiercompiler.strip_tags.php" => true,
+                "modifiercompiler.to_charset.php" => true,
+                "modifiercompiler.unescape.php" => true,
+                "modifiercompiler.upper.php" => true,
+                "modifiercompiler.wordwrap.php" => true,
+                "outputfilter.trimwhitespace.php" => true,
+                "shared.escape_special_chars.php" => true,
+                "shared.literal_compiler_param.php" => true,
+                "shared.make_timestamp.php" => true,
+                "shared.mb_str_replace.php" => true,
+                "shared.mb_unicode.php" => true,
+                "shared.mb_wordwrap.php" => true,
+                "variablefilter.htmlspecialchars.php" => true,
+            );
+            $iterator = new DirectoryIterator($source);
+            foreach ($iterator as $file) {
+                if (!$file->isDot()) {
+                    $filename = $file->getFilename();
+                    if (isset($expected[$filename])) {
+                        unset($expected[$filename]);
+                    }
+                }
+            }
+            if ($expected) {
+                $status = false;
+                $message = "FAILED: files missing from libs/plugins: ". join(', ', array_keys($expected));
+                if ($errors === null) {
+                    echo $message . ".\n";
+                } else {
+                    $errors['plugins'] = $message;
+                }
+            } elseif ($errors === null) {
+                echo "... OK\n";
+            }
+        } else {
+            $status = false;
+            $message = "FAILED: ". SMARTY_PLUGINS_DIR .' is not a directory';
+            if ($errors === null) {
+                echo $message . ".\n";
+            } else {
+                $errors['plugins_dir_constant'] = $message;
+            }
+        }
+
+        if ($errors === null) {
+            echo "Tests complete.\n";
+            echo "
\n"; + } + + return $status; + } + +}