From f1a136c0062a2f9c8a1a7704736e2d42f61b3ebd Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=A9sar=20D=2E=20Rodas?= Date: Thu, 5 Aug 2010 02:12:25 -0400 Subject: [PATCH] - Improved variables support * Variables context * * Added two functions which are useful to detect if a variable * separated by dot (foo.bar) is an array or object. To avoid * overhead we decide it at compile time, rather than * ask over and over at rendering time. * * foo.bar: * + If foo exists at compile time, * and it is an array, it would be foo['bar'] * otherwise it'd be foo->bar. * + If foo don't exists at compile time, * it would be foo->bar if the compiler option * dot_as_object is TRUE (by default) otherwise * it'd be foo['bar'] * * @author crodas * @author gallir (ideas) - Disabled unitest for CLI (currently it is not important) --- lib/Haanga.php | 2 +- lib/Haanga/Compiler.php | 103 +- lib/Haanga/Compiler/Lexer.lex | 10 +- lib/Haanga/Compiler/Lexer.php | 10 +- lib/Haanga/Compiler/Parser.out | 3416 +++++++++----------- lib/Haanga/Compiler/Parser.php | 940 +++--- lib/Haanga/Compiler/Parser.y | 27 +- tests/assert_templates/object.tpl | 2 +- tests/templateTest.php | 5 +- tests/tmp/assert_templates_load.tpl.php | 4 +- tests/tmp/assert_templates_loop.tpl.php | 6 +- tests/tmp/assert_templates_regroup.tpl.php | 5 +- tests/tmp/assert_templates_variable_existe.tpl.php | 2 +- 13 files changed, 2216 insertions(+), 2316 deletions(-) diff --git a/lib/Haanga.php b/lib/Haanga.php index ffd9a0b..f905c70 100644 --- a/lib/Haanga.php +++ b/lib/Haanga.php @@ -281,7 +281,7 @@ class Haanga $compiler->setDebug($php.".dump"); } - $code = $compiler->compile_file($tpl, FALSE); + $code = $compiler->compile_file($tpl, FALSE, $vars); file_put_contents($php, "autoescape = (bool)$value; break; + case 'dot_as_object': + $this->dot_as_object = (bool)$value; + break; } } @@ -108,7 +116,10 @@ class Haanga_Compiler // reset() {{{ function reset() { - $avoid_cleaning = array('strip_whitespaces' => 1, 'block_var' => 1, 'autoescape'=>1); + $avoid_cleaning = array( + 'strip_whitespaces' => 1, 'block_var' => 1, 'autoescape'=>1, + 'if_empty' => 1, 'dot_as_object' => 1, + ); foreach (array_keys(get_object_vars($this)) as $key) { if (isset($avoid_cleaning[$key])) { continue; @@ -149,7 +160,7 @@ class Haanga_Compiler { $this->name = $name; - $parsed = Haanga_Compiler_Lexer::init($code); + $parsed = Haanga_Compiler_Lexer::init($code, $this); $code = ""; $this->subtemplate = FALSE; @@ -225,7 +236,7 @@ class Haanga_Compiler * * @return Generated PHP code */ - final function compile_file($file, $safe=FALSE) + final function compile_file($file, $safe=FALSE, $context=array()) { if (!is_readable($file)) { throw new Haanga_Compiler_Exception("$file is not a file"); @@ -233,6 +244,7 @@ class Haanga_Compiler $this->_base_dir = dirname($file); $this->_file = basename($file); $this->check_function = $safe; + $this->context = $context; $name = $this->set_template_name($file); return $this->compile(file_get_contents($file), $name); } @@ -535,7 +547,8 @@ class Haanga_Compiler // {# something #} {{{ protected function generate_op_comment($details, &$body) { - $body->comment($details['comment']); + /* comments are annoying */ + //$body->comment($details['comment']); } // }}} @@ -550,6 +563,8 @@ class Haanga_Compiler } else if (is_array($part)) { if (Haanga_AST::is_str($part)) { $name .= "{$part['string']}"; + } elseif (isset($part['object'])) { + $name .= "{$part['object']}"; } else { throw new Haanga_Compiler_Exception("Invalid blockname"); } @@ -640,6 +655,85 @@ class Haanga_Compiler } // }}} + // variable context {{{ + /** + * Variables context + * + * These two functions are useful to detect if a variable + * separated by dot (foo.bar) is an array or object. To avoid + * overhead we decide it at compile time, rather than + * ask over and over at rendering time. + * + * foo.bar: + * + If foo exists at compile time, + * and it is an array, it would be foo['bar'] + * otherwise it'd be foo->bar. + * + If foo don't exists at compile time, + * it would be foo->bar if the compiler option + * dot_as_object is TRUE (by default) otherwise + * it'd be foo['bar'] + * + * @author crodas + * @author gallir (ideas) + * + */ + function set_context($varname, $value) + { + $this->context[$varname] = $value; + } + + function var_is_object(Array $variable) + { + $varname = $variable[0]; + switch ($varname) { + case 'GLOBALS': + case '_SERVER': + case '_GET': + case '_POST': + case '_FILES': + case '_COOKIE': + case '_SESSION': + case '_REQUEST': + case '_ENV': + return FALSE; /* these are arrays */ + } + + if (isset($this->context[$varname])) { + if (count($variable) == 1) { + return is_object($this->context[$varname]); + } + $var = & $this->context[$varname]; + foreach ($variable as $id => $part) { + if ($id != 0) { + if (is_array($part) && isset($part['object'])) { + $var = &$var->$part['object']; + } else if (is_object($var)) { + $var = &$var->$part; + } else { + $var = &$var[$part]; + } + } + } + + $type = is_object($var); + + /* delete reference */ + unset($var); + + return $type; + } + + /* treat this variable as 'array' */ + switch ($varname) { + case 'forloop': + case 'block': + return FALSE; + } + + return $this->dot_as_object; + } + // }}} + // Get variable name {{{ protected function generate_variable_name($variable) { @@ -721,7 +815,6 @@ class Haanga_Compiler if ($this->ob_start == 0) { $code->do_echo($stmt); - //$code->do_exec('print', $stmt); return; } diff --git a/lib/Haanga/Compiler/Lexer.lex b/lib/Haanga/Compiler/Lexer.lex index 7ddf49e..ee1b253 100644 --- a/lib/Haanga/Compiler/Lexer.lex +++ b/lib/Haanga/Compiler/Lexer.lex @@ -50,18 +50,22 @@ class Haanga_Compiler_Lexer private $state = 1; private $ignore_whitespace; - function __construct($data, $whitespace=FALSE) + function __construct($data, $compiler, $whitespace=FALSE) { $this->data = $data; + $this->compiler = $compiler; $this->N = 0; $this->ignore_whitespace = $whitespace; $this->line = 1; } - function init($template, $ignore_whitespace=FALSE) + function init($template, $compiler, $ignore_whitespace=FALSE) { - $lexer = new Haanga_Compiler_Lexer($template, $ignore_whitespace); + $lexer = new Haanga_Compiler_Lexer($template, $compiler, $ignore_whitespace); $parser = new Haanga_Compiler_Parser; + + $parser->compiler = $compiler; + try { for($i=0; ; $i++) { if (!$lexer->yylex()) { diff --git a/lib/Haanga/Compiler/Lexer.php b/lib/Haanga/Compiler/Lexer.php index 0735d8d..4814941 100644 --- a/lib/Haanga/Compiler/Lexer.php +++ b/lib/Haanga/Compiler/Lexer.php @@ -50,18 +50,22 @@ class Haanga_Compiler_Lexer private $state = 1; private $ignore_whitespace; - function __construct($data, $whitespace=FALSE) + function __construct($data, $compiler, $whitespace=FALSE) { $this->data = $data; + $this->compiler = $compiler; $this->N = 0; $this->ignore_whitespace = $whitespace; $this->line = 1; } - function init($template, $ignore_whitespace=FALSE) + function init($template, $compiler, $ignore_whitespace=FALSE) { - $lexer = new Haanga_Compiler_Lexer($template, $ignore_whitespace); + $lexer = new Haanga_Compiler_Lexer($template, $compiler, $ignore_whitespace); $parser = new Haanga_Compiler_Parser; + + $parser->compiler = $compiler; + try { for($i=0; ; $i++) { if (!$lexer->yylex()) { diff --git a/lib/Haanga/Compiler/Parser.out b/lib/Haanga/Compiler/Parser.out index ec66a25..c612d3e 100644 --- a/lib/Haanga/Compiler/Parser.out +++ b/lib/Haanga/Compiler/Parser.out @@ -29,12 +29,14 @@ State 1: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG * T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -42,9 +44,7 @@ State 1: ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG @@ -52,34 +52,35 @@ State 1: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_ELSE shift 133 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_END_IFNOTEQUAL shift 132 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_ENDIF shift 144 + T_ELSE shift 153 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 2: code ::= T_OPEN_TAG * stmts @@ -103,10 +104,10 @@ State 2: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -126,34 +127,35 @@ State 2: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_ELSE shift 144 - T_IFCHANGED shift 34 - T_ENDIFCHANGED shift 168 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_ELSE shift 159 + T_IFCHANGED shift 32 + T_ENDIFCHANGED shift 160 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 3: code ::= T_OPEN_TAG * stmts @@ -177,20 +179,20 @@ State 3: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG * T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG @@ -200,34 +202,35 @@ State 3: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_ENDIF shift 146 - T_ELSE shift 147 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_ELSE shift 124 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_END_IFEQUAL shift 127 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 4: code ::= T_OPEN_TAG * stmts @@ -251,18 +254,18 @@ State 4: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG * T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG * T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG * T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG @@ -274,34 +277,35 @@ State 4: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_CLOSEFOR shift 154 - T_EMPTY shift 156 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_ELSE shift 156 + T_IFCHANGED shift 32 + T_ENDIFCHANGED shift 158 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 5: code ::= T_OPEN_TAG * stmts @@ -325,10 +329,10 @@ State 5: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -336,11 +340,11 @@ State 5: ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG @@ -348,34 +352,35 @@ State 5: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_ELSE shift 159 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_END_IFEQUAL shift 160 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_ELSE shift 133 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_END_IFNOTEQUAL shift 134 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 6: code ::= T_OPEN_TAG * stmts @@ -399,12 +404,12 @@ State 6: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG * T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG * T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG * T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG * T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -422,34 +427,35 @@ State 6: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_CLOSEFOR shift 139 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_CLOSEFOR shift 147 T_EMPTY shift 141 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 7: code ::= T_OPEN_TAG * stmts @@ -473,18 +479,16 @@ State 7: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG * T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG * T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG @@ -494,36 +498,37 @@ State 7: block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG + filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG * T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_ELSE shift 136 - T_IFCHANGED shift 34 - T_ENDIFCHANGED shift 140 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_END_FILTER shift 132 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 8: code ::= T_OPEN_TAG * stmts @@ -547,13 +552,13 @@ State 8: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG * T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -569,33 +574,34 @@ State 8: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_CLOSEFOR shift 134 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_ENDIF shift 139 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 9: code ::= T_OPEN_TAG * stmts @@ -617,18 +623,18 @@ State 9: custom_tag ::= * T_CUSTOM_TAG var_list T_AS varname T_CLOSE_TAG custom_tag ::= * T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG - alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG * T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG @@ -641,33 +647,34 @@ State 9: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_ENDWITH shift 164 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_ENDIFCHANGED shift 157 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 10: code ::= T_OPEN_TAG * stmts @@ -691,10 +698,10 @@ State 10: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -703,6 +710,7 @@ State 10: ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG @@ -710,36 +718,36 @@ State 10: block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG * T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_END_FILTER shift 138 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_END_IFEQUAL shift 126 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 11: code ::= T_OPEN_TAG * stmts @@ -763,10 +771,10 @@ State 11: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -777,42 +785,42 @@ State 11: ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK T_NUMERIC T_CLOSE_TAG filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_END_BLOCK shift 125 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_END_IFNOTEQUAL shift 129 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 12: code ::= T_OPEN_TAG * stmts @@ -836,13 +844,12 @@ State 12: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -852,39 +859,42 @@ State 12: ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG + block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK varname T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_ENDIF shift 149 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_END_BLOCK shift 55 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 13: code ::= T_OPEN_TAG * stmts @@ -908,10 +918,10 @@ State 13: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -923,41 +933,42 @@ State 13: ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG - block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK varname T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG * T_END_BLOCK T_NUMERIC T_CLOSE_TAG filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_END_BLOCK shift 56 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_END_BLOCK shift 123 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 14: code ::= T_OPEN_TAG * stmts @@ -973,6 +984,7 @@ State 14: stmts ::= * alias stmts ::= * ifequal stmts ::= * T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG + stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG * T_END_AUTOESCAPE T_CLOSE_TAG custom_tag ::= * T_CUSTOM_TAG T_CLOSE_TAG custom_tag ::= * T_CUSTOM_TAG T_AS varname T_CLOSE_TAG custom_tag ::= * T_CUSTOM_TAG var_list T_CLOSE_TAG @@ -981,16 +993,15 @@ State 14: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG @@ -1003,33 +1014,34 @@ State 14: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_ENDIFCHANGED shift 169 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_END_AUTOESCAPE shift 140 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 15: code ::= T_OPEN_TAG * stmts @@ -1054,10 +1066,10 @@ State 15: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -1075,33 +1087,34 @@ State 15: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_CUSTOM_END shift 145 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_CUSTOM_END shift 148 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 16: code ::= T_OPEN_TAG * stmts @@ -1125,21 +1138,21 @@ State 16: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG @@ -1147,33 +1160,34 @@ State 16: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_END_IFNOTEQUAL shift 143 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_ENDIFCHANGED shift 146 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 17: code ::= T_OPEN_TAG * stmts @@ -1195,12 +1209,13 @@ State 17: custom_tag ::= * T_CUSTOM_TAG var_list T_AS varname T_CLOSE_TAG custom_tag ::= * T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG + alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG * T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -1209,7 +1224,6 @@ State 17: ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG @@ -1219,33 +1233,34 @@ State 17: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_END_IFEQUAL shift 161 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_ENDWITH shift 150 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 18: code ::= T_OPEN_TAG * stmts @@ -1269,17 +1284,17 @@ State 18: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG * T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG * T_ENDIFCHANGED T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG @@ -1291,33 +1306,34 @@ State 18: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_ENDIFCHANGED shift 135 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_CLOSEFOR shift 154 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 19: code ::= T_OPEN_TAG * stmts @@ -1341,11 +1357,10 @@ State 19: alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG stmt ::= * regroup stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG * T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_def ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG + for_def ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= * for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -1363,177 +1378,35 @@ State 19: filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_CLOSEFOR shift 151 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 + T_EXTENDS shift 39 + T_INCLUDE shift 35 + T_AUTOESCAPE shift 116 + T_CUSTOM_TAG shift 31 + T_CUSTOM_BLOCK shift 149 + T_WITH shift 76 + T_LOAD shift 67 + T_FOR shift 69 + T_IF shift 25 + T_IFCHANGED shift 32 + T_IFEQUAL shift 29 + T_IFNOTEQUAL shift 30 + T_BLOCK shift 46 + T_FILTER shift 44 + T_REGROUP shift 40 + stmts shift 161 + stmt shift 128 + for_stmt shift 224 + ifchanged_stmt shift 223 + block_stmt shift 219 + filter_stmt shift 220 + if_stmt shift 222 + custom_tag shift 189 + alias shift 190 + ifequal shift 192 + regroup shift 200 + for_def shift 94 State 20: - code ::= T_OPEN_TAG * stmts - stmts ::= * T_EXTENDS var_or_string T_CLOSE_TAG - stmts ::= * stmt T_CLOSE_TAG - stmts ::= * for_stmt - stmts ::= * ifchanged_stmt - stmts ::= * block_stmt - stmts ::= * filter_stmt - stmts ::= * if_stmt - stmts ::= * T_INCLUDE var_or_string T_CLOSE_TAG - stmts ::= * custom_tag - stmts ::= * alias - stmts ::= * ifequal - stmts ::= * T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG - stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG * T_END_AUTOESCAPE T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG T_AS varname T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG var_list T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG var_list T_AS varname T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG - alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG - stmt ::= * regroup - stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG - block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_END_AUTOESCAPE shift 150 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 - -State 21: - code ::= T_OPEN_TAG * stmts - stmts ::= * T_EXTENDS var_or_string T_CLOSE_TAG - stmts ::= * stmt T_CLOSE_TAG - stmts ::= * for_stmt - stmts ::= * ifchanged_stmt - stmts ::= * block_stmt - stmts ::= * filter_stmt - stmts ::= * if_stmt - stmts ::= * T_INCLUDE var_or_string T_CLOSE_TAG - stmts ::= * custom_tag - stmts ::= * alias - stmts ::= * ifequal - stmts ::= * T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG T_AS varname T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG var_list T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_TAG var_list T_AS varname T_CLOSE_TAG - custom_tag ::= * T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG - alias ::= * T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG - stmt ::= * regroup - stmt ::= * T_LOAD string - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= * T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= * T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= * T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= * T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= * T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= * T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG - block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= * T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - filter_stmt ::= * T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - regroup ::= * T_REGROUP filtered_var T_BY varname T_AS varname - - T_EXTENDS shift 41 - T_INCLUDE shift 38 - T_AUTOESCAPE shift 122 - T_CUSTOM_TAG shift 33 - T_CUSTOM_BLOCK shift 158 - T_WITH shift 79 - T_LOAD shift 80 - T_FOR shift 76 - T_IF shift 28 - T_IFCHANGED shift 34 - T_IFEQUAL shift 31 - T_IFNOTEQUAL shift 29 - T_BLOCK shift 51 - T_FILTER shift 42 - T_REGROUP shift 44 - stmts shift 190 - stmt shift 153 - for_stmt shift 180 - ifchanged_stmt shift 173 - block_stmt shift 177 - filter_stmt shift 174 - if_stmt shift 175 - custom_tag shift 238 - alias shift 226 - ifequal shift 227 - regroup shift 209 - -State 22: filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1550,9 +1423,9 @@ State 22: expr ::= * expr T_OR expr expr ::= * expr T_PLUS|T_MINUS expr expr ::= * expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr - expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN * expr expr ::= * expr T_TIMES|T_DIV|T_MOD expr expr ::= * T_LPARENT expr T_RPARENT + expr ::= T_LPARENT * expr T_RPARENT expr ::= * fvar_or_string varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA @@ -1560,22 +1433,22 @@ State 22: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 107 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 97 + fvar_or_string shift 165 + varname_args shift 186 -State 23: +State 21: filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1589,11 +1462,11 @@ State 23: string ::= * T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END expr ::= * expr T_AND expr - expr ::= expr T_AND * expr expr ::= * expr T_OR expr expr ::= * expr T_PLUS|T_MINUS expr expr ::= * expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= * expr T_TIMES|T_DIV|T_MOD expr + expr ::= expr T_TIMES|T_DIV|T_MOD * expr expr ::= * T_LPARENT expr T_RPARENT expr ::= * fvar_or_string varname ::= * varname T_OBJ T_ALPHA @@ -1602,22 +1475,22 @@ State 23: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 105 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 163 + fvar_or_string shift 165 + varname_args shift 186 -State 24: +State 22: filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1632,9 +1505,9 @@ State 24: string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END expr ::= * expr T_AND expr expr ::= * expr T_OR expr - expr ::= expr T_OR * expr expr ::= * expr T_PLUS|T_MINUS expr expr ::= * expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr + expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN * expr expr ::= * expr T_TIMES|T_DIV|T_MOD expr expr ::= * T_LPARENT expr T_RPARENT expr ::= * fvar_or_string @@ -1644,22 +1517,22 @@ State 24: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 106 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 100 + fvar_or_string shift 165 + varname_args shift 186 -State 25: +State 23: filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1686,22 +1559,22 @@ State 25: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 119 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 113 + fvar_or_string shift 165 + varname_args shift 186 -State 26: +State 24: filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1715,12 +1588,12 @@ State 26: string ::= * T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END expr ::= * expr T_AND expr + expr ::= expr T_AND * expr expr ::= * expr T_OR expr expr ::= * expr T_PLUS|T_MINUS expr expr ::= * expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= * expr T_TIMES|T_DIV|T_MOD expr expr ::= * T_LPARENT expr T_RPARENT - expr ::= T_LPARENT * expr T_RPARENT expr ::= * fvar_or_string varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA @@ -1728,22 +1601,24 @@ State 26: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 103 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 99 + fvar_or_string shift 165 + varname_args shift 186 -State 27: +State 25: + if_stmt ::= T_IF * expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + if_stmt ::= T_IF * expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1761,7 +1636,6 @@ State 27: expr ::= * expr T_PLUS|T_MINUS expr expr ::= * expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= * expr T_TIMES|T_DIV|T_MOD expr - expr ::= expr T_TIMES|T_DIV|T_MOD * expr expr ::= * T_LPARENT expr T_RPARENT expr ::= * fvar_or_string varname ::= * varname T_OBJ T_ALPHA @@ -1770,24 +1644,22 @@ State 27: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 194 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 98 + fvar_or_string shift 165 + varname_args shift 186 -State 28: - if_stmt ::= T_IF * expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= T_IF * expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG +State 26: filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1802,6 +1674,7 @@ State 28: string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END expr ::= * expr T_AND expr expr ::= * expr T_OR expr + expr ::= expr T_OR * expr expr ::= * expr T_PLUS|T_MINUS expr expr ::= * expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= * expr T_TIMES|T_DIV|T_MOD expr @@ -1813,24 +1686,24 @@ State 28: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_LPARENT shift 26 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_LPARENT shift 20 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - expr shift 104 - fvar_or_string shift 199 - varname_args shift 233 + string shift 170 + expr shift 101 + fvar_or_string shift 165 + varname_args shift 186 -State 29: - ifequal ::= T_IFNOTEQUAL * fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL * fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG +State 27: + ifequal ::= T_IFNOTEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1849,22 +1722,22 @@ State 29: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - fvar_or_string shift 30 - varname_args shift 233 + string shift 170 + fvar_or_string shift 135 + varname_args shift 186 -State 30: - ifequal ::= T_IFNOTEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG +State 28: + ifequal ::= T_IFEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1883,20 +1756,20 @@ State 30: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - fvar_or_string shift 152 - varname_args shift 233 + string shift 170 + fvar_or_string shift 130 + varname_args shift 186 -State 31: +State 29: ifequal ::= T_IFEQUAL * fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= T_IFEQUAL * fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args @@ -1917,22 +1790,22 @@ State 31: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - fvar_or_string shift 32 - varname_args shift 233 + string shift 170 + fvar_or_string shift 28 + varname_args shift 186 -State 32: - ifequal ::= T_IFEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= T_IFEQUAL fvar_or_string * fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG +State 30: + ifequal ::= T_IFNOTEQUAL * fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL * fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -1951,20 +1824,20 @@ State 32: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 225 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - filtered_var shift 130 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 168 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + filtered_var shift 142 varname shift 111 - string shift 228 - fvar_or_string shift 166 - varname_args shift 233 + string shift 170 + fvar_or_string shift 27 + varname_args shift 186 -State 33: +State 31: custom_tag ::= T_CUSTOM_TAG * T_CLOSE_TAG custom_tag ::= T_CUSTOM_TAG * T_AS varname T_CLOSE_TAG custom_tag ::= T_CUSTOM_TAG * var_list T_CLOSE_TAG @@ -1986,21 +1859,21 @@ State 33: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CLOSE_TAG shift 222 - T_CUSTOM_TAG shift 172 - T_AS shift 77 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 231 - varname shift 118 - var_list shift 35 - string shift 191 + T_CLOSE_TAG shift 184 + T_CUSTOM_TAG shift 225 + T_AS shift 74 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 227 + varname shift 112 + var_list shift 33 + string shift 171 -State 34: +State 32: ifchanged_stmt ::= T_IFCHANGED * T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= T_IFCHANGED * var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= T_IFCHANGED * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG @@ -2022,20 +1895,20 @@ State 34: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CLOSE_TAG shift 94 - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 231 - varname shift 118 - var_list shift 36 - string shift 191 + T_CLOSE_TAG shift 87 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 227 + varname shift 112 + var_list shift 34 + string shift 171 -State 35: +State 33: custom_tag ::= T_CUSTOM_TAG var_list * T_CLOSE_TAG custom_tag ::= T_CUSTOM_TAG var_list * T_AS varname T_CLOSE_TAG var_list ::= var_list * var_or_string @@ -2054,21 +1927,21 @@ State 35: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CLOSE_TAG shift 229 - T_CUSTOM_TAG shift 172 - T_AS shift 72 - T_CUSTOM_BLOCK shift 172 - T_COMMA shift 37 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 237 - varname shift 118 - string shift 191 + T_CLOSE_TAG shift 202 + T_CUSTOM_TAG shift 225 + T_AS shift 73 + T_CUSTOM_BLOCK shift 225 + T_COMMA shift 38 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 197 + varname shift 112 + string shift 171 -State 36: +State 34: ifchanged_stmt ::= T_IFCHANGED var_list * T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG ifchanged_stmt ::= T_IFCHANGED var_list * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG var_list ::= var_list * var_or_string @@ -2087,21 +1960,21 @@ State 36: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CLOSE_TAG shift 99 - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_COMMA shift 37 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 237 - varname shift 118 - string shift 191 + T_CLOSE_TAG shift 88 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_COMMA shift 38 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 197 + varname shift 112 + string shift 171 -State 37: - var_list ::= var_list T_COMMA * var_or_string +State 35: + stmts ::= T_INCLUDE * var_or_string T_CLOSE_TAG var_or_string ::= * varname var_or_string ::= * T_NUMERIC var_or_string ::= * string @@ -2116,19 +1989,18 @@ State 37: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 235 - varname shift 118 - string shift 191 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 155 + varname shift 112 + string shift 171 -State 38: - stmts ::= T_INCLUDE * var_or_string T_CLOSE_TAG +State 36: var_or_string ::= * varname var_or_string ::= * T_NUMERIC var_or_string ::= * string @@ -2140,21 +2012,23 @@ State 38: varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE + varname ::= varname T_BRACKETS_OPEN * var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 163 - varname shift 118 - string shift 191 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 137 + varname shift 112 + string shift 171 -State 39: +State 37: + varname_args ::= varname T_COLON * var_or_string var_or_string ::= * varname var_or_string ::= * T_NUMERIC var_or_string ::= * string @@ -2166,23 +2040,22 @@ State 39: varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - varname ::= varname T_BRACKETS_OPEN * var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 162 - varname shift 118 - string shift 191 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 193 + varname shift 112 + string shift 171 -State 40: - varname_args ::= varname T_COLON * var_or_string +State 38: + var_list ::= var_list T_COMMA * var_or_string var_or_string ::= * varname var_or_string ::= * T_NUMERIC var_or_string ::= * string @@ -2197,18 +2070,18 @@ State 40: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 220 - varname shift 118 - string shift 191 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 198 + varname shift 112 + string shift 171 -State 41: +State 39: stmts ::= T_EXTENDS * var_or_string T_CLOSE_TAG var_or_string ::= * varname var_or_string ::= * T_NUMERIC @@ -2224,19 +2097,19 @@ State 41: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 185 - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - T_ALPHA shift 170 - var_or_string shift 165 - varname shift 118 - string shift 191 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 175 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + T_ALPHA shift 218 + var_or_string shift 151 + varname shift 112 + string shift 171 -State 42: - filter_stmt ::= T_FILTER * filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG +State 40: + regroup ::= T_REGROUP * filtered_var T_BY varname T_AS varname filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -2247,15 +2120,15 @@ State 42: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - filtered_var shift 126 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + filtered_var shift 118 varname shift 111 - varname_args shift 233 + varname_args shift 186 -State 43: - code ::= T_PRINT_OPEN * filtered_var T_PRINT_CLOSE +State 41: + for_def ::= T_FOR varname T_IN * filtered_var T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -2266,15 +2139,15 @@ State 43: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 filtered_var shift 121 varname shift 111 - varname_args shift 233 + varname_args shift 186 -State 44: - regroup ::= T_REGROUP * filtered_var T_BY varname T_AS varname +State 42: + for_def ::= T_FOR varname T_COMMA varname T_IN * filtered_var T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -2285,16 +2158,15 @@ State 44: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - filtered_var shift 123 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + filtered_var shift 119 varname shift 111 - varname_args shift 233 + varname_args shift 186 -State 45: - for_stmt ::= T_FOR varname T_IN * filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN * filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG +State 43: + code ::= T_PRINT_OPEN * filtered_var T_PRINT_CLOSE filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -2305,16 +2177,15 @@ State 45: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - filtered_var shift 128 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + filtered_var shift 117 varname shift 111 - varname_args shift 233 + varname_args shift 186 -State 46: - for_stmt ::= T_FOR varname T_COMMA varname T_IN * filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN * filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG +State 44: + filter_stmt ::= T_FILTER * filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG filtered_var ::= * filtered_var T_PIPE varname_args filtered_var ::= * varname_args varname_args ::= * varname T_COLON var_or_string @@ -2325,14 +2196,14 @@ State 46: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - filtered_var shift 129 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + filtered_var shift 115 varname shift 111 - varname_args shift 233 + varname_args shift 186 -State 47: +State 45: filtered_var ::= filtered_var T_PIPE * varname_args varname_args ::= * varname T_COLON var_or_string varname_args ::= * varname @@ -2342,129 +2213,145 @@ State 47: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 varname shift 111 - varname_args shift 219 + varname_args shift 201 -State 48: +State 46: + block_stmt ::= T_BLOCK * varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK * varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG + block_stmt ::= T_BLOCK * T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK * T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG + varname ::= * varname T_OBJ T_ALPHA + varname ::= * varname T_DOT T_ALPHA + varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE + varname ::= * T_ALPHA + varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK + + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_NUMERIC shift 136 + T_ALPHA shift 218 + varname shift 106 + +State 47: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - T_OPEN_TAG shift 14 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 3 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 49: +State 48: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG body * T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG + block_stmt ::= T_BLOCK varname T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK varname T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG - T_OPEN_TAG shift 15 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 12 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 50: +State 49: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_ENDIF T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - T_OPEN_TAG shift 12 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 10 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 51: - block_stmt ::= T_BLOCK * varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK * varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG - block_stmt ::= T_BLOCK * T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK * T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - varname ::= * varname T_OBJ T_ALPHA - varname ::= * varname T_DOT T_ALPHA - varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - varname ::= * T_ALPHA - varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK +State 50: + body ::= body * code + code ::= * T_OPEN_TAG stmts + code ::= * T_HTML + code ::= * T_COMMENT_OPEN T_COMMENT + code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE + custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG body * T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_NUMERIC shift 142 - T_ALPHA shift 170 - varname shift 113 + T_OPEN_TAG shift 15 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 + T_PRINT_OPEN shift 43 + code shift 164 -State 52: +State 51: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body * T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body * T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - T_OPEN_TAG shift 4 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 11 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 53: +State 52: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body * T_OPEN_TAG T_ENDWITH T_CLOSE_TAG - T_OPEN_TAG shift 18 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 17 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 54: +State 53: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body * T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - T_OPEN_TAG shift 19 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 16 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 55: +State 54: body ::= body * code code ::= * T_OPEN_TAG stmts code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body * T_OPEN_TAG T_ENDWITH T_CLOSE_TAG + for_stmt ::= for_def body * T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def body * T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - T_OPEN_TAG shift 9 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 6 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 -State 56: +State 55: block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK * T_CLOSE_TAG block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK * varname T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA @@ -2473,11 +2360,26 @@ State 56: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CLOSE_TAG shift 211 - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 116 + T_CLOSE_TAG shift 216 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 103 + +State 56: + body ::= body * code + code ::= * T_OPEN_TAG stmts + code ::= * T_HTML + code ::= * T_COMMENT_OPEN T_COMMENT + code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + + T_OPEN_TAG shift 5 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 + T_PRINT_OPEN shift 43 + code shift 164 State 57: body ::= body * code @@ -2485,14 +2387,13 @@ State 57: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_ENDIF T_CLOSE_TAG - T_OPEN_TAG shift 2 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 8 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 58: body ::= body * code @@ -2500,14 +2401,13 @@ State 58: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - block_stmt ::= T_BLOCK varname T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK varname T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG + filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body * T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - T_OPEN_TAG shift 13 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 7 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 59: (0) start ::= body * @@ -2517,11 +2417,11 @@ State 59: code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - T_OPEN_TAG shift 21 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 19 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 {default} reduce 0 State 60: @@ -2530,14 +2430,14 @@ State 60: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - T_OPEN_TAG shift 5 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 13 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 61: body ::= body * code @@ -2545,14 +2445,13 @@ State 61: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body * T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body * T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body * T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - T_OPEN_TAG shift 6 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 18 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 62: body ::= body * code @@ -2560,13 +2459,14 @@ State 62: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - T_OPEN_TAG shift 16 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 4 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 63: body ::= body * code @@ -2574,13 +2474,13 @@ State 63: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - T_OPEN_TAG shift 17 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 9 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 64: body ::= body * code @@ -2588,13 +2488,14 @@ State 64: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body * T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - T_OPEN_TAG shift 8 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 2 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 65: body ::= body * code @@ -2602,14 +2503,14 @@ State 65: code ::= * T_HTML code ::= * T_COMMENT_OPEN T_COMMENT code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body * T_OPEN_TAG T_ENDIF T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG T_OPEN_TAG shift 1 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 66: body ::= body * code @@ -2619,111 +2520,66 @@ State 66: code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body * T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG - T_OPEN_TAG shift 20 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 + T_OPEN_TAG shift 14 + T_HTML shift 180 + T_COMMENT_OPEN shift 131 T_PRINT_OPEN shift 43 - code shift 189 + code shift 164 State 67: - body ::= body * code - code ::= * T_OPEN_TAG stmts - code ::= * T_HTML - code ::= * T_COMMENT_OPEN T_COMMENT - code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body * T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG + stmt ::= T_LOAD * string + string ::= * T_INTL string T_RPARENT + string ::= * T_STRING_SINGLE_INIT T_STRING_SINGLE_END + string ::= * T_STRING_DOUBLE_INIT T_STRING_DOUBLE_END + string ::= * T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END + string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END - T_OPEN_TAG shift 11 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 - T_PRINT_OPEN shift 43 - code shift 189 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + string shift 204 State 68: - body ::= body * code - code ::= * T_OPEN_TAG stmts - code ::= * T_HTML - code ::= * T_COMMENT_OPEN T_COMMENT - code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body * T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - - T_OPEN_TAG shift 10 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 - T_PRINT_OPEN shift 43 - code shift 189 - -State 69: - body ::= body * code - code ::= * T_OPEN_TAG stmts - code ::= * T_HTML - code ::= * T_COMMENT_OPEN T_COMMENT - code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body * T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - - T_OPEN_TAG shift 7 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 - T_PRINT_OPEN shift 43 - code shift 189 - -State 70: - body ::= body * code - code ::= * T_OPEN_TAG stmts - code ::= * T_HTML - code ::= * T_COMMENT_OPEN T_COMMENT - code ::= * T_PRINT_OPEN filtered_var T_PRINT_CLOSE - if_stmt ::= T_IF expr T_CLOSE_TAG body * T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= T_IF expr T_CLOSE_TAG body * T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - - T_OPEN_TAG shift 3 - T_HTML shift 232 - T_COMMENT_OPEN shift 137 - T_PRINT_OPEN shift 43 - code shift 189 - -State 71: - regroup ::= T_REGROUP filtered_var T_BY * varname T_AS varname + regroup ::= T_REGROUP filtered_var T_BY varname T_AS * varname varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 117 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 114 -State 72: - custom_tag ::= T_CUSTOM_TAG var_list T_AS * varname T_CLOSE_TAG +State 69: + for_def ::= T_FOR * varname T_IN filtered_var T_CLOSE_TAG + for_def ::= T_FOR * varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 112 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 102 -State 73: - regroup ::= T_REGROUP filtered_var T_BY varname T_AS * varname +State 70: + for_def ::= T_FOR varname T_COMMA * varname T_IN filtered_var T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 120 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 108 -State 74: +State 71: string ::= * T_INTL string T_RPARENT string ::= T_INTL * string T_RPARENT string ::= * T_STRING_SINGLE_INIT T_STRING_SINGLE_END @@ -2731,12 +2587,12 @@ State 74: string ::= * T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - string shift 155 + T_INTL shift 71 + T_STRING_SINGLE_INIT shift 77 + T_STRING_DOUBLE_INIT shift 78 + string shift 138 -State 75: +State 72: alias ::= T_WITH varname T_AS * varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA @@ -2744,28 +2600,25 @@ State 75: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 109 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 110 -State 76: - for_stmt ::= T_FOR * varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR * varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR * varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR * varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG +State 73: + custom_tag ::= T_CUSTOM_TAG var_list T_AS * varname T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 108 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 109 -State 77: +State 74: custom_tag ::= T_CUSTOM_TAG T_AS * varname T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA @@ -2773,26 +2626,25 @@ State 77: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 110 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 107 -State 78: - for_stmt ::= T_FOR varname T_COMMA * varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA * varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG +State 75: + regroup ::= T_REGROUP filtered_var T_BY * varname T_AS varname varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA varname ::= * varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 115 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 104 -State 79: +State 76: alias ::= T_WITH * varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG varname ::= * varname T_OBJ T_ALPHA varname ::= * varname T_DOT T_ALPHA @@ -2800,81 +2652,103 @@ State 79: varname ::= * T_ALPHA varname ::= * T_CUSTOM_TAG|T_CUSTOM_BLOCK - T_CUSTOM_TAG shift 172 - T_CUSTOM_BLOCK shift 172 - T_ALPHA shift 170 - varname shift 114 - -State 80: - stmt ::= T_LOAD * string - string ::= * T_INTL string T_RPARENT - string ::= * T_STRING_SINGLE_INIT T_STRING_SINGLE_END - string ::= * T_STRING_DOUBLE_INIT T_STRING_DOUBLE_END - string ::= * T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END - string ::= * T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END - - T_INTL shift 74 - T_STRING_SINGLE_INIT shift 81 - T_STRING_DOUBLE_INIT shift 82 - string shift 206 + T_CUSTOM_TAG shift 225 + T_CUSTOM_BLOCK shift 225 + T_ALPHA shift 218 + varname shift 105 -State 81: +State 77: string ::= T_STRING_SINGLE_INIT * T_STRING_SINGLE_END string ::= T_STRING_SINGLE_INIT * s_content T_STRING_SINGLE_END s_content ::= * s_content T_STRING_CONTENT s_content ::= * T_STRING_CONTENT - T_STRING_SINGLE_END shift 182 - T_STRING_CONTENT shift 195 - s_content shift 124 + T_STRING_SINGLE_END shift 213 + T_STRING_CONTENT shift 211 + s_content shift 122 -State 82: +State 78: string ::= T_STRING_DOUBLE_INIT * T_STRING_DOUBLE_END string ::= T_STRING_DOUBLE_INIT * s_content T_STRING_DOUBLE_END s_content ::= * s_content T_STRING_CONTENT s_content ::= * T_STRING_CONTENT - T_STRING_DOUBLE_END shift 200 - T_STRING_CONTENT shift 195 - s_content shift 127 + T_STRING_DOUBLE_END shift 207 + T_STRING_CONTENT shift 211 + s_content shift 120 + +State 79: + body ::= * body code + (2) body ::= * + if_stmt ::= T_IF expr T_CLOSE_TAG * body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + + body shift 65 + {default} reduce 2 + +State 80: + body ::= * body code + (2) body ::= * + block_stmt ::= T_BLOCK varname T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK varname T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG + + body shift 48 + {default} reduce 2 + +State 81: + body ::= * body code + (2) body ::= * + custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG * body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG + + body shift 50 + {default} reduce 2 + +State 82: + body ::= * body code + (2) body ::= * + stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG * body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG + + body shift 66 + {default} reduce 2 State 83: body ::= * body code (2) body ::= * - filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG * body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - body shift 68 + body shift 51 {default} reduce 2 State 84: body ::= * body code (2) body ::= * - if_stmt ::= T_IF expr T_CLOSE_TAG * body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - if_stmt ::= T_IF expr T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG * body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - body shift 70 + body shift 61 {default} reduce 2 State 85: body ::= * body code (2) body ::= * - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - body shift 50 + body shift 53 {default} reduce 2 State 86: body ::= * body code (2) body ::= * - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - body shift 48 + body shift 60 {default} reduce 2 State 87: body ::= * body code (2) body ::= * - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG * body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG body shift 64 {default} reduce 2 @@ -2882,7 +2756,8 @@ State 87: State 88: body ::= * body code (2) body ::= * - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG body shift 62 {default} reduce 2 @@ -2893,15 +2768,15 @@ State 89: ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG * body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - body shift 65 + body shift 56 {default} reduce 2 State 90: body ::= * body code (2) body ::= * - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - body shift 63 + body shift 57 {default} reduce 2 State 91: @@ -2910,104 +2785,51 @@ State 91: ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG * body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - body shift 60 + body shift 47 {default} reduce 2 State 92: body ::= * body code (2) body ::= * - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG * body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG * body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - body shift 61 + body shift 63 {default} reduce 2 State 93: body ::= * body code (2) body ::= * - block_stmt ::= T_BLOCK varname T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK varname T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - body shift 58 + body shift 49 {default} reduce 2 State 94: body ::= * body code (2) body ::= * - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + for_stmt ::= for_def * body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def * body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - body shift 57 + body shift 54 {default} reduce 2 State 95: body ::= * body code (2) body ::= * - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG * body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG * body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - body shift 54 + body shift 58 {default} reduce 2 State 96: body ::= * body code (2) body ::= * - custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG * body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG - - body shift 49 - {default} reduce 2 - -State 97: - body ::= * body code - (2) body ::= * - stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG * body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG - - body shift 66 - {default} reduce 2 - -State 98: - body ::= * body code - (2) body ::= * - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - - body shift 53 - {default} reduce 2 - -State 99: - body ::= * body code - (2) body ::= * - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG * body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG * body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - - body shift 69 - {default} reduce 2 - -State 100: - body ::= * body code - (2) body ::= * - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG * body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - - body shift 67 - {default} reduce 2 - -State 101: - body ::= * body code - (2) body ::= * - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG * body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG * body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - - body shift 52 - {default} reduce 2 - -State 102: - body ::= * body code - (2) body ::= * alias ::= T_WITH varname T_AS varname T_CLOSE_TAG * body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG - body shift 55 + body shift 52 {default} reduce 2 -State 103: +State 97: expr ::= expr * T_AND expr expr ::= expr * T_OR expr expr ::= expr * T_PLUS|T_MINUS expr @@ -3015,8 +2837,8 @@ State 103: expr ::= expr * T_TIMES|T_DIV|T_MOD expr expr ::= T_LPARENT expr * T_RPARENT - T_AND shift 23 - T_OR shift 24 + T_AND shift 24 + T_OR shift 26 T_EQ shift 22 T_NE shift 22 T_GT shift 22 @@ -3024,14 +2846,14 @@ State 103: T_LT shift 22 T_LE shift 22 T_IN shift 22 - T_PLUS shift 25 - T_MINUS shift 25 - T_TIMES shift 27 - T_DIV shift 27 - T_MOD shift 27 - T_RPARENT shift 197 + T_PLUS shift 23 + T_MINUS shift 23 + T_TIMES shift 21 + T_DIV shift 21 + T_MOD shift 21 + T_RPARENT shift 167 -State 104: +State 98: if_stmt ::= T_IF expr * T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG if_stmt ::= T_IF expr * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG expr ::= expr * T_AND expr @@ -3040,8 +2862,8 @@ State 104: expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= expr * T_TIMES|T_DIV|T_MOD expr - T_AND shift 23 - T_OR shift 24 + T_AND shift 24 + T_OR shift 26 T_EQ shift 22 T_NE shift 22 T_GT shift 22 @@ -3049,14 +2871,14 @@ State 104: T_LT shift 22 T_LE shift 22 T_IN shift 22 - T_PLUS shift 25 - T_MINUS shift 25 - T_TIMES shift 27 - T_DIV shift 27 - T_MOD shift 27 - T_CLOSE_TAG shift 84 + T_PLUS shift 23 + T_MINUS shift 23 + T_TIMES shift 21 + T_DIV shift 21 + T_MOD shift 21 + T_CLOSE_TAG shift 79 -State 105: +State 99: expr ::= expr * T_AND expr (67) expr ::= expr T_AND expr * expr ::= expr * T_OR expr @@ -3064,7 +2886,7 @@ State 105: expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= expr * T_TIMES|T_DIV|T_MOD expr - T_OR shift 24 + T_OR shift 26 T_EQ shift 22 T_NE shift 22 T_GT shift 22 @@ -3072,189 +2894,186 @@ State 105: T_LT shift 22 T_LE shift 22 T_IN shift 22 - T_PLUS shift 25 - T_MINUS shift 25 - T_TIMES shift 27 - T_DIV shift 27 - T_MOD shift 27 + T_PLUS shift 23 + T_MINUS shift 23 + T_TIMES shift 21 + T_DIV shift 21 + T_MOD shift 21 {default} reduce 67 -State 106: +State 100: expr ::= expr * T_AND expr expr ::= expr * T_OR expr - (68) expr ::= expr T_OR expr * expr ::= expr * T_PLUS|T_MINUS expr expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr + (70) expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr * expr ::= expr * T_TIMES|T_DIV|T_MOD expr T_EQ shift 22 + T_EQ reduce 70 ** Parsing conflict ** T_NE shift 22 + T_NE reduce 70 ** Parsing conflict ** T_GT shift 22 T_GE shift 22 T_LT shift 22 T_LE shift 22 T_IN shift 22 - T_PLUS shift 25 - T_MINUS shift 25 - T_TIMES shift 27 - T_DIV shift 27 - T_MOD shift 27 - {default} reduce 68 + T_PLUS shift 23 + T_MINUS shift 23 + T_TIMES shift 21 + T_DIV shift 21 + T_MOD shift 21 + {default} reduce 70 -State 107: +State 101: expr ::= expr * T_AND expr expr ::= expr * T_OR expr + (68) expr ::= expr T_OR expr * expr ::= expr * T_PLUS|T_MINUS expr expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr - (70) expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr * expr ::= expr * T_TIMES|T_DIV|T_MOD expr T_EQ shift 22 - T_EQ reduce 70 ** Parsing conflict ** T_NE shift 22 - T_NE reduce 70 ** Parsing conflict ** T_GT shift 22 T_GE shift 22 T_LT shift 22 T_LE shift 22 T_IN shift 22 - T_PLUS shift 25 - T_MINUS shift 25 - T_TIMES shift 27 - T_DIV shift 27 - T_MOD shift 27 - {default} reduce 70 + T_PLUS shift 23 + T_MINUS shift 23 + T_TIMES shift 21 + T_DIV shift 21 + T_MOD shift 21 + {default} reduce 68 -State 108: - for_stmt ::= T_FOR varname * T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname * T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname * T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname * T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG +State 102: + for_def ::= T_FOR varname * T_IN filtered_var T_CLOSE_TAG + for_def ::= T_FOR varname * T_COMMA varname T_IN filtered_var T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_IN shift 45 - T_COMMA shift 78 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_IN shift 41 + T_COMMA shift 70 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 109: - alias ::= T_WITH varname T_AS varname * T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG +State 103: + block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname * T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_CLOSE_TAG shift 102 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_CLOSE_TAG shift 215 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 110: - custom_tag ::= T_CUSTOM_TAG T_AS varname * T_CLOSE_TAG +State 104: + regroup ::= T_REGROUP filtered_var T_BY varname * T_AS varname varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_CLOSE_TAG shift 223 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_AS shift 68 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 111: - varname_args ::= varname * T_COLON var_or_string - (50) varname_args ::= varname * +State 105: + alias ::= T_WITH varname * T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_COLON shift 40 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 - {default} reduce 50 + T_AS shift 72 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 112: - custom_tag ::= T_CUSTOM_TAG var_list T_AS varname * T_CLOSE_TAG +State 106: + block_stmt ::= T_BLOCK varname * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK varname * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_CLOSE_TAG shift 230 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_CLOSE_TAG shift 80 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 113: - block_stmt ::= T_BLOCK varname * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK varname * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG +State 107: + custom_tag ::= T_CUSTOM_TAG T_AS varname * T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_CLOSE_TAG shift 93 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_CLOSE_TAG shift 194 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 114: - alias ::= T_WITH varname * T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG +State 108: + for_def ::= T_FOR varname T_COMMA varname * T_IN filtered_var T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_AS shift 75 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_IN shift 42 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 115: - for_stmt ::= T_FOR varname T_COMMA varname * T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname * T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG +State 109: + custom_tag ::= T_CUSTOM_TAG var_list T_AS varname * T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_IN shift 46 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_CLOSE_TAG shift 195 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 116: - block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname * T_CLOSE_TAG +State 110: + alias ::= T_WITH varname T_AS varname * T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_CLOSE_TAG shift 210 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_CLOSE_TAG shift 96 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 -State 117: - regroup ::= T_REGROUP filtered_var T_BY varname * T_AS varname +State 111: + varname_args ::= varname * T_COLON var_or_string + (50) varname_args ::= varname * varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_AS shift 73 - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_COLON shift 37 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 + {default} reduce 50 -State 118: +State 112: (54) var_or_string ::= varname * varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 {default} reduce 54 -State 119: +State 113: expr ::= expr * T_AND expr expr ::= expr * T_OR expr expr ::= expr * T_PLUS|T_MINUS expr @@ -3262,345 +3081,378 @@ State 119: expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr expr ::= expr * T_TIMES|T_DIV|T_MOD expr - T_TIMES shift 27 - T_DIV shift 27 - T_MOD shift 27 + T_TIMES shift 21 + T_DIV shift 21 + T_MOD shift 21 {default} reduce 69 -State 120: +State 114: (46) regroup ::= T_REGROUP filtered_var T_BY varname T_AS varname * varname ::= varname * T_OBJ T_ALPHA varname ::= varname * T_DOT T_ALPHA varname ::= varname * T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE - T_OBJ shift 167 - T_DOT shift 148 - T_BRACKETS_OPEN shift 39 + T_OBJ shift 152 + T_DOT shift 143 + T_BRACKETS_OPEN shift 36 {default} reduce 46 -State 121: - code ::= T_PRINT_OPEN filtered_var * T_PRINT_CLOSE +State 115: + filter_stmt ::= T_FILTER filtered_var * T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG filtered_var ::= filtered_var * T_PIPE varname_args - T_PRINT_CLOSE shift 236 - T_PIPE shift 47 + T_CLOSE_TAG shift 95 + T_PIPE shift 45 -State 122: +State 116: stmts ::= T_AUTOESCAPE * T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG - T_OFF shift 157 - T_ON shift 157 + T_OFF shift 145 + T_ON shift 145 -State 123: +State 117: + code ::= T_PRINT_OPEN filtered_var * T_PRINT_CLOSE + filtered_var ::= filtered_var * T_PIPE varname_args + + T_PRINT_CLOSE shift 173 + T_PIPE shift 45 + +State 118: regroup ::= T_REGROUP filtered_var * T_BY varname T_AS varname filtered_var ::= filtered_var * T_PIPE varname_args - T_BY shift 71 - T_PIPE shift 47 + T_BY shift 75 + T_PIPE shift 45 -State 124: +State 119: + for_def ::= T_FOR varname T_COMMA varname T_IN filtered_var * T_CLOSE_TAG + filtered_var ::= filtered_var * T_PIPE varname_args + + T_CLOSE_TAG shift 185 + T_PIPE shift 45 + +State 120: + string ::= T_STRING_DOUBLE_INIT s_content * T_STRING_DOUBLE_END + s_content ::= s_content * T_STRING_CONTENT + + T_STRING_DOUBLE_END shift 209 + T_STRING_CONTENT shift 212 + +State 121: + for_def ::= T_FOR varname T_IN filtered_var * T_CLOSE_TAG + filtered_var ::= filtered_var * T_PIPE varname_args + + T_CLOSE_TAG shift 203 + T_PIPE shift 45 + +State 122: string ::= T_STRING_SINGLE_INIT s_content * T_STRING_SINGLE_END s_content ::= s_content * T_STRING_CONTENT - T_STRING_SINGLE_END shift 196 - T_STRING_CONTENT shift 193 + T_STRING_SINGLE_END shift 214 + T_STRING_CONTENT shift 212 -State 125: +State 123: block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK * T_CLOSE_TAG block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK * T_NUMERIC T_CLOSE_TAG - T_CLOSE_TAG shift 221 - T_NUMERIC shift 131 + T_CLOSE_TAG shift 162 + T_NUMERIC shift 125 + +State 124: + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + + T_CLOSE_TAG shift 93 + +State 125: + block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC * T_CLOSE_TAG + + T_CLOSE_TAG shift 166 State 126: - filter_stmt ::= T_FILTER filtered_var * T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG - filtered_var ::= filtered_var * T_PIPE varname_args + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL * T_CLOSE_TAG - T_CLOSE_TAG shift 83 - T_PIPE shift 47 + T_CLOSE_TAG shift 226 State 127: - string ::= T_STRING_DOUBLE_INIT s_content * T_STRING_DOUBLE_END - s_content ::= s_content * T_STRING_CONTENT + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL * T_CLOSE_TAG - T_STRING_DOUBLE_END shift 178 - T_STRING_CONTENT shift 193 + T_CLOSE_TAG shift 228 State 128: - for_stmt ::= T_FOR varname T_IN filtered_var * T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_IN filtered_var * T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - filtered_var ::= filtered_var * T_PIPE varname_args + stmts ::= stmt * T_CLOSE_TAG - T_CLOSE_TAG shift 101 - T_PIPE shift 47 + T_CLOSE_TAG shift 181 State 129: - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var * T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var * T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - filtered_var ::= filtered_var * T_PIPE varname_args + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL * T_CLOSE_TAG - T_CLOSE_TAG shift 92 - T_PIPE shift 47 + T_CLOSE_TAG shift 208 State 130: - filtered_var ::= filtered_var * T_PIPE varname_args - (57) fvar_or_string ::= filtered_var * + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - T_PIPE shift 47 - {default} reduce 57 + T_CLOSE_TAG shift 91 State 131: - block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC * T_CLOSE_TAG + code ::= T_COMMENT_OPEN * T_COMMENT - T_CLOSE_TAG shift 224 + T_COMMENT shift 178 State 132: - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL * T_CLOSE_TAG + filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER * T_CLOSE_TAG - T_CLOSE_TAG shift 214 + T_CLOSE_TAG shift 229 State 133: ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - T_CLOSE_TAG shift 88 + T_CLOSE_TAG shift 83 State 134: - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR * T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL * T_CLOSE_TAG - T_CLOSE_TAG shift 188 + T_CLOSE_TAG shift 210 State 135: - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - T_CLOSE_TAG shift 179 + T_CLOSE_TAG shift 89 State 136: - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG + block_stmt ::= T_BLOCK T_NUMERIC * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG - T_CLOSE_TAG shift 98 + T_CLOSE_TAG shift 86 State 137: - code ::= T_COMMENT_OPEN * T_COMMENT + varname ::= varname T_BRACKETS_OPEN var_or_string * T_BRACKETS_CLOSE - T_COMMENT shift 234 + T_BRACKETS_CLOSE shift 217 State 138: - filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER * T_CLOSE_TAG + string ::= T_INTL string * T_RPARENT - T_CLOSE_TAG shift 202 + T_RPARENT shift 179 State 139: - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR * T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF * T_CLOSE_TAG - T_CLOSE_TAG shift 186 + T_CLOSE_TAG shift 191 State 140: - ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG + stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE * T_CLOSE_TAG - T_CLOSE_TAG shift 176 + T_CLOSE_TAG shift 183 State 141: - for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY * T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG T_EMPTY * T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG - T_CLOSE_TAG shift 87 + T_CLOSE_TAG shift 84 State 142: - block_stmt ::= T_BLOCK T_NUMERIC * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG - block_stmt ::= T_BLOCK T_NUMERIC * T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG + filtered_var ::= filtered_var * T_PIPE varname_args + (57) fvar_or_string ::= filtered_var * - T_CLOSE_TAG shift 100 + T_PIPE shift 45 + {default} reduce 57 State 143: - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL * T_CLOSE_TAG + varname ::= varname T_DOT * T_ALPHA - T_CLOSE_TAG shift 215 + T_ALPHA shift 172 State 144: - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF * T_CLOSE_TAG - T_CLOSE_TAG shift 86 + T_CLOSE_TAG shift 188 State 145: - custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END * T_CLOSE_TAG + stmts ::= T_AUTOESCAPE T_OFF|T_ON * T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG - T_CLOSE_TAG shift 207 + T_CLOSE_TAG shift 82 State 146: - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF * T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG - T_CLOSE_TAG shift 204 + T_CLOSE_TAG shift 177 State 147: - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG T_CLOSEFOR * T_CLOSE_TAG - T_CLOSE_TAG shift 85 + T_CLOSE_TAG shift 182 State 148: - varname ::= varname T_DOT * T_ALPHA + custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END * T_CLOSE_TAG - T_ALPHA shift 184 + T_CLOSE_TAG shift 196 State 149: - if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF * T_CLOSE_TAG + custom_tag ::= T_CUSTOM_BLOCK * T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG - T_CLOSE_TAG shift 217 + T_CLOSE_TAG shift 81 State 150: - stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE * T_CLOSE_TAG + alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH * T_CLOSE_TAG - T_CLOSE_TAG shift 201 + T_CLOSE_TAG shift 199 State 151: - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR * T_CLOSE_TAG + stmts ::= T_EXTENDS var_or_string * T_CLOSE_TAG - T_CLOSE_TAG shift 203 + T_CLOSE_TAG shift 169 State 152: - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG - ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG + varname ::= varname T_OBJ * T_ALPHA - T_CLOSE_TAG shift 89 + T_ALPHA shift 176 State 153: - stmts ::= stmt * T_CLOSE_TAG + if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG - T_CLOSE_TAG shift 181 + T_CLOSE_TAG shift 90 State 154: - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR * T_CLOSE_TAG + for_stmt ::= for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR * T_CLOSE_TAG - T_CLOSE_TAG shift 205 + T_CLOSE_TAG shift 187 State 155: - string ::= T_INTL string * T_RPARENT + stmts ::= T_INCLUDE var_or_string * T_CLOSE_TAG - T_RPARENT shift 192 + T_CLOSE_TAG shift 205 State 156: - for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY * T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - T_CLOSE_TAG shift 95 + T_CLOSE_TAG shift 85 State 157: - stmts ::= T_AUTOESCAPE T_OFF|T_ON * T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG - T_CLOSE_TAG shift 97 + T_CLOSE_TAG shift 221 State 158: - custom_tag ::= T_CUSTOM_BLOCK * T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG - T_CLOSE_TAG shift 96 + T_CLOSE_TAG shift 174 State 159: - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE * T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG - T_CLOSE_TAG shift 90 + T_CLOSE_TAG shift 92 State 160: - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL * T_CLOSE_TAG + ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG - T_CLOSE_TAG shift 212 + T_CLOSE_TAG shift 206 State 161: - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL * T_CLOSE_TAG + (3) code ::= T_OPEN_TAG stmts * - T_CLOSE_TAG shift 213 + {default} reduce 3 State 162: - varname ::= varname T_BRACKETS_OPEN var_or_string * T_BRACKETS_CLOSE + (43) block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG * - T_BRACKETS_CLOSE shift 171 + {default} reduce 43 State 163: - stmts ::= T_INCLUDE var_or_string * T_CLOSE_TAG + expr ::= expr * T_AND expr + expr ::= expr * T_OR expr + expr ::= expr * T_PLUS|T_MINUS expr + expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr + expr ::= expr * T_TIMES|T_DIV|T_MOD expr + (71) expr ::= expr T_TIMES|T_DIV|T_MOD expr * - T_CLOSE_TAG shift 198 + {default} reduce 71 State 164: - alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH * T_CLOSE_TAG + (1) body ::= body code * - T_CLOSE_TAG shift 208 + {default} reduce 1 State 165: - stmts ::= T_EXTENDS var_or_string * T_CLOSE_TAG + (73) expr ::= fvar_or_string * - T_CLOSE_TAG shift 187 + {default} reduce 73 State 166: - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG - ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string * T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG + (44) block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG * - T_CLOSE_TAG shift 91 + {default} reduce 44 State 167: - varname ::= varname T_OBJ * T_ALPHA + (72) expr ::= T_LPARENT expr T_RPARENT * - T_ALPHA shift 183 + {default} reduce 72 State 168: - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG + (58) fvar_or_string ::= T_NUMERIC * - T_CLOSE_TAG shift 218 + {default} reduce 58 State 169: - ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED * T_CLOSE_TAG + (7) stmts ::= T_EXTENDS var_or_string T_CLOSE_TAG * - T_CLOSE_TAG shift 216 + {default} reduce 7 State 170: - (77) varname ::= T_ALPHA * + (59) fvar_or_string ::= string * - {default} reduce 77 + {default} reduce 59 State 171: - (76) varname ::= varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE * + (56) var_or_string ::= string * - {default} reduce 76 + {default} reduce 56 State 172: - (78) varname ::= T_CUSTOM_TAG|T_CUSTOM_BLOCK * + (75) varname ::= varname T_DOT T_ALPHA * - {default} reduce 78 + {default} reduce 75 State 173: - (10) stmts ::= ifchanged_stmt * + (6) code ::= T_PRINT_OPEN filtered_var T_PRINT_CLOSE * - {default} reduce 10 + {default} reduce 6 State 174: - (12) stmts ::= filter_stmt * + (34) ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * - {default} reduce 12 + {default} reduce 34 State 175: - (13) stmts ::= if_stmt * + (55) var_or_string ::= T_NUMERIC * - {default} reduce 13 + {default} reduce 55 State 176: - (34) ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * + (74) varname ::= varname T_OBJ T_ALPHA * - {default} reduce 34 + {default} reduce 74 State 177: - (11) stmts ::= block_stmt * + (36) ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * - {default} reduce 11 + {default} reduce 36 State 178: - (64) string ::= T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END * + (5) code ::= T_COMMENT_OPEN T_COMMENT * - {default} reduce 64 + {default} reduce 5 State 179: - (36) ifchanged_stmt ::= T_IFCHANGED var_list T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * + (60) string ::= T_INTL string T_RPARENT * - {default} reduce 36 + {default} reduce 60 State 180: - (9) stmts ::= for_stmt * + (4) code ::= T_HTML * - {default} reduce 9 + {default} reduce 4 State 181: (8) stmts ::= stmt T_CLOSE_TAG * @@ -3608,292 +3460,242 @@ State 181: {default} reduce 8 State 182: - (61) string ::= T_STRING_SINGLE_INIT T_STRING_SINGLE_END * + (29) for_stmt ::= for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG * - {default} reduce 61 + {default} reduce 29 State 183: - (74) varname ::= varname T_OBJ T_ALPHA * + (18) stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG * - {default} reduce 74 + {default} reduce 18 State 184: - (75) varname ::= varname T_DOT T_ALPHA * + (19) custom_tag ::= T_CUSTOM_TAG T_CLOSE_TAG * - {default} reduce 75 + {default} reduce 19 State 185: - (55) var_or_string ::= T_NUMERIC * + (28) for_def ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG * - {default} reduce 55 + {default} reduce 28 State 186: - (28) for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG * + (48) filtered_var ::= varname_args * - {default} reduce 28 + {default} reduce 48 State 187: - (7) stmts ::= T_EXTENDS var_or_string T_CLOSE_TAG * + (30) for_stmt ::= for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG * - {default} reduce 7 + {default} reduce 30 State 188: - (30) for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG * + (31) if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG * - {default} reduce 30 + {default} reduce 31 State 189: - (1) body ::= body code * + (15) stmts ::= custom_tag * - {default} reduce 1 + {default} reduce 15 State 190: - (3) code ::= T_OPEN_TAG stmts * + (16) stmts ::= alias * - {default} reduce 3 + {default} reduce 16 State 191: - (56) var_or_string ::= string * + (32) if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG * - {default} reduce 56 + {default} reduce 32 State 192: - (60) string ::= T_INTL string T_RPARENT * + (17) stmts ::= ifequal * - {default} reduce 60 + {default} reduce 17 State 193: - (65) s_content ::= s_content T_STRING_CONTENT * + (49) varname_args ::= varname T_COLON var_or_string * - {default} reduce 65 + {default} reduce 49 State 194: - expr ::= expr * T_AND expr - expr ::= expr * T_OR expr - expr ::= expr * T_PLUS|T_MINUS expr - expr ::= expr * T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr - expr ::= expr * T_TIMES|T_DIV|T_MOD expr - (71) expr ::= expr T_TIMES|T_DIV|T_MOD expr * + (20) custom_tag ::= T_CUSTOM_TAG T_AS varname T_CLOSE_TAG * - {default} reduce 71 + {default} reduce 20 State 195: - (66) s_content ::= T_STRING_CONTENT * + (22) custom_tag ::= T_CUSTOM_TAG var_list T_AS varname T_CLOSE_TAG * - {default} reduce 66 + {default} reduce 22 State 196: - (63) string ::= T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END * + (23) custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG * - {default} reduce 63 + {default} reduce 23 State 197: - (72) expr ::= T_LPARENT expr T_RPARENT * + (51) var_list ::= var_list var_or_string * - {default} reduce 72 + {default} reduce 51 State 198: - (14) stmts ::= T_INCLUDE var_or_string T_CLOSE_TAG * + (52) var_list ::= var_list T_COMMA var_or_string * - {default} reduce 14 + {default} reduce 52 State 199: - (73) expr ::= fvar_or_string * + (24) alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG * - {default} reduce 73 + {default} reduce 24 State 200: - (62) string ::= T_STRING_DOUBLE_INIT T_STRING_DOUBLE_END * + (25) stmt ::= regroup * - {default} reduce 62 + {default} reduce 25 State 201: - (18) stmts ::= T_AUTOESCAPE T_OFF|T_ON T_CLOSE_TAG body T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG * + (47) filtered_var ::= filtered_var T_PIPE varname_args * - {default} reduce 18 + {default} reduce 47 State 202: - (45) filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG * + (21) custom_tag ::= T_CUSTOM_TAG var_list T_CLOSE_TAG * - {default} reduce 45 + {default} reduce 21 State 203: - (29) for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG * + (27) for_def ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG * - {default} reduce 29 + {default} reduce 27 State 204: - (31) if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG * + (26) stmt ::= T_LOAD string * - {default} reduce 31 + {default} reduce 26 State 205: - (27) for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG * + (14) stmts ::= T_INCLUDE var_or_string T_CLOSE_TAG * - {default} reduce 27 + {default} reduce 14 State 206: - (26) stmt ::= T_LOAD string * + (33) ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * - {default} reduce 26 + {default} reduce 33 State 207: - (23) custom_tag ::= T_CUSTOM_BLOCK T_CLOSE_TAG body T_OPEN_TAG T_CUSTOM_END T_CLOSE_TAG * + (62) string ::= T_STRING_DOUBLE_INIT T_STRING_DOUBLE_END * - {default} reduce 23 + {default} reduce 62 State 208: - (24) alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG * + (40) ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG * - {default} reduce 24 + {default} reduce 40 State 209: - (25) stmt ::= regroup * + (64) string ::= T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END * - {default} reduce 25 + {default} reduce 64 State 210: - (42) block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG * + (39) ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG * - {default} reduce 42 + {default} reduce 39 State 211: - (41) block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG * + (66) s_content ::= T_STRING_CONTENT * - {default} reduce 41 + {default} reduce 66 State 212: - (37) ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG * + (65) s_content ::= s_content T_STRING_CONTENT * - {default} reduce 37 + {default} reduce 65 State 213: - (38) ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG * + (61) string ::= T_STRING_SINGLE_INIT T_STRING_SINGLE_END * - {default} reduce 38 + {default} reduce 61 State 214: - (39) ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG * + (63) string ::= T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END * - {default} reduce 39 + {default} reduce 63 State 215: - (40) ifequal ::= T_IFNOTEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFNOTEQUAL T_CLOSE_TAG * + (42) block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG * - {default} reduce 40 + {default} reduce 42 State 216: - (35) ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * + (41) block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG * - {default} reduce 35 + {default} reduce 41 State 217: - (32) if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG * + (76) varname ::= varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE * - {default} reduce 32 + {default} reduce 76 State 218: - (33) ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * + (77) varname ::= T_ALPHA * - {default} reduce 33 + {default} reduce 77 State 219: - (47) filtered_var ::= filtered_var T_PIPE varname_args * + (11) stmts ::= block_stmt * - {default} reduce 47 + {default} reduce 11 State 220: - (49) varname_args ::= varname T_COLON var_or_string * + (12) stmts ::= filter_stmt * - {default} reduce 49 + {default} reduce 12 State 221: - (43) block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG * + (35) ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG * - {default} reduce 43 + {default} reduce 35 State 222: - (19) custom_tag ::= T_CUSTOM_TAG T_CLOSE_TAG * + (13) stmts ::= if_stmt * - {default} reduce 19 + {default} reduce 13 State 223: - (20) custom_tag ::= T_CUSTOM_TAG T_AS varname T_CLOSE_TAG * + (10) stmts ::= ifchanged_stmt * - {default} reduce 20 + {default} reduce 10 State 224: - (44) block_stmt ::= T_BLOCK T_NUMERIC T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_NUMERIC T_CLOSE_TAG * + (9) stmts ::= for_stmt * - {default} reduce 44 + {default} reduce 9 State 225: - (58) fvar_or_string ::= T_NUMERIC * + (78) varname ::= T_CUSTOM_TAG|T_CUSTOM_BLOCK * - {default} reduce 58 + {default} reduce 78 State 226: - (16) stmts ::= alias * + (38) ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG * - {default} reduce 16 + {default} reduce 38 State 227: - (17) stmts ::= ifequal * - - {default} reduce 17 - -State 228: - (59) fvar_or_string ::= string * - - {default} reduce 59 - -State 229: - (21) custom_tag ::= T_CUSTOM_TAG var_list T_CLOSE_TAG * - - {default} reduce 21 - -State 230: - (22) custom_tag ::= T_CUSTOM_TAG var_list T_AS varname T_CLOSE_TAG * - - {default} reduce 22 - -State 231: (53) var_list ::= var_or_string * {default} reduce 53 -State 232: - (4) code ::= T_HTML * - - {default} reduce 4 - -State 233: - (48) filtered_var ::= varname_args * - - {default} reduce 48 - -State 234: - (5) code ::= T_COMMENT_OPEN T_COMMENT * - - {default} reduce 5 - -State 235: - (52) var_list ::= var_list T_COMMA var_or_string * - - {default} reduce 52 - -State 236: - (6) code ::= T_PRINT_OPEN filtered_var T_PRINT_CLOSE * - - {default} reduce 6 - -State 237: - (51) var_list ::= var_list var_or_string * +State 228: + (37) ifequal ::= T_IFEQUAL fvar_or_string fvar_or_string T_CLOSE_TAG body T_OPEN_TAG T_END_IFEQUAL T_CLOSE_TAG * - {default} reduce 51 + {default} reduce 37 -State 238: - (15) stmts ::= custom_tag * +State 229: + (45) filter_stmt ::= T_FILTER filtered_var T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG * - {default} reduce 15 + {default} reduce 45 diff --git a/lib/Haanga/Compiler/Parser.php b/lib/Haanga/Compiler/Parser.php index 0c88684..acf9352 100644 --- a/lib/Haanga/Compiler/Parser.php +++ b/lib/Haanga/Compiler/Parser.php @@ -188,8 +188,8 @@ class Haanga_yyStackEntry const T_ENDWITH = 33; const T_LOAD = 34; const T_FOR = 35; - const T_CLOSEFOR = 36; - const T_COMMA = 37; + const T_COMMA = 36; + const T_CLOSEFOR = 37; const T_EMPTY = 38; const T_IF = 39; const T_ENDIF = 40; @@ -222,9 +222,9 @@ class Haanga_yyStackEntry const T_DOT = 67; const T_BRACKETS_OPEN = 68; const T_BRACKETS_CLOSE = 69; - const YY_NO_ACTION = 320; - const YY_ACCEPT_ACTION = 319; - const YY_ERROR_ACTION = 318; + const YY_NO_ACTION = 311; + const YY_ACCEPT_ACTION = 310; + const YY_ERROR_ACTION = 309; /* Next are that tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement @@ -276,295 +276,288 @@ class Haanga_yyStackEntry ** shifting non-terminals after a reduce. ** self::$yy_default Default action for each state. */ - const YY_SZ_ACTTAB = 944; + const YY_SZ_ACTTAB = 913; static public $yy_action = array( - /* 0 */ 41, 52, 38, 122, 74, 129, 81, 33, 82, 158, - /* 10 */ 205, 79, 182, 80, 76, 195, 111, 172, 28, 172, - /* 20 */ 159, 34, 233, 31, 160, 29, 167, 51, 148, 39, - /* 30 */ 42, 41, 44, 38, 122, 27, 27, 27, 33, 225, - /* 40 */ 158, 101, 79, 236, 80, 76, 74, 186, 81, 28, - /* 50 */ 82, 136, 34, 140, 31, 170, 29, 231, 51, 200, - /* 60 */ 195, 42, 41, 44, 38, 122, 21, 118, 36, 33, - /* 70 */ 191, 158, 83, 79, 47, 80, 76, 139, 47, 141, - /* 80 */ 28, 232, 137, 34, 43, 31, 55, 29, 231, 51, - /* 90 */ 71, 47, 42, 41, 44, 38, 122, 5, 118, 35, - /* 100 */ 33, 191, 158, 92, 79, 47, 80, 76, 154, 165, - /* 110 */ 156, 28, 232, 137, 34, 43, 31, 212, 29, 118, - /* 120 */ 51, 91, 191, 42, 41, 44, 38, 122, 111, 196, - /* 130 */ 202, 33, 193, 158, 219, 79, 47, 80, 76, 172, - /* 140 */ 220, 172, 28, 146, 147, 34, 67, 31, 53, 29, - /* 150 */ 118, 51, 90, 191, 42, 41, 44, 38, 122, 319, - /* 160 */ 59, 142, 33, 221, 158, 188, 79, 183, 80, 76, - /* 170 */ 157, 157, 172, 28, 172, 133, 34, 170, 31, 69, - /* 180 */ 29, 132, 51, 178, 193, 42, 41, 44, 38, 122, - /* 190 */ 66, 131, 181, 33, 185, 158, 87, 79, 75, 80, - /* 200 */ 76, 74, 162, 81, 28, 82, 144, 34, 168, 31, - /* 210 */ 170, 29, 118, 51, 176, 191, 42, 41, 44, 38, - /* 220 */ 122, 208, 213, 97, 33, 216, 158, 224, 79, 198, - /* 230 */ 80, 76, 49, 235, 167, 28, 148, 39, 34, 169, - /* 240 */ 31, 45, 29, 118, 51, 179, 191, 42, 41, 44, - /* 250 */ 38, 122, 88, 171, 234, 33, 95, 158, 145, 79, - /* 260 */ 217, 80, 76, 214, 211, 40, 28, 98, 78, 34, - /* 270 */ 172, 31, 172, 29, 167, 51, 148, 39, 42, 41, - /* 280 */ 44, 38, 122, 192, 187, 218, 33, 172, 158, 172, - /* 290 */ 79, 164, 80, 76, 89, 189, 167, 28, 148, 39, - /* 300 */ 34, 120, 31, 112, 29, 163, 51, 117, 170, 42, - /* 310 */ 41, 44, 38, 122, 12, 118, 63, 33, 191, 158, - /* 320 */ 86, 79, 155, 80, 76, 170, 113, 203, 28, 232, - /* 330 */ 137, 34, 43, 31, 108, 29, 143, 51, 109, 116, - /* 340 */ 42, 41, 44, 38, 122, 20, 110, 150, 33, 65, - /* 350 */ 158, 115, 79, 62, 80, 76, 207, 60, 61, 28, - /* 360 */ 232, 137, 34, 43, 31, 100, 29, 126, 51, 54, - /* 370 */ 215, 42, 41, 44, 38, 122, 15, 184, 111, 33, - /* 380 */ 57, 158, 58, 79, 233, 80, 76, 134, 237, 64, - /* 390 */ 28, 232, 137, 34, 43, 31, 68, 29, 118, 51, - /* 400 */ 127, 191, 42, 41, 44, 38, 122, 4, 93, 124, - /* 410 */ 33, 114, 158, 96, 79, 206, 80, 76, 70, 48, - /* 420 */ 204, 28, 232, 137, 34, 43, 31, 201, 29, 50, - /* 430 */ 51, 125, 85, 42, 41, 44, 38, 122, 47, 175, - /* 440 */ 175, 33, 175, 158, 175, 79, 175, 80, 76, 175, - /* 450 */ 175, 167, 28, 148, 39, 34, 135, 31, 175, 29, - /* 460 */ 128, 51, 175, 175, 42, 41, 44, 38, 122, 2, - /* 470 */ 175, 111, 33, 175, 158, 175, 79, 233, 80, 76, - /* 480 */ 175, 175, 175, 28, 232, 137, 34, 43, 31, 175, - /* 490 */ 29, 175, 51, 56, 175, 42, 41, 44, 38, 122, - /* 500 */ 175, 123, 175, 33, 175, 158, 175, 79, 175, 80, - /* 510 */ 76, 175, 111, 175, 28, 149, 175, 34, 233, 31, - /* 520 */ 175, 29, 175, 51, 175, 175, 42, 41, 44, 38, - /* 530 */ 122, 175, 121, 175, 33, 175, 158, 175, 79, 175, - /* 540 */ 80, 76, 175, 111, 172, 28, 172, 175, 34, 233, - /* 550 */ 31, 161, 29, 175, 51, 175, 175, 42, 41, 44, - /* 560 */ 38, 122, 46, 175, 175, 33, 225, 158, 175, 79, - /* 570 */ 175, 80, 76, 74, 175, 81, 28, 82, 175, 34, - /* 580 */ 26, 31, 170, 29, 175, 51, 175, 175, 42, 138, - /* 590 */ 44, 41, 9, 38, 122, 175, 175, 175, 33, 175, - /* 600 */ 158, 175, 79, 175, 80, 76, 151, 232, 137, 28, - /* 610 */ 43, 175, 34, 175, 31, 175, 29, 167, 51, 148, - /* 620 */ 39, 42, 41, 44, 38, 122, 3, 210, 175, 33, - /* 630 */ 175, 158, 175, 79, 175, 80, 76, 175, 73, 175, - /* 640 */ 28, 232, 137, 34, 43, 31, 175, 29, 175, 51, - /* 650 */ 175, 175, 42, 175, 44, 23, 24, 22, 22, 22, - /* 660 */ 22, 22, 22, 22, 25, 25, 27, 27, 27, 175, - /* 670 */ 167, 175, 148, 39, 167, 84, 148, 39, 23, 24, - /* 680 */ 22, 22, 22, 22, 22, 22, 22, 25, 25, 27, - /* 690 */ 27, 27, 24, 22, 22, 22, 22, 22, 22, 22, - /* 700 */ 25, 25, 27, 27, 27, 22, 22, 22, 22, 22, - /* 710 */ 22, 22, 25, 25, 27, 27, 27, 175, 190, 175, - /* 720 */ 175, 153, 180, 173, 177, 174, 175, 238, 226, 227, - /* 730 */ 229, 175, 209, 222, 197, 130, 172, 72, 172, 172, - /* 740 */ 77, 172, 175, 175, 175, 37, 111, 99, 94, 228, - /* 750 */ 194, 199, 233, 172, 172, 172, 172, 175, 185, 175, - /* 760 */ 175, 185, 37, 175, 230, 74, 175, 81, 74, 82, - /* 770 */ 81, 175, 82, 223, 170, 185, 185, 170, 175, 130, - /* 780 */ 175, 175, 74, 74, 81, 81, 82, 82, 130, 175, - /* 790 */ 111, 170, 170, 228, 104, 199, 233, 130, 175, 111, - /* 800 */ 175, 175, 228, 106, 199, 233, 130, 167, 111, 148, - /* 810 */ 39, 228, 107, 199, 233, 130, 167, 111, 148, 39, - /* 820 */ 228, 105, 199, 233, 130, 175, 111, 175, 175, 228, - /* 830 */ 103, 199, 233, 175, 130, 111, 175, 175, 228, 119, - /* 840 */ 199, 233, 175, 130, 175, 111, 175, 175, 228, 175, - /* 850 */ 152, 233, 130, 175, 111, 102, 175, 228, 175, 30, - /* 860 */ 233, 130, 175, 111, 175, 19, 228, 175, 32, 233, - /* 870 */ 10, 175, 111, 175, 14, 228, 175, 166, 233, 13, - /* 880 */ 232, 137, 175, 43, 175, 232, 137, 18, 43, 232, - /* 890 */ 137, 11, 43, 175, 232, 137, 6, 43, 167, 175, - /* 900 */ 148, 39, 232, 137, 16, 43, 232, 137, 8, 43, - /* 910 */ 175, 232, 137, 17, 43, 175, 175, 175, 175, 232, - /* 920 */ 137, 7, 43, 232, 137, 1, 43, 175, 232, 137, - /* 930 */ 175, 43, 175, 175, 175, 175, 232, 137, 175, 43, - /* 940 */ 232, 137, 175, 43, + /* 0 */ 39, 121, 35, 116, 21, 21, 21, 31, 225, 149, + /* 10 */ 225, 76, 111, 67, 69, 111, 164, 37, 25, 186, + /* 20 */ 124, 32, 201, 29, 127, 30, 152, 46, 143, 36, + /* 30 */ 44, 39, 40, 35, 116, 12, 145, 145, 31, 71, + /* 40 */ 149, 77, 76, 78, 67, 69, 218, 147, 141, 25, + /* 50 */ 180, 131, 32, 43, 29, 81, 30, 227, 46, 75, + /* 60 */ 45, 44, 39, 40, 35, 116, 208, 112, 34, 31, + /* 70 */ 171, 149, 95, 76, 91, 67, 69, 225, 155, 225, + /* 80 */ 25, 162, 156, 32, 158, 29, 103, 30, 112, 46, + /* 90 */ 117, 171, 44, 39, 40, 35, 116, 173, 206, 136, + /* 100 */ 31, 111, 149, 185, 76, 45, 67, 69, 186, 125, + /* 110 */ 115, 25, 196, 133, 32, 218, 29, 52, 30, 134, + /* 120 */ 46, 111, 178, 44, 39, 40, 35, 116, 186, 229, + /* 130 */ 227, 31, 45, 149, 203, 76, 45, 67, 69, 174, + /* 140 */ 112, 33, 25, 171, 159, 32, 160, 29, 205, 30, + /* 150 */ 152, 46, 143, 36, 44, 39, 40, 35, 116, 118, + /* 160 */ 213, 119, 31, 211, 149, 176, 76, 45, 67, 69, + /* 170 */ 111, 197, 111, 25, 144, 153, 32, 186, 29, 186, + /* 180 */ 30, 112, 46, 204, 171, 44, 39, 40, 35, 116, + /* 190 */ 207, 211, 226, 31, 85, 149, 221, 76, 214, 67, + /* 200 */ 69, 212, 169, 225, 25, 225, 187, 32, 90, 29, + /* 210 */ 172, 30, 129, 46, 310, 59, 44, 39, 40, 35, + /* 220 */ 116, 209, 212, 166, 31, 168, 149, 228, 76, 92, + /* 230 */ 67, 69, 71, 137, 77, 25, 78, 181, 32, 157, + /* 240 */ 29, 218, 30, 112, 46, 199, 171, 44, 39, 40, + /* 250 */ 35, 116, 93, 83, 65, 31, 120, 149, 122, 76, + /* 260 */ 84, 67, 69, 105, 193, 225, 25, 225, 188, 32, + /* 270 */ 48, 29, 126, 30, 112, 46, 58, 171, 44, 39, + /* 280 */ 40, 35, 116, 66, 183, 50, 31, 175, 149, 114, + /* 290 */ 76, 150, 67, 69, 71, 151, 77, 25, 78, 45, + /* 300 */ 32, 138, 29, 218, 30, 112, 46, 104, 171, 44, + /* 310 */ 39, 40, 35, 116, 3, 108, 191, 31, 102, 149, + /* 320 */ 110, 76, 107, 67, 69, 106, 198, 109, 25, 180, + /* 330 */ 131, 32, 43, 29, 41, 30, 112, 46, 55, 171, + /* 340 */ 44, 39, 40, 35, 116, 51, 47, 140, 31, 177, + /* 350 */ 149, 57, 76, 86, 67, 69, 89, 216, 63, 25, + /* 360 */ 70, 182, 32, 225, 29, 225, 30, 54, 46, 210, + /* 370 */ 49, 44, 39, 40, 35, 116, 61, 56, 82, 31, + /* 380 */ 53, 149, 148, 76, 179, 67, 69, 60, 64, 152, + /* 390 */ 25, 143, 36, 32, 62, 29, 176, 30, 217, 46, + /* 400 */ 176, 218, 44, 39, 40, 35, 116, 5, 176, 176, + /* 410 */ 31, 176, 149, 176, 76, 176, 67, 69, 176, 176, + /* 420 */ 176, 25, 180, 131, 32, 43, 29, 42, 30, 176, + /* 430 */ 46, 123, 176, 44, 39, 40, 35, 116, 9, 176, + /* 440 */ 176, 31, 176, 149, 176, 76, 176, 67, 69, 176, + /* 450 */ 154, 176, 25, 180, 131, 32, 43, 29, 176, 30, + /* 460 */ 176, 46, 176, 176, 44, 39, 40, 35, 116, 176, + /* 470 */ 176, 176, 31, 176, 149, 176, 76, 176, 67, 69, + /* 480 */ 176, 176, 152, 25, 143, 36, 32, 146, 29, 176, + /* 490 */ 30, 176, 46, 176, 176, 44, 39, 40, 35, 116, + /* 500 */ 10, 176, 176, 31, 176, 149, 176, 76, 176, 67, + /* 510 */ 69, 176, 176, 176, 25, 180, 131, 32, 43, 29, + /* 520 */ 176, 30, 176, 46, 176, 176, 44, 132, 40, 39, + /* 530 */ 176, 35, 116, 176, 176, 176, 31, 176, 149, 176, + /* 540 */ 76, 176, 67, 69, 176, 176, 176, 25, 139, 176, + /* 550 */ 32, 176, 29, 176, 30, 225, 46, 225, 176, 44, + /* 560 */ 176, 40, 24, 26, 22, 22, 22, 22, 22, 22, + /* 570 */ 22, 23, 23, 21, 21, 21, 39, 168, 35, 116, + /* 580 */ 17, 176, 79, 31, 71, 149, 77, 76, 78, 67, + /* 590 */ 69, 20, 176, 218, 25, 180, 131, 32, 43, 29, + /* 600 */ 176, 30, 176, 46, 176, 176, 44, 176, 40, 24, + /* 610 */ 26, 22, 22, 22, 22, 22, 22, 22, 23, 23, + /* 620 */ 21, 21, 21, 26, 22, 22, 22, 22, 22, 22, + /* 630 */ 22, 23, 23, 21, 21, 21, 22, 22, 22, 22, + /* 640 */ 22, 22, 22, 23, 23, 21, 21, 21, 161, 176, + /* 650 */ 176, 128, 224, 223, 219, 220, 222, 189, 190, 192, + /* 660 */ 202, 6, 200, 184, 94, 167, 225, 73, 225, 225, + /* 670 */ 74, 225, 176, 176, 38, 88, 180, 131, 87, 43, + /* 680 */ 176, 225, 176, 225, 225, 176, 225, 176, 175, 38, + /* 690 */ 176, 175, 176, 176, 176, 71, 176, 77, 71, 78, + /* 700 */ 77, 176, 78, 175, 218, 176, 175, 218, 176, 142, + /* 710 */ 71, 176, 77, 71, 78, 77, 176, 78, 142, 218, + /* 720 */ 111, 176, 218, 170, 16, 97, 165, 186, 176, 111, + /* 730 */ 142, 176, 170, 176, 163, 165, 186, 176, 142, 180, + /* 740 */ 131, 111, 43, 176, 170, 176, 100, 165, 186, 111, + /* 750 */ 142, 176, 170, 176, 113, 165, 186, 176, 176, 142, + /* 760 */ 176, 111, 176, 176, 170, 176, 99, 165, 186, 176, + /* 770 */ 111, 142, 176, 170, 176, 101, 165, 186, 176, 142, + /* 780 */ 176, 176, 111, 176, 176, 170, 176, 98, 165, 186, + /* 790 */ 111, 142, 176, 170, 176, 176, 28, 186, 176, 142, + /* 800 */ 176, 142, 111, 176, 176, 170, 176, 1, 27, 186, + /* 810 */ 111, 11, 111, 170, 176, 170, 135, 186, 130, 186, + /* 820 */ 2, 176, 180, 131, 15, 43, 180, 131, 8, 43, + /* 830 */ 195, 176, 19, 176, 96, 180, 131, 7, 43, 180, + /* 840 */ 131, 18, 43, 180, 131, 72, 43, 180, 131, 13, + /* 850 */ 43, 194, 180, 131, 14, 43, 180, 131, 176, 43, + /* 860 */ 80, 176, 68, 176, 180, 131, 215, 43, 176, 180, + /* 870 */ 131, 4, 43, 152, 176, 143, 36, 152, 176, 143, + /* 880 */ 36, 152, 176, 143, 36, 176, 180, 131, 176, 43, + /* 890 */ 176, 176, 176, 176, 152, 176, 143, 36, 152, 176, + /* 900 */ 143, 36, 176, 152, 176, 143, 36, 176, 176, 152, + /* 910 */ 176, 143, 36, ); static public $yy_lookahead = array( - /* 0 */ 21, 72, 23, 24, 57, 75, 59, 28, 61, 30, - /* 10 */ 22, 32, 60, 34, 35, 63, 86, 28, 39, 30, - /* 20 */ 41, 42, 92, 44, 45, 46, 65, 48, 67, 68, - /* 30 */ 51, 21, 53, 23, 24, 13, 14, 15, 28, 50, - /* 40 */ 30, 22, 32, 20, 34, 35, 57, 22, 59, 39, - /* 50 */ 61, 41, 42, 43, 44, 66, 46, 76, 48, 62, - /* 60 */ 63, 51, 21, 53, 23, 24, 1, 86, 87, 28, - /* 70 */ 89, 30, 22, 32, 55, 34, 35, 36, 55, 38, - /* 80 */ 39, 16, 17, 42, 19, 44, 72, 46, 76, 48, - /* 90 */ 54, 55, 51, 21, 53, 23, 24, 1, 86, 87, - /* 100 */ 28, 89, 30, 22, 32, 55, 34, 35, 36, 76, - /* 110 */ 38, 39, 16, 17, 42, 19, 44, 22, 46, 86, - /* 120 */ 48, 22, 89, 51, 21, 53, 23, 24, 86, 60, - /* 130 */ 22, 28, 63, 30, 92, 32, 55, 34, 35, 28, - /* 140 */ 76, 30, 39, 40, 41, 42, 72, 44, 72, 46, - /* 150 */ 86, 48, 22, 89, 51, 21, 53, 23, 24, 71, - /* 160 */ 72, 50, 28, 22, 30, 22, 32, 66, 34, 35, - /* 170 */ 25, 26, 28, 39, 30, 41, 42, 66, 44, 72, - /* 180 */ 46, 47, 48, 62, 63, 51, 21, 53, 23, 24, - /* 190 */ 72, 50, 22, 28, 50, 30, 22, 32, 29, 34, - /* 200 */ 35, 57, 76, 59, 39, 61, 41, 42, 43, 44, - /* 210 */ 66, 46, 86, 48, 22, 89, 51, 21, 53, 23, - /* 220 */ 24, 22, 22, 22, 28, 22, 30, 22, 32, 22, - /* 230 */ 34, 35, 72, 76, 65, 39, 67, 68, 42, 43, - /* 240 */ 44, 10, 46, 86, 48, 22, 89, 51, 21, 53, - /* 250 */ 23, 24, 22, 69, 18, 28, 22, 30, 31, 32, - /* 260 */ 22, 34, 35, 22, 22, 56, 39, 22, 37, 42, - /* 270 */ 28, 44, 30, 46, 65, 48, 67, 68, 51, 21, - /* 280 */ 53, 23, 24, 58, 22, 22, 28, 28, 30, 30, - /* 290 */ 32, 33, 34, 35, 22, 73, 65, 39, 67, 68, - /* 300 */ 42, 86, 44, 86, 46, 76, 48, 86, 66, 51, - /* 310 */ 21, 53, 23, 24, 1, 86, 72, 28, 89, 30, - /* 320 */ 22, 32, 89, 34, 35, 66, 86, 22, 39, 16, - /* 330 */ 17, 42, 19, 44, 86, 46, 47, 48, 86, 86, - /* 340 */ 51, 21, 53, 23, 24, 1, 86, 27, 28, 72, - /* 350 */ 30, 86, 32, 72, 34, 35, 22, 72, 72, 39, - /* 360 */ 16, 17, 42, 19, 44, 22, 46, 75, 48, 72, - /* 370 */ 22, 51, 21, 53, 23, 24, 1, 66, 86, 28, - /* 380 */ 72, 30, 72, 32, 92, 34, 35, 36, 76, 72, - /* 390 */ 39, 16, 17, 42, 19, 44, 72, 46, 86, 48, - /* 400 */ 93, 89, 51, 21, 53, 23, 24, 1, 22, 93, - /* 410 */ 28, 86, 30, 22, 32, 89, 34, 35, 72, 72, - /* 420 */ 22, 39, 16, 17, 42, 19, 44, 22, 46, 72, - /* 430 */ 48, 49, 22, 51, 21, 53, 23, 24, 55, 94, - /* 440 */ 94, 28, 94, 30, 94, 32, 94, 34, 35, 94, - /* 450 */ 94, 65, 39, 67, 68, 42, 43, 44, 94, 46, - /* 460 */ 75, 48, 94, 94, 51, 21, 53, 23, 24, 1, - /* 470 */ 94, 86, 28, 94, 30, 94, 32, 92, 34, 35, - /* 480 */ 94, 94, 94, 39, 16, 17, 42, 19, 44, 94, - /* 490 */ 46, 94, 48, 49, 94, 51, 21, 53, 23, 24, - /* 500 */ 94, 75, 94, 28, 94, 30, 94, 32, 94, 34, - /* 510 */ 35, 94, 86, 94, 39, 40, 94, 42, 92, 44, - /* 520 */ 94, 46, 94, 48, 94, 94, 51, 21, 53, 23, - /* 530 */ 24, 94, 75, 94, 28, 94, 30, 94, 32, 94, - /* 540 */ 34, 35, 94, 86, 28, 39, 30, 94, 42, 92, - /* 550 */ 44, 45, 46, 94, 48, 94, 94, 51, 21, 53, - /* 560 */ 23, 24, 10, 94, 94, 28, 50, 30, 94, 32, - /* 570 */ 94, 34, 35, 57, 94, 59, 39, 61, 94, 42, - /* 580 */ 64, 44, 66, 46, 94, 48, 94, 94, 51, 52, - /* 590 */ 53, 21, 1, 23, 24, 94, 94, 94, 28, 94, - /* 600 */ 30, 94, 32, 94, 34, 35, 36, 16, 17, 39, - /* 610 */ 19, 94, 42, 94, 44, 94, 46, 65, 48, 67, - /* 620 */ 68, 51, 21, 53, 23, 24, 1, 22, 94, 28, - /* 630 */ 94, 30, 94, 32, 94, 34, 35, 94, 29, 94, - /* 640 */ 39, 16, 17, 42, 19, 44, 94, 46, 94, 48, - /* 650 */ 94, 94, 51, 94, 53, 2, 3, 4, 5, 6, - /* 660 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 94, - /* 670 */ 65, 94, 67, 68, 65, 22, 67, 68, 2, 3, - /* 680 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - /* 690 */ 14, 15, 3, 4, 5, 6, 7, 8, 9, 10, - /* 700 */ 11, 12, 13, 14, 15, 4, 5, 6, 7, 8, - /* 710 */ 9, 10, 11, 12, 13, 14, 15, 94, 74, 94, - /* 720 */ 94, 77, 78, 79, 80, 81, 82, 83, 84, 85, - /* 730 */ 22, 94, 88, 22, 58, 75, 28, 29, 30, 28, - /* 740 */ 29, 30, 94, 94, 94, 37, 86, 22, 22, 89, - /* 750 */ 90, 91, 92, 28, 28, 30, 30, 94, 50, 94, - /* 760 */ 94, 50, 37, 94, 22, 57, 94, 59, 57, 61, - /* 770 */ 59, 94, 61, 22, 66, 50, 50, 66, 94, 75, - /* 780 */ 94, 94, 57, 57, 59, 59, 61, 61, 75, 94, - /* 790 */ 86, 66, 66, 89, 90, 91, 92, 75, 94, 86, - /* 800 */ 94, 94, 89, 90, 91, 92, 75, 65, 86, 67, - /* 810 */ 68, 89, 90, 91, 92, 75, 65, 86, 67, 68, - /* 820 */ 89, 90, 91, 92, 75, 94, 86, 94, 94, 89, - /* 830 */ 90, 91, 92, 94, 75, 86, 94, 94, 89, 90, - /* 840 */ 91, 92, 94, 75, 94, 86, 94, 94, 89, 94, - /* 850 */ 91, 92, 75, 94, 86, 22, 94, 89, 94, 91, - /* 860 */ 92, 75, 94, 86, 94, 1, 89, 94, 91, 92, - /* 870 */ 1, 94, 86, 94, 1, 89, 94, 91, 92, 1, - /* 880 */ 16, 17, 94, 19, 94, 16, 17, 1, 19, 16, - /* 890 */ 17, 1, 19, 94, 16, 17, 1, 19, 65, 94, - /* 900 */ 67, 68, 16, 17, 1, 19, 16, 17, 1, 19, - /* 910 */ 94, 16, 17, 1, 19, 94, 94, 94, 94, 16, - /* 920 */ 17, 1, 19, 16, 17, 1, 19, 94, 16, 17, - /* 930 */ 94, 19, 94, 94, 94, 94, 16, 17, 94, 19, - /* 940 */ 16, 17, 94, 19, + /* 0 */ 21, 75, 23, 24, 13, 14, 15, 28, 28, 30, + /* 10 */ 30, 32, 86, 34, 35, 86, 73, 56, 39, 93, + /* 20 */ 41, 42, 93, 44, 45, 46, 65, 48, 67, 68, + /* 30 */ 51, 21, 53, 23, 24, 1, 25, 26, 28, 57, + /* 40 */ 30, 59, 32, 61, 34, 35, 66, 37, 38, 39, + /* 50 */ 16, 17, 42, 19, 44, 22, 46, 76, 48, 54, + /* 60 */ 55, 51, 21, 53, 23, 24, 22, 86, 87, 28, + /* 70 */ 89, 30, 22, 32, 22, 34, 35, 28, 76, 30, + /* 80 */ 39, 22, 41, 42, 43, 44, 86, 46, 86, 48, + /* 90 */ 75, 89, 51, 21, 53, 23, 24, 20, 22, 50, + /* 100 */ 28, 86, 30, 22, 32, 55, 34, 35, 93, 50, + /* 110 */ 75, 39, 22, 41, 42, 66, 44, 72, 46, 47, + /* 120 */ 48, 86, 18, 51, 21, 53, 23, 24, 93, 22, + /* 130 */ 76, 28, 55, 30, 22, 32, 55, 34, 35, 22, + /* 140 */ 86, 87, 39, 89, 41, 42, 43, 44, 22, 46, + /* 150 */ 65, 48, 67, 68, 51, 21, 53, 23, 24, 75, + /* 160 */ 60, 75, 28, 63, 30, 66, 32, 55, 34, 35, + /* 170 */ 86, 76, 86, 39, 40, 41, 42, 93, 44, 93, + /* 180 */ 46, 86, 48, 89, 89, 51, 21, 53, 23, 24, + /* 190 */ 62, 63, 22, 28, 22, 30, 22, 32, 60, 34, + /* 200 */ 35, 63, 22, 28, 39, 30, 22, 42, 22, 44, + /* 210 */ 66, 46, 47, 48, 71, 72, 51, 21, 53, 23, + /* 220 */ 24, 62, 63, 22, 28, 50, 30, 22, 32, 22, + /* 230 */ 34, 35, 57, 76, 59, 39, 61, 22, 42, 43, + /* 240 */ 44, 66, 46, 86, 48, 22, 89, 51, 21, 53, + /* 250 */ 23, 24, 22, 22, 72, 28, 94, 30, 94, 32, + /* 260 */ 22, 34, 35, 86, 76, 28, 39, 30, 22, 42, + /* 270 */ 72, 44, 45, 46, 86, 48, 72, 89, 51, 21, + /* 280 */ 53, 23, 24, 72, 22, 72, 28, 50, 30, 86, + /* 290 */ 32, 33, 34, 35, 57, 76, 59, 39, 61, 55, + /* 300 */ 42, 89, 44, 66, 46, 86, 48, 86, 89, 51, + /* 310 */ 21, 53, 23, 24, 1, 86, 22, 28, 86, 30, + /* 320 */ 86, 32, 86, 34, 35, 86, 76, 86, 39, 16, + /* 330 */ 17, 42, 19, 44, 10, 46, 86, 48, 49, 89, + /* 340 */ 51, 21, 53, 23, 24, 72, 72, 27, 28, 22, + /* 350 */ 30, 72, 32, 22, 34, 35, 22, 22, 72, 39, + /* 360 */ 36, 22, 42, 28, 44, 30, 46, 72, 48, 22, + /* 370 */ 72, 51, 21, 53, 23, 24, 72, 72, 22, 28, + /* 380 */ 72, 30, 31, 32, 58, 34, 35, 72, 72, 65, + /* 390 */ 39, 67, 68, 42, 72, 44, 95, 46, 69, 48, + /* 400 */ 95, 66, 51, 21, 53, 23, 24, 1, 95, 95, + /* 410 */ 28, 95, 30, 95, 32, 95, 34, 35, 95, 95, + /* 420 */ 95, 39, 16, 17, 42, 19, 44, 10, 46, 95, + /* 430 */ 48, 49, 95, 51, 21, 53, 23, 24, 1, 95, + /* 440 */ 95, 28, 95, 30, 95, 32, 95, 34, 35, 95, + /* 450 */ 37, 95, 39, 16, 17, 42, 19, 44, 95, 46, + /* 460 */ 95, 48, 95, 95, 51, 21, 53, 23, 24, 95, + /* 470 */ 95, 95, 28, 95, 30, 95, 32, 95, 34, 35, + /* 480 */ 95, 95, 65, 39, 67, 68, 42, 43, 44, 95, + /* 490 */ 46, 95, 48, 95, 95, 51, 21, 53, 23, 24, + /* 500 */ 1, 95, 95, 28, 95, 30, 95, 32, 95, 34, + /* 510 */ 35, 95, 95, 95, 39, 16, 17, 42, 19, 44, + /* 520 */ 95, 46, 95, 48, 95, 95, 51, 52, 53, 21, + /* 530 */ 95, 23, 24, 95, 95, 95, 28, 95, 30, 95, + /* 540 */ 32, 95, 34, 35, 95, 95, 95, 39, 40, 95, + /* 550 */ 42, 95, 44, 95, 46, 28, 48, 30, 95, 51, + /* 560 */ 95, 53, 2, 3, 4, 5, 6, 7, 8, 9, + /* 570 */ 10, 11, 12, 13, 14, 15, 21, 50, 23, 24, + /* 580 */ 1, 95, 22, 28, 57, 30, 59, 32, 61, 34, + /* 590 */ 35, 64, 95, 66, 39, 16, 17, 42, 19, 44, + /* 600 */ 95, 46, 95, 48, 95, 95, 51, 95, 53, 2, + /* 610 */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + /* 620 */ 13, 14, 15, 3, 4, 5, 6, 7, 8, 9, + /* 630 */ 10, 11, 12, 13, 14, 15, 4, 5, 6, 7, + /* 640 */ 8, 9, 10, 11, 12, 13, 14, 15, 74, 95, + /* 650 */ 95, 77, 78, 79, 80, 81, 82, 83, 84, 85, + /* 660 */ 22, 1, 88, 22, 90, 58, 28, 29, 30, 28, + /* 670 */ 29, 30, 95, 95, 36, 22, 16, 17, 22, 19, + /* 680 */ 95, 28, 95, 30, 28, 95, 30, 95, 50, 36, + /* 690 */ 95, 50, 95, 95, 95, 57, 95, 59, 57, 61, + /* 700 */ 59, 95, 61, 50, 66, 95, 50, 66, 95, 75, + /* 710 */ 57, 95, 59, 57, 61, 59, 95, 61, 75, 66, + /* 720 */ 86, 95, 66, 89, 1, 91, 92, 93, 95, 86, + /* 730 */ 75, 95, 89, 95, 91, 92, 93, 95, 75, 16, + /* 740 */ 17, 86, 19, 95, 89, 95, 91, 92, 93, 86, + /* 750 */ 75, 95, 89, 95, 91, 92, 93, 95, 95, 75, + /* 760 */ 95, 86, 95, 95, 89, 95, 91, 92, 93, 95, + /* 770 */ 86, 75, 95, 89, 95, 91, 92, 93, 95, 75, + /* 780 */ 95, 95, 86, 95, 95, 89, 95, 91, 92, 93, + /* 790 */ 86, 75, 95, 89, 95, 95, 92, 93, 95, 75, + /* 800 */ 95, 75, 86, 95, 95, 89, 95, 1, 92, 93, + /* 810 */ 86, 1, 86, 89, 95, 89, 92, 93, 92, 93, + /* 820 */ 1, 95, 16, 17, 1, 19, 16, 17, 1, 19, + /* 830 */ 22, 95, 1, 95, 22, 16, 17, 1, 19, 16, + /* 840 */ 17, 1, 19, 16, 17, 29, 19, 16, 17, 1, + /* 850 */ 19, 22, 16, 17, 1, 19, 16, 17, 95, 19, + /* 860 */ 22, 95, 29, 95, 16, 17, 22, 19, 95, 16, + /* 870 */ 17, 1, 19, 65, 95, 67, 68, 65, 95, 67, + /* 880 */ 68, 65, 95, 67, 68, 95, 16, 17, 95, 19, + /* 890 */ 95, 95, 95, 95, 65, 95, 67, 68, 65, 95, + /* 900 */ 67, 68, 95, 65, 95, 67, 68, 95, 95, 65, + /* 910 */ 95, 67, 68, ); - const YY_SHIFT_USE_DFLT = -54; - const YY_SHIFT_MAX = 169; + const YY_SHIFT_USE_DFLT = -40; + const YY_SHIFT_MAX = 160; static public $yy_shift_ofst = array( - /* 0 */ -54, 134, 165, 103, 72, -21, 41, 10, 351, 258, - /* 10 */ 537, 382, 475, 444, 196, 227, 289, 506, 413, 570, - /* 20 */ 320, 601, 516, 516, 516, 516, 516, 516, 516, -11, - /* 30 */ -11, -11, -11, 711, 726, 708, 725, 144, 144, 144, - /* 40 */ 144, 144, 259, 259, 259, 259, 259, 259, 873, 375, - /* 50 */ 313, 111, 406, 886, 864, 591, 242, 468, 878, 65, - /* 60 */ 96, 895, 903, 912, 907, 924, 344, 890, 869, 920, - /* 70 */ 625, 259, 259, 259, -53, 259, 259, 259, 259, 259, - /* 80 */ -53, -48, -3, -54, -54, -54, -54, -54, -54, -54, - /* 90 */ -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, - /* 100 */ -54, -54, -54, 676, 653, 689, 701, 701, 231, 833, - /* 110 */ 751, 209, 742, 386, 169, 552, 605, 609, -39, 22, - /* 120 */ -39, 23, 145, 36, 69, 141, 50, 121, 19, 81, - /* 130 */ 383, 205, 241, 230, 143, 223, 245, 236, 108, 25, - /* 140 */ 192, 174, 343, 348, 298, 334, 398, 410, 311, 238, - /* 150 */ 405, 305, 272, 170, -12, 225, 234, 201, 391, 130, - /* 160 */ 95, 200, 184, 207, 199, 262, 99, 101, 263, 203, + /* 0 */ -40, 134, 103, -21, 41, 72, 10, 475, 508, 196, + /* 10 */ 227, 165, 289, 382, 320, 351, 444, 258, 413, 555, + /* 20 */ 527, 527, 527, 527, 527, 527, 527, 175, 175, 175, + /* 30 */ 175, 641, 656, 638, 653, 237, 237, 237, 237, 237, + /* 40 */ -20, -20, -20, -20, -20, -20, 49, 313, 34, 499, + /* 50 */ 823, 810, 579, 723, 660, 335, 406, 827, 836, 831, + /* 60 */ 848, 840, 870, 437, 819, 806, 853, -18, -20, -20, + /* 70 */ -20, -18, -20, -20, -20, -20, -20, 100, 128, -40, + /* 80 */ -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + /* 90 */ -40, -40, -40, -40, -40, -40, -40, 607, 560, 620, + /* 100 */ 632, 632, 324, 844, 833, 816, 838, 829, 417, 808, + /* 110 */ 812, -39, 85, -9, 85, 50, 11, 77, 5, 81, + /* 120 */ 159, 112, 138, 59, 230, 201, 170, 205, 215, 44, + /* 130 */ 52, 104, 107, 231, 347, 334, 331, 329, 326, 294, + /* 140 */ 262, 238, 244, 144, 246, 356, 327, 339, 90, 33, + /* 150 */ 223, 180, 99, 186, 184, 126, 172, 174, 117, 207, + /* 160 */ 76, ); - const YY_REDUCE_USE_DFLT = -72; - const YY_REDUCE_MAX = 102; + const YY_REDUCE_USE_DFLT = -75; + const YY_REDUCE_MAX = 96; static public $yy_reduce_ofst = array( - /* 0 */ 88, 644, 644, 644, 644, 644, 644, 644, 644, 644, - /* 10 */ 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, - /* 20 */ 644, 644, 722, 731, 713, 749, 740, 660, 704, 768, - /* 30 */ 759, 777, 786, 12, -19, 312, 312, 157, 229, 126, - /* 40 */ 64, 33, 292, 457, 426, 385, -70, 42, 222, 222, - /* 50 */ 222, 240, 222, 222, 222, 222, 253, 222, 222, 222, - /* 60 */ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - /* 70 */ 222, 221, 217, 215, 233, 252, 248, 260, 265, 325, - /* 80 */ 326, 316, 307, 324, 346, 357, 347, 317, 281, 277, - /* 90 */ 244, 285, 286, 310, 308, 297, 160, 118, 76, 107, - /* 100 */ 74, -71, 14, + /* 0 */ 143, 574, 574, 574, 574, 574, 574, 574, 574, 574, + /* 10 */ 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + /* 20 */ 634, 643, 655, 663, 675, 696, 684, 724, 726, 704, + /* 30 */ 716, 54, -19, 95, 95, 2, 157, 188, 250, 219, + /* 40 */ 84, -74, 86, 15, 35, -71, 239, -57, -57, -57, + /* 50 */ -57, -57, -57, -57, -57, 0, -57, -57, -57, -57, + /* 60 */ -57, -57, -57, -57, -57, -57, -57, 94, 203, 232, + /* 70 */ 229, 212, 234, 241, 236, 221, 177, 164, 162, 182, + /* 80 */ 198, 213, 211, 273, 304, 308, 315, 316, 322, 305, + /* 90 */ 279, 274, 286, 298, 295, 204, 45, ); static public $yyExpectedTokens = array( /* 0 */ array(), - /* 1 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 44, 46, 47, 48, 51, 53, ), + /* 1 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 40, 41, 42, 44, 46, 48, 51, 53, ), /* 2 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 43, 44, 46, 48, 51, 53, ), - /* 3 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 40, 41, 42, 44, 46, 48, 51, 53, ), - /* 4 */ array(21, 23, 24, 28, 30, 32, 34, 35, 36, 38, 39, 42, 44, 46, 48, 51, 53, ), - /* 5 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 44, 45, 46, 48, 51, 53, ), - /* 6 */ array(21, 23, 24, 28, 30, 32, 34, 35, 36, 38, 39, 42, 44, 46, 48, 51, 53, ), - /* 7 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 43, 44, 46, 48, 51, 53, ), - /* 8 */ array(21, 23, 24, 28, 30, 32, 34, 35, 36, 39, 42, 44, 46, 48, 51, 53, ), - /* 9 */ array(21, 23, 24, 28, 30, 32, 33, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), - /* 10 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 51, 52, 53, ), - /* 11 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 49, 51, 53, ), - /* 12 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 40, 42, 44, 46, 48, 51, 53, ), + /* 3 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 44, 45, 46, 48, 51, 53, ), + /* 4 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 43, 44, 46, 48, 51, 53, ), + /* 5 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 41, 42, 44, 46, 47, 48, 51, 53, ), + /* 6 */ array(21, 23, 24, 28, 30, 32, 34, 35, 37, 38, 39, 42, 44, 46, 48, 51, 53, ), + /* 7 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 51, 52, 53, ), + /* 8 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 40, 42, 44, 46, 48, 51, 53, ), + /* 9 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 43, 44, 46, 48, 51, 53, ), + /* 10 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 45, 46, 48, 51, 53, ), + /* 11 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 47, 48, 51, 53, ), + /* 12 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 49, 51, 53, ), /* 13 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 49, 51, 53, ), - /* 14 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 43, 44, 46, 48, 51, 53, ), + /* 14 */ array(21, 23, 24, 27, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), /* 15 */ array(21, 23, 24, 28, 30, 31, 32, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), - /* 16 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 47, 48, 51, 53, ), - /* 17 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 45, 46, 48, 51, 53, ), - /* 18 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 43, 44, 46, 48, 51, 53, ), - /* 19 */ array(21, 23, 24, 28, 30, 32, 34, 35, 36, 39, 42, 44, 46, 48, 51, 53, ), - /* 20 */ array(21, 23, 24, 27, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), - /* 21 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), + /* 16 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 43, 44, 46, 48, 51, 53, ), + /* 17 */ array(21, 23, 24, 28, 30, 32, 33, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), + /* 18 */ array(21, 23, 24, 28, 30, 32, 34, 35, 37, 39, 42, 44, 46, 48, 51, 53, ), + /* 19 */ array(21, 23, 24, 28, 30, 32, 34, 35, 39, 42, 44, 46, 48, 51, 53, ), + /* 20 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), + /* 21 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), /* 22 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), /* 23 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), /* 24 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), /* 25 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), /* 26 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), - /* 27 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), - /* 28 */ array(28, 30, 50, 57, 59, 61, 64, 66, ), + /* 27 */ array(28, 30, 50, 57, 59, 61, 66, ), + /* 28 */ array(28, 30, 50, 57, 59, 61, 66, ), /* 29 */ array(28, 30, 50, 57, 59, 61, 66, ), /* 30 */ array(28, 30, 50, 57, 59, 61, 66, ), - /* 31 */ array(28, 30, 50, 57, 59, 61, 66, ), - /* 32 */ array(28, 30, 50, 57, 59, 61, 66, ), - /* 33 */ array(22, 28, 29, 30, 50, 57, 59, 61, 66, ), - /* 34 */ array(22, 28, 30, 50, 57, 59, 61, 66, ), - /* 35 */ array(22, 28, 29, 30, 37, 50, 57, 59, 61, 66, ), - /* 36 */ array(22, 28, 30, 37, 50, 57, 59, 61, 66, ), + /* 31 */ array(22, 28, 29, 30, 50, 57, 59, 61, 66, ), + /* 32 */ array(22, 28, 30, 50, 57, 59, 61, 66, ), + /* 33 */ array(22, 28, 29, 30, 36, 50, 57, 59, 61, 66, ), + /* 34 */ array(22, 28, 30, 36, 50, 57, 59, 61, 66, ), + /* 35 */ array(28, 30, 50, 57, 59, 61, 66, ), + /* 36 */ array(28, 30, 50, 57, 59, 61, 66, ), /* 37 */ array(28, 30, 50, 57, 59, 61, 66, ), /* 38 */ array(28, 30, 50, 57, 59, 61, 66, ), /* 39 */ array(28, 30, 50, 57, 59, 61, 66, ), - /* 40 */ array(28, 30, 50, 57, 59, 61, 66, ), - /* 41 */ array(28, 30, 50, 57, 59, 61, 66, ), + /* 40 */ array(28, 30, 66, ), + /* 41 */ array(28, 30, 66, ), /* 42 */ array(28, 30, 66, ), /* 43 */ array(28, 30, 66, ), /* 44 */ array(28, 30, 66, ), /* 45 */ array(28, 30, 66, ), - /* 46 */ array(28, 30, 66, ), - /* 47 */ array(28, 30, 66, ), + /* 46 */ array(28, 30, 50, 66, ), + /* 47 */ array(1, 16, 17, 19, ), /* 48 */ array(1, 16, 17, 19, ), /* 49 */ array(1, 16, 17, 19, ), /* 50 */ array(1, 16, 17, 19, ), - /* 51 */ array(28, 30, 50, 66, ), + /* 51 */ array(1, 16, 17, 19, ), /* 52 */ array(1, 16, 17, 19, ), /* 53 */ array(1, 16, 17, 19, ), /* 54 */ array(1, 16, 17, 19, ), - /* 55 */ array(1, 16, 17, 19, ), - /* 56 */ array(22, 28, 30, 66, ), + /* 55 */ array(22, 28, 30, 66, ), + /* 56 */ array(1, 16, 17, 19, ), /* 57 */ array(1, 16, 17, 19, ), /* 58 */ array(1, 16, 17, 19, ), /* 59 */ array(1, 16, 17, 19, ), @@ -575,22 +568,22 @@ static public $yy_action = array( /* 64 */ array(1, 16, 17, 19, ), /* 65 */ array(1, 16, 17, 19, ), /* 66 */ array(1, 16, 17, 19, ), - /* 67 */ array(1, 16, 17, 19, ), - /* 68 */ array(1, 16, 17, 19, ), - /* 69 */ array(1, 16, 17, 19, ), - /* 70 */ array(1, 16, 17, 19, ), - /* 71 */ array(28, 30, 66, ), + /* 67 */ array(57, 59, 61, ), + /* 68 */ array(28, 30, 66, ), + /* 69 */ array(28, 30, 66, ), + /* 70 */ array(28, 30, 66, ), + /* 71 */ array(57, 59, 61, ), /* 72 */ array(28, 30, 66, ), /* 73 */ array(28, 30, 66, ), - /* 74 */ array(57, 59, 61, ), + /* 74 */ array(28, 30, 66, ), /* 75 */ array(28, 30, 66, ), /* 76 */ array(28, 30, 66, ), - /* 77 */ array(28, 30, 66, ), - /* 78 */ array(28, 30, 66, ), - /* 79 */ array(28, 30, 66, ), - /* 80 */ array(57, 59, 61, ), - /* 81 */ array(60, 63, ), - /* 82 */ array(62, 63, ), + /* 77 */ array(60, 63, ), + /* 78 */ array(62, 63, ), + /* 79 */ array(), + /* 80 */ array(), + /* 81 */ array(), + /* 82 */ array(), /* 83 */ array(), /* 84 */ array(), /* 85 */ array(), @@ -605,79 +598,79 @@ static public $yy_action = array( /* 94 */ array(), /* 95 */ array(), /* 96 */ array(), - /* 97 */ array(), - /* 98 */ array(), - /* 99 */ array(), - /* 100 */ array(), - /* 101 */ array(), - /* 102 */ array(), - /* 103 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 58, ), - /* 104 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 22, ), - /* 105 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), - /* 106 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), - /* 107 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), - /* 108 */ array(10, 37, 65, 67, 68, ), + /* 97 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 58, ), + /* 98 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 22, ), + /* 99 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), + /* 100 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), + /* 101 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), + /* 102 */ array(10, 36, 65, 67, 68, ), + /* 103 */ array(22, 65, 67, 68, ), + /* 104 */ array(29, 65, 67, 68, ), + /* 105 */ array(29, 65, 67, 68, ), + /* 106 */ array(22, 65, 67, 68, ), + /* 107 */ array(22, 65, 67, 68, ), + /* 108 */ array(10, 65, 67, 68, ), /* 109 */ array(22, 65, 67, 68, ), /* 110 */ array(22, 65, 67, 68, ), /* 111 */ array(56, 65, 67, 68, ), - /* 112 */ array(22, 65, 67, 68, ), - /* 113 */ array(22, 65, 67, 68, ), - /* 114 */ array(29, 65, 67, 68, ), - /* 115 */ array(10, 65, 67, 68, ), - /* 116 */ array(22, 65, 67, 68, ), - /* 117 */ array(29, 65, 67, 68, ), - /* 118 */ array(65, 67, 68, ), - /* 119 */ array(13, 14, 15, ), - /* 120 */ array(65, 67, 68, ), - /* 121 */ array(20, 55, ), - /* 122 */ array(25, 26, ), - /* 123 */ array(54, 55, ), - /* 124 */ array(60, 63, ), - /* 125 */ array(22, 50, ), - /* 126 */ array(22, 55, ), - /* 127 */ array(62, 63, ), - /* 128 */ array(22, 55, ), - /* 129 */ array(22, 55, ), - /* 130 */ array(55, ), - /* 131 */ array(22, ), + /* 112 */ array(65, 67, 68, ), + /* 113 */ array(13, 14, 15, ), + /* 114 */ array(65, 67, 68, ), + /* 115 */ array(22, 55, ), + /* 116 */ array(25, 26, ), + /* 117 */ array(20, 55, ), + /* 118 */ array(54, 55, ), + /* 119 */ array(22, 55, ), + /* 120 */ array(62, 63, ), + /* 121 */ array(22, 55, ), + /* 122 */ array(60, 63, ), + /* 123 */ array(22, 50, ), + /* 124 */ array(22, ), + /* 125 */ array(22, ), + /* 126 */ array(22, ), + /* 127 */ array(22, ), + /* 128 */ array(22, ), + /* 129 */ array(22, ), + /* 130 */ array(22, ), + /* 131 */ array(18, ), /* 132 */ array(22, ), /* 133 */ array(22, ), /* 134 */ array(22, ), /* 135 */ array(22, ), /* 136 */ array(22, ), - /* 137 */ array(18, ), - /* 138 */ array(22, ), + /* 137 */ array(69, ), + /* 138 */ array(58, ), /* 139 */ array(22, ), /* 140 */ array(22, ), /* 141 */ array(22, ), - /* 142 */ array(22, ), - /* 143 */ array(22, ), + /* 142 */ array(55, ), + /* 143 */ array(66, ), /* 144 */ array(22, ), /* 145 */ array(22, ), /* 146 */ array(22, ), /* 147 */ array(22, ), - /* 148 */ array(66, ), + /* 148 */ array(22, ), /* 149 */ array(22, ), /* 150 */ array(22, ), /* 151 */ array(22, ), - /* 152 */ array(22, ), + /* 152 */ array(66, ), /* 153 */ array(22, ), /* 154 */ array(22, ), - /* 155 */ array(58, ), + /* 155 */ array(22, ), /* 156 */ array(22, ), /* 157 */ array(22, ), /* 158 */ array(22, ), /* 159 */ array(22, ), /* 160 */ array(22, ), - /* 161 */ array(22, ), - /* 162 */ array(69, ), - /* 163 */ array(22, ), - /* 164 */ array(22, ), - /* 165 */ array(22, ), - /* 166 */ array(22, ), - /* 167 */ array(66, ), - /* 168 */ array(22, ), - /* 169 */ array(22, ), + /* 161 */ array(), + /* 162 */ array(), + /* 163 */ array(), + /* 164 */ array(), + /* 165 */ array(), + /* 166 */ array(), + /* 167 */ array(), + /* 168 */ array(), + /* 169 */ array(), /* 170 */ array(), /* 171 */ array(), /* 172 */ array(), @@ -738,41 +731,31 @@ static public $yy_action = array( /* 227 */ array(), /* 228 */ array(), /* 229 */ array(), - /* 230 */ array(), - /* 231 */ array(), - /* 232 */ array(), - /* 233 */ array(), - /* 234 */ array(), - /* 235 */ array(), - /* 236 */ array(), - /* 237 */ array(), - /* 238 */ array(), ); static public $yy_default = array( - /* 0 */ 241, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 10 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 20 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 30 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 40 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 50 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 239, - /* 60 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 70 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 80 */ 318, 318, 318, 241, 241, 241, 241, 241, 241, 241, - /* 90 */ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - /* 100 */ 241, 241, 241, 318, 318, 306, 307, 309, 318, 318, - /* 110 */ 318, 289, 318, 318, 318, 318, 318, 318, 293, 308, - /* 120 */ 285, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 130 */ 296, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 140 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 150 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 160 */ 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - /* 170 */ 316, 315, 317, 249, 251, 252, 273, 250, 303, 275, - /* 180 */ 248, 247, 300, 313, 314, 294, 267, 246, 269, 240, - /* 190 */ 242, 295, 299, 304, 310, 305, 302, 311, 253, 312, - /* 200 */ 301, 257, 284, 268, 270, 266, 265, 262, 263, 264, - /* 210 */ 281, 280, 276, 277, 278, 279, 274, 271, 272, 286, - /* 220 */ 288, 282, 258, 259, 283, 297, 255, 256, 298, 260, - /* 230 */ 261, 292, 243, 287, 244, 291, 245, 290, 254, + /* 0 */ 232, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 10 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 20 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 30 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 40 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 50 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 230, + /* 60 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 70 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 232, + /* 80 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + /* 90 */ 232, 232, 232, 232, 232, 232, 232, 309, 309, 297, + /* 100 */ 300, 298, 309, 309, 309, 309, 309, 309, 309, 309, + /* 110 */ 309, 280, 284, 299, 276, 309, 309, 309, 309, 309, + /* 120 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 130 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 140 */ 309, 309, 287, 309, 309, 309, 309, 309, 309, 309, + /* 150 */ 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + /* 160 */ 309, 233, 273, 301, 231, 303, 274, 302, 288, 237, + /* 170 */ 289, 286, 305, 236, 264, 285, 304, 266, 235, 290, + /* 180 */ 234, 238, 259, 248, 249, 258, 278, 260, 261, 245, + /* 190 */ 246, 262, 247, 279, 250, 252, 253, 281, 282, 254, + /* 200 */ 255, 277, 251, 257, 256, 244, 263, 292, 270, 294, + /* 210 */ 269, 296, 295, 291, 293, 272, 271, 306, 307, 241, + /* 220 */ 242, 265, 243, 240, 239, 308, 268, 283, 267, 275, ); /* The next thing included is series of defines which control ** various aspects of the generated parser. @@ -789,9 +772,9 @@ static public $yy_action = array( ** self::YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. */ - const YYNOCODE = 95; + const YYNOCODE = 96; const YYSTACKDEPTH = 100; - const YYNSTATE = 239; + const YYNSTATE = 230; const YYNRULE = 79; const YYERRORSYMBOL = 70; const YYERRSYMDT = 'yy0'; @@ -884,7 +867,7 @@ static public $yy_action = array( 'T_AUTOESCAPE', 'T_OFF', 'T_ON', 'T_END_AUTOESCAPE', 'T_CUSTOM_TAG', 'T_AS', 'T_CUSTOM_BLOCK', 'T_CUSTOM_END', 'T_WITH', 'T_ENDWITH', 'T_LOAD', 'T_FOR', - 'T_CLOSEFOR', 'T_COMMA', 'T_EMPTY', 'T_IF', + 'T_COMMA', 'T_CLOSEFOR', 'T_EMPTY', 'T_IF', 'T_ENDIF', 'T_ELSE', 'T_IFCHANGED', 'T_ENDIFCHANGED', 'T_IFEQUAL', 'T_END_IFEQUAL', 'T_IFNOTEQUAL', 'T_END_IFNOTEQUAL', 'T_BLOCK', 'T_END_BLOCK', 'T_NUMERIC', 'T_FILTER', @@ -897,8 +880,8 @@ static public $yy_action = array( 'var_or_string', 'stmt', 'for_stmt', 'ifchanged_stmt', 'block_stmt', 'filter_stmt', 'if_stmt', 'custom_tag', 'alias', 'ifequal', 'varname', 'var_list', - 'regroup', 'string', 'expr', 'fvar_or_string', - 'varname_args', 's_content', + 'regroup', 'string', 'for_def', 'expr', + 'fvar_or_string', 'varname_args', 's_content', ); /** @@ -933,10 +916,10 @@ static public $yy_action = array( /* 24 */ "alias ::= T_WITH varname T_AS varname T_CLOSE_TAG body T_OPEN_TAG T_ENDWITH T_CLOSE_TAG", /* 25 */ "stmt ::= regroup", /* 26 */ "stmt ::= T_LOAD string", - /* 27 */ "for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG", - /* 28 */ "for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG", - /* 29 */ "for_stmt ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG", - /* 30 */ "for_stmt ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG", + /* 27 */ "for_def ::= T_FOR varname T_IN filtered_var T_CLOSE_TAG", + /* 28 */ "for_def ::= T_FOR varname T_COMMA varname T_IN filtered_var T_CLOSE_TAG", + /* 29 */ "for_stmt ::= for_def body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG", + /* 30 */ "for_stmt ::= for_def body T_OPEN_TAG T_EMPTY T_CLOSE_TAG body T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG", /* 31 */ "if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG", /* 32 */ "if_stmt ::= T_IF expr T_CLOSE_TAG body T_OPEN_TAG T_ELSE T_CLOSE_TAG body T_OPEN_TAG T_ENDIF T_CLOSE_TAG", /* 33 */ "ifchanged_stmt ::= T_IFCHANGED T_CLOSE_TAG body T_OPEN_TAG T_ENDIFCHANGED T_CLOSE_TAG", @@ -1376,10 +1359,10 @@ static public $yy_action = array( array( 'lhs' => 84, 'rhs' => 9 ), array( 'lhs' => 77, 'rhs' => 1 ), array( 'lhs' => 77, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 5 ), + array( 'lhs' => 90, 'rhs' => 7 ), + array( 'lhs' => 78, 'rhs' => 5 ), array( 'lhs' => 78, 'rhs' => 9 ), - array( 'lhs' => 78, 'rhs' => 11 ), - array( 'lhs' => 78, 'rhs' => 13 ), - array( 'lhs' => 78, 'rhs' => 15 ), array( 'lhs' => 82, 'rhs' => 7 ), array( 'lhs' => 82, 'rhs' => 11 ), array( 'lhs' => 79, 'rhs' => 6 ), @@ -1398,31 +1381,31 @@ static public $yy_action = array( array( 'lhs' => 88, 'rhs' => 6 ), array( 'lhs' => 75, 'rhs' => 3 ), array( 'lhs' => 75, 'rhs' => 1 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 1 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 1 ), array( 'lhs' => 87, 'rhs' => 2 ), array( 'lhs' => 87, 'rhs' => 3 ), array( 'lhs' => 87, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 1 ), array( 'lhs' => 89, 'rhs' => 3 ), array( 'lhs' => 89, 'rhs' => 2 ), array( 'lhs' => 89, 'rhs' => 2 ), array( 'lhs' => 89, 'rhs' => 3 ), array( 'lhs' => 89, 'rhs' => 3 ), - array( 'lhs' => 93, 'rhs' => 2 ), - array( 'lhs' => 93, 'rhs' => 1 ), - array( 'lhs' => 90, 'rhs' => 3 ), - array( 'lhs' => 90, 'rhs' => 3 ), - array( 'lhs' => 90, 'rhs' => 3 ), - array( 'lhs' => 90, 'rhs' => 3 ), - array( 'lhs' => 90, 'rhs' => 3 ), - array( 'lhs' => 90, 'rhs' => 3 ), - array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 94, 'rhs' => 2 ), + array( 'lhs' => 94, 'rhs' => 1 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 3 ), + array( 'lhs' => 91, 'rhs' => 1 ), array( 'lhs' => 86, 'rhs' => 3 ), array( 'lhs' => 86, 'rhs' => 3 ), array( 'lhs' => 86, 'rhs' => 4 ), @@ -1525,55 +1508,55 @@ static public $yy_action = array( */ #line 65 "lib/Haanga/Compiler/Parser.y" function yy_r0(){ $this->body = $this->yystack[$this->yyidx + 0]->minor; } -#line 1534 "lib/Haanga/Compiler/Parser.php" +#line 1517 "lib/Haanga/Compiler/Parser.php" #line 67 "lib/Haanga/Compiler/Parser.y" function yy_r1(){ $this->_retvalue=$this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1537 "lib/Haanga/Compiler/Parser.php" +#line 1520 "lib/Haanga/Compiler/Parser.php" #line 68 "lib/Haanga/Compiler/Parser.y" function yy_r2(){ $this->_retvalue = array(); } -#line 1540 "lib/Haanga/Compiler/Parser.php" +#line 1523 "lib/Haanga/Compiler/Parser.php" #line 71 "lib/Haanga/Compiler/Parser.y" function yy_r3(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1543 "lib/Haanga/Compiler/Parser.php" +#line 1526 "lib/Haanga/Compiler/Parser.php" #line 72 "lib/Haanga/Compiler/Parser.y" function yy_r4(){ $this->_retvalue = array('operation' => 'html', 'html' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1546 "lib/Haanga/Compiler/Parser.php" +#line 1529 "lib/Haanga/Compiler/Parser.php" #line 73 "lib/Haanga/Compiler/Parser.y" function yy_r5(){ $this->yystack[$this->yyidx + 0]->minor=rtrim($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = array('operation' => 'comment', 'comment' => substr($this->yystack[$this->yyidx + 0]->minor, 0, strlen($this->yystack[$this->yyidx + 0]->minor)-2)); } -#line 1549 "lib/Haanga/Compiler/Parser.php" +#line 1532 "lib/Haanga/Compiler/Parser.php" #line 74 "lib/Haanga/Compiler/Parser.y" function yy_r6(){ $this->_retvalue = array('operation' => 'print_var', 'variable' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1552 "lib/Haanga/Compiler/Parser.php" +#line 1535 "lib/Haanga/Compiler/Parser.php" #line 76 "lib/Haanga/Compiler/Parser.y" function yy_r7(){ $this->_retvalue = array('operation' => 'base', $this->yystack[$this->yyidx + -1]->minor); } -#line 1555 "lib/Haanga/Compiler/Parser.php" +#line 1538 "lib/Haanga/Compiler/Parser.php" #line 77 "lib/Haanga/Compiler/Parser.y" function yy_r8(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1558 "lib/Haanga/Compiler/Parser.php" +#line 1541 "lib/Haanga/Compiler/Parser.php" #line 83 "lib/Haanga/Compiler/Parser.y" function yy_r14(){ $this->_retvalue = array('operation' => 'include', $this->yystack[$this->yyidx + -1]->minor); } -#line 1561 "lib/Haanga/Compiler/Parser.php" +#line 1544 "lib/Haanga/Compiler/Parser.php" #line 87 "lib/Haanga/Compiler/Parser.y" function yy_r18(){ $this->_retvalue = array('operation' => 'autoescape', 'value' => strtolower(@$this->yystack[$this->yyidx + -5]->minor), 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1564 "lib/Haanga/Compiler/Parser.php" +#line 1547 "lib/Haanga/Compiler/Parser.php" #line 92 "lib/Haanga/Compiler/Parser.y" function yy_r19(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1567 "lib/Haanga/Compiler/Parser.php" +#line 1550 "lib/Haanga/Compiler/Parser.php" #line 93 "lib/Haanga/Compiler/Parser.y" function yy_r20(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -3]->minor, 'as' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1570 "lib/Haanga/Compiler/Parser.php" +#line 1553 "lib/Haanga/Compiler/Parser.php" #line 94 "lib/Haanga/Compiler/Parser.y" function yy_r21(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -2]->minor, 'list' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1573 "lib/Haanga/Compiler/Parser.php" +#line 1556 "lib/Haanga/Compiler/Parser.php" #line 95 "lib/Haanga/Compiler/Parser.y" function yy_r22(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -4]->minor, 'as' => $this->yystack[$this->yyidx + -1]->minor, 'list' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1576 "lib/Haanga/Compiler/Parser.php" +#line 1559 "lib/Haanga/Compiler/Parser.php" #line 97 "lib/Haanga/Compiler/Parser.y" function yy_r23(){ if ('end'.$this->yystack[$this->yyidx + -5]->minor != $this->yystack[$this->yyidx + -1]->minor) { throw new Exception("Unexpected ".$this->yystack[$this->yyidx + -1]->minor); } $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor, 'list' => array()); } -#line 1579 "lib/Haanga/Compiler/Parser.php" +#line 1562 "lib/Haanga/Compiler/Parser.php" #line 100 "lib/Haanga/Compiler/Parser.y" function yy_r24(){ $this->_retvalue = array('operation' => 'alias', 'var' => $this->yystack[$this->yyidx + -7]->minor, 'as' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1582 "lib/Haanga/Compiler/Parser.php" +#line 1565 "lib/Haanga/Compiler/Parser.php" #line 104 "lib/Haanga/Compiler/Parser.y" function yy_r26(){ if (!is_file($this->yystack[$this->yyidx + 0]->minor)) { @@ -1581,128 +1564,133 @@ static public $yy_action = array( } require_once $this->yystack[$this->yyidx + 0]->minor; } -#line 1590 "lib/Haanga/Compiler/Parser.php" +#line 1573 "lib/Haanga/Compiler/Parser.php" #line 112 "lib/Haanga/Compiler/Parser.y" - function yy_r27(){ - $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -7]->minor, 'array' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor, 'index' => NULL); + function yy_r27(){ + $this->compiler->set_context($this->yystack[$this->yyidx + -3]->minor, array()); + $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -3]->minor, 'index' => NULL, 'array' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1595 "lib/Haanga/Compiler/Parser.php" -#line 115 "lib/Haanga/Compiler/Parser.y" - function yy_r28(){ - $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -7]->minor, 'array' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor, 'index' => $this->yystack[$this->yyidx + -9]->minor); +#line 1579 "lib/Haanga/Compiler/Parser.php" +#line 117 "lib/Haanga/Compiler/Parser.y" + function yy_r28(){ + $this->compiler->set_context($this->yystack[$this->yyidx + -3]->minor, array()); + $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -3]->minor, 'index' => $this->yystack[$this->yyidx + -5]->minor, 'array' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1600 "lib/Haanga/Compiler/Parser.php" -#line 118 "lib/Haanga/Compiler/Parser.y" +#line 1585 "lib/Haanga/Compiler/Parser.php" +#line 123 "lib/Haanga/Compiler/Parser.y" function yy_r29(){ - $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -11]->minor, 'array' => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'empty' => $this->yystack[$this->yyidx + -3]->minor, 'index' => NULL); + $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor; + $this->_retvalue['body'] = $this->yystack[$this->yyidx + -3]->minor; } -#line 1605 "lib/Haanga/Compiler/Parser.php" -#line 121 "lib/Haanga/Compiler/Parser.y" +#line 1591 "lib/Haanga/Compiler/Parser.php" +#line 128 "lib/Haanga/Compiler/Parser.y" function yy_r30(){ - $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -11]->minor, 'array' => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'empty' => $this->yystack[$this->yyidx + -3]->minor, 'index' => $this->yystack[$this->yyidx + -13]->minor); + $this->_retvalue = $this->yystack[$this->yyidx + -8]->minor; + $this->_retvalue['body'] = $this->yystack[$this->yyidx + -7]->minor; + $this->_retvalue['empty'] = $this->yystack[$this->yyidx + -3]->minor; } -#line 1610 "lib/Haanga/Compiler/Parser.php" -#line 125 "lib/Haanga/Compiler/Parser.y" +#line 1598 "lib/Haanga/Compiler/Parser.php" +#line 134 "lib/Haanga/Compiler/Parser.y" function yy_r31(){ $this->_retvalue = array('operation' => 'if', 'expr' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1613 "lib/Haanga/Compiler/Parser.php" -#line 126 "lib/Haanga/Compiler/Parser.y" +#line 1601 "lib/Haanga/Compiler/Parser.php" +#line 135 "lib/Haanga/Compiler/Parser.y" function yy_r32(){ $this->_retvalue = array('operation' => 'if', 'expr' => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1616 "lib/Haanga/Compiler/Parser.php" -#line 129 "lib/Haanga/Compiler/Parser.y" +#line 1604 "lib/Haanga/Compiler/Parser.php" +#line 138 "lib/Haanga/Compiler/Parser.y" function yy_r33(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1621 "lib/Haanga/Compiler/Parser.php" -#line 133 "lib/Haanga/Compiler/Parser.y" +#line 1609 "lib/Haanga/Compiler/Parser.php" +#line 142 "lib/Haanga/Compiler/Parser.y" function yy_r34(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -3]->minor, 'check' => $this->yystack[$this->yyidx + -5]->minor); } -#line 1626 "lib/Haanga/Compiler/Parser.php" -#line 136 "lib/Haanga/Compiler/Parser.y" +#line 1614 "lib/Haanga/Compiler/Parser.php" +#line 145 "lib/Haanga/Compiler/Parser.y" function yy_r35(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1631 "lib/Haanga/Compiler/Parser.php" -#line 140 "lib/Haanga/Compiler/Parser.y" +#line 1619 "lib/Haanga/Compiler/Parser.php" +#line 149 "lib/Haanga/Compiler/Parser.y" function yy_r36(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -7]->minor, 'check' => $this->yystack[$this->yyidx + -9]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1636 "lib/Haanga/Compiler/Parser.php" -#line 145 "lib/Haanga/Compiler/Parser.y" +#line 1624 "lib/Haanga/Compiler/Parser.php" +#line 154 "lib/Haanga/Compiler/Parser.y" function yy_r37(){ $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '==', 1 => $this->yystack[$this->yyidx + -6]->minor, 2 => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1639 "lib/Haanga/Compiler/Parser.php" -#line 146 "lib/Haanga/Compiler/Parser.y" +#line 1627 "lib/Haanga/Compiler/Parser.php" +#line 155 "lib/Haanga/Compiler/Parser.y" function yy_r38(){ $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '==', 1 => $this->yystack[$this->yyidx + -10]->minor, 2 => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1642 "lib/Haanga/Compiler/Parser.php" -#line 147 "lib/Haanga/Compiler/Parser.y" +#line 1630 "lib/Haanga/Compiler/Parser.php" +#line 156 "lib/Haanga/Compiler/Parser.y" function yy_r39(){ $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '!=', 1 => $this->yystack[$this->yyidx + -6]->minor, 2 => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1645 "lib/Haanga/Compiler/Parser.php" -#line 148 "lib/Haanga/Compiler/Parser.y" +#line 1633 "lib/Haanga/Compiler/Parser.php" +#line 157 "lib/Haanga/Compiler/Parser.y" function yy_r40(){ $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '!=', 1 => $this->yystack[$this->yyidx + -10]->minor, 2 => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1648 "lib/Haanga/Compiler/Parser.php" -#line 152 "lib/Haanga/Compiler/Parser.y" +#line 1636 "lib/Haanga/Compiler/Parser.php" +#line 161 "lib/Haanga/Compiler/Parser.y" function yy_r41(){ $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1651 "lib/Haanga/Compiler/Parser.php" -#line 154 "lib/Haanga/Compiler/Parser.y" +#line 1639 "lib/Haanga/Compiler/Parser.php" +#line 163 "lib/Haanga/Compiler/Parser.y" function yy_r42(){ $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -6]->minor, 'body' => $this->yystack[$this->yyidx + -4]->minor); } -#line 1654 "lib/Haanga/Compiler/Parser.php" -#line 161 "lib/Haanga/Compiler/Parser.y" +#line 1642 "lib/Haanga/Compiler/Parser.php" +#line 170 "lib/Haanga/Compiler/Parser.y" function yy_r45(){ $this->_retvalue = array('operation' => 'filter', 'functions' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1657 "lib/Haanga/Compiler/Parser.php" -#line 164 "lib/Haanga/Compiler/Parser.y" +#line 1645 "lib/Haanga/Compiler/Parser.php" +#line 173 "lib/Haanga/Compiler/Parser.y" function yy_r46(){ $this->_retvalue=array('operation' => 'regroup', 'array' => $this->yystack[$this->yyidx + -4]->minor, 'row' => $this->yystack[$this->yyidx + -2]->minor, 'as' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1660 "lib/Haanga/Compiler/Parser.php" -#line 167 "lib/Haanga/Compiler/Parser.y" +#line 1648 "lib/Haanga/Compiler/Parser.php" +#line 176 "lib/Haanga/Compiler/Parser.y" function yy_r47(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1663 "lib/Haanga/Compiler/Parser.php" -#line 168 "lib/Haanga/Compiler/Parser.y" +#line 1651 "lib/Haanga/Compiler/Parser.php" +#line 177 "lib/Haanga/Compiler/Parser.y" function yy_r48(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 1666 "lib/Haanga/Compiler/Parser.php" -#line 170 "lib/Haanga/Compiler/Parser.y" +#line 1654 "lib/Haanga/Compiler/Parser.php" +#line 179 "lib/Haanga/Compiler/Parser.y" function yy_r49(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, 'args'=>array($this->yystack[$this->yyidx + 0]->minor)); } -#line 1669 "lib/Haanga/Compiler/Parser.php" -#line 174 "lib/Haanga/Compiler/Parser.y" +#line 1657 "lib/Haanga/Compiler/Parser.php" +#line 183 "lib/Haanga/Compiler/Parser.y" function yy_r51(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1672 "lib/Haanga/Compiler/Parser.php" -#line 180 "lib/Haanga/Compiler/Parser.y" +#line 1660 "lib/Haanga/Compiler/Parser.php" +#line 189 "lib/Haanga/Compiler/Parser.y" function yy_r54(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1675 "lib/Haanga/Compiler/Parser.php" -#line 181 "lib/Haanga/Compiler/Parser.y" +#line 1663 "lib/Haanga/Compiler/Parser.php" +#line 190 "lib/Haanga/Compiler/Parser.y" function yy_r55(){ $this->_retvalue = array('number' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1678 "lib/Haanga/Compiler/Parser.php" -#line 182 "lib/Haanga/Compiler/Parser.y" +#line 1666 "lib/Haanga/Compiler/Parser.php" +#line 191 "lib/Haanga/Compiler/Parser.y" function yy_r56(){ $this->_retvalue = array('string' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1681 "lib/Haanga/Compiler/Parser.php" -#line 184 "lib/Haanga/Compiler/Parser.y" +#line 1669 "lib/Haanga/Compiler/Parser.php" +#line 193 "lib/Haanga/Compiler/Parser.y" function yy_r57(){ $this->_retvalue = array('var_filter' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1684 "lib/Haanga/Compiler/Parser.php" -#line 190 "lib/Haanga/Compiler/Parser.y" +#line 1672 "lib/Haanga/Compiler/Parser.php" +#line 199 "lib/Haanga/Compiler/Parser.y" function yy_r61(){ $this->_retvalue = ""; } -#line 1687 "lib/Haanga/Compiler/Parser.php" -#line 192 "lib/Haanga/Compiler/Parser.y" +#line 1675 "lib/Haanga/Compiler/Parser.php" +#line 201 "lib/Haanga/Compiler/Parser.y" function yy_r63(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1690 "lib/Haanga/Compiler/Parser.php" -#line 194 "lib/Haanga/Compiler/Parser.y" +#line 1678 "lib/Haanga/Compiler/Parser.php" +#line 203 "lib/Haanga/Compiler/Parser.y" function yy_r65(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 1693 "lib/Haanga/Compiler/Parser.php" -#line 198 "lib/Haanga/Compiler/Parser.y" +#line 1681 "lib/Haanga/Compiler/Parser.php" +#line 207 "lib/Haanga/Compiler/Parser.y" function yy_r67(){ $this->_retvalue = array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1696 "lib/Haanga/Compiler/Parser.php" -#line 201 "lib/Haanga/Compiler/Parser.y" +#line 1684 "lib/Haanga/Compiler/Parser.php" +#line 210 "lib/Haanga/Compiler/Parser.y" function yy_r70(){ $this->_retvalue = array('op_expr' => trim(@$this->yystack[$this->yyidx + -1]->minor), $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1699 "lib/Haanga/Compiler/Parser.php" -#line 203 "lib/Haanga/Compiler/Parser.y" +#line 1687 "lib/Haanga/Compiler/Parser.php" +#line 212 "lib/Haanga/Compiler/Parser.y" function yy_r72(){ $this->_retvalue = array('op_expr' => 'expr', $this->yystack[$this->yyidx + -1]->minor); } -#line 1702 "lib/Haanga/Compiler/Parser.php" -#line 207 "lib/Haanga/Compiler/Parser.y" +#line 1690 "lib/Haanga/Compiler/Parser.php" +#line 216 "lib/Haanga/Compiler/Parser.y" function yy_r74(){ if (!is_array($this->yystack[$this->yyidx + -2]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor); } else { $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } $this->_retvalue[]=array('object' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1705 "lib/Haanga/Compiler/Parser.php" -#line 208 "lib/Haanga/Compiler/Parser.y" - function yy_r75(){ if (!is_array($this->yystack[$this->yyidx + -2]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor); } else { $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } $this->_retvalue[]=$this->yystack[$this->yyidx + 0]->minor; } -#line 1708 "lib/Haanga/Compiler/Parser.php" -#line 209 "lib/Haanga/Compiler/Parser.y" +#line 1693 "lib/Haanga/Compiler/Parser.php" +#line 217 "lib/Haanga/Compiler/Parser.y" + function yy_r75(){ if (!is_array($this->yystack[$this->yyidx + -2]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor); } else { $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } $this->_retvalue[] = ($this->compiler->var_is_object($this->_retvalue)) ? array('object' => $this->yystack[$this->yyidx + 0]->minor) : $this->yystack[$this->yyidx + 0]->minor; } +#line 1696 "lib/Haanga/Compiler/Parser.php" +#line 218 "lib/Haanga/Compiler/Parser.y" function yy_r76(){ if (!is_array($this->yystack[$this->yyidx + -3]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -3]->minor); } else { $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor; } $this->_retvalue[]=$this->yystack[$this->yyidx + -1]->minor; } -#line 1711 "lib/Haanga/Compiler/Parser.php" +#line 1699 "lib/Haanga/Compiler/Parser.php" /** * placeholder for the left hand side in a reduce operation. @@ -1821,7 +1809,7 @@ static public $yy_action = array( $expect[] = self::$yyTokenName[$token]; } throw new Exception('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. '), expected one of: ' . implode(',', $expect)); -#line 1831 "lib/Haanga/Compiler/Parser.php" +#line 1819 "lib/Haanga/Compiler/Parser.php" } /** @@ -1841,7 +1829,7 @@ static public $yy_action = array( ** parser accepts */ #line 44 "lib/Haanga/Compiler/Parser.y" -#line 1852 "lib/Haanga/Compiler/Parser.php" +#line 1840 "lib/Haanga/Compiler/Parser.php" } /** diff --git a/lib/Haanga/Compiler/Parser.y b/lib/Haanga/Compiler/Parser.y index 91d5c9a..64c9a25 100644 --- a/lib/Haanga/Compiler/Parser.y +++ b/lib/Haanga/Compiler/Parser.y @@ -110,17 +110,26 @@ stmt ::= T_LOAD string(B). { } /* FOR loop */ -for_stmt(A) ::= T_FOR varname(B) T_IN filtered_var(C) T_CLOSE_TAG body(D) T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG. { - A = array('operation' => 'loop', 'variable' => B, 'array' => C, 'body' => D, 'index' => NULL); +for_def(A) ::= T_FOR varname(B) T_IN filtered_var(C) T_CLOSE_TAG . { + $this->compiler->set_context(B, array()); + A = array('operation' => 'loop', 'variable' => B, 'index' => NULL, 'array' => C); } -for_stmt(A) ::= T_FOR varname(I) T_COMMA varname(B) T_IN filtered_var(C) T_CLOSE_TAG body(D) T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG. { - A = array('operation' => 'loop', 'variable' => B, 'array' => C, 'body' => D, 'index' => I); + +for_def(A) ::= T_FOR varname(I) T_COMMA varname(B) T_IN filtered_var(C) T_CLOSE_TAG . { + $this->compiler->set_context(B, array()); + A = array('operation' => 'loop', 'variable' => B, 'index' => I, 'array' => C); } -for_stmt(A) ::= T_FOR varname(B) T_IN filtered_var(C) T_CLOSE_TAG body(D) T_OPEN_TAG T_EMPTY T_CLOSE_TAG body(E) T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG. { - A = array('operation' => 'loop', 'variable' => B, 'array' => C, 'body' => D, 'empty' => E, 'index' => NULL); + + +for_stmt(A) ::= for_def(B) body(D) T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG. { + A = B; + A['body'] = D; } -for_stmt(A) ::= T_FOR varname(I) T_COMMA varname(B) T_IN filtered_var(C) T_CLOSE_TAG body(D) T_OPEN_TAG T_EMPTY T_CLOSE_TAG body(E) T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG. { - A = array('operation' => 'loop', 'variable' => B, 'array' => C, 'body' => D, 'empty' => E, 'index' => I); + +for_stmt(A) ::= for_def(B) body(D) T_OPEN_TAG T_EMPTY T_CLOSE_TAG body(E) T_OPEN_TAG T_CLOSEFOR T_CLOSE_TAG. { + A = B; + A['body'] = D; + A['empty'] = E; } /* IF */ if_stmt(A) ::= T_IF expr(B) T_CLOSE_TAG body(X) T_OPEN_TAG T_ENDIF T_CLOSE_TAG. { A = array('operation' => 'if', 'expr' => B, 'body' => X); } @@ -206,7 +215,7 @@ expr(A) ::= fvar_or_string(B). { A = B; } /* Variable name */ varname(A) ::= varname(B) T_OBJ T_ALPHA(C). { if (!is_array(B)) { A = array(B); } else { A = B; } A[]=array('object' => C);} -varname(A) ::= varname(B) T_DOT T_ALPHA(C). { if (!is_array(B)) { A = array(B); } else { A = B; } A[]=C;} +varname(A) ::= varname(B) T_DOT T_ALPHA(C). { if (!is_array(B)) { A = array(B); } else { A = B; } A[] = ($this->compiler->var_is_object(A)) ? array('object' => C) : C;} varname(A) ::= varname(B) T_BRACKETS_OPEN var_or_string(C) T_BRACKETS_CLOSE. { if (!is_array(B)) { A = array(B); } else { A = B; } A[]=C;} varname(A) ::= T_ALPHA(B). { A = B; } /* T_CUSTOM|T_CUSTOM_BLOCK are also T_ALPHA */ diff --git a/tests/assert_templates/object.tpl b/tests/assert_templates/object.tpl index 76aabbe..db83690 100644 --- a/tests/assert_templates/object.tpl +++ b/tests/assert_templates/object.tpl @@ -1,4 +1,4 @@ {{ obj->name }} -{{ obj->obj.name }} +{{ obj.obj.name }} {{ arr.obj->name }} {{ arr.obj->obj.name }} diff --git a/tests/templateTest.php b/tests/templateTest.php index b16f716..1c88594 100644 --- a/tests/templateTest.php +++ b/tests/templateTest.php @@ -40,8 +40,8 @@ class templateTest extends PHPUnit_Framework_TestCase /** - * @dataProvider tplProvider - */ + * @dataProvider tplProvider + * / public function testCLICompiler($test_file, $data, $expected) { TestSuite::init(); @@ -61,6 +61,7 @@ class templateTest extends PHPUnit_Framework_TestCase $this->assertEquals($output, $expected); } + /* */ public function tplProvider() { diff --git a/tests/tmp/assert_templates_load.tpl.php b/tests/tmp/assert_templates_load.tpl.php index dd0bff2..2e42d78 100644 --- a/tests/tmp/assert_templates_load.tpl.php +++ b/tests/tmp/assert_templates_load.tpl.php @@ -15,7 +15,7 @@ function haanga_8d56a9a504af63b0aa1f9e966ad860de9c65c99b($vars, $return=FALSE, $ $mnm_next = ($total < 0 || $mnm_current < $mnm_total ? $mnm_current + 1 : FALSE); $mnm_pages = range($mnm_start, ($mnm_end < $mnm_total ? $mnm_end : $mnm_total)); echo "\n"; - if ($mnm_prev) { + if (empty($mnm_prev) === FALSE) { echo "\n « Previous\n"; } else { echo "\n « Previous\n"; @@ -39,7 +39,7 @@ function haanga_8d56a9a504af63b0aa1f9e966ad860de9c65c99b($vars, $return=FALSE, $ echo "\n ...\n ".htmlentities($mnm_total)."\n"; } echo "\n\n"; - if ($mnm_next) { + if (empty($mnm_next) === FALSE) { echo "\n » Next\n"; } else { echo "\n » Next\n"; diff --git a/tests/tmp/assert_templates_loop.tpl.php b/tests/tmp/assert_templates_loop.tpl.php index 6dd492c..4c612d8 100644 --- a/tests/tmp/assert_templates_loop.tpl.php +++ b/tests/tmp/assert_templates_loop.tpl.php @@ -25,7 +25,7 @@ function haanga_4726e18009acee8a1c86a79b620c7ded71be5ddf($vars, $return=FALSE, $ $islast_1 = $forcounter1_1 == $psize_1; foreach ($array as $i) { $buffer1 = "\n "; - if ($islast_1) { + if (empty($islast_1) === FALSE) { $buffer1 .= " Last ".htmlentities($i); } $buffer1 .= "\n\n"; @@ -43,7 +43,7 @@ function haanga_4726e18009acee8a1c86a79b620c7ded71be5ddf($vars, $return=FALSE, $ $buffer1 .= "\n "; foreach ($arr as $val) { $buffer1 .= "\n "; - if ($islast_1) { + if (empty($islast_1) === FALSE) { $buffer1 .= " Last ".htmlentities($k); } $buffer1 .= "\n "; @@ -63,7 +63,7 @@ function haanga_4726e18009acee8a1c86a79b620c7ded71be5ddf($vars, $return=FALSE, $ $buffer1 .= "\n "; foreach ($arr as $val) { $buffer1 .= "\n "; - if ($isfirst_1) { + if (empty($isfirst_1) === FALSE) { $buffer1 .= " first ".htmlentities($k); } $buffer1 .= "\n "; diff --git a/tests/tmp/assert_templates_regroup.tpl.php b/tests/tmp/assert_templates_regroup.tpl.php index 059ab61..a817a08 100644 --- a/tests/tmp/assert_templates_regroup.tpl.php +++ b/tests/tmp/assert_templates_regroup.tpl.php @@ -8,7 +8,6 @@ function haanga_e3288a8c38d2925df1b81c50c72b7eee31f8c2f9($vars, $return=FALSE, $ if ($return == TRUE) { ob_start(); } - /* Test regroup with filters, and without filters */ echo "\n"; /* Temporary sorting */ $sorted_users = Haanga_Extension_Filter_Dictsort::main($users, $regroup_by); @@ -57,10 +56,10 @@ function haanga_e3288a8c38d2925df1b81c50c72b7eee31f8c2f9($vars, $return=FALSE, $ $revcount0_2 = $psize_2 - 1; foreach ($user["list"] as $u) { echo "\n ".$forcounter1_2."-".$revcount_2."-".$revcount0_2." (".$forcounter1_1."). ".htmlentities(ucfirst($u["name"]))." ("; - if ($isfirst_2) { + if (empty($isfirst_2) === FALSE) { echo "first"; } else { - if ($islast_2) { + if (empty($islast_2) === FALSE) { echo "last"; } } diff --git a/tests/tmp/assert_templates_variable_existe.tpl.php b/tests/tmp/assert_templates_variable_existe.tpl.php index 23efd0e..7663349 100644 --- a/tests/tmp/assert_templates_variable_existe.tpl.php +++ b/tests/tmp/assert_templates_variable_existe.tpl.php @@ -6,7 +6,7 @@ function haanga_d0e8258f9bf65ffe46eddfe8347bb2467fc069ea($vars, $return=FALSE, $ if ($return == TRUE) { ob_start(); } - if ((empty($var["exists"]) == TRUE ? "" : $var["exists"])) { + if ((empty($var->exists) == TRUE ? "" : $var->exists)) { echo " Yes "; } else { echo " No "; -- 2.11.4.GIT