From 4ee0834da8578cab6f63fbf03a96f4ef6562c183 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=A9sar=20D=2E=20Rodas?= Date: Fri, 16 Jul 2010 03:12:30 -0400 Subject: [PATCH] - Added tests, tags and filters - dictsort - reverse - cycle (moved from the main class to tags/*) --- haanga/extensions.php | 5 +- haanga/filters/dictsort.php | 21 + haanga/filters/reverse.php | 13 + haanga/generator.php | 12 +- haanga/haanga.php | 157 ++-- haanga/lexer.lex | 6 +- haanga/lexer.php | 237 +++-- haanga/parser.php | 949 ++++++++++----------- haanga/parser.y | 11 +- haanga/tags/cycle.php | 48 ++ haanga/tags/dictsort.php | 33 + tests/assert_templates/ifchanged.html | 17 +- tests/assert_templates/ifchanged.php | 10 +- tests/assert_templates/ifchanged.tpl | 5 +- tests/assert_templates/join.html | 1 + tests/assert_templates/join.tpl | 1 + tests/assert_templates/regroup.html | 10 +- tests/assert_templates/regroup.tpl | 2 +- tests/err_templates/loop_varname.tpl | 6 + tests/err_templates/reverse.tpl | 1 + tests/templateTest.php | 4 +- .../1d992f3d68f25e0f67960320816915d87f8e6120.php | 2 +- .../33ff616729fa5b4a494db28dee3c3f04cecdd01d.php | 2 +- .../4726e18009acee8a1c86a79b620c7ded71be5ddf.php | 6 +- .../7c948c919295fb106667df66f458e608eb775422.php | 2 +- .../be17029b5fd2998df7c922a92652b6886d7780fd.php | 11 +- .../e3288a8c38d2925df1b81c50c72b7eee31f8c2f9.php | 3 + 27 files changed, 848 insertions(+), 727 deletions(-) create mode 100644 haanga/filters/dictsort.php create mode 100644 haanga/filters/reverse.php create mode 100644 haanga/tags/cycle.php create mode 100644 haanga/tags/dictsort.php create mode 100644 tests/err_templates/loop_varname.tpl create mode 100644 tests/err_templates/reverse.tpl diff --git a/haanga/extensions.php b/haanga/extensions.php index 9ceda49..2177706 100644 --- a/haanga/extensions.php +++ b/haanga/extensions.php @@ -95,16 +95,17 @@ Abstract Class Extensions * @param string $name extension name * @param Haanga_Main Compiler object * @param array Arrays + * @param mixed Extra param * * @return array */ - function generator($name, Haanga_Main $compiler, $args) + function generator($name, Haanga_Main $compiler, $args, $extra=NULL) { if (!$this->hasGenerator($name)) { return array(); } $zclass = $this->getClassName($name); - return $zclass::generator($compiler, $args); + return $zclass::generator($compiler, $args, $extra); } // }}} diff --git a/haanga/filters/dictsort.php b/haanga/filters/dictsort.php new file mode 100644 index 0000000..f0981d3 --- /dev/null +++ b/haanga/filters/dictsort.php @@ -0,0 +1,21 @@ + $item) { + $field[$key] = $item[$sort_by]; + } + + array_multisort($field, SORT_ASC, $array); + return $array; + } +} diff --git a/haanga/filters/reverse.php b/haanga/filters/reverse.php new file mode 100644 index 0000000..290f4c4 --- /dev/null +++ b/haanga/filters/reverse.php @@ -0,0 +1,13 @@ +expr_exec('array_reverse', + $args[0], $compiler->expr_TRUE()); + } +} diff --git a/haanga/generator.php b/haanga/generator.php index fc7b333..447ceda 100644 --- a/haanga/generator.php +++ b/haanga/generator.php @@ -51,7 +51,6 @@ class Haanga_CodeGenerator foreach ($op_code as $op) { $method = "php_{$op['op']}"; if (!is_callable(array($this, $method))) { - var_dump($code, $op); throw new Exception("CodeGenerator: Missing method $method"); } switch ($op['op']) { @@ -209,9 +208,6 @@ class Haanga_CodeGenerator protected function php_generate_list($array) { $code = ""; - if (!is_array($array)) { - var_dump(debug_backtrace());die(); - } foreach ($array as $value) { $code .= $this->php_generate_declare(array($value)); $code .= ", "; @@ -228,7 +224,7 @@ class Haanga_CodeGenerator continue; } if (!is_Array($op[$i])) { - var_dump($op);die('error1'); + throw new CompilerException("Malformed declaration ".print_r($op, TRUE)); } $key = key($op[$i]); $value = current($op[$i]); @@ -292,9 +288,11 @@ class Haanga_CodeGenerator $code .= $this->php_generate_declare(array($op[$i]['false'])); $code .= ")."; break; + case 'constant': + $code = $value; + break; default: - var_dump($op);die('error'); - throw new Exception("Don't know how to declare {$key} = {$value}"); + throw new Exception("Don't know how to declare {$key} = {$value} (".print_r($op[$i], TRUE)); } } diff --git a/haanga/haanga.php b/haanga/haanga.php index 521df59..96b973d 100644 --- a/haanga/haanga.php +++ b/haanga/haanga.php @@ -77,7 +77,6 @@ class Haanga_Main protected $ob_start=0; protected $append; protected $prepend_op; - protected $cycle; /** * Table which contains all variables * aliases defined in the template @@ -263,6 +262,13 @@ class Haanga_Main function op_foreach($array, $value, $key=NULL) { + foreach (array('array', 'value', 'key') as $var) { + $var = &$$var; + if (is_array($var) && isset($var['var'])) { + $var = $var['var']; + } + unset($var); + } $def = array('op' => 'foreach', 'array' => $array, 'value' => $value); if ($key) { $def['key'] = $key; @@ -331,6 +337,11 @@ class Haanga_Main return array('expr_cond' => $expr, 'true' => $true, 'false' => $false); } + function expr_const($name) + { + return array('constant' => $name); + } + /** * Generate code to call base template * @@ -344,6 +355,7 @@ class Haanga_Main $this->expr_var('blocks') ); } + /** * return a function call for isset($var) === $isset * @@ -642,19 +654,24 @@ class Haanga_Main } // }}} - // generate_op_print_var {{{ + // get_var_filtered {{{ /** - * Generate code to print a variable with its filters, if there is any. + * This method handles all the filtered variable (piped_list(X)'s + * output in the parser. * - * All variable (except those flagged as |safe) are automatically - * escaped if autoescape is "on". + * + * @param array $variable (Output of piped_list(B) (parser)) + * @param array &$varname Variable name + * + * @return expr * */ - protected function generate_op_print_var($details, &$out) + function get_var_filtering($variable, &$varname) { - if (count($details['variable']) > 1) { - $count = count($details['variable']); - $target = $this->generate_variable_name($details['variable'][0]); + $this->var_is_safe = FALSE; + if (count($variable) > 1) { + $count = count($variable); + $target = $this->generate_variable_name($variable[0]); if (!isset($target['var'])) { /* block.super can't have any filter */ @@ -662,7 +679,7 @@ class Haanga_Main } for ($i=1; $i < $count; $i++) { - $func_name = $details['variable'][$i]; + $func_name = $variable[$i]; if ($func_name == 'escape') { /* to avoid double cleaning */ $this->var_is_safe = TRUE; @@ -670,36 +687,44 @@ class Haanga_Main $args = array(isset($exec) ? $exec : $target); $exec = $this->do_filtering($func_name, $args); } - unset($details['variable']); + unset($variable); + $varname = $args[0]; $details = $exec; } else { - $details = $this->generate_variable_name($details['variable'][0]); + $details = $this->generate_variable_name($variable[0]); + $varname = $variable[0]; - if (!isset($details['var'])) { - /* generate_variable_name didn't replied a variable, weird case - currently just used for {{block.super}}. - */ - $this->generate_op_print($details, $out); - return; - } } - /* check if variable is a reference to parent block (which can't - have any filter */ - $is_super = !isset($target) && is_string($details['var'][0]) && strpos($details['var'][0], self::$block_var) !== FALSE; + return $details; + } + // }}} - if (!$this->var_is_safe && $this->autoescape &&!$is_super) { - if (!isset($target)) { - $target = $details; - } - $args = array(isset($exec) ? $exec : $target); - $exec = $this->do_filtering('escape', $args); - $details = $exec; + // generate_op_print_var {{{ + /** + * Generate code to print a variable with its filters, if there is any. + * + * All variable (except those flagged as |safe) are automatically + * escaped if autoescape is "on". + * + */ + protected function generate_op_print_var($details, &$out) + { + + $details = $this->get_var_filtering($details['variable'], $variable); + + if (!isset($details['var']) && !isset($variable['var'])) { + /* generate_variable_name didn't replied a variable, weird case + currently just used for {{block.super}}. + */ + $this->generate_op_print($details, $out); + return; } - if ($this->var_is_safe) { - /* restore var_is_safe to FALSE for next variables to print */ - $this->var_is_safe = FALSE; + + if (!$this->var_is_safe && $this->autoescape) { + $args = array($details); + $details = $this->do_filtering('escape', $args); } $this->generate_op_print($details, $out); @@ -748,47 +773,6 @@ class Haanga_Main } // }}} - // cycle 'uno' var {{{ - protected function generate_op_cycle($details, &$out) - { - static $cycle = 0; - - $index = 'index_'.$cycle; - $def = 'def_cycle_'.$cycle; - - if (count($details['vars']) == 1 && isset($details['vars'][0]['var']) && isset($this->cycle[$details['vars'][0]['var']])) { - $id = $this->cycle[$details['vars'][0]['var']]; - $index = 'index_'.$id; - $def = 'def_cycle_'.$id; - } else { - $out[] = $this->op_declare($def, $this->expr_array_first($details['vars'])); - } - - /* isset($var) == FALSE */ - $expr = $this->expr('==', $this->expr_exec('isset', $this->expr_var($index)), FALSE); - - /* ($foo + 1) % count($bar) */ - $inc = $this->expr('%', - $this->expr('expr', - $this->expr('+', $this->expr_var($index), 1) - ), - $this->expr_exec('count', $this->expr_var($def)) - ); - - - - - if (!isset($details['as'])) { - $out[] = $this->op_declare($index, $this->expr_cond($expr, $this->expr_number(0), array('expr' => $inc))); - $var = $this->expr_var($def, $this->expr_var($index)); - $this->generate_op_print(array("variable" => $var['var']), $out); - } else { - $this->cycle[$details['as']] = $cycle; - } - $cycle++; - } - // }}} - // {# something #} {{{ protected function generate_op_comment($details, &$out) { @@ -871,10 +855,20 @@ class Haanga_Main protected function generate_op_regroup($details, &$out) { $out[] = $this->op_declare($details['as'], $this->expr_array_first(array())); + $array = $this->get_var_filtering($details['array'], $varname); + if (!isset($details['var']) && !isset($varname['var'])) { + /* generate_variable_name didn't replied a variable, weird case + currently just used for {{block.super}}. + */ + throw new CompilerException("Invalid variable name {$details['array']}"); + } + if (isset($array['exec'])) { + $out[] = $this->op_declare($varname, $array); + } $var = $this->expr_var('item', $details['row']); $out[] = $this->op_comment("Temporary sorting"); - $out[] = $this->op_foreach($details['array'], 'item'); + $out[] = $this->op_foreach($varname, 'item'); $out[] = $this->op_declare(array('temp_group', $var, NULL), $this->expr_var('item')); @@ -966,7 +960,7 @@ class Haanga_Main // }}} // Print {{{ - protected function generate_op_print($details, &$out) + public function generate_op_print($details, &$out) { $last = count($out)-1; if (isset($details['variable'])) { @@ -1226,7 +1220,7 @@ class Haanga_Main $tagFunction = $tags->getFunctionAlias($tag_name); if (!$tagFunction && !$tags->hasGenerator($tag_name)) { - $function = $this->get_custom_tag($tag_name); + $function = $this->get_custom_tag($tag_name, isset($details['as'])); } else { $function = $tagFunction; } @@ -1253,7 +1247,16 @@ class Haanga_Main $args = array_merge(array($function), $details['list']); if ($tags->hasGenerator($tag_name)) { - $exec = $tags->generator($tag_name, $this, $args); + $exec = $tags->generator($tag_name, $this, $details['list'], $var); + if ($exec InstanceOf ArrayIterator) { + /* + The generator returned more than one statement, + so we assume the output is already handled + by one of those stmts. + */ + $out = array_merge($out, $exec->getArrayCopy()); + return; + } } else { $exec = call_user_func_array(array($this, 'expr_exec'), $args); } diff --git a/haanga/lexer.lex b/haanga/lexer.lex index a30f203..a4fac9a 100644 --- a/haanga/lexer.lex +++ b/haanga/lexer.lex @@ -50,7 +50,7 @@ function do_parsing($template, $ignore_whitespace=FALSE) $parser->doParse($lexer->token, $lexer->value); } } catch (Exception $e) { - throw new Exception($e->getMessage(). ' on line '.$lexer->getLine()); + throw new CompilerException($e->getMessage(). ' on line '.$lexer->getLine()); } $parser->doParse(0, 0); return $parser->body; @@ -150,10 +150,6 @@ html { $this->token = Parser::T_EMPTY; } -"cycle" token_end { - $this->token = Parser::T_CYCLE; -} - "firstof" token_end { $this->token = Parser::T_FIRST_OF; } diff --git a/haanga/lexer.php b/haanga/lexer.php index d4ff4d8..3e6c7f1 100644 --- a/haanga/lexer.php +++ b/haanga/lexer.php @@ -50,7 +50,7 @@ function do_parsing($template, $ignore_whitespace=FALSE) $parser->doParse($lexer->token, $lexer->value); } } catch (Exception $e) { - throw new Exception($e->getMessage(). ' on line '.$lexer->getLine()); + throw new CompilerException($e->getMessage(). ' on line '.$lexer->getLine()); } $parser->doParse(0, 0); return $parser->body; @@ -306,19 +306,18 @@ class Haanga_Lexer 47 => 0, 48 => 0, 49 => 0, - 50 => 0, - 51 => 1, + 50 => 1, + 52 => 0, 53 => 0, - 54 => 0, - 55 => 1, - 57 => 2, - 60 => 1, - 62 => 0, + 54 => 1, + 56 => 2, + 59 => 1, + 61 => 0, ); if ($this->N >= strlen($this->data)) { return false; // end of input } - $yy_global_pattern = "/^(%\\})|^(\\.)|^(for[^a-zA-Z0-9])|^(empty[^a-zA-Z0-9])|^(cycle[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)/"; + $yy_global_pattern = "/^(%\\})|^(\\.)|^(for[^a-zA-Z0-9])|^(empty[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)/"; do { if (preg_match($yy_global_pattern, substr($this->data, $this->N), $yymatches)) { @@ -358,63 +357,62 @@ class Haanga_Lexer // skip this token continue; } else { $yy_yymore_patterns = array( - 1 => array(0, "^(\\.)|^(for[^a-zA-Z0-9])|^(empty[^a-zA-Z0-9])|^(cycle[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 2 => array(0, "^(for[^a-zA-Z0-9])|^(empty[^a-zA-Z0-9])|^(cycle[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 3 => array(0, "^(empty[^a-zA-Z0-9])|^(cycle[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 4 => array(0, "^(cycle[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 5 => array(0, "^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 6 => array(0, "^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 7 => array(0, "^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 8 => array(0, "^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 9 => array(0, "^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 10 => array(0, "^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 11 => array(0, "^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 12 => array(0, "^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 13 => array(0, "^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 14 => array(0, "^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 15 => array(0, "^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 16 => array(0, "^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 17 => array(0, "^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 18 => array(0, "^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 19 => array(0, "^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 20 => array(0, "^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 21 => array(0, "^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 22 => array(0, "^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 23 => array(0, "^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 24 => array(0, "^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 25 => array(0, "^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 26 => array(0, "^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 27 => array(0, "^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 28 => array(0, "^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 29 => array(0, "^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 30 => array(0, "^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 31 => array(0, "^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 32 => array(0, "^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 33 => array(0, "^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 34 => array(0, "^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 35 => array(0, "^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 36 => array(0, "^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 37 => array(0, "^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 38 => array(0, "^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 39 => array(0, "^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 40 => array(0, "^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 41 => array(0, "^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 42 => array(0, "^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 43 => array(0, "^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 44 => array(0, "^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 45 => array(0, "^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 46 => array(0, "^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 47 => array(0, "^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 48 => array(0, "^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 49 => array(0, "^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 50 => array(0, "^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 51 => array(1, "^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 53 => array(1, "^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 54 => array(1, "^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 55 => array(2, "^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 57 => array(4, "^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), - 60 => array(5, "^([ \r\t\n]+)"), - 62 => array(5, ""), + 1 => array(0, "^(\\.)|^(for[^a-zA-Z0-9])|^(empty[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 2 => array(0, "^(for[^a-zA-Z0-9])|^(empty[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 3 => array(0, "^(empty[^a-zA-Z0-9])|^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 4 => array(0, "^(firstof[^a-zA-Z0-9])|^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 5 => array(0, "^(block[^a-zA-Z0-9])|^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 6 => array(0, "^(&&)|^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 7 => array(0, "^(AND)|^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 8 => array(0, "^(\\|\\|)|^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 9 => array(0, "^(OR)|^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 10 => array(0, "^(==)|^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 11 => array(0, "^(!=)|^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 12 => array(0, "^(>=)|^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 13 => array(0, "^(\\[)|^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 14 => array(0, "^(\\])|^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 15 => array(0, "^(>)|^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 16 => array(0, "^(<)|^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 17 => array(0, "^(=<)|^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 18 => array(0, "^(\\|)|^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 19 => array(0, "^(:)|^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 20 => array(0, "^(filter[^a-zA-Z0-9])|^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 21 => array(0, "^(regroup[^a-zA-Z0-9])|^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 22 => array(0, "^(endfilter[^a-zA-Z0-9])|^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 23 => array(0, "^(autoescape[^a-zA-Z0-9])|^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 24 => array(0, "^(endautoescape[^a-zA-Z0-9])|^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 25 => array(0, "^(endblock[^a-zA-Z0-9])|^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 26 => array(0, "^(ifchanged[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 27 => array(0, "^(else[^a-zA-Z0-9])|^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 28 => array(0, "^(endifchanged[^a-zA-Z0-9])|^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 29 => array(0, "^(in[^a-zA-Z0-9])|^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 30 => array(0, "^(endfor[^a-zA-Z0-9])|^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 31 => array(0, "^(with[^a-zA-Z0-9])|^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 32 => array(0, "^(endwith[^a-zA-Z0-9])|^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 33 => array(0, "^(as)|^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 34 => array(0, "^(on)|^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 35 => array(0, "^(off)|^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 36 => array(0, "^(by)|^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 37 => array(0, "^(if[^a-zA-Z0-9])|^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 38 => array(0, "^(else[^a-zA-Z0-9])|^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 39 => array(0, "^(endif[^a-zA-Z0-9])|^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 40 => array(0, "^(\\()|^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 41 => array(0, "^(\\))|^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 42 => array(0, "^(%)|^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 43 => array(0, "^(,)|^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 44 => array(0, "^(\\+)|^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 45 => array(0, "^(\\*)|^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 46 => array(0, "^(\/)|^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 47 => array(0, "^(')|^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 48 => array(0, "^(\")|^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 49 => array(0, "^(end([a-zA-Z][a-zA-Z0-9]*))|^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 50 => array(1, "^(extends[^a-zA-Z0-9])|^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 52 => array(1, "^(include[^a-zA-Z0-9])|^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 53 => array(1, "^(([0-9])+)|^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 54 => array(2, "^(([0-9])+\\.([0-9])+)|^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 56 => array(4, "^(([a-zA-Z_][a-zA-Z_0-9]*))|^([ \r\t\n]+)"), + 59 => array(5, "^([ \r\t\n]+)"), + 61 => array(5, ""), ); // yymore is needed @@ -495,266 +493,261 @@ class Haanga_Lexer function yy_r2_5($yy_subpatterns) { - $this->token = Parser::T_CYCLE; - } - function yy_r2_6($yy_subpatterns) - { - $this->token = Parser::T_FIRST_OF; } - function yy_r2_7($yy_subpatterns) + function yy_r2_6($yy_subpatterns) { $this->token = Parser::T_BLOCK; } - function yy_r2_8($yy_subpatterns) + function yy_r2_7($yy_subpatterns) { $this->token = Parser::T_AND; } - function yy_r2_9($yy_subpatterns) + function yy_r2_8($yy_subpatterns) { $this->token = Parser::T_AND; } - function yy_r2_10($yy_subpatterns) + function yy_r2_9($yy_subpatterns) { $this->token = Parser::T_OR; } - function yy_r2_11($yy_subpatterns) + function yy_r2_10($yy_subpatterns) { $this->token = Parser::T_OR; } - function yy_r2_12($yy_subpatterns) + function yy_r2_11($yy_subpatterns) { $this->token = Parser::T_EQ; } - function yy_r2_13($yy_subpatterns) + function yy_r2_12($yy_subpatterns) { $this->token = Parser::T_NE; } - function yy_r2_14($yy_subpatterns) + function yy_r2_13($yy_subpatterns) { $this->token = Parser::T_GE; } - function yy_r2_15($yy_subpatterns) + function yy_r2_14($yy_subpatterns) { $this->token = Parser::T_BRACKETS_OPEN; } - function yy_r2_16($yy_subpatterns) + function yy_r2_15($yy_subpatterns) { $this->token = Parser::T_BRACKETS_CLOSE; } - function yy_r2_17($yy_subpatterns) + function yy_r2_16($yy_subpatterns) { $this->token = Parser::T_GT; } - function yy_r2_18($yy_subpatterns) + function yy_r2_17($yy_subpatterns) { $this->token = Parser::T_LT; } - function yy_r2_19($yy_subpatterns) + function yy_r2_18($yy_subpatterns) { $this->token = Parser::T_LE; } - function yy_r2_20($yy_subpatterns) + function yy_r2_19($yy_subpatterns) { $this->token = Parser::T_PIPE; } - function yy_r2_21($yy_subpatterns) + function yy_r2_20($yy_subpatterns) { $this->token = Parser::T_COLON; } - function yy_r2_22($yy_subpatterns) + function yy_r2_21($yy_subpatterns) { $this->token = Parser::T_FILTER; } - function yy_r2_23($yy_subpatterns) + function yy_r2_22($yy_subpatterns) { $this->token = Parser::T_REGROUP; } - function yy_r2_24($yy_subpatterns) + function yy_r2_23($yy_subpatterns) { $this->token = Parser::T_END_FILTER; } - function yy_r2_25($yy_subpatterns) + function yy_r2_24($yy_subpatterns) { $this->token = Parser::T_AUTOESCAPE; } - function yy_r2_26($yy_subpatterns) + function yy_r2_25($yy_subpatterns) { $this->token = Parser::T_END_AUTOESCAPE; } - function yy_r2_27($yy_subpatterns) + function yy_r2_26($yy_subpatterns) { $this->token = Parser::T_END_BLOCK; } - function yy_r2_28($yy_subpatterns) + function yy_r2_27($yy_subpatterns) { $this->token = Parser::T_IFCHANGED; } - function yy_r2_29($yy_subpatterns) + function yy_r2_28($yy_subpatterns) { $this->token = Parser::T_ELSE; } - function yy_r2_30($yy_subpatterns) + function yy_r2_29($yy_subpatterns) { $this->token = Parser::T_ENDIFCHANGED; } - function yy_r2_31($yy_subpatterns) + function yy_r2_30($yy_subpatterns) { $this->token = Parser::T_IN; } - function yy_r2_32($yy_subpatterns) + function yy_r2_31($yy_subpatterns) { $this->token = Parser::T_CLOSEFOR; } - function yy_r2_33($yy_subpatterns) + function yy_r2_32($yy_subpatterns) { $this->token = Parser::T_WITH; } - function yy_r2_34($yy_subpatterns) + function yy_r2_33($yy_subpatterns) { $this->token = Parser::T_ENDWITH; } - function yy_r2_35($yy_subpatterns) + function yy_r2_34($yy_subpatterns) { $this->token = Parser::T_AS; } - function yy_r2_36($yy_subpatterns) + function yy_r2_35($yy_subpatterns) { $this->token = Parser::T_ON; } - function yy_r2_37($yy_subpatterns) + function yy_r2_36($yy_subpatterns) { $this->token = Parser::T_OFF; } - function yy_r2_38($yy_subpatterns) + function yy_r2_37($yy_subpatterns) { $this->token = Parser::T_BY; } - function yy_r2_39($yy_subpatterns) + function yy_r2_38($yy_subpatterns) { $this->token = Parser::T_IF; } - function yy_r2_40($yy_subpatterns) + function yy_r2_39($yy_subpatterns) { $this->token = Parser::T_ELSE; } - function yy_r2_41($yy_subpatterns) + function yy_r2_40($yy_subpatterns) { $this->token = Parser::T_ENDIF; } - function yy_r2_42($yy_subpatterns) + function yy_r2_41($yy_subpatterns) { $this->token = Parser::T_LPARENT; } - function yy_r2_43($yy_subpatterns) + function yy_r2_42($yy_subpatterns) { $this->token = Parser::T_RPARENT; } - function yy_r2_44($yy_subpatterns) + function yy_r2_43($yy_subpatterns) { $this->token = Parser::T_MOD; } - function yy_r2_45($yy_subpatterns) + function yy_r2_44($yy_subpatterns) { $this->token = Parser::T_COMMA; } - function yy_r2_46($yy_subpatterns) + function yy_r2_45($yy_subpatterns) { $this->token = Parser::T_PLUS; } - function yy_r2_47($yy_subpatterns) + function yy_r2_46($yy_subpatterns) { $this->token = Parser::T_TIMES; } - function yy_r2_48($yy_subpatterns) + function yy_r2_47($yy_subpatterns) { $this->token = Parser::T_DIV; } - function yy_r2_49($yy_subpatterns) + function yy_r2_48($yy_subpatterns) { $this->token = Parser::T_STRING_SINGLE_INIT; $this->yypushstate(self::IN_STRING_SINGLE); } - function yy_r2_50($yy_subpatterns) + function yy_r2_49($yy_subpatterns) { $this->token = Parser::T_STRING_DOUBLE_INIT; $this->yypushstate(self::IN_STRING_DOUBLE); } - function yy_r2_51($yy_subpatterns) + function yy_r2_50($yy_subpatterns) { $this->token = Parser::T_CUSTOM_END; } - function yy_r2_53($yy_subpatterns) + function yy_r2_52($yy_subpatterns) { $this->token = Parser::T_EXTENDS; } - function yy_r2_54($yy_subpatterns) + function yy_r2_53($yy_subpatterns) { $this->token = Parser::T_INCLUDE; } - function yy_r2_55($yy_subpatterns) + function yy_r2_54($yy_subpatterns) { $this->token = Parser::T_NUMERIC; } - function yy_r2_57($yy_subpatterns) + function yy_r2_56($yy_subpatterns) { $this->token = Parser::T_NUMERIC; } - function yy_r2_60($yy_subpatterns) + function yy_r2_59($yy_subpatterns) { $this->is_custom_tag(); } - function yy_r2_62($yy_subpatterns) + function yy_r2_61($yy_subpatterns) { return FALSE; diff --git a/haanga/parser.php b/haanga/parser.php index 99c3173..a4bfd84 100644 --- a/haanga/parser.php +++ b/haanga/parser.php @@ -217,10 +217,9 @@ class Haanga_yyStackEntry const T_ALPHA = 62; const T_BRACKETS_OPEN = 63; const T_BRACKETS_CLOSE = 64; - const T_CUSTOM = 65; - const YY_NO_ACTION = 281; - const YY_ACCEPT_ACTION = 280; - const YY_ERROR_ACTION = 279; + const YY_NO_ACTION = 280; + const YY_ACCEPT_ACTION = 279; + const YY_ERROR_ACTION = 278; /* 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 @@ -272,245 +271,251 @@ class Haanga_yyStackEntry ** shifting non-terminals after a reduce. ** self::$yy_default Default action for each state. */ - const YY_SZ_ACTTAB = 794; + const YY_SZ_ACTTAB = 824; static public $yy_action = array( - /* 0 */ 32, 55, 35, 112, 75, 168, 171, 24, 67, 107, - /* 10 */ 133, 53, 57, 65, 80, 199, 36, 20, 66, 144, - /* 20 */ 25, 142, 63, 160, 38, 129, 62, 33, 27, 26, - /* 30 */ 32, 153, 35, 112, 129, 184, 33, 24, 67, 58, - /* 40 */ 133, 110, 57, 129, 147, 33, 81, 20, 127, 140, - /* 50 */ 25, 107, 63, 129, 38, 33, 62, 203, 27, 26, - /* 60 */ 32, 48, 35, 112, 129, 86, 33, 24, 67, 129, - /* 70 */ 133, 33, 57, 280, 49, 146, 191, 20, 147, 119, - /* 80 */ 25, 125, 63, 149, 38, 83, 62, 201, 27, 26, - /* 90 */ 32, 39, 35, 112, 39, 178, 117, 24, 67, 189, - /* 100 */ 133, 114, 57, 165, 128, 76, 137, 20, 117, 29, - /* 110 */ 25, 107, 63, 82, 38, 165, 62, 203, 27, 26, - /* 120 */ 32, 164, 35, 112, 129, 173, 33, 24, 67, 189, - /* 130 */ 133, 77, 57, 69, 123, 179, 121, 20, 117, 31, - /* 140 */ 25, 64, 63, 87, 38, 165, 62, 186, 27, 26, - /* 150 */ 32, 109, 35, 112, 129, 147, 33, 24, 67, 189, - /* 160 */ 133, 185, 57, 196, 129, 60, 33, 20, 117, 28, - /* 170 */ 25, 156, 63, 52, 38, 165, 62, 177, 27, 26, - /* 180 */ 32, 170, 35, 112, 171, 189, 146, 24, 67, 147, - /* 190 */ 133, 135, 57, 61, 117, 30, 129, 20, 33, 159, - /* 200 */ 25, 165, 63, 88, 38, 204, 62, 169, 27, 26, - /* 210 */ 32, 41, 35, 112, 117, 157, 202, 24, 67, 136, - /* 220 */ 133, 165, 57, 131, 129, 85, 33, 20, 117, 188, - /* 230 */ 25, 194, 63, 182, 38, 165, 62, 181, 27, 26, - /* 240 */ 190, 23, 21, 17, 17, 17, 17, 17, 17, 17, - /* 250 */ 19, 19, 22, 22, 22, 129, 32, 33, 35, 112, - /* 260 */ 22, 22, 22, 24, 67, 134, 133, 187, 57, 163, - /* 270 */ 130, 39, 162, 20, 117, 115, 25, 99, 63, 94, - /* 280 */ 38, 165, 62, 97, 27, 26, 32, 95, 35, 112, - /* 290 */ 46, 200, 141, 24, 67, 143, 133, 44, 57, 172, - /* 300 */ 117, 113, 116, 20, 117, 103, 25, 165, 63, 105, - /* 310 */ 38, 165, 62, 104, 27, 26, 32, 111, 35, 112, - /* 320 */ 40, 139, 139, 24, 67, 106, 133, 197, 57, 102, - /* 330 */ 126, 47, 108, 20, 183, 96, 25, 100, 63, 98, - /* 340 */ 38, 51, 62, 54, 27, 26, 45, 23, 21, 17, - /* 350 */ 17, 17, 17, 17, 17, 17, 19, 19, 22, 22, - /* 360 */ 22, 122, 32, 165, 35, 112, 129, 74, 33, 24, - /* 370 */ 67, 107, 133, 129, 57, 33, 92, 203, 167, 20, - /* 380 */ 165, 50, 25, 56, 63, 42, 38, 124, 62, 43, - /* 390 */ 27, 26, 32, 165, 35, 112, 84, 192, 165, 24, - /* 400 */ 67, 165, 133, 165, 57, 165, 165, 165, 165, 20, - /* 410 */ 145, 165, 25, 165, 63, 165, 38, 165, 62, 165, - /* 420 */ 27, 26, 32, 165, 35, 112, 165, 165, 165, 24, - /* 430 */ 67, 165, 133, 165, 57, 129, 129, 33, 33, 20, - /* 440 */ 165, 165, 25, 120, 63, 165, 38, 165, 62, 165, - /* 450 */ 27, 26, 32, 165, 35, 112, 165, 165, 165, 24, - /* 460 */ 67, 165, 133, 165, 57, 165, 165, 165, 165, 20, - /* 470 */ 165, 165, 25, 138, 63, 165, 38, 165, 62, 165, - /* 480 */ 27, 26, 32, 165, 35, 112, 165, 165, 165, 24, - /* 490 */ 67, 165, 133, 165, 57, 165, 165, 165, 165, 20, - /* 500 */ 165, 165, 25, 165, 63, 165, 38, 165, 62, 165, - /* 510 */ 27, 26, 21, 17, 17, 17, 17, 17, 17, 17, - /* 520 */ 19, 19, 22, 22, 22, 161, 165, 78, 132, 150, - /* 530 */ 155, 154, 151, 152, 205, 195, 147, 165, 174, 175, - /* 540 */ 176, 34, 165, 17, 17, 17, 17, 17, 17, 17, - /* 550 */ 19, 19, 22, 22, 22, 193, 165, 165, 158, 73, - /* 560 */ 165, 72, 68, 70, 147, 165, 165, 146, 198, 165, - /* 570 */ 147, 165, 79, 165, 165, 165, 71, 147, 165, 165, - /* 580 */ 165, 147, 34, 165, 165, 165, 158, 73, 165, 72, - /* 590 */ 59, 147, 165, 165, 165, 146, 34, 165, 147, 158, - /* 600 */ 73, 165, 72, 158, 73, 165, 72, 165, 146, 147, - /* 610 */ 165, 147, 146, 158, 73, 147, 72, 165, 165, 147, - /* 620 */ 165, 165, 146, 147, 34, 147, 165, 165, 165, 165, - /* 630 */ 165, 166, 73, 165, 72, 165, 165, 18, 165, 165, - /* 640 */ 146, 158, 73, 147, 72, 158, 73, 8, 72, 165, - /* 650 */ 146, 165, 165, 147, 146, 165, 165, 147, 122, 165, - /* 660 */ 165, 122, 180, 118, 165, 37, 165, 165, 107, 165, - /* 670 */ 122, 107, 165, 93, 203, 167, 101, 203, 167, 165, - /* 680 */ 107, 122, 165, 165, 122, 90, 203, 167, 9, 165, - /* 690 */ 165, 107, 165, 165, 107, 122, 91, 203, 167, 89, - /* 700 */ 203, 167, 6, 180, 118, 107, 37, 5, 165, 165, - /* 710 */ 148, 203, 167, 14, 165, 165, 165, 180, 118, 13, - /* 720 */ 37, 165, 180, 118, 11, 37, 165, 165, 180, 118, - /* 730 */ 1, 37, 165, 165, 180, 118, 3, 37, 165, 180, - /* 740 */ 118, 4, 37, 165, 165, 180, 118, 2, 37, 165, - /* 750 */ 165, 180, 118, 15, 37, 165, 180, 118, 12, 37, - /* 760 */ 165, 165, 180, 118, 7, 37, 165, 165, 180, 118, - /* 770 */ 16, 37, 165, 180, 118, 10, 37, 165, 165, 180, - /* 780 */ 118, 165, 37, 165, 165, 180, 118, 165, 37, 165, - /* 790 */ 180, 118, 165, 37, + /* 0 */ 35, 149, 36, 114, 149, 173, 70, 24, 63, 40, + /* 10 */ 133, 109, 59, 65, 197, 138, 138, 22, 127, 139, + /* 20 */ 25, 107, 67, 48, 39, 184, 38, 180, 27, 26, + /* 30 */ 35, 149, 36, 114, 149, 146, 46, 24, 63, 129, + /* 40 */ 133, 33, 59, 58, 129, 62, 33, 22, 143, 125, + /* 50 */ 25, 124, 67, 129, 39, 33, 38, 111, 27, 26, + /* 60 */ 35, 56, 36, 114, 165, 146, 153, 24, 63, 66, + /* 70 */ 133, 186, 59, 157, 171, 116, 129, 22, 33, 140, + /* 80 */ 25, 142, 67, 80, 39, 107, 38, 85, 27, 26, + /* 90 */ 35, 180, 36, 114, 129, 110, 33, 24, 63, 147, + /* 100 */ 133, 179, 59, 107, 119, 107, 120, 22, 60, 175, + /* 110 */ 25, 180, 67, 83, 39, 190, 38, 136, 27, 26, + /* 120 */ 35, 40, 36, 114, 111, 30, 111, 24, 63, 189, + /* 130 */ 133, 165, 59, 165, 128, 170, 137, 22, 171, 129, + /* 140 */ 25, 33, 67, 81, 39, 75, 38, 87, 27, 26, + /* 150 */ 35, 164, 36, 114, 192, 34, 191, 24, 63, 160, + /* 160 */ 133, 185, 59, 135, 129, 203, 33, 22, 68, 196, + /* 170 */ 25, 156, 67, 168, 39, 78, 38, 162, 27, 26, + /* 180 */ 35, 55, 36, 114, 129, 88, 33, 24, 63, 178, + /* 190 */ 133, 86, 59, 129, 130, 33, 40, 22, 111, 77, + /* 200 */ 25, 159, 67, 194, 39, 165, 38, 84, 27, 26, + /* 210 */ 35, 163, 36, 114, 129, 182, 33, 24, 63, 129, + /* 220 */ 133, 33, 59, 181, 129, 187, 33, 22, 40, 188, + /* 230 */ 25, 123, 67, 201, 39, 190, 38, 53, 27, 26, + /* 240 */ 35, 105, 36, 114, 111, 29, 102, 24, 63, 50, + /* 250 */ 133, 165, 59, 101, 121, 100, 169, 22, 202, 41, + /* 260 */ 25, 52, 67, 51, 39, 76, 38, 111, 27, 26, + /* 270 */ 35, 113, 36, 114, 165, 183, 112, 24, 63, 98, + /* 280 */ 133, 42, 59, 20, 20, 20, 96, 22, 279, 45, + /* 290 */ 25, 99, 67, 106, 39, 126, 38, 115, 27, 26, + /* 300 */ 35, 44, 36, 114, 129, 108, 33, 24, 63, 47, + /* 310 */ 133, 57, 59, 104, 129, 117, 33, 22, 54, 103, + /* 320 */ 25, 145, 67, 204, 39, 95, 38, 94, 27, 26, + /* 330 */ 43, 17, 19, 23, 23, 23, 23, 23, 23, 23, + /* 340 */ 21, 21, 20, 20, 20, 163, 35, 163, 36, 114, + /* 350 */ 163, 79, 163, 24, 63, 163, 133, 134, 59, 163, + /* 360 */ 163, 163, 129, 22, 33, 163, 25, 163, 67, 163, + /* 370 */ 39, 190, 38, 163, 27, 26, 35, 163, 36, 114, + /* 380 */ 111, 31, 163, 24, 63, 163, 133, 165, 59, 163, + /* 390 */ 163, 163, 163, 22, 144, 163, 25, 163, 67, 163, + /* 400 */ 39, 190, 38, 163, 27, 26, 35, 163, 36, 114, + /* 410 */ 111, 28, 141, 24, 63, 199, 133, 165, 59, 163, + /* 420 */ 163, 163, 163, 22, 111, 163, 25, 163, 67, 163, + /* 430 */ 39, 165, 38, 163, 27, 26, 35, 163, 36, 114, + /* 440 */ 163, 163, 163, 24, 63, 163, 133, 163, 59, 163, + /* 450 */ 163, 163, 163, 22, 163, 163, 25, 163, 67, 49, + /* 460 */ 39, 163, 38, 163, 27, 26, 163, 17, 19, 23, + /* 470 */ 23, 23, 23, 23, 23, 23, 21, 21, 20, 20, + /* 480 */ 20, 35, 163, 36, 114, 163, 163, 163, 24, 63, + /* 490 */ 132, 133, 163, 59, 163, 163, 163, 163, 22, 111, + /* 500 */ 163, 25, 163, 67, 163, 39, 165, 38, 163, 27, + /* 510 */ 26, 19, 23, 23, 23, 23, 23, 23, 23, 21, + /* 520 */ 21, 20, 20, 20, 163, 172, 161, 163, 163, 131, + /* 530 */ 150, 155, 154, 151, 152, 205, 195, 163, 163, 177, + /* 540 */ 174, 176, 163, 163, 23, 23, 23, 23, 23, 23, + /* 550 */ 23, 21, 21, 20, 20, 20, 193, 163, 149, 163, + /* 560 */ 61, 149, 149, 64, 69, 149, 32, 198, 163, 163, + /* 570 */ 163, 82, 163, 149, 163, 71, 149, 149, 163, 163, + /* 580 */ 149, 32, 163, 158, 72, 32, 73, 158, 72, 163, + /* 590 */ 73, 149, 146, 163, 149, 163, 146, 163, 158, 72, + /* 600 */ 163, 73, 158, 72, 74, 73, 149, 146, 163, 149, + /* 610 */ 149, 146, 16, 149, 32, 163, 166, 72, 163, 73, + /* 620 */ 149, 163, 18, 149, 163, 146, 163, 200, 118, 163, + /* 630 */ 37, 158, 72, 163, 73, 158, 72, 163, 73, 163, + /* 640 */ 146, 163, 122, 163, 146, 158, 72, 163, 73, 163, + /* 650 */ 163, 122, 107, 163, 146, 122, 163, 97, 180, 167, + /* 660 */ 163, 107, 163, 122, 163, 107, 91, 180, 167, 163, + /* 670 */ 90, 180, 167, 107, 122, 163, 163, 122, 148, 180, + /* 680 */ 167, 15, 163, 163, 107, 122, 163, 107, 163, 93, + /* 690 */ 180, 167, 89, 180, 167, 107, 200, 118, 12, 37, + /* 700 */ 92, 180, 167, 4, 163, 163, 163, 163, 163, 163, + /* 710 */ 163, 163, 163, 200, 118, 5, 37, 163, 200, 118, + /* 720 */ 11, 37, 163, 163, 163, 163, 163, 163, 163, 163, + /* 730 */ 200, 118, 13, 37, 163, 200, 118, 6, 37, 163, + /* 740 */ 163, 163, 163, 163, 163, 163, 163, 200, 118, 2, + /* 750 */ 37, 163, 200, 118, 3, 37, 163, 163, 163, 163, + /* 760 */ 163, 163, 163, 163, 200, 118, 14, 37, 163, 200, + /* 770 */ 118, 7, 37, 163, 163, 163, 163, 163, 163, 163, + /* 780 */ 163, 200, 118, 9, 37, 163, 200, 118, 8, 37, + /* 790 */ 163, 163, 163, 163, 163, 163, 163, 163, 200, 118, + /* 800 */ 10, 37, 163, 200, 118, 1, 37, 163, 163, 163, + /* 810 */ 163, 163, 163, 163, 163, 200, 118, 163, 37, 163, + /* 820 */ 200, 118, 163, 37, ); static public $yy_lookahead = array( - /* 0 */ 21, 68, 23, 24, 22, 57, 58, 28, 29, 81, - /* 10 */ 31, 68, 33, 10, 22, 87, 52, 38, 10, 40, - /* 20 */ 41, 42, 43, 22, 45, 61, 47, 63, 49, 50, - /* 30 */ 21, 64, 23, 24, 61, 22, 63, 28, 29, 36, - /* 40 */ 31, 71, 33, 61, 31, 63, 22, 38, 39, 40, - /* 50 */ 41, 81, 43, 61, 45, 63, 47, 87, 49, 50, - /* 60 */ 21, 68, 23, 24, 61, 22, 63, 28, 29, 61, - /* 70 */ 31, 63, 33, 67, 68, 62, 22, 38, 65, 40, - /* 80 */ 41, 42, 43, 22, 45, 22, 47, 72, 49, 50, - /* 90 */ 21, 51, 23, 24, 51, 22, 81, 28, 29, 72, - /* 100 */ 31, 71, 33, 88, 35, 22, 37, 38, 81, 82, - /* 110 */ 41, 81, 43, 22, 45, 88, 47, 87, 49, 50, - /* 120 */ 21, 62, 23, 24, 61, 22, 63, 28, 29, 72, - /* 130 */ 31, 22, 33, 30, 35, 18, 37, 38, 81, 82, - /* 140 */ 41, 48, 43, 22, 45, 88, 47, 22, 49, 50, - /* 150 */ 21, 81, 23, 24, 61, 31, 63, 28, 29, 72, - /* 160 */ 31, 22, 33, 22, 61, 30, 63, 38, 81, 82, - /* 170 */ 41, 22, 43, 44, 45, 88, 47, 22, 49, 50, - /* 180 */ 21, 55, 23, 24, 58, 72, 62, 28, 29, 65, - /* 190 */ 31, 32, 33, 30, 81, 82, 61, 38, 63, 22, - /* 200 */ 41, 88, 43, 22, 45, 72, 47, 22, 49, 50, - /* 210 */ 21, 68, 23, 24, 81, 58, 22, 28, 29, 72, - /* 220 */ 31, 88, 33, 34, 61, 22, 63, 38, 81, 22, - /* 230 */ 41, 22, 43, 22, 45, 88, 47, 22, 49, 50, - /* 240 */ 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, - /* 250 */ 11, 12, 13, 14, 15, 61, 21, 63, 23, 24, - /* 260 */ 13, 14, 15, 28, 29, 72, 31, 22, 33, 69, - /* 270 */ 35, 51, 22, 38, 81, 89, 41, 81, 43, 81, - /* 280 */ 45, 88, 47, 81, 49, 50, 21, 81, 23, 24, - /* 290 */ 68, 72, 27, 28, 29, 72, 31, 68, 33, 60, - /* 300 */ 81, 89, 81, 38, 81, 81, 41, 88, 43, 81, - /* 310 */ 45, 88, 47, 81, 49, 50, 21, 81, 23, 24, - /* 320 */ 68, 25, 26, 28, 29, 81, 31, 22, 33, 81, - /* 330 */ 35, 68, 81, 38, 22, 81, 41, 81, 43, 81, - /* 340 */ 45, 68, 47, 68, 49, 50, 68, 2, 3, 4, - /* 350 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - /* 360 */ 15, 71, 21, 90, 23, 24, 61, 22, 63, 28, - /* 370 */ 29, 81, 31, 61, 33, 63, 86, 87, 88, 38, - /* 380 */ 90, 68, 41, 68, 43, 68, 45, 46, 47, 68, - /* 390 */ 49, 50, 21, 90, 23, 24, 22, 22, 90, 28, - /* 400 */ 29, 90, 31, 90, 33, 90, 90, 90, 90, 38, - /* 410 */ 39, 90, 41, 90, 43, 90, 45, 90, 47, 90, - /* 420 */ 49, 50, 21, 90, 23, 24, 90, 90, 90, 28, - /* 430 */ 29, 90, 31, 90, 33, 61, 61, 63, 63, 38, - /* 440 */ 90, 90, 41, 42, 43, 90, 45, 90, 47, 90, - /* 450 */ 49, 50, 21, 90, 23, 24, 90, 90, 90, 28, - /* 460 */ 29, 90, 31, 90, 33, 90, 90, 90, 90, 38, - /* 470 */ 90, 90, 41, 42, 43, 90, 45, 90, 47, 90, - /* 480 */ 49, 50, 21, 90, 23, 24, 90, 90, 90, 28, - /* 490 */ 29, 90, 31, 90, 33, 90, 90, 90, 90, 38, - /* 500 */ 90, 90, 41, 90, 43, 90, 45, 90, 47, 90, - /* 510 */ 49, 50, 3, 4, 5, 6, 7, 8, 9, 10, - /* 520 */ 11, 12, 13, 14, 15, 70, 90, 22, 73, 74, - /* 530 */ 75, 76, 77, 78, 79, 80, 31, 90, 83, 84, - /* 540 */ 85, 36, 90, 4, 5, 6, 7, 8, 9, 10, - /* 550 */ 11, 12, 13, 14, 15, 22, 90, 90, 53, 54, - /* 560 */ 90, 56, 29, 30, 31, 90, 90, 62, 22, 90, - /* 570 */ 65, 90, 22, 90, 90, 90, 30, 31, 90, 90, - /* 580 */ 90, 31, 36, 90, 90, 90, 53, 54, 90, 56, - /* 590 */ 30, 31, 90, 90, 90, 62, 36, 90, 65, 53, - /* 600 */ 54, 90, 56, 53, 54, 90, 56, 90, 62, 31, - /* 610 */ 90, 65, 62, 53, 54, 65, 56, 90, 90, 31, - /* 620 */ 90, 90, 62, 31, 36, 65, 90, 90, 90, 90, - /* 630 */ 90, 53, 54, 90, 56, 90, 90, 59, 90, 90, - /* 640 */ 62, 53, 54, 65, 56, 53, 54, 1, 56, 90, - /* 650 */ 62, 90, 90, 65, 62, 90, 90, 65, 71, 90, - /* 660 */ 90, 71, 16, 17, 90, 19, 90, 90, 81, 90, - /* 670 */ 71, 81, 90, 86, 87, 88, 86, 87, 88, 90, - /* 680 */ 81, 71, 90, 90, 71, 86, 87, 88, 1, 90, - /* 690 */ 90, 81, 90, 90, 81, 71, 86, 87, 88, 86, - /* 700 */ 87, 88, 1, 16, 17, 81, 19, 1, 90, 90, - /* 710 */ 86, 87, 88, 1, 90, 90, 90, 16, 17, 1, - /* 720 */ 19, 90, 16, 17, 1, 19, 90, 90, 16, 17, - /* 730 */ 1, 19, 90, 90, 16, 17, 1, 19, 90, 16, - /* 740 */ 17, 1, 19, 90, 90, 16, 17, 1, 19, 90, - /* 750 */ 90, 16, 17, 1, 19, 90, 16, 17, 1, 19, - /* 760 */ 90, 90, 16, 17, 1, 19, 90, 90, 16, 17, - /* 770 */ 1, 19, 90, 16, 17, 1, 19, 90, 90, 16, - /* 780 */ 17, 90, 19, 90, 90, 16, 17, 90, 19, 90, - /* 790 */ 16, 17, 90, 19, + /* 0 */ 21, 28, 23, 24, 31, 22, 48, 28, 29, 51, + /* 10 */ 31, 70, 33, 30, 22, 25, 26, 38, 39, 40, + /* 20 */ 41, 80, 43, 67, 45, 22, 47, 86, 49, 50, + /* 30 */ 21, 28, 23, 24, 31, 62, 67, 28, 29, 61, + /* 40 */ 31, 63, 33, 10, 61, 30, 63, 38, 71, 40, + /* 50 */ 41, 42, 43, 61, 45, 63, 47, 80, 49, 50, + /* 60 */ 21, 67, 23, 24, 87, 62, 64, 28, 29, 36, + /* 70 */ 31, 22, 33, 57, 58, 70, 61, 38, 63, 40, + /* 80 */ 41, 42, 43, 22, 45, 80, 47, 22, 49, 50, + /* 90 */ 21, 86, 23, 24, 61, 70, 63, 28, 29, 22, + /* 100 */ 31, 22, 33, 80, 35, 80, 37, 38, 30, 86, + /* 110 */ 41, 86, 43, 22, 45, 71, 47, 71, 49, 50, + /* 120 */ 21, 51, 23, 24, 80, 81, 80, 28, 29, 22, + /* 130 */ 31, 87, 33, 87, 35, 55, 37, 38, 58, 61, + /* 140 */ 41, 63, 43, 22, 45, 22, 47, 22, 49, 50, + /* 150 */ 21, 62, 23, 24, 22, 52, 22, 28, 29, 22, + /* 160 */ 31, 22, 33, 34, 61, 20, 63, 38, 10, 22, + /* 170 */ 41, 22, 43, 22, 45, 22, 47, 22, 49, 50, + /* 180 */ 21, 67, 23, 24, 61, 22, 63, 28, 29, 71, + /* 190 */ 31, 22, 33, 61, 35, 63, 51, 38, 80, 22, + /* 200 */ 41, 22, 43, 22, 45, 87, 47, 22, 49, 50, + /* 210 */ 21, 68, 23, 24, 61, 22, 63, 28, 29, 61, + /* 220 */ 31, 63, 33, 22, 61, 22, 63, 38, 51, 22, + /* 230 */ 41, 42, 43, 18, 45, 71, 47, 67, 49, 50, + /* 240 */ 21, 80, 23, 24, 80, 81, 80, 28, 29, 67, + /* 250 */ 31, 87, 33, 80, 35, 80, 58, 38, 71, 67, + /* 260 */ 41, 67, 43, 67, 45, 22, 47, 80, 49, 50, + /* 270 */ 21, 88, 23, 24, 87, 22, 88, 28, 29, 80, + /* 280 */ 31, 67, 33, 13, 14, 15, 80, 38, 66, 67, + /* 290 */ 41, 80, 43, 80, 45, 46, 47, 80, 49, 50, + /* 300 */ 21, 67, 23, 24, 61, 80, 63, 28, 29, 67, + /* 310 */ 31, 67, 33, 80, 61, 80, 63, 38, 67, 80, + /* 320 */ 41, 42, 43, 22, 45, 80, 47, 80, 49, 50, + /* 330 */ 67, 2, 3, 4, 5, 6, 7, 8, 9, 10, + /* 340 */ 11, 12, 13, 14, 15, 89, 21, 89, 23, 24, + /* 350 */ 89, 22, 89, 28, 29, 89, 31, 32, 33, 89, + /* 360 */ 89, 89, 61, 38, 63, 89, 41, 89, 43, 89, + /* 370 */ 45, 71, 47, 89, 49, 50, 21, 89, 23, 24, + /* 380 */ 80, 81, 89, 28, 29, 89, 31, 87, 33, 89, + /* 390 */ 89, 89, 89, 38, 39, 89, 41, 89, 43, 89, + /* 400 */ 45, 71, 47, 89, 49, 50, 21, 89, 23, 24, + /* 410 */ 80, 81, 27, 28, 29, 71, 31, 87, 33, 89, + /* 420 */ 89, 89, 89, 38, 80, 89, 41, 89, 43, 89, + /* 430 */ 45, 87, 47, 89, 49, 50, 21, 89, 23, 24, + /* 440 */ 89, 89, 89, 28, 29, 89, 31, 89, 33, 89, + /* 450 */ 89, 89, 89, 38, 89, 89, 41, 89, 43, 44, + /* 460 */ 45, 89, 47, 89, 49, 50, 89, 2, 3, 4, + /* 470 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 480 */ 15, 21, 89, 23, 24, 89, 89, 89, 28, 29, + /* 490 */ 71, 31, 89, 33, 89, 89, 89, 89, 38, 80, + /* 500 */ 89, 41, 89, 43, 89, 45, 87, 47, 89, 49, + /* 510 */ 50, 3, 4, 5, 6, 7, 8, 9, 10, 11, + /* 520 */ 12, 13, 14, 15, 89, 60, 69, 89, 89, 72, + /* 530 */ 73, 74, 75, 76, 77, 78, 79, 89, 89, 82, + /* 540 */ 83, 84, 89, 89, 4, 5, 6, 7, 8, 9, + /* 550 */ 10, 11, 12, 13, 14, 15, 22, 89, 28, 89, + /* 560 */ 30, 31, 28, 29, 30, 31, 36, 22, 89, 89, + /* 570 */ 89, 22, 89, 28, 89, 30, 31, 28, 89, 89, + /* 580 */ 31, 36, 89, 53, 54, 36, 56, 53, 54, 89, + /* 590 */ 56, 28, 62, 89, 31, 89, 62, 89, 53, 54, + /* 600 */ 89, 56, 53, 54, 22, 56, 28, 62, 89, 31, + /* 610 */ 28, 62, 1, 31, 36, 89, 53, 54, 89, 56, + /* 620 */ 28, 89, 59, 31, 89, 62, 89, 16, 17, 89, + /* 630 */ 19, 53, 54, 89, 56, 53, 54, 89, 56, 89, + /* 640 */ 62, 89, 70, 89, 62, 53, 54, 89, 56, 89, + /* 650 */ 89, 70, 80, 89, 62, 70, 89, 85, 86, 87, + /* 660 */ 89, 80, 89, 70, 89, 80, 85, 86, 87, 89, + /* 670 */ 85, 86, 87, 80, 70, 89, 89, 70, 85, 86, + /* 680 */ 87, 1, 89, 89, 80, 70, 89, 80, 89, 85, + /* 690 */ 86, 87, 85, 86, 87, 80, 16, 17, 1, 19, + /* 700 */ 85, 86, 87, 1, 89, 89, 89, 89, 89, 89, + /* 710 */ 89, 89, 89, 16, 17, 1, 19, 89, 16, 17, + /* 720 */ 1, 19, 89, 89, 89, 89, 89, 89, 89, 89, + /* 730 */ 16, 17, 1, 19, 89, 16, 17, 1, 19, 89, + /* 740 */ 89, 89, 89, 89, 89, 89, 89, 16, 17, 1, + /* 750 */ 19, 89, 16, 17, 1, 19, 89, 89, 89, 89, + /* 760 */ 89, 89, 89, 89, 16, 17, 1, 19, 89, 16, + /* 770 */ 17, 1, 19, 89, 89, 89, 89, 89, 89, 89, + /* 780 */ 89, 16, 17, 1, 19, 89, 16, 17, 1, 19, + /* 790 */ 89, 89, 89, 89, 89, 89, 89, 89, 16, 17, + /* 800 */ 1, 19, 89, 16, 17, 1, 19, 89, 89, 89, + /* 810 */ 89, 89, 89, 89, 89, 16, 17, 89, 19, 89, + /* 820 */ 16, 17, 89, 19, ); - const YY_SHIFT_USE_DFLT = -53; + const YY_SHIFT_USE_DFLT = -43; const YY_SHIFT_MAX = 145; static public $yy_shift_ofst = array( - /* 0 */ -53, 99, 39, 69, -21, 9, 431, 401, 265, 189, - /* 10 */ 159, 129, 235, 371, 295, 341, 461, 578, 578, 578, - /* 20 */ 578, 578, 578, 578, 533, 550, 592, 592, 546, 560, - /* 30 */ 505, 588, 592, 592, 592, 592, 592, 124, 124, 124, - /* 40 */ 774, 746, 718, 729, 706, 687, 735, 757, 752, 769, - /* 50 */ 763, 740, 13, 701, 646, 712, 723, 124, 124, 124, - /* 60 */ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - /* 70 */ 124, 124, 157, 157, -53, -53, -53, -53, -53, -53, - /* 80 */ -53, -53, -53, -53, -53, -53, -53, -53, -53, 239, - /* 90 */ 345, 509, 539, 539, 103, 3, 374, 375, 312, 305, - /* 100 */ 93, 247, -8, 63, 135, 8, -18, -36, 163, 194, - /* 110 */ 220, -27, 296, 126, 43, -52, -27, -27, 117, 203, - /* 120 */ 185, 181, 40, 177, 207, 209, 250, 245, 215, 59, - /* 130 */ 211, 155, 149, 83, -33, 73, 61, 24, 54, 91, - /* 140 */ 109, 141, 139, 1, 121, 125, + /* 0 */ -43, 99, 39, -21, 69, 9, 159, 189, 249, 385, + /* 10 */ 415, 325, 279, 355, 129, 219, 460, 563, 563, 563, + /* 20 */ 563, 563, 563, 563, 534, 582, 592, 592, 545, 549, + /* 30 */ 530, 578, 592, 592, 592, 592, 592, -27, -27, -27, + /* 40 */ -27, 799, 719, 731, 714, 611, 697, 770, 765, 3, + /* 50 */ 787, 753, 748, 702, 736, 804, 680, 782, -27, -27, + /* 60 */ -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + /* 70 */ -27, -27, 198, 198, -43, -43, -43, -43, -43, -43, + /* 80 */ -43, -43, -43, -43, -43, -43, -43, -43, -43, 329, + /* 90 */ 465, 508, 540, 540, -17, 33, 301, 270, 253, 158, + /* 100 */ 243, 123, -8, 132, 153, 15, 163, 103, 78, 145, + /* 110 */ 177, -22, 80, 16, -10, -22, -42, -22, 215, 179, + /* 120 */ 169, 155, 70, 151, 181, 185, 207, 203, 201, 89, + /* 130 */ 193, 149, 2, 91, 107, 79, 77, 61, 65, 121, + /* 140 */ 125, 147, 139, 137, 49, 134, ); - const YY_REDUCE_USE_DFLT = -73; + const YY_REDUCE_USE_DFLT = -60; const YY_REDUCE_MAX = 88; static public $yy_reduce_ofst = array( - /* 0 */ 6, 455, 455, 455, 455, 455, 455, 455, 455, 455, - /* 10 */ 455, 455, 455, 455, 455, 455, 455, 290, 613, 590, - /* 20 */ 599, 587, 624, 610, 87, 113, 57, 27, 15, 15, - /* 30 */ 15, 15, 223, 193, 219, 147, 133, -30, 30, -72, - /* 40 */ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, - /* 50 */ 200, 200, 258, 200, 200, 200, 200, 232, 228, 221, - /* 60 */ 224, 236, 256, 254, 251, 244, 248, 206, 198, 202, - /* 70 */ 196, 70, 186, 212, 229, 222, 252, 317, 143, 273, - /* 80 */ 321, 263, 275, 278, 315, 313, -7, -57, -67, + /* 0 */ 222, 457, 457, 457, 457, 457, 457, 457, 457, 457, + /* 10 */ 457, 457, 457, 457, 457, 457, 457, 581, 585, 604, + /* 20 */ 593, 572, 607, 615, 330, 164, 300, 44, 187, 187, + /* 30 */ 187, 187, 344, 419, 118, -23, 46, -59, 5, 25, + /* 40 */ 23, 143, 143, 143, 143, 143, 143, 143, 143, 199, + /* 50 */ 143, 143, 143, 143, 143, 143, 143, 143, 233, 225, + /* 60 */ 213, 217, 235, 245, 247, 239, 211, 173, 175, 166, + /* 70 */ 161, 206, 188, 183, 194, 192, 170, 182, 114, 196, + /* 80 */ 251, 263, 234, 214, 242, 244, -6, -31, -44, ); static public $yyExpectedTokens = array( /* 0 */ array(), /* 1 */ array(21, 23, 24, 28, 29, 31, 33, 35, 37, 38, 41, 43, 45, 47, 49, 50, ), /* 2 */ array(21, 23, 24, 28, 29, 31, 33, 38, 40, 41, 42, 43, 45, 47, 49, 50, ), - /* 3 */ array(21, 23, 24, 28, 29, 31, 33, 35, 37, 38, 41, 43, 45, 47, 49, 50, ), - /* 4 */ array(21, 23, 24, 28, 29, 31, 33, 38, 40, 41, 42, 43, 45, 47, 49, 50, ), - /* 5 */ array(21, 23, 24, 28, 29, 31, 33, 38, 39, 40, 41, 43, 45, 47, 49, 50, ), - /* 6 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 42, 43, 45, 47, 49, 50, ), + /* 3 */ array(21, 23, 24, 28, 29, 31, 33, 38, 39, 40, 41, 43, 45, 47, 49, 50, ), + /* 4 */ array(21, 23, 24, 28, 29, 31, 33, 35, 37, 38, 41, 43, 45, 47, 49, 50, ), + /* 5 */ array(21, 23, 24, 28, 29, 31, 33, 38, 40, 41, 42, 43, 45, 47, 49, 50, ), + /* 6 */ array(21, 23, 24, 28, 29, 31, 33, 35, 38, 41, 43, 45, 47, 49, 50, ), /* 7 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 42, 43, 45, 47, 49, 50, ), - /* 8 */ array(21, 23, 24, 27, 28, 29, 31, 33, 38, 41, 43, 45, 47, 49, 50, ), - /* 9 */ array(21, 23, 24, 28, 29, 31, 33, 34, 38, 41, 43, 45, 47, 49, 50, ), - /* 10 */ array(21, 23, 24, 28, 29, 31, 32, 33, 38, 41, 43, 45, 47, 49, 50, ), - /* 11 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 43, 44, 45, 47, 49, 50, ), - /* 12 */ array(21, 23, 24, 28, 29, 31, 33, 35, 38, 41, 43, 45, 47, 49, 50, ), + /* 8 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 43, 45, 46, 47, 49, 50, ), + /* 9 */ array(21, 23, 24, 27, 28, 29, 31, 33, 38, 41, 43, 45, 47, 49, 50, ), + /* 10 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 43, 44, 45, 47, 49, 50, ), + /* 11 */ array(21, 23, 24, 28, 29, 31, 32, 33, 38, 41, 43, 45, 47, 49, 50, ), + /* 12 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 42, 43, 45, 47, 49, 50, ), /* 13 */ array(21, 23, 24, 28, 29, 31, 33, 38, 39, 41, 43, 45, 47, 49, 50, ), - /* 14 */ array(21, 23, 24, 28, 29, 31, 33, 35, 38, 41, 43, 45, 47, 49, 50, ), - /* 15 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 43, 45, 46, 47, 49, 50, ), + /* 14 */ array(21, 23, 24, 28, 29, 31, 33, 34, 38, 41, 43, 45, 47, 49, 50, ), + /* 15 */ array(21, 23, 24, 28, 29, 31, 33, 35, 38, 41, 43, 45, 47, 49, 50, ), /* 16 */ array(21, 23, 24, 28, 29, 31, 33, 38, 41, 43, 45, 47, 49, 50, ), - /* 17 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 18 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 19 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 20 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 21 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 22 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 23 */ array(31, 53, 54, 56, 59, 62, 65, ), - /* 24 */ array(22, 29, 30, 31, 53, 54, 56, 62, 65, ), - /* 25 */ array(22, 31, 53, 54, 56, 62, 65, ), - /* 26 */ array(31, 53, 54, 56, 62, 65, ), - /* 27 */ array(31, 53, 54, 56, 62, 65, ), - /* 28 */ array(22, 30, 31, 36, 53, 54, 56, 62, 65, ), - /* 29 */ array(30, 31, 36, 53, 54, 56, 62, 65, ), - /* 30 */ array(22, 31, 36, 53, 54, 56, 62, 65, ), - /* 31 */ array(31, 36, 53, 54, 56, 62, 65, ), - /* 32 */ array(31, 53, 54, 56, 62, 65, ), - /* 33 */ array(31, 53, 54, 56, 62, 65, ), - /* 34 */ array(31, 53, 54, 56, 62, 65, ), - /* 35 */ array(31, 53, 54, 56, 62, 65, ), - /* 36 */ array(31, 53, 54, 56, 62, 65, ), - /* 37 */ array(31, 62, 65, ), - /* 38 */ array(31, 62, 65, ), - /* 39 */ array(31, 62, 65, ), - /* 40 */ array(1, 16, 17, 19, ), + /* 17 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 18 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 19 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 20 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 21 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 22 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 23 */ array(28, 31, 53, 54, 56, 59, 62, ), + /* 24 */ array(22, 28, 29, 30, 31, 53, 54, 56, 62, ), + /* 25 */ array(22, 28, 31, 53, 54, 56, 62, ), + /* 26 */ array(28, 31, 53, 54, 56, 62, ), + /* 27 */ array(28, 31, 53, 54, 56, 62, ), + /* 28 */ array(22, 28, 30, 31, 36, 53, 54, 56, 62, ), + /* 29 */ array(22, 28, 31, 36, 53, 54, 56, 62, ), + /* 30 */ array(28, 30, 31, 36, 53, 54, 56, 62, ), + /* 31 */ array(28, 31, 36, 53, 54, 56, 62, ), + /* 32 */ array(28, 31, 53, 54, 56, 62, ), + /* 33 */ array(28, 31, 53, 54, 56, 62, ), + /* 34 */ array(28, 31, 53, 54, 56, 62, ), + /* 35 */ array(28, 31, 53, 54, 56, 62, ), + /* 36 */ array(28, 31, 53, 54, 56, 62, ), + /* 37 */ array(28, 31, 62, ), + /* 38 */ array(28, 31, 62, ), + /* 39 */ array(28, 31, 62, ), + /* 40 */ array(28, 31, 62, ), /* 41 */ array(1, 16, 17, 19, ), /* 42 */ array(1, 16, 17, 19, ), /* 43 */ array(1, 16, 17, 19, ), @@ -519,29 +524,29 @@ static public $yy_action = array( /* 46 */ array(1, 16, 17, 19, ), /* 47 */ array(1, 16, 17, 19, ), /* 48 */ array(1, 16, 17, 19, ), - /* 49 */ array(1, 16, 17, 19, ), + /* 49 */ array(22, 28, 31, 62, ), /* 50 */ array(1, 16, 17, 19, ), /* 51 */ array(1, 16, 17, 19, ), - /* 52 */ array(22, 31, 62, 65, ), + /* 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(1, 16, 17, 19, ), - /* 57 */ array(31, 62, 65, ), - /* 58 */ array(31, 62, 65, ), - /* 59 */ array(31, 62, 65, ), - /* 60 */ array(31, 62, 65, ), - /* 61 */ array(31, 62, 65, ), - /* 62 */ array(31, 62, 65, ), - /* 63 */ array(31, 62, 65, ), - /* 64 */ array(31, 62, 65, ), - /* 65 */ array(31, 62, 65, ), - /* 66 */ array(31, 62, 65, ), - /* 67 */ array(31, 62, 65, ), - /* 68 */ array(31, 62, 65, ), - /* 69 */ array(31, 62, 65, ), - /* 70 */ array(31, 62, 65, ), - /* 71 */ array(31, 62, 65, ), + /* 57 */ array(1, 16, 17, 19, ), + /* 58 */ array(28, 31, 62, ), + /* 59 */ array(28, 31, 62, ), + /* 60 */ array(28, 31, 62, ), + /* 61 */ array(28, 31, 62, ), + /* 62 */ array(28, 31, 62, ), + /* 63 */ array(28, 31, 62, ), + /* 64 */ array(28, 31, 62, ), + /* 65 */ array(28, 31, 62, ), + /* 66 */ array(28, 31, 62, ), + /* 67 */ array(28, 31, 62, ), + /* 68 */ array(28, 31, 62, ), + /* 69 */ array(28, 31, 62, ), + /* 70 */ array(28, 31, 62, ), + /* 71 */ array(28, 31, 62, ), /* 72 */ array(58, ), /* 73 */ array(58, ), /* 74 */ array(), @@ -559,34 +564,34 @@ static public $yy_action = array( /* 86 */ array(), /* 87 */ array(), /* 88 */ array(), - /* 89 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 60, ), - /* 90 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 22, ), + /* 89 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 22, ), + /* 90 */ array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 60, ), /* 91 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), /* 92 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), /* 93 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ), /* 94 */ array(22, 30, 61, 63, ), /* 95 */ array(10, 36, 61, 63, ), /* 96 */ array(22, 61, 63, ), - /* 97 */ array(22, 61, 63, ), + /* 97 */ array(13, 14, 15, ), /* 98 */ array(22, 61, 63, ), - /* 99 */ array(22, 61, 63, ), - /* 100 */ array(48, 61, 63, ), - /* 101 */ array(13, 14, 15, ), + /* 99 */ array(10, 61, 63, ), + /* 100 */ array(22, 61, 63, ), + /* 101 */ array(22, 61, 63, ), /* 102 */ array(22, 61, 63, ), /* 103 */ array(22, 61, 63, ), - /* 104 */ array(30, 61, 63, ), - /* 105 */ array(10, 61, 63, ), + /* 104 */ array(22, 61, 63, ), + /* 105 */ array(30, 61, 63, ), /* 106 */ array(22, 61, 63, ), /* 107 */ array(52, 61, 63, ), /* 108 */ array(30, 61, 63, ), - /* 109 */ array(22, 61, 63, ), - /* 110 */ array(20, 51, ), + /* 109 */ array(20, 51, ), + /* 110 */ array(22, 51, ), /* 111 */ array(61, 63, ), - /* 112 */ array(25, 26, ), - /* 113 */ array(55, 58, ), - /* 114 */ array(22, 51, ), - /* 115 */ array(57, 58, ), - /* 116 */ array(61, 63, ), + /* 112 */ array(55, 58, ), + /* 113 */ array(57, 58, ), + /* 114 */ array(25, 26, ), + /* 115 */ array(61, 63, ), + /* 116 */ array(48, 51, ), /* 117 */ array(61, 63, ), /* 118 */ array(18, ), /* 119 */ array(22, ), @@ -602,9 +607,9 @@ static public $yy_action = array( /* 129 */ array(62, ), /* 130 */ array(22, ), /* 131 */ array(22, ), - /* 132 */ array(22, ), + /* 132 */ array(64, ), /* 133 */ array(22, ), - /* 134 */ array(64, ), + /* 134 */ array(22, ), /* 135 */ array(22, ), /* 136 */ array(22, ), /* 137 */ array(22, ), @@ -678,27 +683,27 @@ static public $yy_action = array( /* 205 */ array(), ); static public $yy_default = array( - /* 0 */ 208, 279, 279, 279, 279, 279, 279, 279, 279, 279, - /* 10 */ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, - /* 20 */ 279, 279, 279, 279, 279, 279, 279, 279, 279, 249, - /* 30 */ 279, 251, 279, 279, 279, 279, 279, 279, 279, 279, - /* 40 */ 279, 279, 279, 279, 279, 279, 279, 279, 279, 206, - /* 50 */ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, - /* 60 */ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, - /* 70 */ 279, 279, 279, 279, 208, 208, 208, 208, 208, 208, - /* 80 */ 208, 208, 208, 208, 208, 208, 208, 208, 208, 279, - /* 90 */ 279, 266, 269, 267, 279, 279, 279, 279, 279, 279, - /* 100 */ 279, 268, 279, 279, 279, 279, 279, 255, 279, 279, - /* 110 */ 279, 248, 279, 279, 279, 279, 250, 260, 279, 279, - /* 120 */ 279, 279, 271, 279, 279, 279, 279, 279, 279, 279, - /* 130 */ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, - /* 140 */ 279, 279, 279, 279, 279, 279, 277, 278, 270, 220, - /* 150 */ 215, 218, 219, 276, 217, 216, 214, 265, 259, 236, - /* 160 */ 213, 209, 238, 207, 275, 261, 274, 273, 263, 244, - /* 170 */ 262, 264, 272, 225, 232, 233, 234, 231, 230, 211, - /* 180 */ 210, 235, 237, 246, 245, 241, 240, 239, 247, 258, - /* 190 */ 212, 243, 226, 224, 242, 222, 223, 227, 228, 252, - /* 200 */ 257, 256, 229, 253, 254, 221, + /* 0 */ 208, 278, 278, 278, 278, 278, 278, 278, 278, 278, + /* 10 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + /* 20 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + /* 30 */ 278, 250, 278, 278, 278, 278, 278, 278, 278, 278, + /* 40 */ 278, 278, 278, 278, 278, 206, 278, 278, 278, 278, + /* 50 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + /* 60 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + /* 70 */ 278, 278, 278, 278, 208, 208, 208, 208, 208, 208, + /* 80 */ 208, 208, 208, 208, 208, 208, 208, 208, 208, 278, + /* 90 */ 278, 265, 268, 266, 278, 278, 278, 267, 278, 278, + /* 100 */ 278, 278, 278, 278, 278, 278, 278, 254, 278, 278, + /* 110 */ 278, 259, 278, 278, 278, 249, 278, 248, 278, 278, + /* 120 */ 278, 278, 270, 278, 278, 278, 278, 278, 278, 278, + /* 130 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + /* 140 */ 278, 278, 278, 278, 278, 278, 276, 220, 269, 277, + /* 150 */ 215, 218, 219, 275, 217, 216, 214, 262, 258, 236, + /* 160 */ 213, 209, 238, 207, 274, 260, 273, 272, 244, 264, + /* 170 */ 261, 263, 271, 225, 233, 251, 234, 232, 253, 231, + /* 180 */ 252, 235, 237, 246, 245, 241, 240, 239, 247, 230, + /* 190 */ 257, 243, 226, 224, 242, 222, 223, 227, 228, 256, + /* 200 */ 210, 211, 255, 212, 229, 221, ); /* The next thing included is series of defines which control ** various aspects of the generated parser. @@ -715,11 +720,11 @@ 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 = 91; + const YYNOCODE = 90; const YYSTACKDEPTH = 100; const YYNSTATE = 206; - const YYNRULE = 73; - const YYERRORSYMBOL = 66; + const YYNRULE = 72; + const YYERRORSYMBOL = 65; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; /** The next table maps tokens into fallback tokens. If a construct @@ -817,13 +822,13 @@ static public $yy_action = array( 'T_COLON', 'T_NUMERIC', 'T_STRING_SINGLE_INIT', 'T_STRING_SINGLE_END', 'T_STRING_DOUBLE_INIT', 'T_STRING_DOUBLE_END', 'T_STRING_CONTENT', 'T_LPARENT', 'T_RPARENT', 'T_DOT', 'T_ALPHA', 'T_BRACKETS_OPEN', - 'T_BRACKETS_CLOSE', 'T_CUSTOM', 'error', 'start', - 'body', 'code', 'stmts', 'piped_list', - 'var_or_string', 'stmt', 'for_stmt', 'ifchanged_stmt', - 'block_stmt', 'filter_stmt', 'if_stmt', 'custom_tag', - 'alias', 'varname', 'list', 'cycle', - 'regroup', 'first_of', 'expr', 'varname_args', - 'string', 's_content', + 'T_BRACKETS_CLOSE', 'error', 'start', 'body', + 'code', 'stmts', 'piped_list', 'var_or_string', + 'stmt', 'for_stmt', 'ifchanged_stmt', 'block_stmt', + 'filter_stmt', 'if_stmt', 'custom_tag', 'alias', + 'varname', 'list', 'cycle', 'regroup', + 'first_of', 'expr', 'varname_args', 'string', + 's_content', ); /** @@ -873,37 +878,36 @@ static public $yy_action = array( /* 39 */ "block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK T_CLOSE_TAG", /* 40 */ "block_stmt ::= T_BLOCK varname T_CLOSE_TAG body T_OPEN_TAG T_END_BLOCK varname T_CLOSE_TAG", /* 41 */ "filter_stmt ::= T_FILTER piped_list T_CLOSE_TAG body T_OPEN_TAG T_END_FILTER T_CLOSE_TAG", - /* 42 */ "regroup ::= T_REGROUP varname T_BY varname T_AS varname", - /* 43 */ "cycle ::= T_CYCLE list", - /* 44 */ "cycle ::= T_CYCLE list T_AS varname", - /* 45 */ "first_of ::= T_FIRST_OF list", - /* 46 */ "piped_list ::= piped_list T_PIPE varname_args", - /* 47 */ "piped_list ::= varname_args", - /* 48 */ "varname_args ::= varname T_COLON var_or_string", - /* 49 */ "varname_args ::= varname", - /* 50 */ "list ::= list var_or_string", - /* 51 */ "list ::= list T_COMMA var_or_string", - /* 52 */ "list ::= var_or_string", - /* 53 */ "var_or_string ::= T_NUMERIC", - /* 54 */ "var_or_string ::= varname", - /* 55 */ "var_or_string ::= string", - /* 56 */ "string ::= T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END", - /* 57 */ "string ::= T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END", - /* 58 */ "s_content ::= s_content T_STRING_CONTENT", - /* 59 */ "s_content ::= T_STRING_CONTENT", - /* 60 */ "expr ::= expr T_AND expr", - /* 61 */ "expr ::= expr T_OR expr", - /* 62 */ "expr ::= expr T_PLUS|T_MINUS expr", - /* 63 */ "expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr", - /* 64 */ "expr ::= expr T_TIMES|T_DIV|T_MOD expr", - /* 65 */ "expr ::= piped_list", - /* 66 */ "expr ::= T_LPARENT expr T_RPARENT", - /* 67 */ "expr ::= string", - /* 68 */ "expr ::= T_NUMERIC", - /* 69 */ "varname ::= varname T_DOT T_ALPHA", - /* 70 */ "varname ::= varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE", - /* 71 */ "varname ::= T_ALPHA", - /* 72 */ "varname ::= T_CUSTOM|T_CUSTOM_BLOCK", + /* 42 */ "regroup ::= T_REGROUP piped_list T_BY varname T_AS varname", + /* 43 */ "cycle ::= T_CYCLE list T_AS varname", + /* 44 */ "first_of ::= T_FIRST_OF list", + /* 45 */ "piped_list ::= piped_list T_PIPE varname_args", + /* 46 */ "piped_list ::= varname_args", + /* 47 */ "varname_args ::= varname T_COLON var_or_string", + /* 48 */ "varname_args ::= varname", + /* 49 */ "list ::= list var_or_string", + /* 50 */ "list ::= list T_COMMA var_or_string", + /* 51 */ "list ::= var_or_string", + /* 52 */ "var_or_string ::= T_NUMERIC", + /* 53 */ "var_or_string ::= varname", + /* 54 */ "var_or_string ::= string", + /* 55 */ "string ::= T_STRING_SINGLE_INIT s_content T_STRING_SINGLE_END", + /* 56 */ "string ::= T_STRING_DOUBLE_INIT s_content T_STRING_DOUBLE_END", + /* 57 */ "s_content ::= s_content T_STRING_CONTENT", + /* 58 */ "s_content ::= T_STRING_CONTENT", + /* 59 */ "expr ::= expr T_AND expr", + /* 60 */ "expr ::= expr T_OR expr", + /* 61 */ "expr ::= expr T_PLUS|T_MINUS expr", + /* 62 */ "expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr", + /* 63 */ "expr ::= expr T_TIMES|T_DIV|T_MOD expr", + /* 64 */ "expr ::= piped_list", + /* 65 */ "expr ::= T_LPARENT expr T_RPARENT", + /* 66 */ "expr ::= string", + /* 67 */ "expr ::= T_NUMERIC", + /* 68 */ "varname ::= varname T_DOT T_ALPHA", + /* 69 */ "varname ::= varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE", + /* 70 */ "varname ::= T_ALPHA", + /* 71 */ "varname ::= T_CUSTOM_TAG|T_CUSTOM_BLOCK", ); /** @@ -1268,79 +1272,78 @@ static public $yy_action = array( * */ static public $yyRuleInfo = array( - array( 'lhs' => 67, 'rhs' => 1 ), + array( 'lhs' => 66, 'rhs' => 1 ), + array( 'lhs' => 67, 'rhs' => 2 ), + array( 'lhs' => 67, 'rhs' => 0 ), array( 'lhs' => 68, 'rhs' => 2 ), - array( 'lhs' => 68, 'rhs' => 0 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 2 ), + array( 'lhs' => 68, 'rhs' => 3 ), + array( 'lhs' => 69, 'rhs' => 3 ), array( 'lhs' => 69, 'rhs' => 2 ), array( 'lhs' => 69, 'rhs' => 1 ), - array( 'lhs' => 69, 'rhs' => 2 ), + array( 'lhs' => 69, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 1 ), array( 'lhs' => 69, 'rhs' => 3 ), - array( 'lhs' => 70, 'rhs' => 3 ), - array( 'lhs' => 70, 'rhs' => 2 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 3 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 7 ), - array( 'lhs' => 79, 'rhs' => 2 ), - array( 'lhs' => 79, 'rhs' => 4 ), - array( 'lhs' => 79, 'rhs' => 6 ), - array( 'lhs' => 79, 'rhs' => 4 ), - array( 'lhs' => 79, 'rhs' => 3 ), - array( 'lhs' => 79, 'rhs' => 5 ), - array( 'lhs' => 79, 'rhs' => 6 ), - array( 'lhs' => 80, 'rhs' => 9 ), - array( 'lhs' => 73, 'rhs' => 1 ), - array( 'lhs' => 73, 'rhs' => 1 ), - array( 'lhs' => 73, 'rhs' => 1 ), - array( 'lhs' => 74, 'rhs' => 9 ), - array( 'lhs' => 74, 'rhs' => 11 ), - array( 'lhs' => 74, 'rhs' => 13 ), - array( 'lhs' => 74, 'rhs' => 15 ), - array( 'lhs' => 78, 'rhs' => 7 ), - array( 'lhs' => 78, 'rhs' => 11 ), - array( 'lhs' => 75, 'rhs' => 6 ), - array( 'lhs' => 75, 'rhs' => 7 ), - array( 'lhs' => 75, 'rhs' => 10 ), - array( 'lhs' => 75, 'rhs' => 11 ), - array( 'lhs' => 76, 'rhs' => 7 ), - array( 'lhs' => 76, 'rhs' => 8 ), - array( 'lhs' => 77, 'rhs' => 7 ), - array( 'lhs' => 84, 'rhs' => 6 ), - array( 'lhs' => 83, 'rhs' => 2 ), - array( 'lhs' => 83, 'rhs' => 4 ), - array( 'lhs' => 85, 'rhs' => 2 ), - array( 'lhs' => 71, 'rhs' => 3 ), - array( 'lhs' => 71, 'rhs' => 1 ), - array( 'lhs' => 87, 'rhs' => 3 ), - array( 'lhs' => 87, 'rhs' => 1 ), - array( 'lhs' => 82, 'rhs' => 2 ), - array( 'lhs' => 82, 'rhs' => 3 ), - array( 'lhs' => 82, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 7 ), + array( 'lhs' => 78, 'rhs' => 2 ), + array( 'lhs' => 78, 'rhs' => 4 ), + array( 'lhs' => 78, 'rhs' => 6 ), + array( 'lhs' => 78, 'rhs' => 4 ), + array( 'lhs' => 78, 'rhs' => 3 ), + array( 'lhs' => 78, 'rhs' => 5 ), + array( 'lhs' => 78, 'rhs' => 6 ), + array( 'lhs' => 79, 'rhs' => 9 ), array( 'lhs' => 72, 'rhs' => 1 ), array( 'lhs' => 72, 'rhs' => 1 ), array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 3 ), - array( 'lhs' => 88, 'rhs' => 3 ), - array( 'lhs' => 89, 'rhs' => 2 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 86, 'rhs' => 3 ), - array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 73, 'rhs' => 9 ), + array( 'lhs' => 73, 'rhs' => 11 ), + array( 'lhs' => 73, 'rhs' => 13 ), + array( 'lhs' => 73, 'rhs' => 15 ), + array( 'lhs' => 77, 'rhs' => 7 ), + array( 'lhs' => 77, 'rhs' => 11 ), + array( 'lhs' => 74, 'rhs' => 6 ), + array( 'lhs' => 74, 'rhs' => 7 ), + array( 'lhs' => 74, 'rhs' => 10 ), + array( 'lhs' => 74, 'rhs' => 11 ), + array( 'lhs' => 75, 'rhs' => 7 ), + array( 'lhs' => 75, 'rhs' => 8 ), + array( 'lhs' => 76, 'rhs' => 7 ), + array( 'lhs' => 83, 'rhs' => 6 ), + array( 'lhs' => 82, 'rhs' => 4 ), + array( 'lhs' => 84, 'rhs' => 2 ), + array( 'lhs' => 70, 'rhs' => 3 ), + array( 'lhs' => 70, 'rhs' => 1 ), array( 'lhs' => 86, 'rhs' => 3 ), array( 'lhs' => 86, 'rhs' => 1 ), - array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 2 ), array( 'lhs' => 81, 'rhs' => 3 ), - array( 'lhs' => 81, 'rhs' => 4 ), - array( 'lhs' => 81, 'rhs' => 1 ), array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 87, 'rhs' => 3 ), + array( 'lhs' => 87, 'rhs' => 3 ), + array( 'lhs' => 88, 'rhs' => 2 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 3 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 80, 'rhs' => 3 ), + array( 'lhs' => 80, 'rhs' => 4 ), + array( 'lhs' => 80, 'rhs' => 1 ), + array( 'lhs' => 80, 'rhs' => 1 ), ); /** @@ -1364,11 +1367,11 @@ static public $yy_action = array( 26 => 3, 27 => 3, 28 => 3, - 49 => 3, - 59 => 3, - 68 => 3, + 48 => 3, + 58 => 3, + 67 => 3, + 70 => 3, 71 => 3, - 72 => 3, 4 => 4, 5 => 5, 6 => 6, @@ -1401,28 +1404,27 @@ static public $yy_action = array( 43 => 43, 44 => 44, 45 => 45, + 50 => 45, 46 => 46, 51 => 46, 47 => 47, - 52 => 47, - 48 => 48, - 50 => 50, + 49 => 49, + 52 => 52, 53 => 53, 54 => 54, + 66 => 54, 55 => 55, - 67 => 55, - 56 => 56, - 57 => 56, - 58 => 58, - 60 => 60, - 61 => 60, - 62 => 60, - 64 => 60, - 63 => 63, + 56 => 55, + 57 => 57, + 59 => 59, + 60 => 59, + 61 => 59, + 63 => 59, + 62 => 62, + 64 => 64, 65 => 65, - 66 => 66, + 68 => 68, 69 => 69, - 70 => 70, ); /* Beginning here are the reduction cases. A typical example ** follows: @@ -1432,173 +1434,170 @@ static public $yy_action = array( */ #line 65 "parser.y" function yy_r0(){ $this->body = $this->yystack[$this->yyidx + 0]->minor; } -#line 1441 "parser.php" +#line 1443 "parser.php" #line 67 "parser.y" function yy_r1(){ $this->_retvalue=$this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1444 "parser.php" +#line 1446 "parser.php" #line 68 "parser.y" function yy_r2(){ $this->_retvalue = array(); } -#line 1447 "parser.php" +#line 1449 "parser.php" #line 71 "parser.y" function yy_r3(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1450 "parser.php" +#line 1452 "parser.php" #line 72 "parser.y" function yy_r4(){ $this->_retvalue = array('operation' => 'html', 'html' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1453 "parser.php" +#line 1455 "parser.php" #line 73 "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 1456 "parser.php" +#line 1458 "parser.php" #line 74 "parser.y" function yy_r6(){ $this->_retvalue = array('operation' => 'print_var', 'variable' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1459 "parser.php" +#line 1461 "parser.php" #line 76 "parser.y" function yy_r7(){ $this->_retvalue = array('operation' => 'base', $this->yystack[$this->yyidx + -1]->minor); } -#line 1462 "parser.php" +#line 1464 "parser.php" #line 77 "parser.y" function yy_r8(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1465 "parser.php" +#line 1467 "parser.php" #line 83 "parser.y" function yy_r14(){ $this->_retvalue = array('operation' => 'include', $this->yystack[$this->yyidx + -1]->minor); } -#line 1468 "parser.php" +#line 1470 "parser.php" #line 86 "parser.y" - function yy_r17(){ $this->_retvalue = array('operation' => 'autoescape', 'value' => @$this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1471 "parser.php" + function yy_r17(){ $this->_retvalue = array('operation' => 'autoescape', 'value' => strtolower(@$this->yystack[$this->yyidx + -5]->minor), 'body' => $this->yystack[$this->yyidx + -3]->minor); } +#line 1473 "parser.php" #line 91 "parser.y" function yy_r18(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1474 "parser.php" +#line 1476 "parser.php" #line 92 "parser.y" function yy_r19(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -3]->minor, 'for' => $this->yystack[$this->yyidx + -1]->minor, 'list' => array()); } -#line 1477 "parser.php" +#line 1479 "parser.php" #line 93 "parser.y" function yy_r20(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -5]->minor, 'for' => $this->yystack[$this->yyidx + -3]->minor, 'list' => array(),'as' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1480 "parser.php" +#line 1482 "parser.php" #line 94 "parser.y" function yy_r21(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -3]->minor, 'as' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1483 "parser.php" +#line 1485 "parser.php" #line 95 "parser.y" function yy_r22(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -2]->minor, 'list' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1486 "parser.php" +#line 1488 "parser.php" #line 96 "parser.y" function yy_r23(){ $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 1489 "parser.php" +#line 1491 "parser.php" #line 98 "parser.y" function yy_r24(){ 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 1492 "parser.php" +#line 1494 "parser.php" #line 101 "parser.y" function yy_r25(){ $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 1495 "parser.php" +#line 1497 "parser.php" #line 109 "parser.y" function yy_r29(){ $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); } -#line 1500 "parser.php" +#line 1502 "parser.php" #line 112 "parser.y" function yy_r30(){ $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 1505 "parser.php" +#line 1507 "parser.php" #line 115 "parser.y" function yy_r31(){ $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); } -#line 1510 "parser.php" +#line 1512 "parser.php" #line 118 "parser.y" function yy_r32(){ $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); } -#line 1515 "parser.php" +#line 1517 "parser.php" #line 122 "parser.y" function yy_r33(){ $this->_retvalue = array('operation' => 'if', 'expr' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1518 "parser.php" +#line 1520 "parser.php" #line 123 "parser.y" function yy_r34(){ $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 1521 "parser.php" +#line 1523 "parser.php" #line 126 "parser.y" function yy_r35(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1526 "parser.php" +#line 1528 "parser.php" #line 130 "parser.y" function yy_r36(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -3]->minor, 'check' => $this->yystack[$this->yyidx + -5]->minor); } -#line 1531 "parser.php" +#line 1533 "parser.php" #line 133 "parser.y" function yy_r37(){ $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1536 "parser.php" +#line 1538 "parser.php" #line 137 "parser.y" function yy_r38(){ $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 1541 "parser.php" +#line 1543 "parser.php" #line 143 "parser.y" function yy_r39(){ $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1544 "parser.php" +#line 1546 "parser.php" #line 145 "parser.y" function yy_r40(){ $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -6]->minor, 'body' => $this->yystack[$this->yyidx + -4]->minor); } -#line 1547 "parser.php" +#line 1549 "parser.php" #line 148 "parser.y" function yy_r41(){ $this->_retvalue = array('operation' => 'filter', 'functions' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1550 "parser.php" +#line 1552 "parser.php" #line 151 "parser.y" function yy_r42(){ $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 1553 "parser.php" -#line 154 "parser.y" - function yy_r43(){ $this->_retvalue = array('operation' => 'cycle', 'vars' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1556 "parser.php" +#line 1555 "parser.php" #line 155 "parser.y" - function yy_r44(){ $this->_retvalue = array('operation' => 'cycle', 'vars' => $this->yystack[$this->yyidx + -2]->minor, 'as' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1559 "parser.php" + function yy_r43(){ $this->_retvalue = array('operation' => 'cycle', 'vars' => $this->yystack[$this->yyidx + -2]->minor, 'as' => $this->yystack[$this->yyidx + 0]->minor); } +#line 1558 "parser.php" #line 158 "parser.y" - function yy_r45(){ $this->_retvalue = array('operation' => 'first_of', 'vars' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1562 "parser.php" + function yy_r44(){ $this->_retvalue = array('operation' => 'first_of', 'vars' => $this->yystack[$this->yyidx + 0]->minor); } +#line 1561 "parser.php" #line 162 "parser.y" - function yy_r46(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1565 "parser.php" + function yy_r45(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } +#line 1564 "parser.php" #line 163 "parser.y" - function yy_r47(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 1568 "parser.php" + function yy_r46(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } +#line 1567 "parser.php" #line 165 "parser.y" - function yy_r48(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, 'args'=>array($this->yystack[$this->yyidx + 0]->minor)); } -#line 1571 "parser.php" + function yy_r47(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, 'args'=>array($this->yystack[$this->yyidx + 0]->minor)); } +#line 1570 "parser.php" #line 169 "parser.y" - function yy_r50(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1574 "parser.php" + function yy_r49(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } +#line 1573 "parser.php" #line 173 "parser.y" - function yy_r53(){ $this->_retvalue = array('number' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1577 "parser.php" + function yy_r52(){ $this->_retvalue = array('number' => $this->yystack[$this->yyidx + 0]->minor); } +#line 1576 "parser.php" #line 174 "parser.y" - function yy_r54(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1580 "parser.php" + function yy_r53(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + 0]->minor); } +#line 1579 "parser.php" #line 175 "parser.y" - function yy_r55(){ $this->_retvalue = array('string' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1583 "parser.php" + function yy_r54(){ $this->_retvalue = array('string' => $this->yystack[$this->yyidx + 0]->minor); } +#line 1582 "parser.php" #line 177 "parser.y" - function yy_r56(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1586 "parser.php" + function yy_r55(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } +#line 1585 "parser.php" #line 179 "parser.y" - function yy_r58(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -#line 1589 "parser.php" + function yy_r57(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } +#line 1588 "parser.php" #line 183 "parser.y" - function yy_r60(){ $this->_retvalue = array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1592 "parser.php" + function yy_r59(){ $this->_retvalue = array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } +#line 1591 "parser.php" #line 186 "parser.y" - function yy_r63(){ $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 1595 "parser.php" + function yy_r62(){ $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 1594 "parser.php" #line 188 "parser.y" - function yy_r65(){$this->_retvalue = array('var_filter' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1598 "parser.php" + function yy_r64(){$this->_retvalue = array('var_filter' => $this->yystack[$this->yyidx + 0]->minor); } +#line 1597 "parser.php" #line 189 "parser.y" - function yy_r66(){ $this->_retvalue = array('op_expr' => 'expr', $this->yystack[$this->yyidx + -1]->minor); } -#line 1601 "parser.php" + function yy_r65(){ $this->_retvalue = array('op_expr' => 'expr', $this->yystack[$this->yyidx + -1]->minor); } +#line 1600 "parser.php" #line 196 "parser.y" - function yy_r69(){ 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 1604 "parser.php" + function yy_r68(){ 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 1603 "parser.php" #line 197 "parser.y" - function yy_r70(){ 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 1607 "parser.php" + function yy_r69(){ 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 1606 "parser.php" /** * placeholder for the left hand side in a reduce operation. @@ -1717,7 +1716,7 @@ static public $yy_action = array( $expect[] = self::$yyTokenName[$token]; } throw new Exception('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. '), expected one of: ' . implode(',', $expect)); -#line 1727 "parser.php" +#line 1726 "parser.php" } /** @@ -1737,7 +1736,7 @@ static public $yy_action = array( ** parser accepts */ #line 44 "parser.y" -#line 1748 "parser.php" +#line 1747 "parser.php" } /** diff --git a/haanga/parser.y b/haanga/parser.y index f12d2fe..22eebe1 100644 --- a/haanga/parser.y +++ b/haanga/parser.y @@ -84,7 +84,7 @@ stmts(A) ::= if_stmt(B). { A = B; } stmts(A) ::= T_INCLUDE var_or_string(B) T_CLOSE_TAG. { A = array('operation' => 'include', B); } stmts(A) ::= custom_tag(B). { A = B; } stmts(A) ::= alias(B). { A = B; } -stmts(A) ::= T_AUTOESCAPE T_OFF|T_ON(B) T_CLOSE_TAG body(X) T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG. { A = array('operation' => 'autoescape', 'value' => @B, 'body' => X); } +stmts(A) ::= T_AUTOESCAPE T_OFF|T_ON(B) T_CLOSE_TAG body(X) T_OPEN_TAG T_END_AUTOESCAPE T_CLOSE_TAG. { A = array('operation' => 'autoescape', 'value' => strtolower(@B), 'body' => X); } /* Statement */ @@ -102,7 +102,6 @@ custom_tag(A) ::= T_CUSTOM_BLOCK(B) T_CLOSE_TAG body(X) T_OPEN_TAG T_CUSTOM_END( alias(A) ::= T_WITH varname(B) T_AS varname(C) T_CLOSE_TAG body(X) T_OPEN_TAG T_ENDWITH T_CLOSE_TAG. { A = array('operation' => 'alias', 'var' => B, 'as' => C, 'body' => X); } /* Simple statements (don't require a end_tag or a body ) */ -stmt(A) ::= cycle(B). { A = B; } stmt(A) ::= regroup(B). { A = B; } stmt(A) ::= first_of(B). { A = B; } @@ -149,11 +148,7 @@ block_stmt(A) ::= T_BLOCK varname(B) T_CLOSE_TAG body(C) T_OPEN_TAG T_END_BLOCK filter_stmt(A) ::= T_FILTER piped_list(B) T_CLOSE_TAG body(X) T_OPEN_TAG T_END_FILTER T_CLOSE_TAG. { A = array('operation' => 'filter', 'functions' => B, 'body' => X); } /* regroup stmt */ -regroup(A) ::= T_REGROUP varname(B) T_BY varname(C) T_AS varname(X). { A=array('operation' => 'regroup', 'array' => B, 'row' => C, 'as' => X); } - -/* Cycle */ -cycle(A) ::= T_CYCLE list(B). { A = array('operation' => 'cycle', 'vars' => B); } -cycle(A) ::= T_CYCLE list(B) T_AS varname(C). { A = array('operation' => 'cycle', 'vars' => B, 'as' => C); } +regroup(A) ::= T_REGROUP piped_list(B) T_BY varname(C) T_AS varname(X). { A=array('operation' => 'regroup', 'array' => B, 'row' => C, 'as' => X); } /* first_of */ first_of(A) ::= T_FIRST_OF list(B). { A = array('operation' => 'first_of', 'vars' => B); } @@ -198,4 +193,4 @@ varname(A) ::= varname(B) T_DOT T_ALPHA(C). { if (!is_array(B)) { A = array(B); 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 */ -varname(A) ::= T_CUSTOM|T_CUSTOM_BLOCK(B). { A = B; } +varname(A) ::= T_CUSTOM_TAG|T_CUSTOM_BLOCK(B). { A = B; } diff --git a/haanga/tags/cycle.php b/haanga/tags/cycle.php new file mode 100644 index 0000000..957b81b --- /dev/null +++ b/haanga/tags/cycle.php @@ -0,0 +1,48 @@ +cycle)) { + $cmp->cycle = array(); + } + $index = 'index_'.$cycle; + $def = 'def_cycle_'.$cycle; + $out = array(); + + if (count($args) == 1 && isset($args[0]['var']) && isset($cmp->cycle[$args[0]['var']])) { + $id = $cmp->cycle[$args[0]['var']]; + $index = 'index_'.$id; + $def = 'def_cycle_'.$id; + } else { + $out[] = $cmp->op_declare($def, $cmp->expr_array_first($args)); + } + + /* isset($var) == FALSE */ + $expr = $cmp->expr('==', $cmp->expr_exec('isset', $cmp->expr_var($index)), FALSE); + /* ($foo + 1) % count($bar) */ + $inc = $cmp->expr('%', + $cmp->expr('expr', + $cmp->expr('+', $cmp->expr_var($index), 1) + ), + $cmp->expr_exec('count', $cmp->expr_var($def)) + ); + + if (!$declared) { + $out[] = $cmp->op_declare($index, $cmp->expr_cond($expr, $cmp->expr_number(0), array('expr' => $inc))); + $var = $cmp->expr_var($def, $cmp->expr_var($index)); + $cmp->generate_op_print(array("variable" => $var['var']), $out); + } else { + $cmp->cycle[$declared] = $cycle; + } + + $cycle++; + + return new ArrayIterator($out); + + } +} diff --git a/haanga/tags/dictsort.php b/haanga/tags/dictsort.php new file mode 100644 index 0000000..f9eeb53 --- /dev/null +++ b/haanga/tags/dictsort.php @@ -0,0 +1,33 @@ +"); + } + + /* set redirected as a variable */ + $redirected = $cmp->expr_var($redirected); + $field = $cmp->expr_var('field'); + $key = $cmp->expr_var('key'); + + /* create list of statements */ + $out = array(); + $out[] = $cmp->op_declare($redirected, $args[0]); + $out[] = $cmp->op_declare('field', $cmp->expr_array()); + $out[] = $cmp->op_foreach($redirected, 'item', $key); + $out[] = $cmp->op_declare($cmp->expr_var('field', $key), $cmp->expr_var('item', $args[1])); + $out[] = $cmp->op_end('foreach'); + $out[] = $cmp->op_expr($cmp->expr_exec('array_multisort', $cmp->expr_var('field'), $cmp->expr_const('SORT_ASC'), $redirected)); + + return new ArrayIterator($out); + } +} diff --git a/tests/assert_templates/ifchanged.html b/tests/assert_templates/ifchanged.html index 75a4b8c..8988c82 100644 --- a/tests/assert_templates/ifchanged.html +++ b/tests/assert_templates/ifchanged.html @@ -1,27 +1,28 @@ + Users with 22 years - foo + bar - bar + foo Users with 23 years - older Foo + older Bar - older Bar + older Foo Users with 22 years - foo + bar continue - bar + foo Users with 23 years - older Foo + older Bar continue - older Bar + older Foo diff --git a/tests/assert_templates/ifchanged.php b/tests/assert_templates/ifchanged.php index ddbf8ee..36e4c36 100644 --- a/tests/assert_templates/ifchanged.php +++ b/tests/assert_templates/ifchanged.php @@ -7,11 +7,6 @@ $data = array('users' => array( 'foo' => 1, ), array( - 'name' => 'bar', - 'age' => 22, - 'foo' => 2 - ), - array( 'name' => 'older Foo', 'age' => 23, 'foo' => 2 @@ -21,4 +16,9 @@ $data = array('users' => array( 'age' => 23, 'foo' => 2 ), + array( + 'name' => 'bar', + 'age' => 22, + 'foo' => 2 + ), )); diff --git a/tests/assert_templates/ifchanged.tpl b/tests/assert_templates/ifchanged.tpl index 3a91f74..4db00dc 100644 --- a/tests/assert_templates/ifchanged.tpl +++ b/tests/assert_templates/ifchanged.tpl @@ -1,9 +1,10 @@ -{% for user in users %} +{% dictsort users "age" as sorted_users %} +{% for user in sorted_users %} {% ifchanged %}Users with {{user.age}} years{% endifchanged %} {{ user.name }} {% endfor %} -{% for user in users %} +{% for user in sorted_users %} {% ifchanged user.age user.foo %}Users with {{user.age}} years{% else %}continue{% endifchanged %} {{ user.name }} {% endfor %} diff --git a/tests/assert_templates/join.html b/tests/assert_templates/join.html index 35487ad..1b82e20 100644 --- a/tests/assert_templates/join.html +++ b/tests/assert_templates/join.html @@ -1,2 +1,3 @@ one // two // three onetwothree +three // two // one diff --git a/tests/assert_templates/join.tpl b/tests/assert_templates/join.tpl index 4a0e330..30c7a4e 100644 --- a/tests/assert_templates/join.tpl +++ b/tests/assert_templates/join.tpl @@ -1,2 +1,3 @@ {{ array|join:" // " }} {{ array|join }} +{{ array|reverse|join:" // " }} diff --git a/tests/assert_templates/regroup.html b/tests/assert_templates/regroup.html index 0218565..473bb9e 100644 --- a/tests/assert_templates/regroup.html +++ b/tests/assert_templates/regroup.html @@ -3,17 +3,17 @@ 22 - 1-3-2 (1). Foo (first) + 1-3-2 (1). Middle (first) - 2-2-1 (1). Middle () + 2-2-1 (1). Bar () - 3-1-0 (1). Bar (last) + 3-1-0 (1). Foo (last) 23 - 1-2-1 (2). Older Foo (first) + 1-2-1 (2). Older Bar (first) - 2-1-0 (2). Older Bar (last) + 2-1-0 (2). Older Foo (last) diff --git a/tests/assert_templates/regroup.tpl b/tests/assert_templates/regroup.tpl index 86c2fd8..a282034 100644 --- a/tests/assert_templates/regroup.tpl +++ b/tests/assert_templates/regroup.tpl @@ -1,4 +1,4 @@ -{% regroup users by age as sorted_users %} +{% regroup users|dictsort:"age" by age as sorted_users %} {% for user in sorted_users %} {{user.grouper}} diff --git a/tests/err_templates/loop_varname.tpl b/tests/err_templates/loop_varname.tpl new file mode 100644 index 0000000..7fcc845 --- /dev/null +++ b/tests/err_templates/loop_varname.tpl @@ -0,0 +1,6 @@ +{% extends "assert_templates/base.tpl" %} + +{% block foo %} + {% for i in block.super %} + {% endfor %} +{% endblock %} diff --git a/tests/err_templates/reverse.tpl b/tests/err_templates/reverse.tpl new file mode 100644 index 0000000..dc2256b --- /dev/null +++ b/tests/err_templates/reverse.tpl @@ -0,0 +1 @@ +{{ foo|reverse:"bar"}} diff --git a/tests/templateTest.php b/tests/templateTest.php index 751a9ba..9efd1c6 100644 --- a/tests/templateTest.php +++ b/tests/templateTest.php @@ -19,9 +19,9 @@ class templateTest extends PHPUnit_Framework_TestCase public function testRuntime($test_file, $data, $expected) { $output = Haanga::Load($test_file, $data, TRUE); - /**/$output = str_replace(" ", '\s', $output); + /*$output = str_replace(" ", '\s', $output); $expected = str_replace(" ", '\s', $expected);/**/ - $this->assertEquals($expected, $output); + $this->assertEquals($output, $expected); } public function tplProvider() diff --git a/tests/tmp/1d992f3d68f25e0f67960320816915d87f8e6120.php b/tests/tmp/1d992f3d68f25e0f67960320816915d87f8e6120.php index 0a6f47b..122654b 100644 --- a/tests/tmp/1d992f3d68f25e0f67960320816915d87f8e6120.php +++ b/tests/tmp/1d992f3d68f25e0f67960320816915d87f8e6120.php @@ -3,7 +3,7 @@ function haanga_1d992f3d68f25e0f67960320816915d87f8e6120($vars, $return=FALSE, $blocks=array()) { extract($vars); - $buffer1 = "".htmlentities(implode(" // ", $array))."\n".htmlentities(implode("", $array))."\n"; + $buffer1 = "".htmlentities(implode(" // ", $array))."\n".htmlentities(implode("", $array))."\n".implode(" // ", array_reverse($array, TRUE))."\n"; if ($return == TRUE) { return $buffer1; } else { diff --git a/tests/tmp/33ff616729fa5b4a494db28dee3c3f04cecdd01d.php b/tests/tmp/33ff616729fa5b4a494db28dee3c3f04cecdd01d.php index a1282da..ba075c5 100644 --- a/tests/tmp/33ff616729fa5b4a494db28dee3c3f04cecdd01d.php +++ b/tests/tmp/33ff616729fa5b4a494db28dee3c3f04cecdd01d.php @@ -5,7 +5,7 @@ Haanga::doInclude("/filters/truncatewords.php"); function haanga_33ff616729fa5b4a494db28dee3c3f04cecdd01d($vars, $return=FALSE, $blocks=array()) { extract($vars); - $buffer1 = "".htmlentities(ucwords(strtolower(Truncatewords_Filter::main($short_text, 2))))."\n".htmlentities(ucwords(strtolower(Truncatewords_Filter::main($text, 2))))."\n"; + $buffer1 = "".ucwords(strtolower(Truncatewords_Filter::main($short_text, 2)))."\n".ucwords(strtolower(Truncatewords_Filter::main($text, 2)))."\n"; if ($return == TRUE) { return $buffer1; } else { diff --git a/tests/tmp/4726e18009acee8a1c86a79b620c7ded71be5ddf.php b/tests/tmp/4726e18009acee8a1c86a79b620c7ded71be5ddf.php index 96bc3a5..1b7737c 100644 --- a/tests/tmp/4726e18009acee8a1c86a79b620c7ded71be5ddf.php +++ b/tests/tmp/4726e18009acee8a1c86a79b620c7ded71be5ddf.php @@ -24,7 +24,7 @@ function haanga_4726e18009acee8a1c86a79b620c7ded71be5ddf($vars, $return=FALSE, $ foreach ($array as $i) { $buffer2 = "\n "; if ($islast_1) { - $buffer2 .= " Last ".$i; + $buffer2 .= " Last ".htmlentities($i); } $buffer2 .= "\n\n"; $buffer1 .= trim($buffer2); @@ -42,7 +42,7 @@ function haanga_4726e18009acee8a1c86a79b620c7ded71be5ddf($vars, $return=FALSE, $ foreach ($arr as $val) { $buffer2 .= "\n "; if ($islast_1) { - $buffer2 .= " Last ".$k; + $buffer2 .= " Last ".htmlentities($k); } $buffer2 .= "\n "; } @@ -62,7 +62,7 @@ function haanga_4726e18009acee8a1c86a79b620c7ded71be5ddf($vars, $return=FALSE, $ foreach ($arr as $val) { $buffer2 .= "\n "; if ($isfirst_1) { - $buffer2 .= " first ".$k; + $buffer2 .= " first ".htmlentities($k); } $buffer2 .= "\n "; } diff --git a/tests/tmp/7c948c919295fb106667df66f458e608eb775422.php b/tests/tmp/7c948c919295fb106667df66f458e608eb775422.php index 3111ac5..69ddc80 100644 --- a/tests/tmp/7c948c919295fb106667df66f458e608eb775422.php +++ b/tests/tmp/7c948c919295fb106667df66f458e608eb775422.php @@ -3,7 +3,7 @@ function haanga_7c948c919295fb106667df66f458e608eb775422($vars, $return=FALSE, $blocks=array()) { extract($vars); - $buffer1 = "".htmlentities(strtoupper($var))."\n".htmlentities(strtolower(strtoupper($var)))."\n".htmlentities(str_replace("u", "", $var))."\n".htmlentities((is_array($var) == TRUE ? count($var) : strlen($var)))."\n".htmlentities(strtoupper((empty($foobar) == TRUE ? "default value" : $foobar)))."\n"; + $buffer1 = "".htmlentities(strtoupper($var))."\n".strtolower(strtoupper($var))."\n".htmlentities(str_replace("u", "", $var))."\n".htmlentities((is_array($var) == TRUE ? count($var) : strlen($var)))."\n".strtoupper((empty($foobar) == TRUE ? "default value" : $foobar))."\n"; $buffer2 = "\n hola que \n"; $buffer1 .= strtoupper($buffer2)."\n"; $buffer2 = "TAL"; diff --git a/tests/tmp/be17029b5fd2998df7c922a92652b6886d7780fd.php b/tests/tmp/be17029b5fd2998df7c922a92652b6886d7780fd.php index c7cfc99..2c02c01 100644 --- a/tests/tmp/be17029b5fd2998df7c922a92652b6886d7780fd.php +++ b/tests/tmp/be17029b5fd2998df7c922a92652b6886d7780fd.php @@ -4,7 +4,14 @@ function haanga_be17029b5fd2998df7c922a92652b6886d7780fd($vars, $return=FALSE, $ { extract($vars); $buffer1 = ""; - foreach ($users as $user) { + $sorted_users = $users; + $field = Array(); + foreach ($sorted_users as $key => $item) { + $field[$key] = $item["age"]; + } + array_multisort($field, SORT_ASC, $sorted_users); + $buffer1 .= "\n"; + foreach ($sorted_users as $user) { $buffer1 .= "\n "; $buffer2 = "Users with ".htmlentities($user["age"])." years"; if (isset($ifchanged1) == FALSE OR $ifchanged1 != $buffer2) { @@ -14,7 +21,7 @@ function haanga_be17029b5fd2998df7c922a92652b6886d7780fd($vars, $return=FALSE, $ $buffer1 .= "\n ".htmlentities($user["name"])."\n"; } $buffer1 .= "\n\n"; - foreach ($users as $user) { + foreach ($sorted_users as $user) { $buffer1 .= "\n "; if ((isset($ifchanged2[1]) == FALSE OR $ifchanged2[1] != $user["foo"]) AND isset($ifchanged2[0]) == FALSE OR $ifchanged2[0] != $user["age"]) { $buffer1 .= "Users with ".htmlentities($user["age"])." years"; diff --git a/tests/tmp/e3288a8c38d2925df1b81c50c72b7eee31f8c2f9.php b/tests/tmp/e3288a8c38d2925df1b81c50c72b7eee31f8c2f9.php index 1bbdffa..b7e72e6 100644 --- a/tests/tmp/e3288a8c38d2925df1b81c50c72b7eee31f8c2f9.php +++ b/tests/tmp/e3288a8c38d2925df1b81c50c72b7eee31f8c2f9.php @@ -1,10 +1,13 @@