diff --git a/classes/Utils.php b/classes/Utils.php index 28c0be876b7116451883dfde845779a29e88f791..0899f1340f2c0f290af58d750e8aa9b4a45dda8c 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -216,9 +216,9 @@ class Utils{ case 'json': $ser = ARC2::getRDFJSONSerializer(); break; - case 'jsonp': - $ser = ARC2::getRDFJSONSerializer(); - break; + case 'jsonp': + $ser = ARC2::getRDFJSONSerializer(); + break; case 'rdf': $ser = ARC2::getRDFXMLSerializer(); break; diff --git a/classes/modules/staticModule.php b/classes/modules/staticModule.php index 69a5501d7118650a47f85f97812d28e10905ba1b..2b2efcd4aa2be05ef73ec41f429de9f56da04882 100644 --- a/classes/modules/staticModule.php +++ b/classes/modules/staticModule.php @@ -24,8 +24,9 @@ class StaticModule extends abstractModule{ global $uri; global $acceptContentType; global $endpoints; - global $lodspk; - $extension = array_pop(explode(".", $file)); + global $lodspk; + $filenamearray =explode(".",$file); + $extension = end($filenamearray); $ct = $this->getContentType($extension); header("Content-type: ".$ct); $uri = $localUri; @@ -62,7 +63,7 @@ class StaticModule extends abstractModule{ 'js' => 'application/javascript', 'json' => 'application/json', 'jsonp'=> 'application/javascript', - 'nt' => 'text/plain', + 'nt' => 'text/plain', 'ttl' => 'text/turtle', 'png' => 'image/png', 'jpg' => 'image/jpeg', diff --git a/lib/Haanga/lib/Haanga.php b/lib/Haanga/lib/Haanga.php index 8ae8423d2c5ac3729747e89f4317869f96b5f182..bc52e3c79e52348ad9293e9608e2af1503d01b0e 100644 --- a/lib/Haanga/lib/Haanga.php +++ b/lib/Haanga/lib/Haanga.php @@ -37,7 +37,7 @@ if (!defined('HAANGA_VERSION')) { /* anyone can override this value to force recompilation */ - define('HAANGA_VERSION', '1.0.4'); + define('HAANGA_VERSION', '1.0.7'); } @@ -53,7 +53,7 @@ if (!defined('HAANGA_VERSION')) { class Haanga { protected static $cache_dir; - protected static $templates_dir='.'; + protected static $templates_dir=array('.'); protected static $debug; protected static $bootstrap = NULL; protected static $check_ttl; @@ -70,26 +70,6 @@ class Haanga /* The class can't be instanced */ } - final public static function AutoLoad($class) - { - static $loaded = array(); - static $path; - - if (!isset($loaded[$class]) && substr($class, 0, 6) === 'Haanga' && !class_exists($class, false)) { - if ($path === NULL) { - $path = dirname(__FILE__); - } - $file = $path.DIRECTORY_SEPARATOR.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php'; - if (is_file($file)) { - require $file; - } - $loaded[$class] = TRUE; - return; - } - - return FALSE; - } - public static function getTemplateDir() { return self::$templates_dir; @@ -121,7 +101,7 @@ class Haanga self::$cache_dir = $value; break; case 'template_dir': - self::$templates_dir = $value; + self::$templates_dir = (Array)$value; break; case 'bootstrap': if (is_callable($value)) { @@ -225,7 +205,7 @@ class Haanga /* load compiler (done just once) */ if (self::$use_autoload) { - spl_autoload_register(array(__CLASS__, 'AutoLoad')); + require_once "{$dir}/Haanga/Loader.php"; } $compiler = new Haanga_Compiler_Runtime; @@ -272,16 +252,27 @@ class Haanga $code = $compiler->compile($tpl); - return create_function('$vars=array(), $return=TRUE, $blocks=array()', $code); + return create_function('$' . $compiler->getScopeVariable(NULL, TRUE) . '=array(), $return=TRUE, $blocks=array()', $code); } // }}} + public static function getTemplatePath($file) + { + foreach (self::$templates_dir as $dir) { + $tpl = $dir .'/'.$file; + if (is_file($tpl)) { + return realpath($tpl); + } + } + throw new \RuntimeException("Cannot find {$file} file (looked in " . implode(",", self::$templates_dir) . ")"); + } + // safe_load(string $file, array $vars, bool $return, array $blocks) {{{ public static function Safe_Load($file, $vars = array(), $return=FALSE, $blocks=array()) { try { - $tpl = self::$templates_dir.'/'.$file; + $tpl = self::getTemplatePath($file); if (file_exists($tpl)) { /* call load if the tpl file exists */ return self::Load($file, $vars, $return, $blocks); @@ -318,7 +309,7 @@ class Haanga self::$has_compiled = FALSE; - $tpl = self::$templates_dir.'/'.$file; + $tpl = self::getTemplatePath($file); $fnc = sha1($tpl); $callback = "haanga_".$fnc; @@ -340,9 +331,10 @@ class Haanga $result = call_user_func(self::$check_set, $callback, TRUE, self::$check_ttl); } } - - if (!is_file($php) || ($check && filemtime($tpl) > filemtime($php))) { + $mtpl = filemtime($tpl); + + if (!is_file($php) || ($check && $mtpl > filemtime($php))) { if (!is_file($tpl)) { /* There is no template nor compiled file */ throw new Exception("View {$file} doesn't exists"); @@ -404,6 +396,7 @@ class Haanga fwrite($fp, "<?php".$code); flock($fp, LOCK_UN); // release the lock fclose($fp); + touch($php, $mtpl, $mtpl); } else { /* local eval */ eval($code); @@ -419,10 +412,21 @@ class Haanga /* really weird case ($php is empty, another process is compiling the $tpl for the first time), so create a lambda function - for the template + for the template. + + To be safe we're invalidating its time, because its content + is no longer valid to us */ - $lambda= self::compile(file_get_contents($tpl), $vars); - return $lambda($vars, $return, $blocks); + touch($php, 300, 300); + chmod($php, 0777); + + + // compile temporarily + $compiler = self::getCompiler(); + $code = $compiler->compile_file($tpl, FALSE, $vars); + eval($code); + + return $callback($vars, $return, $blocks); } } diff --git a/lib/Haanga/lib/Haanga/AST.php b/lib/Haanga/lib/Haanga/AST.php index 22d7b3bb19db66b635274561a32c059eac407fc2..d745b2edca087d89b609b6840ebde964d8d25ca8 100644 --- a/lib/Haanga/lib/Haanga/AST.php +++ b/lib/Haanga/lib/Haanga/AST.php @@ -236,7 +236,7 @@ class Haanga_AST } else if ($obj === TRUE) { $value = array('expr' => TRUE); } else if (is_array($obj)) { - foreach (array('exec', 'var', 'string', 'number', 'constant') as $type) { + foreach (array('expr_cond', 'op_expr', 'exec', 'var', 'string', 'number', 'constant') as $type) { if (isset($obj[$type])) { $value = $obj; return; @@ -299,6 +299,9 @@ class Haanga_AST if (is_object($var1)) { $var1 = $var1->getArray(); } + if (empty($var1['var'])) { + throw new Exception("Can't iterate, apparently $var isn't a variable"); + } $var1 = $var1['var']; } $def = array('op' => 'foreach', 'array' => $array, 'value' => $value); @@ -528,6 +531,9 @@ function hvar() function hvar_ex($args) { $code = hcode(); + if (is_object($args)) { + return $args->stack[0]; + } return call_user_func_array(array($code, 'v'), $args); } // }}} diff --git a/lib/Haanga/lib/Haanga/Compiler.php b/lib/Haanga/lib/Haanga/Compiler.php index 0f8daa3f8d2ed5d33a89044f9f08c8839087ba3f..f523bae00fbaff5d6ba04303047ca44d0724a7fb 100644 --- a/lib/Haanga/lib/Haanga/Compiler.php +++ b/lib/Haanga/lib/Haanga/Compiler.php @@ -100,6 +100,24 @@ class Haanga_Compiler } } + public function getScopeVariable($part = NULL, $string = FALSE) + { + static $var = NULL; + + if ($var === NULL) { + $var = 'vars' . uniqid(true); + } + + if ($string) { + return $var; + } + + if ($part !== NULL) { + return hvar($var, $part); + } + return hvar($var); + } + // getOption($option) {{{ public static function getOption($option) { @@ -269,7 +287,7 @@ class Haanga_Compiler } - $body->do_exec('extract', hvar('vars')); + $body->do_exec('extract', $this->getScopeVariable()); $body->do_if(hexpr(hvar('return'), '==', TRUE)); $body->do_exec('ob_start'); $body->do_endif(); @@ -300,7 +318,7 @@ class Haanga_Compiler $op_code = $body->getArray(TRUE); - $code .= $this->generator->getCode($op_code); + $code .= $this->generator->getCode($op_code, $this->getScopeVariable(NULL, TRUE)); if (!empty($this->append)) { $code .= $this->append; } @@ -334,7 +352,11 @@ class Haanga_Compiler $this->check_function = $safe; $this->context = $context; $name = $this->set_template_name($file); - return $this->compile(file_get_contents($file), $name, $file); + try { + return $this->compile(file_get_contents($file), $name, $file); + } catch (Exception $e) { + $this->Error((string)$e); + } } // }}} @@ -356,7 +378,7 @@ class Haanga_Compiler $parsed = Haanga_Compiler_Tokenizer::init($code, $this, $file); $body = new Haanga_AST; if (isset($parsed[0]) && $parsed[0]['operation'] == 'base') { - $this->Error("{% base is not supported on inlines %}"); + throw new Exception("{% base is not supported on inlines %}"); } $body = new Haanga_AST; $this->generate_op_code($parsed, $body); @@ -395,7 +417,7 @@ class Haanga_Compiler { return hexec( $this->get_function_name($this->subtemplate), - hvar('vars'), TRUE, + $this->getScopeVariable(), TRUE, hvar('blocks') ); } @@ -417,7 +439,7 @@ class Haanga_Compiler function get_base_template($base) { if (!Haanga_AST::is_str($base)) { - $this->Error("Dynamic inheritance is not supported for compilated templates"); + throw new Exception("Dynamic inheritance is not supported for compilated templates"); } $file = $base['string']; list($this->subtemplate, $new_code) = $this->compile_required_template($file); @@ -428,7 +450,7 @@ class Haanga_Compiler // {% base "foo.html" %} {{{ protected function generate_op_base() { - $this->Error("{% base %} can be only as first statement"); + throw new Exception("{% base %} can be only as first statement"); } // }}} @@ -436,14 +458,14 @@ class Haanga_Compiler protected function generate_op_code($parsed, &$body) { if (!is_array($parsed)) { - $this->Error("Invalid \$parsed array"); + throw new Exception("Invalid \$parsed array"); } foreach ($parsed as $op) { if (!is_array($op)) { continue; } if (!isset($op['operation'])) { - $this->Error("Malformed array:".print_r($op, TRUE)); + throw new Exception("Malformed array:".print_r($op, TRUE)); } if (isset($op['line'])) { $this->line = $op['line']; @@ -456,7 +478,7 @@ class Haanga_Compiler $method = "generate_op_".$op['operation']; if (!is_callable(array($this, $method))) { - $this->Error("Compiler: Missing method $method"); + throw new Exception("Compiler: Missing method $method"); } $this->$method($op, $body); } @@ -556,7 +578,7 @@ class Haanga_Compiler } } if (!is_file($file)) { - $this->Error("can't find {$file} file template"); + throw new Exception("can't find {$file} file template"); } $class = get_class($this); $comp = new $class; @@ -570,13 +592,13 @@ class Haanga_Compiler protected function generate_op_include($details, &$body) { if (!$details[0]['string']) { - $this->Error("Dynamic inheritance is not supported for compilated templates"); + throw new Exception("Dynamic inheritance is not supported for compilated templates"); } list($name,$code) = $this->compile_required_template($details[0]['string']); $this->append .= "\n\n{$code}"; $this->do_print($body, hexec($this->get_function_name($name), - hvar('vars'), TRUE, hvar('blocks')) + $this->getScopeVariable(), TRUE, hvar('blocks')) ); } // }}} @@ -619,20 +641,32 @@ class Haanga_Compiler * @return expr * */ - function get_filtered_var($variable, &$varname, $accept_string=FALSE) + function get_filtered_var($variable, &$varname, $accept_string=NULL) { $this->var_is_safe = FALSE; + if ($accept_string === NULL && is_array($variable[0]) && + !Haanga_AST::is_exec($variable[0])) { + $accept_string = !empty($variable[0]['string']) + || $variable[0][0] === 'block'; + } + if (count($variable) > 1) { $count = count($variable); - $target = $this->generate_variable_name($variable[0]); + if ($accept_string && isset($variable[0]['string'])) { + $target = $variable[0]; + } else if (Haanga_AST::is_exec($variable[0])) { + $target = $variable[0]; + } else { + $target = $this->generate_variable_name($variable[0]); + } - if (!Haanga_AST::is_var($target)) { + if (!empty($variable[0][0]) && $variable[0][0] == 'block') { /* block.super can't have any filter */ - $this->Error("This variable can't have any filter"); + throw new Exception("This variable can't have any filter"); } - if ($this->isMethod($target['var'], $return)) { + if (!empty($target['var']) && $this->isMethod($target['var'], $return)) { $target = $return; } @@ -649,6 +683,10 @@ class Haanga_Compiler $varname = $args[0]; $details = $exec; } else { + if (Haanga_AST::is_exec($variable[0])) { + return $variable[0]; + } + $details = $this->generate_variable_name($variable[0]); $varname = $variable[0]; @@ -660,7 +698,7 @@ class Haanga_Compiler /* generate_variable_name didn't replied a variable, weird case currently just used for {{block.super}}. */ - $this->Error("Invalid variable name {$variable[0]}"); + throw new Exception("Invalid variable name {$variable[0]}"); } } @@ -678,27 +716,16 @@ class Haanga_Compiler */ protected function generate_op_print_var($details, &$body) { + $expr = $details['expr']; + $this->check_expr($expr); - $details = $this->get_filtered_var($details['variable'], $variable, TRUE); - if (!Haanga_AST::is_var($details) && !Haanga_AST::is_exec($details)) { - /* generate_variable_name didn't replied a variable, weird case - currently just used for {{block.super}}. - */ - $this->do_print($body, $details); - return; - } - - if (!$this->is_safe($details) && self::$autoescape) { - $args = array($details); - $details = $this->do_filtering('escape', $args); + if (!$this->is_safe($expr) && self::$autoescape) { + $args = array($expr); + $expr = $this->do_filtering('escape', $args); } - - if (is_array($details)) { - $details = Haanga_AST::fromArrayGetAST($details); - } - $this->do_print($body, $details); + $this->do_print($body, $expr); } // }}} @@ -724,7 +751,7 @@ class Haanga_Compiler } elseif (isset($part['object'])) { $name .= "{$part['object']}"; } else { - $this->Error("Invalid blockname"); + throw new Exception("Invalid blockname"); } } $name .= "."; @@ -863,10 +890,10 @@ class Haanga_Compiler } $var = &$var->$name; } else { - if (!isset($var->$part['object'])) { + if (!isset($var->{$part['object']})) { return NULL; } - $var = &$var->$part['object']; + $var = &$var->{$part['object']}; } } else if (is_object($var)) { if (!isset($var->$part)) { @@ -926,7 +953,7 @@ class Haanga_Compiler return array('var' => $variable); } if (!$this->forid) { - $this->Error("Invalid forloop reference outside of a loop"); + throw new Exception("Invalid forloop reference outside of a loop"); } switch ($variable[1]['object']) { @@ -963,7 +990,7 @@ class Haanga_Compiler $this->forid++; break; default: - $this->Error("Unexpected forloop.{$variable[1]}"); + throw new Exception("Unexpected forloop.{$variable[1]}"); } /* no need to escape it */ $this->var_is_safe = TRUE; @@ -973,10 +1000,10 @@ class Haanga_Compiler return array('var' => $variable); } if ($this->in_block == 0) { - $this->Error("Can't use block.super outside a block"); + throw new Exception("Can't use block.super outside a block"); } if (!$this->subtemplate) { - $this->Error("Only subtemplates can call block.super"); + throw new Exception("Only subtemplates can call block.super"); } /* no need to escape it */ $this->var_is_safe = TRUE; @@ -1198,7 +1225,7 @@ class Haanga_Compiler $var = $this->generate_variable_name($details['var']); $this->check_expr($details['expr']); $body->decl_raw($var, $details['expr']); - $body->decl(hvar('vars', $var['var']), $var); + $body->decl($this->getScopeVariable($var['var']), $var); } @@ -1224,7 +1251,7 @@ class Haanga_Compiler /* beauty :-) */ foreach ($details['check'] as $id=>$type) { if (!Haanga_AST::is_var($type)) { - $this->Error("Unexpected string {$type['string']}, expected a varabile"); + throw new Exception("Unexpected string {$type['string']}, expected a varabile"); } $this_expr = hexpr(hexpr( @@ -1233,7 +1260,7 @@ class Haanga_Compiler )); if (isset($expr)) { - $this_expr = hexpr($expr, '&&', $this_expr); + $this_expr = hexpr($expr, '||', $this_expr); } $expr = $this_expr; @@ -1331,7 +1358,7 @@ class Haanga_Compiler $args = array_merge(array($target), $details['list']); $exec = $tags->generator($tag_name, $this, $args); if (!$exec InstanceOf Haanga_AST) { - $this->Error("Invalid output of custom filter {$tag_name}"); + throw new Exception("Invalid output of custom filter {$tag_name}"); } if ($exec->stack_size() >= 2 || $exec->doesPrint) { /* @@ -1367,7 +1394,7 @@ class Haanga_Compiler return; } } else { - $this->Error("Invalid output of the custom tag {$tag_name}"); + throw new Exception("Invalid output of the custom tag {$tag_name}"); } } else { $fnc = array_shift($args); @@ -1425,7 +1452,7 @@ class Haanga_Compiler } if (!$filter->isValid($name)) { - $this->Error("{$name} is an invalid filter"); + throw new Exception("{$name} is an invalid filter"); } if ($filter->isSafe($name)) { diff --git a/lib/Haanga/lib/Haanga/Compiler/Parser.php b/lib/Haanga/lib/Haanga/Compiler/Parser.php index 9d16bb5f7e9d5f2be97322ff60ed730ca6bdf014..4e0b94210c23b8b4d3c2218262c52a82a20e4ee9 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Parser.php +++ b/lib/Haanga/lib/Haanga/Compiler/Parser.php @@ -94,7 +94,7 @@ class Haanga_yyStackEntry }; // code external to the class is included here -#line 2 "Parser.y" +#line 2 "lib/Haanga/Compiler/Parser.y" /* +---------------------------------------------------------------------------------+ @@ -131,15 +131,15 @@ class Haanga_yyStackEntry | Authors: César Rodas <crodas@php.net> | +---------------------------------------------------------------------------------+ */ -#line 136 "Parser.php" +#line 136 "lib/Haanga/Compiler/Parser.php" // declare_class is output here -#line 39 "Parser.y" - class Haanga_Compiler_Parser #line 141 "Parser.php" +#line 39 "lib/Haanga/Compiler/Parser.y" + class Haanga_Compiler_Parser #line 141 "lib/Haanga/Compiler/Parser.php" { /* First off, code is included which follows the "include_class" declaration ** in the input file. */ -#line 40 "Parser.y" +#line 40 "lib/Haanga/Compiler/Parser.y" protected $lex; protected $file; @@ -155,7 +155,7 @@ class Haanga_yyStackEntry throw new Haanga_Compiler_Exception($text.' in '.$this->file.':'.$this->lex->getLine()); } -#line 162 "Parser.php" +#line 162 "lib/Haanga/Compiler/Parser.php" /* Next is all token values, as class constants */ @@ -170,69 +170,71 @@ class Haanga_yyStackEntry const T_NOT = 2; const T_AND = 3; const T_OR = 4; - const T_EQ = 5; - const T_NE = 6; - const T_GT = 7; - const T_GE = 8; - const T_LT = 9; - const T_LE = 10; - const T_IN = 11; - const T_PLUS = 12; - const T_MINUS = 13; - const T_CONCAT = 14; - const T_TIMES = 15; - const T_DIV = 16; - const T_MOD = 17; - const T_PIPE = 18; - const T_BITWISE = 19; - const T_HTML = 20; - const T_COMMENT = 21; - const T_PRINT_OPEN = 22; - const T_PRINT_CLOSE = 23; - const T_EXTENDS = 24; - const T_TAG_CLOSE = 25; - const T_INCLUDE = 26; - const T_AUTOESCAPE = 27; - const T_CUSTOM_END = 28; - const T_CUSTOM_TAG = 29; - const T_AS = 30; - const T_CUSTOM_BLOCK = 31; - const T_SPACEFULL = 32; - const T_WITH = 33; - const T_SET = 34; - const T_ASSIGN = 35; - const T_LOAD = 36; - const T_FOR = 37; - const T_COMMA = 38; - const T_STEP = 39; - const T_EMPTY = 40; - const T_IF = 41; - const T_ELSE = 42; - const T_IFCHANGED = 43; - const T_IFEQUAL = 44; - const T_IFNOTEQUAL = 45; - const T_BLOCK = 46; - const T_FILTER = 47; - const T_REGROUP = 48; - const T_BY = 49; - const T_COLON = 50; - const T_TRUE = 51; - const T_FALSE = 52; - const T_STRING = 53; - const T_INTL = 54; - const T_RPARENT = 55; - const T_LPARENT = 56; - const T_OBJ = 57; - const T_DOT = 58; - const T_CLASS = 59; - const T_BRACKETS_OPEN = 60; - const T_BRACKETS_CLOSE = 61; - const T_ALPHA = 62; - const T_DOTDOT = 63; - const T_NUMERIC = 64; - const YY_NO_ACTION = 356; - const YY_ACCEPT_ACTION = 355; - const YY_ERROR_ACTION = 354; + const T_QUESTION = 5; + const T_COLON = 6; + const T_EQ = 7; + const T_NE = 8; + const T_GT = 9; + const T_GE = 10; + const T_LT = 11; + const T_LE = 12; + const T_IN = 13; + const T_PLUS = 14; + const T_MINUS = 15; + const T_CONCAT = 16; + const T_TIMES = 17; + const T_DIV = 18; + const T_MOD = 19; + const T_PIPE = 20; + const T_BITWISE = 21; + const T_FILTER_PIPE = 22; + const T_HTML = 23; + const T_COMMENT = 24; + const T_PRINT_OPEN = 25; + const T_PRINT_CLOSE = 26; + const T_EXTENDS = 27; + const T_TAG_CLOSE = 28; + const T_INCLUDE = 29; + const T_AUTOESCAPE = 30; + const T_CUSTOM_END = 31; + const T_CUSTOM_TAG = 32; + const T_AS = 33; + const T_CUSTOM_BLOCK = 34; + const T_SPACEFULL = 35; + const T_WITH = 36; + const T_SET = 37; + const T_ASSIGN = 38; + const T_LOAD = 39; + const T_FOR = 40; + const T_COMMA = 41; + const T_STEP = 42; + const T_EMPTY = 43; + const T_IF = 44; + const T_ELSE = 45; + const T_IFCHANGED = 46; + const T_IFEQUAL = 47; + const T_IFNOTEQUAL = 48; + const T_BLOCK = 49; + const T_FILTER = 50; + const T_REGROUP = 51; + const T_BY = 52; + const T_TRUE = 53; + const T_FALSE = 54; + const T_STRING = 55; + const T_INTL = 56; + const T_RPARENT = 57; + const T_LPARENT = 58; + const T_OBJ = 59; + const T_DOT = 60; + const T_CLASS = 61; + const T_BRACKETS_OPEN = 62; + const T_BRACKETS_CLOSE = 63; + const T_ALPHA = 64; + const T_DOTDOT = 65; + const T_NUMERIC = 66; + const YY_NO_ACTION = 374; + const YY_ACCEPT_ACTION = 373; + const YY_ERROR_ACTION = 372; /* 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 @@ -284,435 +286,473 @@ class Haanga_yyStackEntry ** shifting non-terminals after a reduce. ** self::$yy_default Default action for each state. */ - const YY_SZ_ACTTAB = 1402; + const YY_SZ_ACTTAB = 1586; static public $yy_action = array( - /* 0 */ 49, 57, 47, 66, 163, 39, 188, 41, 186, 61, - /* 10 */ 63, 225, 95, 67, 28, 28, 104, 33, 165, 40, - /* 20 */ 35, 37, 56, 52, 53, 49, 232, 47, 66, 157, - /* 30 */ 39, 195, 41, 186, 61, 63, 247, 95, 67, 228, - /* 40 */ 150, 210, 33, 158, 40, 35, 37, 56, 52, 53, - /* 50 */ 49, 229, 47, 66, 179, 39, 212, 41, 186, 61, - /* 60 */ 63, 235, 95, 67, 38, 355, 86, 33, 183, 40, - /* 70 */ 35, 37, 56, 52, 53, 49, 57, 47, 66, 185, - /* 80 */ 39, 200, 41, 186, 61, 63, 108, 95, 67, 116, - /* 90 */ 117, 68, 33, 181, 40, 35, 37, 56, 52, 53, - /* 100 */ 49, 230, 47, 66, 171, 39, 106, 41, 186, 61, - /* 110 */ 63, 57, 95, 67, 105, 215, 173, 33, 239, 40, - /* 120 */ 35, 37, 56, 52, 53, 49, 209, 47, 66, 146, - /* 130 */ 39, 242, 41, 186, 61, 63, 214, 95, 67, 102, - /* 140 */ 253, 251, 33, 147, 40, 35, 37, 56, 52, 53, - /* 150 */ 49, 59, 47, 66, 153, 39, 110, 41, 186, 61, - /* 160 */ 63, 57, 95, 67, 191, 199, 248, 33, 190, 40, - /* 170 */ 35, 37, 56, 52, 53, 49, 60, 47, 66, 184, - /* 180 */ 39, 244, 41, 186, 61, 63, 204, 95, 67, 246, - /* 190 */ 103, 115, 33, 25, 40, 35, 37, 56, 52, 53, - /* 200 */ 49, 50, 47, 66, 138, 39, 243, 41, 186, 61, - /* 210 */ 63, 252, 95, 67, 236, 98, 194, 33, 45, 40, - /* 220 */ 35, 37, 56, 52, 53, 49, 154, 47, 66, 139, - /* 230 */ 39, 351, 41, 186, 61, 63, 57, 95, 67, 238, - /* 240 */ 54, 237, 33, 97, 40, 35, 37, 56, 52, 53, - /* 250 */ 49, 233, 47, 66, 160, 39, 107, 41, 186, 61, - /* 260 */ 63, 45, 95, 67, 264, 99, 113, 33, 189, 40, - /* 270 */ 35, 37, 56, 52, 53, 49, 76, 47, 66, 164, - /* 280 */ 39, 224, 41, 186, 61, 63, 203, 95, 67, 89, - /* 290 */ 71, 83, 33, 241, 40, 35, 37, 56, 52, 53, - /* 300 */ 49, 82, 47, 66, 187, 39, 185, 41, 186, 61, - /* 310 */ 63, 78, 95, 67, 73, 84, 80, 33, 174, 40, - /* 320 */ 35, 37, 56, 52, 53, 49, 75, 47, 66, 167, - /* 330 */ 39, 74, 41, 186, 61, 63, 72, 95, 67, 81, - /* 340 */ 85, 77, 33, 185, 40, 35, 37, 56, 52, 53, - /* 350 */ 49, 79, 47, 66, 176, 39, 90, 41, 186, 61, - /* 360 */ 63, 92, 95, 67, 88, 91, 93, 33, 185, 40, - /* 370 */ 35, 37, 56, 52, 53, 49, 87, 47, 66, 140, - /* 380 */ 39, 185, 41, 186, 61, 63, 185, 95, 67, 185, - /* 390 */ 185, 185, 33, 185, 40, 35, 37, 56, 52, 53, - /* 400 */ 49, 185, 47, 66, 149, 39, 185, 41, 186, 61, - /* 410 */ 63, 185, 95, 67, 185, 185, 185, 33, 185, 40, - /* 420 */ 35, 37, 56, 52, 53, 49, 185, 47, 66, 94, - /* 430 */ 39, 185, 41, 186, 61, 63, 185, 95, 67, 185, - /* 440 */ 185, 185, 33, 185, 40, 35, 37, 56, 52, 53, - /* 450 */ 49, 185, 47, 66, 166, 39, 161, 41, 186, 61, - /* 460 */ 63, 185, 95, 67, 185, 185, 185, 33, 192, 40, - /* 470 */ 35, 37, 56, 52, 53, 32, 26, 29, 29, 29, - /* 480 */ 29, 29, 29, 29, 30, 30, 30, 27, 27, 27, - /* 490 */ 28, 28, 49, 185, 47, 66, 142, 39, 185, 41, - /* 500 */ 186, 61, 63, 185, 95, 67, 57, 219, 100, 33, - /* 510 */ 185, 40, 35, 37, 56, 52, 53, 70, 70, 69, - /* 520 */ 48, 49, 51, 47, 66, 58, 39, 250, 41, 186, - /* 530 */ 61, 63, 185, 95, 67, 185, 185, 62, 33, 185, - /* 540 */ 40, 35, 37, 56, 52, 53, 32, 26, 29, 29, - /* 550 */ 29, 29, 29, 29, 29, 30, 30, 30, 27, 27, - /* 560 */ 27, 28, 28, 27, 27, 27, 28, 28, 111, 49, - /* 570 */ 185, 47, 66, 177, 39, 185, 41, 186, 61, 63, - /* 580 */ 185, 95, 67, 185, 185, 185, 33, 127, 40, 35, - /* 590 */ 37, 56, 52, 53, 49, 185, 47, 66, 175, 39, - /* 600 */ 185, 41, 186, 61, 63, 185, 95, 67, 263, 126, - /* 610 */ 220, 33, 185, 40, 35, 37, 56, 52, 53, 32, - /* 620 */ 26, 29, 29, 29, 29, 29, 29, 29, 30, 30, - /* 630 */ 30, 27, 27, 27, 28, 28, 26, 29, 29, 29, - /* 640 */ 29, 29, 29, 29, 30, 30, 30, 27, 27, 27, - /* 650 */ 28, 28, 29, 29, 29, 29, 29, 29, 29, 30, - /* 660 */ 30, 30, 27, 27, 27, 28, 28, 161, 231, 231, - /* 670 */ 24, 231, 185, 185, 185, 185, 185, 185, 175, 234, - /* 680 */ 185, 161, 231, 231, 64, 231, 231, 185, 257, 126, - /* 690 */ 220, 185, 46, 185, 185, 185, 231, 231, 185, 231, - /* 700 */ 231, 155, 231, 185, 185, 222, 222, 228, 150, 185, - /* 710 */ 172, 161, 126, 220, 231, 185, 231, 185, 219, 261, - /* 720 */ 261, 228, 150, 213, 31, 131, 231, 231, 65, 231, - /* 730 */ 231, 185, 219, 185, 185, 185, 134, 185, 185, 185, - /* 740 */ 185, 161, 129, 156, 231, 201, 263, 126, 220, 222, - /* 750 */ 222, 228, 150, 112, 254, 185, 231, 231, 185, 231, - /* 760 */ 231, 185, 219, 185, 223, 42, 46, 185, 227, 185, - /* 770 */ 185, 161, 185, 221, 231, 126, 220, 185, 185, 222, - /* 780 */ 222, 228, 150, 114, 185, 185, 231, 231, 196, 231, - /* 790 */ 231, 185, 219, 185, 197, 202, 46, 201, 185, 126, - /* 800 */ 220, 161, 185, 180, 231, 126, 220, 185, 185, 222, - /* 810 */ 222, 228, 150, 109, 126, 220, 231, 231, 185, 231, - /* 820 */ 231, 226, 219, 185, 137, 208, 207, 205, 206, 211, - /* 830 */ 217, 218, 216, 161, 231, 185, 240, 185, 96, 222, - /* 840 */ 222, 228, 150, 185, 168, 101, 185, 161, 231, 231, - /* 850 */ 231, 231, 219, 185, 245, 126, 220, 231, 231, 185, - /* 860 */ 231, 161, 231, 231, 185, 231, 231, 185, 185, 185, - /* 870 */ 185, 222, 222, 228, 150, 231, 231, 231, 182, 231, - /* 880 */ 231, 143, 231, 185, 219, 222, 222, 228, 150, 126, - /* 890 */ 220, 231, 126, 220, 231, 151, 231, 162, 219, 261, - /* 900 */ 261, 228, 150, 170, 185, 185, 126, 220, 126, 220, - /* 910 */ 231, 185, 219, 185, 175, 185, 125, 185, 259, 170, - /* 920 */ 185, 185, 249, 262, 263, 126, 220, 185, 185, 185, - /* 930 */ 175, 185, 118, 170, 259, 185, 185, 185, 249, 262, - /* 940 */ 263, 126, 220, 185, 175, 185, 124, 170, 259, 185, - /* 950 */ 135, 185, 249, 262, 263, 126, 220, 185, 175, 185, - /* 960 */ 130, 175, 259, 169, 185, 170, 249, 262, 263, 126, - /* 970 */ 220, 263, 126, 220, 126, 220, 175, 185, 121, 132, - /* 980 */ 259, 170, 185, 185, 249, 262, 263, 126, 220, 185, - /* 990 */ 126, 220, 175, 185, 120, 170, 259, 185, 185, 185, - /* 1000 */ 249, 262, 263, 126, 220, 185, 175, 185, 123, 170, - /* 1010 */ 259, 185, 185, 185, 249, 262, 263, 126, 220, 185, - /* 1020 */ 175, 185, 122, 170, 259, 185, 185, 185, 249, 262, - /* 1030 */ 263, 126, 220, 185, 175, 185, 260, 170, 259, 185, - /* 1040 */ 185, 185, 249, 262, 263, 126, 220, 185, 175, 185, - /* 1050 */ 119, 170, 259, 185, 185, 185, 249, 262, 263, 126, - /* 1060 */ 220, 185, 175, 185, 185, 170, 259, 185, 185, 185, - /* 1070 */ 36, 262, 263, 126, 220, 185, 175, 185, 185, 170, - /* 1080 */ 259, 185, 185, 185, 144, 262, 263, 126, 220, 185, - /* 1090 */ 175, 185, 185, 170, 259, 185, 185, 185, 34, 262, - /* 1100 */ 263, 126, 220, 185, 175, 185, 148, 161, 259, 185, - /* 1110 */ 254, 185, 141, 262, 263, 126, 220, 126, 220, 185, - /* 1120 */ 223, 43, 231, 231, 227, 231, 185, 185, 254, 221, - /* 1130 */ 185, 126, 220, 178, 185, 185, 185, 185, 223, 44, - /* 1140 */ 231, 185, 227, 255, 126, 220, 185, 221, 185, 126, - /* 1150 */ 220, 185, 185, 223, 185, 185, 231, 227, 219, 159, - /* 1160 */ 185, 185, 221, 185, 126, 220, 185, 185, 185, 223, - /* 1170 */ 185, 185, 152, 227, 185, 185, 185, 185, 221, 185, - /* 1180 */ 126, 220, 223, 185, 185, 256, 227, 185, 185, 185, - /* 1190 */ 185, 221, 185, 126, 220, 223, 185, 20, 185, 227, - /* 1200 */ 136, 185, 185, 185, 221, 185, 126, 220, 185, 185, - /* 1210 */ 223, 185, 185, 185, 227, 258, 198, 193, 55, 221, - /* 1220 */ 185, 126, 220, 185, 128, 223, 185, 185, 133, 227, - /* 1230 */ 185, 196, 185, 12, 221, 175, 126, 220, 145, 175, - /* 1240 */ 201, 11, 126, 220, 19, 263, 126, 220, 16, 263, - /* 1250 */ 126, 220, 198, 193, 55, 4, 185, 185, 185, 185, - /* 1260 */ 198, 193, 55, 198, 193, 55, 7, 198, 193, 55, - /* 1270 */ 14, 185, 185, 185, 198, 193, 55, 21, 185, 185, - /* 1280 */ 185, 185, 185, 185, 185, 198, 193, 55, 17, 198, - /* 1290 */ 193, 55, 3, 185, 185, 185, 198, 193, 55, 23, - /* 1300 */ 185, 185, 185, 185, 185, 185, 185, 198, 193, 55, - /* 1310 */ 13, 198, 193, 55, 22, 185, 185, 185, 198, 193, - /* 1320 */ 55, 9, 185, 185, 185, 185, 185, 185, 185, 198, - /* 1330 */ 193, 55, 2, 198, 193, 55, 10, 185, 185, 185, - /* 1340 */ 198, 193, 55, 15, 185, 185, 185, 185, 185, 185, - /* 1350 */ 185, 198, 193, 55, 18, 198, 193, 55, 8, 185, - /* 1360 */ 185, 185, 198, 193, 55, 5, 185, 185, 185, 185, - /* 1370 */ 185, 185, 185, 198, 193, 55, 1, 198, 193, 55, - /* 1380 */ 6, 185, 185, 185, 198, 193, 55, 185, 185, 185, - /* 1390 */ 185, 185, 185, 185, 185, 198, 193, 55, 185, 198, - /* 1400 */ 193, 55, + /* 0 */ 33, 34, 35, 32, 31, 31, 31, 31, 31, 31, + /* 10 */ 31, 36, 36, 36, 27, 27, 27, 25, 30, 54, + /* 20 */ 62, 51, 74, 193, 43, 241, 45, 175, 66, 71, + /* 30 */ 255, 101, 65, 251, 144, 117, 28, 195, 46, 39, + /* 40 */ 40, 61, 58, 56, 54, 70, 51, 74, 168, 43, + /* 50 */ 69, 45, 175, 66, 71, 55, 101, 65, 105, 252, + /* 60 */ 38, 28, 160, 46, 39, 40, 61, 58, 56, 33, + /* 70 */ 34, 35, 60, 31, 31, 31, 31, 31, 31, 31, + /* 80 */ 36, 36, 36, 27, 27, 27, 25, 30, 67, 33, + /* 90 */ 34, 35, 204, 31, 31, 31, 31, 31, 31, 31, + /* 100 */ 36, 36, 36, 27, 27, 27, 25, 30, 54, 37, + /* 110 */ 51, 74, 146, 43, 369, 45, 175, 66, 71, 261, + /* 120 */ 101, 65, 373, 80, 167, 28, 153, 46, 39, 40, + /* 130 */ 61, 58, 56, 192, 258, 134, 220, 273, 273, 120, + /* 140 */ 273, 25, 30, 270, 54, 190, 51, 74, 183, 43, + /* 150 */ 203, 45, 175, 66, 71, 273, 101, 65, 246, 227, + /* 160 */ 177, 28, 249, 46, 39, 40, 61, 58, 56, 174, + /* 170 */ 273, 54, 63, 51, 74, 155, 43, 232, 45, 175, + /* 180 */ 66, 71, 208, 101, 65, 259, 115, 123, 28, 158, + /* 190 */ 46, 39, 40, 61, 58, 56, 33, 34, 35, 174, + /* 200 */ 31, 31, 31, 31, 31, 31, 31, 36, 36, 36, + /* 210 */ 27, 27, 27, 25, 30, 273, 273, 198, 273, 110, + /* 220 */ 238, 106, 54, 55, 51, 74, 169, 43, 263, 45, + /* 230 */ 175, 66, 71, 273, 101, 65, 205, 230, 228, 28, + /* 240 */ 165, 46, 39, 40, 61, 58, 56, 229, 273, 54, + /* 250 */ 238, 51, 74, 100, 43, 272, 45, 175, 66, 71, + /* 260 */ 102, 101, 65, 253, 262, 277, 28, 68, 46, 39, + /* 270 */ 40, 61, 58, 56, 54, 62, 51, 74, 150, 43, + /* 280 */ 122, 45, 175, 66, 71, 209, 101, 65, 103, 109, + /* 290 */ 104, 28, 119, 46, 39, 40, 61, 58, 56, 54, + /* 300 */ 57, 51, 74, 185, 43, 212, 45, 175, 66, 71, + /* 310 */ 118, 101, 65, 59, 254, 239, 28, 217, 46, 39, + /* 320 */ 40, 61, 58, 56, 54, 86, 51, 74, 151, 43, + /* 330 */ 201, 45, 175, 66, 71, 111, 101, 65, 206, 218, + /* 340 */ 224, 28, 207, 46, 39, 40, 61, 58, 56, 33, + /* 350 */ 34, 35, 116, 31, 31, 31, 31, 31, 31, 31, + /* 360 */ 36, 36, 36, 27, 27, 27, 25, 30, 200, 54, + /* 370 */ 176, 51, 74, 196, 43, 82, 45, 175, 66, 71, + /* 380 */ 275, 101, 65, 240, 95, 96, 28, 98, 46, 39, + /* 390 */ 40, 61, 58, 56, 54, 81, 51, 74, 64, 43, + /* 400 */ 97, 45, 175, 66, 71, 90, 101, 65, 88, 93, + /* 410 */ 89, 28, 235, 46, 39, 40, 61, 58, 56, 54, + /* 420 */ 99, 51, 74, 152, 43, 91, 45, 175, 66, 71, + /* 430 */ 83, 101, 65, 84, 87, 92, 28, 77, 46, 39, + /* 440 */ 40, 61, 58, 56, 54, 78, 51, 74, 172, 43, + /* 450 */ 94, 45, 175, 66, 71, 85, 101, 65, 79, 192, + /* 460 */ 192, 28, 192, 46, 39, 40, 61, 58, 56, 54, + /* 470 */ 192, 51, 74, 197, 43, 192, 45, 175, 66, 71, + /* 480 */ 192, 101, 65, 192, 192, 192, 28, 192, 46, 39, + /* 490 */ 40, 61, 58, 56, 54, 192, 51, 74, 173, 43, + /* 500 */ 192, 45, 175, 66, 71, 192, 101, 65, 192, 192, + /* 510 */ 192, 28, 192, 46, 39, 40, 61, 58, 56, 54, + /* 520 */ 192, 51, 74, 154, 43, 192, 45, 175, 66, 71, + /* 530 */ 192, 101, 65, 192, 192, 192, 28, 192, 46, 39, + /* 540 */ 40, 61, 58, 56, 54, 192, 51, 74, 179, 43, + /* 550 */ 192, 45, 175, 66, 71, 192, 101, 65, 192, 192, + /* 560 */ 192, 28, 192, 46, 39, 40, 61, 58, 56, 54, + /* 570 */ 192, 51, 74, 194, 43, 192, 45, 175, 66, 71, + /* 580 */ 192, 101, 65, 192, 192, 192, 28, 192, 46, 39, + /* 590 */ 40, 61, 58, 56, 54, 192, 51, 74, 187, 43, + /* 600 */ 192, 45, 175, 66, 71, 192, 101, 65, 192, 192, + /* 610 */ 192, 28, 192, 46, 39, 40, 61, 58, 56, 54, + /* 620 */ 192, 51, 74, 148, 43, 192, 45, 175, 66, 71, + /* 630 */ 192, 101, 65, 192, 192, 192, 28, 192, 46, 39, + /* 640 */ 40, 61, 58, 56, 54, 192, 51, 74, 170, 43, + /* 650 */ 192, 45, 175, 66, 71, 192, 101, 65, 192, 192, + /* 660 */ 192, 28, 192, 46, 39, 40, 61, 58, 56, 54, + /* 670 */ 192, 51, 74, 178, 43, 192, 45, 175, 66, 71, + /* 680 */ 192, 101, 65, 268, 134, 220, 28, 192, 46, 39, + /* 690 */ 40, 61, 58, 56, 34, 35, 192, 31, 31, 31, + /* 700 */ 31, 31, 31, 31, 36, 36, 36, 27, 27, 27, + /* 710 */ 25, 30, 35, 192, 31, 31, 31, 31, 31, 31, + /* 720 */ 31, 36, 36, 36, 27, 27, 27, 25, 30, 31, + /* 730 */ 31, 31, 31, 31, 31, 31, 36, 36, 36, 27, + /* 740 */ 27, 27, 25, 30, 174, 192, 226, 62, 273, 273, + /* 750 */ 192, 273, 192, 274, 192, 192, 257, 225, 174, 250, + /* 760 */ 273, 273, 73, 273, 192, 260, 273, 134, 220, 192, + /* 770 */ 52, 219, 192, 24, 273, 273, 72, 273, 273, 178, + /* 780 */ 192, 273, 256, 256, 251, 144, 174, 192, 62, 247, + /* 790 */ 134, 220, 273, 273, 121, 238, 256, 256, 251, 144, + /* 800 */ 192, 178, 273, 273, 163, 273, 143, 273, 192, 238, + /* 810 */ 192, 269, 134, 220, 174, 192, 62, 192, 273, 273, + /* 820 */ 273, 273, 216, 192, 266, 266, 251, 144, 192, 26, + /* 830 */ 273, 273, 192, 273, 192, 273, 273, 238, 192, 192, + /* 840 */ 52, 192, 251, 144, 17, 174, 192, 192, 273, 192, + /* 850 */ 192, 273, 256, 256, 251, 144, 237, 192, 114, 236, + /* 860 */ 192, 273, 273, 273, 273, 238, 214, 215, 29, 257, + /* 870 */ 49, 52, 250, 192, 174, 192, 192, 192, 260, 273, + /* 880 */ 134, 220, 19, 256, 256, 251, 144, 107, 236, 192, + /* 890 */ 273, 273, 192, 273, 273, 192, 238, 192, 257, 47, + /* 900 */ 52, 250, 192, 174, 214, 215, 29, 260, 273, 134, + /* 910 */ 220, 192, 256, 256, 251, 144, 113, 192, 192, 273, + /* 920 */ 273, 192, 273, 273, 137, 238, 192, 163, 142, 136, + /* 930 */ 141, 164, 174, 202, 269, 134, 220, 273, 192, 134, + /* 940 */ 220, 256, 256, 251, 144, 112, 236, 192, 273, 273, + /* 950 */ 192, 273, 273, 192, 238, 192, 257, 50, 192, 250, + /* 960 */ 27, 27, 27, 25, 30, 260, 273, 134, 220, 192, + /* 970 */ 256, 256, 251, 144, 44, 76, 76, 75, 53, 192, + /* 980 */ 192, 273, 192, 238, 199, 192, 174, 156, 245, 244, + /* 990 */ 242, 243, 233, 222, 223, 221, 131, 210, 276, 5, + /* 1000 */ 108, 192, 273, 273, 181, 273, 202, 178, 134, 220, + /* 1010 */ 166, 192, 191, 192, 174, 271, 267, 269, 134, 220, + /* 1020 */ 273, 214, 215, 29, 256, 256, 251, 144, 234, 192, + /* 1030 */ 273, 273, 210, 273, 192, 273, 192, 238, 188, 211, + /* 1040 */ 174, 202, 192, 134, 220, 11, 192, 192, 273, 134, + /* 1050 */ 220, 192, 256, 256, 251, 144, 273, 273, 192, 273, + /* 1060 */ 192, 192, 192, 273, 192, 238, 192, 214, 215, 29, + /* 1070 */ 192, 192, 178, 192, 273, 163, 126, 138, 266, 266, + /* 1080 */ 251, 144, 269, 134, 220, 192, 192, 178, 192, 273, + /* 1090 */ 166, 238, 191, 135, 192, 271, 267, 269, 134, 220, + /* 1100 */ 192, 192, 192, 192, 178, 192, 139, 166, 192, 191, + /* 1110 */ 192, 192, 271, 267, 269, 134, 220, 178, 192, 189, + /* 1120 */ 166, 124, 191, 192, 192, 271, 267, 269, 134, 220, + /* 1130 */ 134, 220, 178, 192, 157, 166, 125, 191, 192, 192, + /* 1140 */ 271, 267, 269, 134, 220, 134, 220, 178, 192, 127, + /* 1150 */ 166, 192, 191, 192, 192, 271, 267, 269, 134, 220, + /* 1160 */ 178, 192, 133, 166, 192, 191, 192, 192, 271, 267, + /* 1170 */ 269, 134, 220, 178, 192, 162, 166, 132, 191, 192, + /* 1180 */ 192, 271, 267, 269, 134, 220, 134, 220, 178, 192, + /* 1190 */ 130, 166, 192, 191, 192, 192, 271, 267, 269, 134, + /* 1200 */ 220, 178, 192, 192, 166, 264, 191, 192, 192, 271, + /* 1210 */ 267, 269, 134, 220, 174, 192, 178, 192, 192, 166, + /* 1220 */ 192, 191, 192, 128, 271, 267, 269, 134, 220, 147, + /* 1230 */ 273, 273, 192, 273, 178, 1, 192, 166, 192, 191, + /* 1240 */ 134, 220, 271, 267, 269, 134, 220, 192, 273, 192, + /* 1250 */ 265, 192, 192, 192, 251, 144, 3, 214, 215, 29, + /* 1260 */ 4, 178, 192, 273, 166, 238, 191, 192, 192, 271, + /* 1270 */ 267, 269, 134, 220, 129, 213, 192, 192, 214, 215, + /* 1280 */ 29, 192, 214, 215, 29, 178, 134, 220, 166, 192, + /* 1290 */ 191, 192, 192, 271, 267, 269, 134, 220, 178, 192, + /* 1300 */ 192, 166, 192, 191, 192, 192, 42, 267, 269, 134, + /* 1310 */ 220, 178, 192, 186, 166, 192, 191, 192, 192, 161, + /* 1320 */ 267, 269, 134, 220, 134, 220, 178, 192, 192, 166, + /* 1330 */ 192, 191, 192, 192, 149, 267, 269, 134, 220, 178, + /* 1340 */ 192, 192, 166, 236, 191, 192, 192, 41, 267, 269, + /* 1350 */ 134, 220, 192, 257, 48, 192, 250, 192, 192, 145, + /* 1360 */ 192, 192, 260, 192, 134, 220, 192, 6, 192, 257, + /* 1370 */ 192, 192, 250, 192, 192, 231, 192, 192, 260, 192, + /* 1380 */ 134, 220, 159, 192, 192, 257, 192, 184, 250, 214, + /* 1390 */ 215, 29, 257, 192, 260, 250, 134, 220, 134, 220, + /* 1400 */ 171, 260, 192, 134, 220, 178, 192, 192, 163, 248, + /* 1410 */ 140, 134, 220, 182, 192, 269, 134, 220, 22, 257, + /* 1420 */ 192, 16, 250, 257, 13, 192, 250, 180, 260, 192, + /* 1430 */ 134, 220, 260, 8, 134, 220, 21, 192, 134, 220, + /* 1440 */ 214, 215, 29, 214, 215, 29, 214, 215, 29, 7, + /* 1450 */ 192, 192, 192, 192, 192, 214, 215, 29, 214, 215, + /* 1460 */ 29, 9, 192, 192, 192, 192, 192, 192, 192, 192, + /* 1470 */ 192, 214, 215, 29, 15, 192, 192, 192, 192, 192, + /* 1480 */ 192, 192, 192, 214, 215, 29, 2, 192, 192, 192, + /* 1490 */ 192, 192, 192, 192, 192, 192, 214, 215, 29, 23, + /* 1500 */ 192, 192, 192, 192, 192, 192, 192, 192, 214, 215, + /* 1510 */ 29, 20, 192, 192, 192, 192, 192, 192, 192, 192, + /* 1520 */ 192, 214, 215, 29, 10, 192, 192, 192, 192, 192, + /* 1530 */ 192, 192, 192, 214, 215, 29, 18, 192, 192, 192, + /* 1540 */ 192, 192, 192, 192, 192, 192, 214, 215, 29, 12, + /* 1550 */ 192, 192, 192, 192, 192, 192, 192, 192, 214, 215, + /* 1560 */ 29, 14, 192, 192, 192, 192, 192, 192, 192, 192, + /* 1570 */ 192, 214, 215, 29, 192, 192, 192, 192, 192, 192, + /* 1580 */ 192, 192, 192, 214, 215, 29, ); static public $yy_lookahead = array( - /* 0 */ 24, 18, 26, 27, 28, 29, 23, 31, 32, 33, - /* 10 */ 34, 68, 36, 37, 18, 19, 25, 41, 42, 43, - /* 20 */ 44, 45, 46, 47, 48, 24, 93, 26, 27, 28, - /* 30 */ 29, 25, 31, 32, 33, 34, 25, 36, 37, 53, - /* 40 */ 54, 25, 41, 42, 43, 44, 45, 46, 47, 48, - /* 50 */ 24, 93, 26, 27, 28, 29, 25, 31, 32, 33, - /* 60 */ 34, 25, 36, 37, 11, 66, 67, 41, 42, 43, - /* 70 */ 44, 45, 46, 47, 48, 24, 18, 26, 27, 28, - /* 80 */ 29, 25, 31, 32, 33, 34, 25, 36, 37, 25, - /* 90 */ 25, 38, 41, 42, 43, 44, 45, 46, 47, 48, - /* 100 */ 24, 61, 26, 27, 28, 29, 25, 31, 32, 33, - /* 110 */ 34, 18, 36, 37, 25, 25, 40, 41, 25, 43, - /* 120 */ 44, 45, 46, 47, 48, 24, 64, 26, 27, 28, - /* 130 */ 29, 25, 31, 32, 33, 34, 25, 36, 37, 25, - /* 140 */ 25, 25, 41, 42, 43, 44, 45, 46, 47, 48, - /* 150 */ 24, 30, 26, 27, 28, 29, 25, 31, 32, 33, - /* 160 */ 34, 18, 36, 37, 25, 25, 25, 41, 25, 43, - /* 170 */ 44, 45, 46, 47, 48, 24, 30, 26, 27, 28, - /* 180 */ 29, 25, 31, 32, 33, 34, 25, 36, 37, 25, - /* 190 */ 25, 25, 41, 35, 43, 44, 45, 46, 47, 48, - /* 200 */ 24, 63, 26, 27, 28, 29, 25, 31, 32, 33, - /* 210 */ 34, 25, 36, 37, 25, 25, 25, 41, 50, 43, - /* 220 */ 44, 45, 46, 47, 48, 24, 53, 26, 27, 28, - /* 230 */ 29, 63, 31, 32, 33, 34, 18, 36, 37, 25, - /* 240 */ 11, 25, 41, 25, 43, 44, 45, 46, 47, 48, - /* 250 */ 24, 55, 26, 27, 28, 29, 25, 31, 32, 33, - /* 260 */ 34, 50, 36, 37, 25, 25, 25, 41, 25, 43, - /* 270 */ 44, 45, 46, 47, 48, 24, 67, 26, 27, 28, - /* 280 */ 29, 25, 31, 32, 33, 34, 25, 36, 37, 67, - /* 290 */ 67, 67, 41, 85, 43, 44, 45, 46, 47, 48, - /* 300 */ 24, 67, 26, 27, 28, 29, 94, 31, 32, 33, - /* 310 */ 34, 67, 36, 37, 67, 67, 67, 41, 90, 43, - /* 320 */ 44, 45, 46, 47, 48, 24, 67, 26, 27, 28, - /* 330 */ 29, 67, 31, 32, 33, 34, 67, 36, 37, 67, - /* 340 */ 67, 67, 41, 94, 43, 44, 45, 46, 47, 48, - /* 350 */ 24, 67, 26, 27, 28, 29, 67, 31, 32, 33, - /* 360 */ 34, 67, 36, 37, 67, 67, 67, 41, 94, 43, - /* 370 */ 44, 45, 46, 47, 48, 24, 67, 26, 27, 28, - /* 380 */ 29, 94, 31, 32, 33, 34, 94, 36, 37, 94, - /* 390 */ 94, 94, 41, 94, 43, 44, 45, 46, 47, 48, - /* 400 */ 24, 94, 26, 27, 28, 29, 94, 31, 32, 33, - /* 410 */ 34, 94, 36, 37, 94, 94, 94, 41, 94, 43, - /* 420 */ 44, 45, 46, 47, 48, 24, 94, 26, 27, 28, - /* 430 */ 29, 94, 31, 32, 33, 34, 94, 36, 37, 94, - /* 440 */ 94, 94, 41, 94, 43, 44, 45, 46, 47, 48, - /* 450 */ 24, 94, 26, 27, 28, 29, 13, 31, 32, 33, - /* 460 */ 34, 94, 36, 37, 94, 94, 94, 41, 25, 43, - /* 470 */ 44, 45, 46, 47, 48, 3, 4, 5, 6, 7, - /* 480 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - /* 490 */ 18, 19, 24, 94, 26, 27, 28, 29, 94, 31, - /* 500 */ 32, 33, 34, 94, 36, 37, 18, 64, 25, 41, - /* 510 */ 94, 43, 44, 45, 46, 47, 48, 57, 58, 59, - /* 520 */ 60, 24, 39, 26, 27, 28, 29, 55, 31, 32, - /* 530 */ 33, 34, 94, 36, 37, 94, 94, 49, 41, 94, - /* 540 */ 43, 44, 45, 46, 47, 48, 3, 4, 5, 6, - /* 550 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - /* 560 */ 17, 18, 19, 15, 16, 17, 18, 19, 25, 24, - /* 570 */ 94, 26, 27, 28, 29, 94, 31, 32, 33, 34, - /* 580 */ 94, 36, 37, 94, 94, 94, 41, 70, 43, 44, - /* 590 */ 45, 46, 47, 48, 24, 94, 26, 27, 81, 29, - /* 600 */ 94, 31, 32, 33, 34, 94, 36, 37, 91, 92, - /* 610 */ 93, 41, 94, 43, 44, 45, 46, 47, 48, 3, - /* 620 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - /* 630 */ 14, 15, 16, 17, 18, 19, 4, 5, 6, 7, - /* 640 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - /* 650 */ 18, 19, 5, 6, 7, 8, 9, 10, 11, 12, - /* 660 */ 13, 14, 15, 16, 17, 18, 19, 13, 28, 29, - /* 670 */ 2, 31, 94, 94, 94, 94, 94, 94, 81, 25, - /* 680 */ 94, 13, 28, 29, 30, 31, 46, 94, 91, 92, - /* 690 */ 93, 94, 38, 94, 94, 94, 28, 29, 94, 31, - /* 700 */ 46, 81, 62, 94, 94, 51, 52, 53, 54, 94, - /* 710 */ 90, 13, 92, 93, 46, 94, 62, 94, 64, 51, - /* 720 */ 52, 53, 54, 25, 56, 70, 28, 29, 30, 31, - /* 730 */ 62, 94, 64, 94, 94, 94, 81, 94, 94, 94, - /* 740 */ 94, 13, 87, 88, 46, 90, 91, 92, 93, 51, - /* 750 */ 52, 53, 54, 25, 71, 94, 28, 29, 94, 31, - /* 760 */ 62, 94, 64, 94, 81, 82, 38, 94, 85, 94, - /* 770 */ 94, 13, 94, 90, 46, 92, 93, 94, 94, 51, - /* 780 */ 52, 53, 54, 25, 94, 94, 28, 29, 81, 31, - /* 790 */ 62, 94, 64, 94, 81, 88, 38, 90, 94, 92, - /* 800 */ 93, 13, 94, 81, 46, 92, 93, 94, 94, 51, - /* 810 */ 52, 53, 54, 25, 92, 93, 28, 29, 94, 31, - /* 820 */ 62, 69, 64, 94, 72, 73, 74, 75, 76, 77, - /* 830 */ 78, 79, 80, 13, 46, 94, 84, 94, 86, 51, - /* 840 */ 52, 53, 54, 94, 81, 25, 94, 13, 28, 29, - /* 850 */ 62, 31, 64, 94, 25, 92, 93, 28, 29, 94, - /* 860 */ 31, 13, 28, 29, 94, 31, 46, 94, 94, 94, - /* 870 */ 94, 51, 52, 53, 54, 46, 28, 29, 81, 31, - /* 880 */ 46, 81, 62, 94, 64, 51, 52, 53, 54, 92, - /* 890 */ 93, 62, 92, 93, 46, 81, 62, 81, 64, 51, - /* 900 */ 52, 53, 54, 70, 94, 94, 92, 93, 92, 93, - /* 910 */ 62, 94, 64, 94, 81, 94, 83, 94, 85, 70, - /* 920 */ 94, 94, 89, 90, 91, 92, 93, 94, 94, 94, - /* 930 */ 81, 94, 83, 70, 85, 94, 94, 94, 89, 90, - /* 940 */ 91, 92, 93, 94, 81, 94, 83, 70, 85, 94, - /* 950 */ 70, 94, 89, 90, 91, 92, 93, 94, 81, 94, - /* 960 */ 83, 81, 85, 81, 94, 70, 89, 90, 91, 92, - /* 970 */ 93, 91, 92, 93, 92, 93, 81, 94, 83, 81, - /* 980 */ 85, 70, 94, 94, 89, 90, 91, 92, 93, 94, - /* 990 */ 92, 93, 81, 94, 83, 70, 85, 94, 94, 94, - /* 1000 */ 89, 90, 91, 92, 93, 94, 81, 94, 83, 70, - /* 1010 */ 85, 94, 94, 94, 89, 90, 91, 92, 93, 94, - /* 1020 */ 81, 94, 83, 70, 85, 94, 94, 94, 89, 90, - /* 1030 */ 91, 92, 93, 94, 81, 94, 83, 70, 85, 94, - /* 1040 */ 94, 94, 89, 90, 91, 92, 93, 94, 81, 94, - /* 1050 */ 83, 70, 85, 94, 94, 94, 89, 90, 91, 92, - /* 1060 */ 93, 94, 81, 94, 94, 70, 85, 94, 94, 94, - /* 1070 */ 89, 90, 91, 92, 93, 94, 81, 94, 94, 70, - /* 1080 */ 85, 94, 94, 94, 89, 90, 91, 92, 93, 94, - /* 1090 */ 81, 94, 94, 70, 85, 94, 94, 94, 89, 90, - /* 1100 */ 91, 92, 93, 94, 81, 94, 81, 13, 85, 94, - /* 1110 */ 71, 94, 89, 90, 91, 92, 93, 92, 93, 94, - /* 1120 */ 81, 82, 28, 29, 85, 31, 94, 94, 71, 90, - /* 1130 */ 94, 92, 93, 81, 94, 94, 94, 94, 81, 82, - /* 1140 */ 46, 94, 85, 71, 92, 93, 94, 90, 94, 92, - /* 1150 */ 93, 94, 94, 81, 94, 94, 62, 85, 64, 71, - /* 1160 */ 94, 94, 90, 94, 92, 93, 94, 94, 94, 81, - /* 1170 */ 94, 94, 71, 85, 94, 94, 94, 94, 90, 94, - /* 1180 */ 92, 93, 81, 94, 94, 71, 85, 94, 94, 94, - /* 1190 */ 94, 90, 94, 92, 93, 81, 94, 1, 94, 85, - /* 1200 */ 71, 94, 94, 94, 90, 94, 92, 93, 94, 94, - /* 1210 */ 81, 94, 94, 94, 85, 71, 20, 21, 22, 90, - /* 1220 */ 94, 92, 93, 94, 70, 81, 94, 94, 70, 85, - /* 1230 */ 94, 81, 94, 1, 90, 81, 92, 93, 88, 81, - /* 1240 */ 90, 1, 92, 93, 1, 91, 92, 93, 1, 91, - /* 1250 */ 92, 93, 20, 21, 22, 1, 94, 94, 94, 94, - /* 1260 */ 20, 21, 22, 20, 21, 22, 1, 20, 21, 22, - /* 1270 */ 1, 94, 94, 94, 20, 21, 22, 1, 94, 94, - /* 1280 */ 94, 94, 94, 94, 94, 20, 21, 22, 1, 20, - /* 1290 */ 21, 22, 1, 94, 94, 94, 20, 21, 22, 1, - /* 1300 */ 94, 94, 94, 94, 94, 94, 94, 20, 21, 22, - /* 1310 */ 1, 20, 21, 22, 1, 94, 94, 94, 20, 21, - /* 1320 */ 22, 1, 94, 94, 94, 94, 94, 94, 94, 20, - /* 1330 */ 21, 22, 1, 20, 21, 22, 1, 94, 94, 94, - /* 1340 */ 20, 21, 22, 1, 94, 94, 94, 94, 94, 94, - /* 1350 */ 94, 20, 21, 22, 1, 20, 21, 22, 1, 94, - /* 1360 */ 94, 94, 20, 21, 22, 1, 94, 94, 94, 94, - /* 1370 */ 94, 94, 94, 20, 21, 22, 1, 20, 21, 22, - /* 1380 */ 1, 94, 94, 94, 20, 21, 22, 94, 94, 94, - /* 1390 */ 94, 94, 94, 94, 94, 20, 21, 22, 94, 20, - /* 1400 */ 21, 22, + /* 0 */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + /* 10 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 27, + /* 20 */ 22, 29, 30, 31, 32, 63, 34, 35, 36, 37, + /* 30 */ 28, 39, 40, 55, 56, 28, 44, 45, 46, 47, + /* 40 */ 48, 49, 50, 51, 27, 33, 29, 30, 31, 32, + /* 50 */ 52, 34, 35, 36, 37, 6, 39, 40, 28, 28, + /* 60 */ 13, 44, 45, 46, 47, 48, 49, 50, 51, 3, + /* 70 */ 4, 5, 42, 7, 8, 9, 10, 11, 12, 13, + /* 80 */ 14, 15, 16, 17, 18, 19, 20, 21, 41, 3, + /* 90 */ 4, 5, 26, 7, 8, 9, 10, 11, 12, 13, + /* 100 */ 14, 15, 16, 17, 18, 19, 20, 21, 27, 38, + /* 110 */ 29, 30, 31, 32, 65, 34, 35, 36, 37, 28, + /* 120 */ 39, 40, 68, 69, 83, 44, 45, 46, 47, 48, + /* 130 */ 49, 50, 51, 92, 28, 94, 95, 31, 32, 28, + /* 140 */ 34, 20, 21, 57, 27, 55, 29, 30, 31, 32, + /* 150 */ 28, 34, 35, 36, 37, 49, 39, 40, 28, 28, + /* 160 */ 43, 44, 28, 46, 47, 48, 49, 50, 51, 15, + /* 170 */ 64, 27, 22, 29, 30, 31, 32, 28, 34, 35, + /* 180 */ 36, 37, 28, 39, 40, 28, 28, 28, 44, 45, + /* 190 */ 46, 47, 48, 49, 50, 51, 3, 4, 5, 15, + /* 200 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 210 */ 17, 18, 19, 20, 21, 31, 32, 28, 34, 28, + /* 220 */ 66, 28, 27, 6, 29, 30, 31, 32, 28, 34, + /* 230 */ 35, 36, 37, 49, 39, 40, 28, 28, 28, 44, + /* 240 */ 45, 46, 47, 48, 49, 50, 51, 28, 64, 27, + /* 250 */ 66, 29, 30, 31, 32, 28, 34, 35, 36, 37, + /* 260 */ 28, 39, 40, 28, 57, 28, 44, 33, 46, 47, + /* 270 */ 48, 49, 50, 51, 27, 22, 29, 30, 31, 32, + /* 280 */ 28, 34, 35, 36, 37, 28, 39, 40, 28, 28, + /* 290 */ 28, 44, 28, 46, 47, 48, 49, 50, 51, 27, + /* 300 */ 13, 29, 30, 31, 32, 28, 34, 35, 36, 37, + /* 310 */ 28, 39, 40, 65, 28, 66, 44, 28, 46, 47, + /* 320 */ 48, 49, 50, 51, 27, 69, 29, 30, 31, 32, + /* 330 */ 28, 34, 35, 36, 37, 28, 39, 40, 28, 28, + /* 340 */ 28, 44, 28, 46, 47, 48, 49, 50, 51, 3, + /* 350 */ 4, 5, 28, 7, 8, 9, 10, 11, 12, 13, + /* 360 */ 14, 15, 16, 17, 18, 19, 20, 21, 70, 27, + /* 370 */ 92, 29, 30, 31, 32, 69, 34, 35, 36, 37, + /* 380 */ 86, 39, 40, 95, 69, 69, 44, 69, 46, 47, + /* 390 */ 48, 49, 50, 51, 27, 69, 29, 30, 31, 32, + /* 400 */ 69, 34, 35, 36, 37, 69, 39, 40, 69, 69, + /* 410 */ 69, 44, 95, 46, 47, 48, 49, 50, 51, 27, + /* 420 */ 69, 29, 30, 31, 32, 69, 34, 35, 36, 37, + /* 430 */ 69, 39, 40, 69, 69, 69, 44, 69, 46, 47, + /* 440 */ 48, 49, 50, 51, 27, 69, 29, 30, 31, 32, + /* 450 */ 69, 34, 35, 36, 37, 69, 39, 40, 69, 96, + /* 460 */ 96, 44, 96, 46, 47, 48, 49, 50, 51, 27, + /* 470 */ 96, 29, 30, 31, 32, 96, 34, 35, 36, 37, + /* 480 */ 96, 39, 40, 96, 96, 96, 44, 96, 46, 47, + /* 490 */ 48, 49, 50, 51, 27, 96, 29, 30, 31, 32, + /* 500 */ 96, 34, 35, 36, 37, 96, 39, 40, 96, 96, + /* 510 */ 96, 44, 96, 46, 47, 48, 49, 50, 51, 27, + /* 520 */ 96, 29, 30, 31, 32, 96, 34, 35, 36, 37, + /* 530 */ 96, 39, 40, 96, 96, 96, 44, 96, 46, 47, + /* 540 */ 48, 49, 50, 51, 27, 96, 29, 30, 31, 32, + /* 550 */ 96, 34, 35, 36, 37, 96, 39, 40, 96, 96, + /* 560 */ 96, 44, 96, 46, 47, 48, 49, 50, 51, 27, + /* 570 */ 96, 29, 30, 31, 32, 96, 34, 35, 36, 37, + /* 580 */ 96, 39, 40, 96, 96, 96, 44, 96, 46, 47, + /* 590 */ 48, 49, 50, 51, 27, 96, 29, 30, 31, 32, + /* 600 */ 96, 34, 35, 36, 37, 96, 39, 40, 96, 96, + /* 610 */ 96, 44, 96, 46, 47, 48, 49, 50, 51, 27, + /* 620 */ 96, 29, 30, 31, 32, 96, 34, 35, 36, 37, + /* 630 */ 96, 39, 40, 96, 96, 96, 44, 96, 46, 47, + /* 640 */ 48, 49, 50, 51, 27, 96, 29, 30, 31, 32, + /* 650 */ 96, 34, 35, 36, 37, 96, 39, 40, 96, 96, + /* 660 */ 96, 44, 96, 46, 47, 48, 49, 50, 51, 27, + /* 670 */ 96, 29, 30, 83, 32, 96, 34, 35, 36, 37, + /* 680 */ 96, 39, 40, 93, 94, 95, 44, 96, 46, 47, + /* 690 */ 48, 49, 50, 51, 4, 5, 96, 7, 8, 9, + /* 700 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + /* 710 */ 20, 21, 5, 96, 7, 8, 9, 10, 11, 12, + /* 720 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 7, + /* 730 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 740 */ 18, 19, 20, 21, 15, 96, 73, 22, 31, 32, + /* 750 */ 96, 34, 96, 28, 96, 96, 83, 28, 15, 86, + /* 760 */ 31, 32, 33, 34, 96, 92, 49, 94, 95, 96, + /* 770 */ 41, 28, 96, 2, 31, 32, 33, 34, 49, 83, + /* 780 */ 96, 64, 53, 54, 55, 56, 15, 96, 22, 93, + /* 790 */ 94, 95, 49, 64, 28, 66, 53, 54, 55, 56, + /* 800 */ 96, 83, 31, 32, 86, 34, 88, 64, 96, 66, + /* 810 */ 96, 93, 94, 95, 15, 96, 22, 96, 31, 32, + /* 820 */ 49, 34, 28, 96, 53, 54, 55, 56, 96, 58, + /* 830 */ 31, 32, 96, 34, 96, 64, 49, 66, 96, 96, + /* 840 */ 41, 96, 55, 56, 1, 15, 96, 96, 49, 96, + /* 850 */ 96, 64, 53, 54, 55, 56, 57, 96, 28, 73, + /* 860 */ 96, 31, 32, 64, 34, 66, 23, 24, 25, 83, + /* 870 */ 84, 41, 86, 96, 15, 96, 96, 96, 92, 49, + /* 880 */ 94, 95, 1, 53, 54, 55, 56, 28, 73, 96, + /* 890 */ 31, 32, 96, 34, 64, 96, 66, 96, 83, 84, + /* 900 */ 41, 86, 96, 15, 23, 24, 25, 92, 49, 94, + /* 910 */ 95, 96, 53, 54, 55, 56, 28, 96, 96, 31, + /* 920 */ 32, 96, 34, 64, 83, 66, 96, 86, 83, 88, + /* 930 */ 89, 90, 15, 92, 93, 94, 95, 49, 96, 94, + /* 940 */ 95, 53, 54, 55, 56, 28, 73, 96, 31, 32, + /* 950 */ 96, 34, 64, 96, 66, 96, 83, 84, 96, 86, + /* 960 */ 17, 18, 19, 20, 21, 92, 49, 94, 95, 96, + /* 970 */ 53, 54, 55, 56, 58, 59, 60, 61, 62, 96, + /* 980 */ 96, 64, 96, 66, 71, 96, 15, 74, 75, 76, + /* 990 */ 77, 78, 79, 80, 81, 82, 72, 83, 85, 1, + /* 1000 */ 87, 96, 31, 32, 90, 34, 92, 83, 94, 95, + /* 1010 */ 86, 96, 88, 96, 15, 91, 92, 93, 94, 95, + /* 1020 */ 49, 23, 24, 25, 53, 54, 55, 56, 57, 96, + /* 1030 */ 31, 32, 83, 34, 96, 64, 96, 66, 83, 90, + /* 1040 */ 15, 92, 96, 94, 95, 1, 96, 96, 49, 94, + /* 1050 */ 95, 96, 53, 54, 55, 56, 31, 32, 96, 34, + /* 1060 */ 96, 96, 96, 64, 96, 66, 96, 23, 24, 25, + /* 1070 */ 96, 96, 83, 96, 49, 86, 72, 88, 53, 54, + /* 1080 */ 55, 56, 93, 94, 95, 96, 96, 83, 96, 64, + /* 1090 */ 86, 66, 88, 72, 96, 91, 92, 93, 94, 95, + /* 1100 */ 96, 96, 96, 96, 83, 96, 72, 86, 96, 88, + /* 1110 */ 96, 96, 91, 92, 93, 94, 95, 83, 96, 83, + /* 1120 */ 86, 72, 88, 96, 96, 91, 92, 93, 94, 95, + /* 1130 */ 94, 95, 83, 96, 83, 86, 72, 88, 96, 96, + /* 1140 */ 91, 92, 93, 94, 95, 94, 95, 83, 96, 72, + /* 1150 */ 86, 96, 88, 96, 96, 91, 92, 93, 94, 95, + /* 1160 */ 83, 96, 72, 86, 96, 88, 96, 96, 91, 92, + /* 1170 */ 93, 94, 95, 83, 96, 83, 86, 72, 88, 96, + /* 1180 */ 96, 91, 92, 93, 94, 95, 94, 95, 83, 96, + /* 1190 */ 72, 86, 96, 88, 96, 96, 91, 92, 93, 94, + /* 1200 */ 95, 83, 96, 96, 86, 72, 88, 96, 96, 91, + /* 1210 */ 92, 93, 94, 95, 15, 96, 83, 96, 96, 86, + /* 1220 */ 96, 88, 96, 72, 91, 92, 93, 94, 95, 83, + /* 1230 */ 31, 32, 96, 34, 83, 1, 96, 86, 96, 88, + /* 1240 */ 94, 95, 91, 92, 93, 94, 95, 96, 49, 96, + /* 1250 */ 72, 96, 96, 96, 55, 56, 1, 23, 24, 25, + /* 1260 */ 1, 83, 96, 64, 86, 66, 88, 96, 96, 91, + /* 1270 */ 92, 93, 94, 95, 72, 83, 96, 96, 23, 24, + /* 1280 */ 25, 96, 23, 24, 25, 83, 94, 95, 86, 96, + /* 1290 */ 88, 96, 96, 91, 92, 93, 94, 95, 83, 96, + /* 1300 */ 96, 86, 96, 88, 96, 96, 91, 92, 93, 94, + /* 1310 */ 95, 83, 96, 83, 86, 96, 88, 96, 96, 91, + /* 1320 */ 92, 93, 94, 95, 94, 95, 83, 96, 96, 86, + /* 1330 */ 96, 88, 96, 96, 91, 92, 93, 94, 95, 83, + /* 1340 */ 96, 96, 86, 73, 88, 96, 96, 91, 92, 93, + /* 1350 */ 94, 95, 96, 83, 84, 96, 86, 96, 96, 73, + /* 1360 */ 96, 96, 92, 96, 94, 95, 96, 1, 96, 83, + /* 1370 */ 96, 96, 86, 96, 96, 73, 96, 96, 92, 96, + /* 1380 */ 94, 95, 73, 96, 96, 83, 96, 83, 86, 23, + /* 1390 */ 24, 25, 83, 96, 92, 86, 94, 95, 94, 95, + /* 1400 */ 83, 92, 96, 94, 95, 83, 96, 96, 86, 73, + /* 1410 */ 88, 94, 95, 73, 96, 93, 94, 95, 1, 83, + /* 1420 */ 96, 1, 86, 83, 1, 96, 86, 83, 92, 96, + /* 1430 */ 94, 95, 92, 1, 94, 95, 1, 96, 94, 95, + /* 1440 */ 23, 24, 25, 23, 24, 25, 23, 24, 25, 1, + /* 1450 */ 96, 96, 96, 96, 96, 23, 24, 25, 23, 24, + /* 1460 */ 25, 1, 96, 96, 96, 96, 96, 96, 96, 96, + /* 1470 */ 96, 23, 24, 25, 1, 96, 96, 96, 96, 96, + /* 1480 */ 96, 96, 96, 23, 24, 25, 1, 96, 96, 96, + /* 1490 */ 96, 96, 96, 96, 96, 96, 23, 24, 25, 1, + /* 1500 */ 96, 96, 96, 96, 96, 96, 96, 96, 23, 24, + /* 1510 */ 25, 1, 96, 96, 96, 96, 96, 96, 96, 96, + /* 1520 */ 96, 23, 24, 25, 1, 96, 96, 96, 96, 96, + /* 1530 */ 96, 96, 96, 23, 24, 25, 1, 96, 96, 96, + /* 1540 */ 96, 96, 96, 96, 96, 96, 23, 24, 25, 1, + /* 1550 */ 96, 96, 96, 96, 96, 96, 96, 96, 23, 24, + /* 1560 */ 25, 1, 96, 96, 96, 96, 96, 96, 96, 96, + /* 1570 */ 96, 23, 24, 25, 96, 96, 96, 96, 96, 96, + /* 1580 */ 96, 96, 96, 23, 24, 25, ); - const YY_SHIFT_USE_DFLT = -25; - const YY_SHIFT_MAX = 187; + const YY_SHIFT_USE_DFLT = -39; + const YY_SHIFT_MAX = 197; static public $yy_shift_ofst = array( - /* 0 */ -25, 101, 51, -24, 76, 1, 26, 468, 426, 351, - /* 10 */ 201, 176, 126, 276, 326, 401, 251, 545, 301, 376, - /* 20 */ 151, 497, 226, 570, 668, 668, 668, 668, 668, 668, - /* 30 */ 668, 668, 668, 668, 848, 848, 848, 848, 1094, 698, - /* 40 */ 788, 820, 654, 728, 758, 834, 834, 834, 834, 834, - /* 50 */ 1094, 1094, 640, 640, 640, 640, 1094, 640, 829, 640, - /* 60 */ 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - /* 70 */ 640, 1357, 1375, 1364, 1379, 1353, 1313, 1254, 1265, 1243, - /* 80 */ 1232, 1269, 1320, 1309, 1291, 1342, 1298, 1287, 1331, 1196, - /* 90 */ 1276, 1247, 1240, 1335, 443, -14, -25, -25, -25, -25, - /* 100 */ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, - /* 110 */ -25, -25, -25, -25, -25, -25, -25, -25, 472, 543, - /* 120 */ 616, 616, 632, 647, 647, 548, 460, 143, 488, 483, - /* 130 */ -4, 93, 53, -17, 168, 218, 31, 16, 11, 6, - /* 140 */ 56, 61, 90, 89, 81, 65, 141, 231, 229, 191, - /* 150 */ 173, 239, 256, 243, 196, 241, 138, 164, 165, 40, - /* 160 */ 156, 62, 121, 189, 186, 166, 181, 116, 146, 158, - /* 170 */ 58, 161, 190, 240, 261, 211, 214, 216, 64, 106, - /* 180 */ 111, -9, 36, 114, 139, 140, 131, 115, + /* 0 */ -39, 144, 195, 81, -8, 117, 17, 542, 517, 592, + /* 10 */ 567, 617, 392, 492, 297, 272, 247, 222, 342, 442, + /* 20 */ 367, 467, 417, 642, 771, 771, 771, 771, 771, 771, + /* 30 */ 771, 771, 771, 771, 771, 771, 771, 771, 1199, 1025, + /* 40 */ 1025, 1025, 1025, 743, 971, 917, 888, 729, 830, 799, + /* 50 */ 859, 999, 999, 999, 999, 999, 787, 787, 787, 184, + /* 60 */ 184, 184, 717, 717, 106, 717, 717, 717, 717, 717, + /* 70 */ 717, 717, 717, 717, 717, 717, 717, 1535, 1560, 1510, + /* 80 */ 1498, 1485, 1523, 1548, 1423, 1255, 1259, 1234, 1417, 998, + /* 90 */ 1044, 843, 881, 1366, 1460, 1435, 1448, 1473, 1432, 1420, + /* 100 */ 154, -22, -39, -39, -39, -39, -39, -39, -39, -39, + /* 110 */ -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + /* 120 */ -39, -39, -39, -39, 86, -3, 193, 66, 346, 346, + /* 130 */ 690, 707, 722, 722, 916, 943, 725, 49, 766, 121, + /* 140 */ 794, 30, 47, -2, 90, 149, 134, 71, 131, 158, + /* 150 */ 189, 122, 31, 7, 2, 91, 130, 12, 111, -38, + /* 160 */ 159, 324, 287, 150, 248, 282, 150, 264, 277, 286, + /* 170 */ 289, 312, 314, 311, 249, 307, 310, 261, 217, 219, + /* 180 */ 209, 191, 208, 227, 252, 257, 237, 235, 234, 262, + /* 190 */ 207, 253, 232, 200, 210, 260, 302, 157, ); - const YY_REDUCE_USE_DFLT = -68; - const YY_REDUCE_MAX = 117; + const YY_REDUCE_USE_DFLT = -1; + const YY_REDUCE_MAX = 123; static public $yy_reduce_ofst = array( - /* 0 */ -1, 752, 752, 752, 752, 752, 752, 752, 752, 752, - /* 10 */ 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, - /* 20 */ 752, 752, 752, 752, 895, 911, 925, 877, 953, 863, - /* 30 */ 833, 849, 939, 967, 1023, 1009, 995, 981, 655, 683, - /* 40 */ 1057, 1039, 1072, 1072, 1072, 1144, 1114, 1129, 1088, 1101, - /* 50 */ 707, 1150, 880, 1154, 517, 1158, 620, 597, 814, 713, - /* 60 */ 1052, 763, 816, 882, 797, 722, 800, 898, 1025, -42, - /* 70 */ -67, -57, -57, -57, -57, -57, -57, -57, -57, -57, - /* 80 */ -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, - /* 90 */ -57, -57, -57, -57, 228, 208, 274, 284, 273, 272, - /* 100 */ 234, 224, 223, 209, 222, 244, 247, 294, 269, 264, - /* 110 */ 259, 248, 249, 289, 297, 309, 298, 299, + /* 0 */ 54, 913, 913, 913, 913, 913, 913, 913, 913, 913, + /* 10 */ 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + /* 20 */ 913, 913, 913, 913, 1202, 1178, 1049, 1034, 1004, 1077, + /* 30 */ 1133, 1105, 1090, 1118, 924, 1064, 1021, 1151, 841, 1256, + /* 40 */ 1215, 1243, 1228, 815, 786, 1270, 873, 673, 673, 673, + /* 50 */ 673, 1286, 1302, 1309, 1340, 1336, 718, 1322, 989, 949, + /* 60 */ 914, 41, 696, 590, 1230, 845, 955, 1092, 1304, 1051, + /* 70 */ 1192, 1146, 1317, 1344, 1036, 288, 317, 298, 298, 298, + /* 80 */ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + /* 90 */ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + /* 100 */ 278, 294, 356, 306, 315, 339, 256, 340, 341, 336, + /* 110 */ 331, 316, 318, 326, 351, 386, 365, 364, 361, 389, + /* 120 */ 366, 368, 381, 376, ); static public $yyExpectedTokens = array( /* 0 */ array(), - /* 1 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, ), - /* 2 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, ), - /* 3 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, ), - /* 4 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 40, 41, 43, 44, 45, 46, 47, 48, ), - /* 5 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, ), - /* 6 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, ), - /* 7 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 8 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 9 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 10 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 11 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 12 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 13 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 14 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 15 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 16 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 17 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 18 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 19 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 20 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 21 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 22 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 23 */ array(24, 26, 27, 29, 31, 32, 33, 34, 36, 37, 41, 43, 44, 45, 46, 47, 48, ), - /* 24 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 25 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 26 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 27 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 28 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 29 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 30 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 31 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 32 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 33 */ array(2, 13, 28, 29, 31, 46, 51, 52, 53, 54, 56, 62, 64, ), - /* 34 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 35 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 36 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 37 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 38 */ array(13, 28, 29, 31, 46, 62, 64, ), - /* 39 */ array(13, 25, 28, 29, 30, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 40 */ array(13, 25, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 41 */ array(13, 25, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 42 */ array(13, 25, 28, 29, 30, 31, 38, 46, 51, 52, 53, 54, 62, 64, ), - /* 43 */ array(13, 25, 28, 29, 31, 38, 46, 51, 52, 53, 54, 62, 64, ), - /* 44 */ array(13, 25, 28, 29, 31, 38, 46, 51, 52, 53, 54, 62, 64, ), - /* 45 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 46 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 47 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 48 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 49 */ array(13, 28, 29, 31, 46, 51, 52, 53, 54, 62, 64, ), - /* 50 */ array(13, 28, 29, 31, 46, 62, 64, ), - /* 51 */ array(13, 28, 29, 31, 46, 62, 64, ), - /* 52 */ array(28, 29, 31, 46, 62, ), - /* 53 */ array(28, 29, 31, 46, 62, ), - /* 54 */ array(28, 29, 31, 46, 62, ), - /* 55 */ array(28, 29, 31, 46, 62, ), - /* 56 */ array(13, 28, 29, 31, 46, 62, 64, ), - /* 57 */ array(28, 29, 31, 46, 62, ), - /* 58 */ array(25, 28, 29, 31, 46, 62, ), - /* 59 */ array(28, 29, 31, 46, 62, ), - /* 60 */ array(28, 29, 31, 46, 62, ), - /* 61 */ array(28, 29, 31, 46, 62, ), - /* 62 */ array(28, 29, 31, 46, 62, ), - /* 63 */ array(28, 29, 31, 46, 62, ), - /* 64 */ array(28, 29, 31, 46, 62, ), - /* 65 */ array(28, 29, 31, 46, 62, ), - /* 66 */ array(28, 29, 31, 46, 62, ), - /* 67 */ array(28, 29, 31, 46, 62, ), - /* 68 */ array(28, 29, 31, 46, 62, ), - /* 69 */ array(28, 29, 31, 46, 62, ), - /* 70 */ array(28, 29, 31, 46, 62, ), - /* 71 */ array(1, 20, 21, 22, ), - /* 72 */ array(1, 20, 21, 22, ), - /* 73 */ array(1, 20, 21, 22, ), - /* 74 */ array(1, 20, 21, 22, ), - /* 75 */ array(1, 20, 21, 22, ), - /* 76 */ array(1, 20, 21, 22, ), - /* 77 */ array(1, 20, 21, 22, ), - /* 78 */ array(1, 20, 21, 22, ), - /* 79 */ array(1, 20, 21, 22, ), - /* 80 */ array(1, 20, 21, 22, ), - /* 81 */ array(1, 20, 21, 22, ), - /* 82 */ array(1, 20, 21, 22, ), - /* 83 */ array(1, 20, 21, 22, ), - /* 84 */ array(1, 20, 21, 22, ), - /* 85 */ array(1, 20, 21, 22, ), - /* 86 */ array(1, 20, 21, 22, ), - /* 87 */ array(1, 20, 21, 22, ), - /* 88 */ array(1, 20, 21, 22, ), - /* 89 */ array(1, 20, 21, 22, ), - /* 90 */ array(1, 20, 21, 22, ), - /* 91 */ array(1, 20, 21, 22, ), - /* 92 */ array(1, 20, 21, 22, ), - /* 93 */ array(1, 20, 21, 22, ), - /* 94 */ array(13, 25, 64, ), - /* 95 */ array(53, 54, ), - /* 96 */ array(), - /* 97 */ array(), - /* 98 */ array(), - /* 99 */ array(), - /* 100 */ array(), - /* 101 */ array(), + /* 1 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 45, 46, 47, 48, 49, 50, 51, ), + /* 2 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 45, 46, 47, 48, 49, 50, 51, ), + /* 3 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 45, 46, 47, 48, 49, 50, 51, ), + /* 4 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 45, 46, 47, 48, 49, 50, 51, ), + /* 5 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 43, 44, 46, 47, 48, 49, 50, 51, ), + /* 6 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 45, 46, 47, 48, 49, 50, 51, ), + /* 7 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 8 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 9 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 10 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 11 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 12 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 13 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 14 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 15 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 16 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 17 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 18 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 19 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 20 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 21 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 22 */ array(27, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 23 */ array(27, 29, 30, 32, 34, 35, 36, 37, 39, 40, 44, 46, 47, 48, 49, 50, 51, ), + /* 24 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 25 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 26 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 27 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 28 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 29 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 30 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 31 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 32 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 33 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 34 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 35 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 36 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 37 */ array(2, 15, 31, 32, 34, 49, 53, 54, 55, 56, 58, 64, 66, ), + /* 38 */ array(15, 31, 32, 34, 49, 55, 56, 64, 66, ), + /* 39 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 40 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 41 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 42 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 43 */ array(15, 28, 31, 32, 33, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 44 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 57, 64, 66, ), + /* 45 */ array(15, 28, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 46 */ array(15, 28, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 47 */ array(15, 28, 31, 32, 33, 34, 41, 49, 53, 54, 55, 56, 64, 66, ), + /* 48 */ array(15, 28, 31, 32, 34, 41, 49, 53, 54, 55, 56, 64, 66, ), + /* 49 */ array(15, 31, 32, 34, 41, 49, 53, 54, 55, 56, 57, 64, 66, ), + /* 50 */ array(15, 28, 31, 32, 34, 41, 49, 53, 54, 55, 56, 64, 66, ), + /* 51 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 52 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 53 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 54 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 55 */ array(15, 31, 32, 34, 49, 53, 54, 55, 56, 64, 66, ), + /* 56 */ array(31, 32, 34, 49, 55, 56, 64, ), + /* 57 */ array(31, 32, 34, 49, 55, 56, 64, ), + /* 58 */ array(31, 32, 34, 49, 55, 56, 64, ), + /* 59 */ array(15, 31, 32, 34, 49, 64, 66, ), + /* 60 */ array(15, 31, 32, 34, 49, 64, 66, ), + /* 61 */ array(15, 31, 32, 34, 49, 64, 66, ), + /* 62 */ array(31, 32, 34, 49, 64, ), + /* 63 */ array(31, 32, 34, 49, 64, ), + /* 64 */ array(28, 31, 32, 34, 49, 64, ), + /* 65 */ array(31, 32, 34, 49, 64, ), + /* 66 */ array(31, 32, 34, 49, 64, ), + /* 67 */ array(31, 32, 34, 49, 64, ), + /* 68 */ array(31, 32, 34, 49, 64, ), + /* 69 */ array(31, 32, 34, 49, 64, ), + /* 70 */ array(31, 32, 34, 49, 64, ), + /* 71 */ array(31, 32, 34, 49, 64, ), + /* 72 */ array(31, 32, 34, 49, 64, ), + /* 73 */ array(31, 32, 34, 49, 64, ), + /* 74 */ array(31, 32, 34, 49, 64, ), + /* 75 */ array(31, 32, 34, 49, 64, ), + /* 76 */ array(31, 32, 34, 49, 64, ), + /* 77 */ array(1, 23, 24, 25, ), + /* 78 */ array(1, 23, 24, 25, ), + /* 79 */ array(1, 23, 24, 25, ), + /* 80 */ array(1, 23, 24, 25, ), + /* 81 */ array(1, 23, 24, 25, ), + /* 82 */ array(1, 23, 24, 25, ), + /* 83 */ array(1, 23, 24, 25, ), + /* 84 */ array(1, 23, 24, 25, ), + /* 85 */ array(1, 23, 24, 25, ), + /* 86 */ array(1, 23, 24, 25, ), + /* 87 */ array(1, 23, 24, 25, ), + /* 88 */ array(1, 23, 24, 25, ), + /* 89 */ array(1, 23, 24, 25, ), + /* 90 */ array(1, 23, 24, 25, ), + /* 91 */ array(1, 23, 24, 25, ), + /* 92 */ array(1, 23, 24, 25, ), + /* 93 */ array(1, 23, 24, 25, ), + /* 94 */ array(1, 23, 24, 25, ), + /* 95 */ array(1, 23, 24, 25, ), + /* 96 */ array(1, 23, 24, 25, ), + /* 97 */ array(1, 23, 24, 25, ), + /* 98 */ array(1, 23, 24, 25, ), + /* 99 */ array(1, 23, 24, 25, ), + /* 100 */ array(15, 28, 66, ), + /* 101 */ array(55, 56, ), /* 102 */ array(), /* 103 */ array(), /* 104 */ array(), @@ -729,86 +769,86 @@ static public $yy_action = array( /* 115 */ array(), /* 116 */ array(), /* 117 */ array(), - /* 118 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 55, ), - /* 119 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 25, ), - /* 120 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 121 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 122 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 123 */ array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 124 */ array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 125 */ array(15, 16, 17, 18, 19, ), - /* 126 */ array(57, 58, 59, 60, ), - /* 127 */ array(18, 25, ), - /* 128 */ array(18, 49, ), - /* 129 */ array(25, 39, ), - /* 130 */ array(18, 19, ), - /* 131 */ array(18, 25, ), - /* 132 */ array(11, 38, ), - /* 133 */ array(18, 23, ), - /* 134 */ array(50, 63, ), - /* 135 */ array(18, 25, ), - /* 136 */ array(25, ), - /* 137 */ array(25, ), - /* 138 */ array(25, ), - /* 139 */ array(25, ), - /* 140 */ array(25, ), - /* 141 */ array(25, ), - /* 142 */ array(25, ), - /* 143 */ array(25, ), - /* 144 */ array(25, ), - /* 145 */ array(25, ), - /* 146 */ array(25, ), - /* 147 */ array(25, ), - /* 148 */ array(11, ), - /* 149 */ array(25, ), - /* 150 */ array(53, ), - /* 151 */ array(25, ), - /* 152 */ array(25, ), - /* 153 */ array(25, ), - /* 154 */ array(55, ), - /* 155 */ array(25, ), - /* 156 */ array(63, ), - /* 157 */ array(25, ), - /* 158 */ array(25, ), - /* 159 */ array(61, ), - /* 160 */ array(25, ), - /* 161 */ array(64, ), - /* 162 */ array(30, ), - /* 163 */ array(25, ), - /* 164 */ array(25, ), - /* 165 */ array(25, ), - /* 166 */ array(25, ), - /* 167 */ array(25, ), - /* 168 */ array(30, ), - /* 169 */ array(35, ), - /* 170 */ array(18, ), - /* 171 */ array(25, ), - /* 172 */ array(25, ), - /* 173 */ array(25, ), - /* 174 */ array(25, ), - /* 175 */ array(50, ), - /* 176 */ array(25, ), - /* 177 */ array(25, ), - /* 178 */ array(25, ), - /* 179 */ array(25, ), - /* 180 */ array(25, ), - /* 181 */ array(25, ), - /* 182 */ array(25, ), - /* 183 */ array(25, ), - /* 184 */ array(25, ), - /* 185 */ array(25, ), - /* 186 */ array(25, ), - /* 187 */ array(25, ), - /* 188 */ array(), - /* 189 */ array(), - /* 190 */ array(), - /* 191 */ array(), - /* 192 */ array(), - /* 193 */ array(), - /* 194 */ array(), - /* 195 */ array(), - /* 196 */ array(), - /* 197 */ array(), + /* 118 */ array(), + /* 119 */ array(), + /* 120 */ array(), + /* 121 */ array(), + /* 122 */ array(), + /* 123 */ array(), + /* 124 */ array(3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 57, ), + /* 125 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 126 */ array(3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 28, ), + /* 127 */ array(3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 26, ), + /* 128 */ array(3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 129 */ array(3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 130 */ array(4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 131 */ array(5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 132 */ array(7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 133 */ array(7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ), + /* 134 */ array(58, 59, 60, 61, 62, ), + /* 135 */ array(17, 18, 19, 20, 21, ), + /* 136 */ array(22, 28, ), + /* 137 */ array(6, 65, ), + /* 138 */ array(22, 28, ), + /* 139 */ array(20, 21, ), + /* 140 */ array(22, 28, ), + /* 141 */ array(28, 42, ), + /* 142 */ array(13, 41, ), + /* 143 */ array(22, 52, ), + /* 144 */ array(55, ), + /* 145 */ array(28, ), + /* 146 */ array(28, ), + /* 147 */ array(38, ), + /* 148 */ array(28, ), + /* 149 */ array(28, ), + /* 150 */ array(28, ), + /* 151 */ array(28, ), + /* 152 */ array(28, ), + /* 153 */ array(28, ), + /* 154 */ array(28, ), + /* 155 */ array(28, ), + /* 156 */ array(28, ), + /* 157 */ array(33, ), + /* 158 */ array(28, ), + /* 159 */ array(63, ), + /* 160 */ array(28, ), + /* 161 */ array(28, ), + /* 162 */ array(13, ), + /* 163 */ array(22, ), + /* 164 */ array(65, ), + /* 165 */ array(28, ), + /* 166 */ array(22, ), + /* 167 */ array(28, ), + /* 168 */ array(28, ), + /* 169 */ array(28, ), + /* 170 */ array(28, ), + /* 171 */ array(28, ), + /* 172 */ array(28, ), + /* 173 */ array(28, ), + /* 174 */ array(66, ), + /* 175 */ array(28, ), + /* 176 */ array(28, ), + /* 177 */ array(28, ), + /* 178 */ array(6, ), + /* 179 */ array(28, ), + /* 180 */ array(28, ), + /* 181 */ array(28, ), + /* 182 */ array(28, ), + /* 183 */ array(28, ), + /* 184 */ array(28, ), + /* 185 */ array(28, ), + /* 186 */ array(28, ), + /* 187 */ array(28, ), + /* 188 */ array(33, ), + /* 189 */ array(28, ), + /* 190 */ array(57, ), + /* 191 */ array(22, ), + /* 192 */ array(28, ), + /* 193 */ array(28, ), + /* 194 */ array(28, ), + /* 195 */ array(28, ), + /* 196 */ array(28, ), + /* 197 */ array(28, ), /* 198 */ array(), /* 199 */ array(), /* 200 */ array(), @@ -876,35 +916,49 @@ static public $yy_action = array( /* 262 */ array(), /* 263 */ array(), /* 264 */ array(), + /* 265 */ array(), + /* 266 */ array(), + /* 267 */ array(), + /* 268 */ array(), + /* 269 */ array(), + /* 270 */ array(), + /* 271 */ array(), + /* 272 */ array(), + /* 273 */ array(), + /* 274 */ array(), + /* 275 */ array(), + /* 276 */ array(), + /* 277 */ array(), ); static public $yy_default = array( - /* 0 */ 267, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 10 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 20 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 30 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 40 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 50 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 60 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 70 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 80 */ 354, 354, 354, 354, 354, 354, 265, 354, 354, 354, - /* 90 */ 354, 354, 354, 354, 354, 354, 267, 267, 267, 267, - /* 100 */ 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - /* 110 */ 267, 267, 267, 267, 267, 267, 267, 267, 354, 354, - /* 120 */ 292, 334, 335, 336, 338, 337, 343, 354, 354, 354, - /* 130 */ 339, 354, 354, 354, 320, 354, 354, 354, 354, 354, - /* 140 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 150 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 160 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 170 */ 328, 354, 354, 354, 354, 320, 354, 354, 354, 354, - /* 180 */ 354, 354, 354, 354, 354, 354, 354, 354, 271, 289, - /* 190 */ 296, 306, 313, 270, 315, 299, 351, 316, 269, 304, - /* 200 */ 298, 350, 349, 314, 297, 276, 277, 275, 274, 353, - /* 210 */ 273, 278, 279, 284, 285, 283, 282, 280, 281, 352, - /* 220 */ 347, 325, 326, 324, 272, 266, 268, 327, 332, 345, - /* 230 */ 346, 348, 344, 333, 286, 287, 301, 302, 300, 295, - /* 240 */ 293, 294, 303, 305, 310, 311, 309, 308, 307, 342, - /* 250 */ 341, 290, 291, 288, 323, 321, 322, 317, 319, 331, - /* 260 */ 340, 330, 329, 318, 312, + /* 0 */ 280, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 10 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 20 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 30 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 40 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 50 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 60 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 70 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 80 */ 278, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 90 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 100 */ 372, 372, 280, 280, 280, 280, 280, 280, 280, 280, + /* 110 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + /* 120 */ 280, 280, 280, 280, 372, 372, 372, 372, 305, 349, + /* 130 */ 350, 351, 353, 348, 361, 352, 372, 334, 372, 354, + /* 140 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 150 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 160 */ 372, 372, 372, 372, 372, 372, 345, 372, 372, 372, + /* 170 */ 372, 372, 372, 372, 372, 372, 372, 372, 334, 372, + /* 180 */ 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, + /* 190 */ 372, 342, 372, 372, 372, 372, 372, 372, 302, 281, + /* 200 */ 279, 328, 368, 319, 284, 285, 327, 311, 326, 312, + /* 210 */ 369, 367, 317, 329, 282, 283, 309, 313, 296, 297, + /* 220 */ 365, 295, 293, 294, 298, 299, 335, 304, 303, 301, + /* 230 */ 300, 336, 292, 291, 359, 362, 337, 360, 370, 371, + /* 240 */ 363, 364, 289, 290, 288, 287, 286, 330, 333, 320, + /* 250 */ 341, 346, 318, 315, 316, 321, 340, 338, 324, 323, + /* 260 */ 339, 322, 347, 314, 355, 356, 344, 343, 331, 332, + /* 270 */ 357, 358, 310, 366, 308, 307, 306, 325, ); /* The next thing included is series of defines which control ** various aspects of the generated parser. @@ -921,11 +975,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 = 95; + const YYNOCODE = 97; const YYSTACKDEPTH = 100; - const YYNSTATE = 265; - const YYNRULE = 89; - const YYERRORSYMBOL = 65; + const YYNSTATE = 278; + const YYNRULE = 94; + const YYERRORSYMBOL = 67; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; /** The next table maps tokens into fallback tokens. If a construct @@ -1008,29 +1062,29 @@ static public $yy_action = array( */ static public $yyTokenName = array( '$', 'T_TAG_OPEN', 'T_NOT', 'T_AND', - 'T_OR', 'T_EQ', 'T_NE', 'T_GT', - 'T_GE', 'T_LT', 'T_LE', 'T_IN', - 'T_PLUS', 'T_MINUS', 'T_CONCAT', 'T_TIMES', - 'T_DIV', 'T_MOD', 'T_PIPE', 'T_BITWISE', - 'T_HTML', 'T_COMMENT', 'T_PRINT_OPEN', 'T_PRINT_CLOSE', - 'T_EXTENDS', 'T_TAG_CLOSE', 'T_INCLUDE', 'T_AUTOESCAPE', - 'T_CUSTOM_END', 'T_CUSTOM_TAG', 'T_AS', 'T_CUSTOM_BLOCK', - 'T_SPACEFULL', 'T_WITH', 'T_SET', 'T_ASSIGN', - 'T_LOAD', 'T_FOR', 'T_COMMA', 'T_STEP', - 'T_EMPTY', 'T_IF', 'T_ELSE', 'T_IFCHANGED', - 'T_IFEQUAL', 'T_IFNOTEQUAL', 'T_BLOCK', 'T_FILTER', - 'T_REGROUP', 'T_BY', 'T_COLON', 'T_TRUE', - 'T_FALSE', 'T_STRING', 'T_INTL', 'T_RPARENT', - 'T_LPARENT', 'T_OBJ', 'T_DOT', 'T_CLASS', - 'T_BRACKETS_OPEN', 'T_BRACKETS_CLOSE', 'T_ALPHA', 'T_DOTDOT', - 'T_NUMERIC', 'error', 'start', 'body', - 'code', 'stmts', 'filtered_var', 'var_or_string', - 'stmt', 'for_stmt', 'ifchanged_stmt', 'block_stmt', - 'filter_stmt', 'if_stmt', 'custom_tag', 'alias', - 'ifequal', 'varname', 'params', 'expr', - 'regroup', 'string', 'for_def', 'range', - 'numvar', 'fvar_or_string', 'number', 'varname_args', - 'varpart', 'varpart_single', + 'T_OR', 'T_QUESTION', 'T_COLON', 'T_EQ', + 'T_NE', 'T_GT', 'T_GE', 'T_LT', + 'T_LE', 'T_IN', 'T_PLUS', 'T_MINUS', + 'T_CONCAT', 'T_TIMES', 'T_DIV', 'T_MOD', + 'T_PIPE', 'T_BITWISE', 'T_FILTER_PIPE', 'T_HTML', + 'T_COMMENT', 'T_PRINT_OPEN', 'T_PRINT_CLOSE', 'T_EXTENDS', + 'T_TAG_CLOSE', 'T_INCLUDE', 'T_AUTOESCAPE', 'T_CUSTOM_END', + 'T_CUSTOM_TAG', 'T_AS', 'T_CUSTOM_BLOCK', 'T_SPACEFULL', + 'T_WITH', 'T_SET', 'T_ASSIGN', 'T_LOAD', + 'T_FOR', 'T_COMMA', 'T_STEP', 'T_EMPTY', + 'T_IF', 'T_ELSE', 'T_IFCHANGED', 'T_IFEQUAL', + 'T_IFNOTEQUAL', 'T_BLOCK', 'T_FILTER', 'T_REGROUP', + 'T_BY', 'T_TRUE', 'T_FALSE', 'T_STRING', + 'T_INTL', 'T_RPARENT', 'T_LPARENT', 'T_OBJ', + 'T_DOT', 'T_CLASS', 'T_BRACKETS_OPEN', 'T_BRACKETS_CLOSE', + 'T_ALPHA', 'T_DOTDOT', 'T_NUMERIC', 'error', + 'start', 'body', 'code', 'stmts', + 'expr', 'var_or_string', 'stmt', 'for_stmt', + 'ifchanged_stmt', 'block_stmt', 'filter_stmt', 'if_stmt', + 'custom_tag', 'alias', 'ifequal', 'varname', + 'params', 'regroup', 'string', 'for_def', + 'filtered_var', 'range', 'numvar', 'fvar_or_string', + 'number', 'varname_args', 'varpart', 'varpart_single', ); /** @@ -1044,7 +1098,7 @@ static public $yy_action = array( /* 3 */ "code ::= T_TAG_OPEN stmts", /* 4 */ "code ::= T_HTML", /* 5 */ "code ::= T_COMMENT", - /* 6 */ "code ::= T_PRINT_OPEN filtered_var T_PRINT_CLOSE", + /* 6 */ "code ::= T_PRINT_OPEN expr T_PRINT_CLOSE", /* 7 */ "stmts ::= T_EXTENDS var_or_string T_TAG_CLOSE", /* 8 */ "stmts ::= stmt T_TAG_CLOSE", /* 9 */ "stmts ::= for_stmt", @@ -1090,43 +1144,48 @@ static public $yy_action = array( /* 49 */ "block_stmt ::= T_BLOCK number T_TAG_CLOSE body T_TAG_OPEN T_CUSTOM_END number T_TAG_CLOSE", /* 50 */ "filter_stmt ::= T_FILTER filtered_var T_TAG_CLOSE body T_TAG_OPEN T_CUSTOM_END T_TAG_CLOSE", /* 51 */ "regroup ::= T_REGROUP filtered_var T_BY varname T_AS varname", - /* 52 */ "filtered_var ::= filtered_var T_PIPE varname_args", - /* 53 */ "filtered_var ::= varname_args", - /* 54 */ "varname_args ::= varname T_COLON var_or_string", - /* 55 */ "varname_args ::= varname", - /* 56 */ "params ::= params var_or_string", - /* 57 */ "params ::= params T_COMMA var_or_string", - /* 58 */ "params ::= var_or_string", - /* 59 */ "var_or_string ::= varname", - /* 60 */ "var_or_string ::= number", - /* 61 */ "var_or_string ::= T_TRUE|T_FALSE", - /* 62 */ "var_or_string ::= string", - /* 63 */ "fvar_or_string ::= filtered_var", - /* 64 */ "fvar_or_string ::= number", - /* 65 */ "fvar_or_string ::= T_TRUE|T_FALSE", - /* 66 */ "fvar_or_string ::= string", - /* 67 */ "string ::= T_STRING", - /* 68 */ "string ::= T_INTL T_STRING T_RPARENT", - /* 69 */ "expr ::= T_NOT expr", - /* 70 */ "expr ::= expr T_AND expr", - /* 71 */ "expr ::= expr T_OR expr", - /* 72 */ "expr ::= expr T_PLUS|T_MINUS|T_CONCAT expr", - /* 73 */ "expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr", - /* 74 */ "expr ::= expr T_TIMES|T_DIV|T_MOD expr", - /* 75 */ "expr ::= expr T_BITWISE|T_PIPE expr", - /* 76 */ "expr ::= T_LPARENT expr T_RPARENT", - /* 77 */ "expr ::= fvar_or_string", - /* 78 */ "varname ::= varpart", - /* 79 */ "varpart ::= varpart T_OBJ|T_DOT varpart_single", - /* 80 */ "varpart ::= varpart T_CLASS varpart_single", - /* 81 */ "varpart ::= varpart T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE", - /* 82 */ "varpart ::= varpart_single", - /* 83 */ "varpart_single ::= T_ALPHA|T_BLOCK|T_CUSTOM_TAG|T_CUSTOM_END|T_CUSTOM_BLOCK", - /* 84 */ "range ::= numvar T_DOTDOT numvar", - /* 85 */ "numvar ::= number", - /* 86 */ "numvar ::= varname", - /* 87 */ "number ::= T_NUMERIC", - /* 88 */ "number ::= T_MINUS T_NUMERIC", + /* 52 */ "filtered_var ::= filtered_var T_FILTER_PIPE varname_args", + /* 53 */ "filtered_var ::= string T_FILTER_PIPE varname_args", + /* 54 */ "filtered_var ::= varname_args", + /* 55 */ "varname_args ::= varname T_COLON var_or_string", + /* 56 */ "varname_args ::= varname", + /* 57 */ "params ::= params var_or_string", + /* 58 */ "params ::= params T_COMMA var_or_string", + /* 59 */ "params ::= var_or_string", + /* 60 */ "var_or_string ::= varname", + /* 61 */ "var_or_string ::= number", + /* 62 */ "var_or_string ::= T_TRUE|T_FALSE", + /* 63 */ "var_or_string ::= string", + /* 64 */ "fvar_or_string ::= filtered_var", + /* 65 */ "fvar_or_string ::= number", + /* 66 */ "fvar_or_string ::= T_TRUE|T_FALSE", + /* 67 */ "fvar_or_string ::= string", + /* 68 */ "string ::= T_STRING", + /* 69 */ "string ::= T_INTL T_STRING T_RPARENT", + /* 70 */ "expr ::= expr T_QUESTION expr T_COLON expr", + /* 71 */ "expr ::= T_NOT expr", + /* 72 */ "expr ::= expr T_AND expr", + /* 73 */ "expr ::= expr T_OR expr", + /* 74 */ "expr ::= expr T_PLUS|T_MINUS|T_CONCAT expr", + /* 75 */ "expr ::= expr T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN expr", + /* 76 */ "expr ::= expr T_TIMES|T_DIV|T_MOD expr", + /* 77 */ "expr ::= expr T_BITWISE expr", + /* 78 */ "expr ::= expr T_PIPE expr", + /* 79 */ "expr ::= T_LPARENT expr T_RPARENT", + /* 80 */ "expr ::= fvar_or_string", + /* 81 */ "varname ::= varpart T_LPARENT T_RPARENT", + /* 82 */ "varname ::= varpart T_LPARENT params T_RPARENT", + /* 83 */ "varname ::= varpart", + /* 84 */ "varpart ::= varpart T_OBJ|T_DOT varpart_single", + /* 85 */ "varpart ::= varpart T_CLASS varpart_single", + /* 86 */ "varpart ::= varpart T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE", + /* 87 */ "varpart ::= varpart_single", + /* 88 */ "varpart_single ::= T_ALPHA|T_BLOCK|T_CUSTOM_TAG|T_CUSTOM_END|T_CUSTOM_BLOCK", + /* 89 */ "range ::= numvar T_DOTDOT numvar", + /* 90 */ "numvar ::= number", + /* 91 */ "numvar ::= varname", + /* 92 */ "number ::= T_NUMERIC", + /* 93 */ "number ::= T_MINUS T_NUMERIC", ); /** @@ -1491,95 +1550,100 @@ static public $yy_action = array( * </pre> */ static public $yyRuleInfo = array( - array( 'lhs' => 66, 'rhs' => 1 ), - array( 'lhs' => 67, 'rhs' => 2 ), - array( 'lhs' => 67, 'rhs' => 0 ), - array( 'lhs' => 68, 'rhs' => 2 ), array( 'lhs' => 68, 'rhs' => 1 ), - array( 'lhs' => 68, 'rhs' => 1 ), - array( 'lhs' => 68, 'rhs' => 3 ), - array( 'lhs' => 69, 'rhs' => 3 ), 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' => 1 ), - array( 'lhs' => 69, 'rhs' => 3 ), - array( 'lhs' => 69, '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' => 3 ), - array( 'lhs' => 78, 'rhs' => 5 ), - array( 'lhs' => 78, 'rhs' => 6 ), - array( 'lhs' => 78, 'rhs' => 7 ), - array( 'lhs' => 78, 'rhs' => 6 ), - array( 'lhs' => 79, 'rhs' => 9 ), - array( 'lhs' => 72, 'rhs' => 4 ), - array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 72, 'rhs' => 2 ), - array( 'lhs' => 86, 'rhs' => 5 ), - array( 'lhs' => 86, 'rhs' => 7 ), - array( 'lhs' => 73, 'rhs' => 5 ), - array( 'lhs' => 73, 'rhs' => 9 ), - array( 'lhs' => 73, 'rhs' => 11 ), - array( 'lhs' => 73, 'rhs' => 9 ), - 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' => 80, 'rhs' => 8 ), - array( 'lhs' => 80, 'rhs' => 12 ), - array( 'lhs' => 80, 'rhs' => 8 ), - array( 'lhs' => 80, 'rhs' => 12 ), - array( 'lhs' => 75, 'rhs' => 7 ), - array( 'lhs' => 75, 'rhs' => 8 ), - array( 'lhs' => 75, 'rhs' => 7 ), - array( 'lhs' => 75, 'rhs' => 8 ), - array( 'lhs' => 76, 'rhs' => 7 ), - array( 'lhs' => 84, 'rhs' => 6 ), - array( 'lhs' => 70, 'rhs' => 3 ), + array( 'lhs' => 69, 'rhs' => 0 ), + array( 'lhs' => 70, 'rhs' => 2 ), array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 91, 'rhs' => 3 ), - array( 'lhs' => 91, 'rhs' => 1 ), - array( 'lhs' => 82, 'rhs' => 2 ), - array( 'lhs' => 82, 'rhs' => 3 ), - array( 'lhs' => 82, 'rhs' => 1 ), + array( 'lhs' => 70, 'rhs' => 1 ), + array( 'lhs' => 70, 'rhs' => 3 ), + array( 'lhs' => 71, 'rhs' => 3 ), + array( 'lhs' => 71, 'rhs' => 2 ), array( 'lhs' => 71, 'rhs' => 1 ), array( 'lhs' => 71, 'rhs' => 1 ), array( 'lhs' => 71, 'rhs' => 1 ), array( 'lhs' => 71, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 89, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 3 ), - array( 'lhs' => 83, 'rhs' => 2 ), - array( 'lhs' => 83, 'rhs' => 3 ), - array( 'lhs' => 83, 'rhs' => 3 ), - array( 'lhs' => 83, 'rhs' => 3 ), - array( 'lhs' => 83, 'rhs' => 3 ), - array( 'lhs' => 83, 'rhs' => 3 ), - array( 'lhs' => 83, 'rhs' => 3 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 3 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 1 ), + array( 'lhs' => 71, 'rhs' => 7 ), + array( 'lhs' => 80, 'rhs' => 2 ), + array( 'lhs' => 80, 'rhs' => 4 ), + array( 'lhs' => 80, 'rhs' => 3 ), + array( 'lhs' => 80, 'rhs' => 5 ), + array( 'lhs' => 80, 'rhs' => 6 ), + array( 'lhs' => 80, 'rhs' => 7 ), + array( 'lhs' => 80, 'rhs' => 6 ), + array( 'lhs' => 81, 'rhs' => 9 ), + array( 'lhs' => 74, 'rhs' => 4 ), + array( 'lhs' => 74, 'rhs' => 1 ), + array( 'lhs' => 74, 'rhs' => 2 ), + array( 'lhs' => 87, 'rhs' => 5 ), + array( 'lhs' => 87, 'rhs' => 7 ), + array( 'lhs' => 75, 'rhs' => 5 ), + array( 'lhs' => 75, 'rhs' => 9 ), + array( 'lhs' => 75, 'rhs' => 11 ), + array( 'lhs' => 75, 'rhs' => 9 ), + array( 'lhs' => 79, 'rhs' => 7 ), + array( 'lhs' => 79, 'rhs' => 11 ), + array( 'lhs' => 76, 'rhs' => 6 ), + array( 'lhs' => 76, 'rhs' => 7 ), + array( 'lhs' => 76, 'rhs' => 10 ), + array( 'lhs' => 76, 'rhs' => 11 ), + array( 'lhs' => 82, 'rhs' => 8 ), + array( 'lhs' => 82, 'rhs' => 12 ), + array( 'lhs' => 82, 'rhs' => 8 ), + array( 'lhs' => 82, 'rhs' => 12 ), + array( 'lhs' => 77, 'rhs' => 7 ), + array( 'lhs' => 77, 'rhs' => 8 ), + array( 'lhs' => 77, 'rhs' => 7 ), + array( 'lhs' => 77, 'rhs' => 8 ), + array( 'lhs' => 78, 'rhs' => 7 ), + array( 'lhs' => 85, 'rhs' => 6 ), + array( 'lhs' => 88, 'rhs' => 3 ), + array( 'lhs' => 88, 'rhs' => 3 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 93, 'rhs' => 3 ), + array( 'lhs' => 93, 'rhs' => 1 ), + array( 'lhs' => 84, 'rhs' => 2 ), + array( 'lhs' => 84, 'rhs' => 3 ), + array( 'lhs' => 84, 'rhs' => 1 ), + array( 'lhs' => 73, 'rhs' => 1 ), + array( 'lhs' => 73, 'rhs' => 1 ), + array( 'lhs' => 73, 'rhs' => 1 ), + array( 'lhs' => 73, 'rhs' => 1 ), + array( 'lhs' => 91, 'rhs' => 1 ), + array( 'lhs' => 91, 'rhs' => 1 ), + array( 'lhs' => 91, 'rhs' => 1 ), + array( 'lhs' => 91, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 5 ), + array( 'lhs' => 72, 'rhs' => 2 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 1 ), array( 'lhs' => 83, 'rhs' => 3 ), + array( 'lhs' => 83, 'rhs' => 4 ), array( 'lhs' => 83, 'rhs' => 1 ), - array( 'lhs' => 81, 'rhs' => 1 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 3 ), - array( 'lhs' => 92, 'rhs' => 4 ), - array( 'lhs' => 92, 'rhs' => 1 ), - array( 'lhs' => 93, 'rhs' => 1 ), - array( 'lhs' => 87, 'rhs' => 3 ), - array( 'lhs' => 88, 'rhs' => 1 ), - array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 94, 'rhs' => 3 ), + array( 'lhs' => 94, 'rhs' => 3 ), + array( 'lhs' => 94, 'rhs' => 4 ), + array( 'lhs' => 94, 'rhs' => 1 ), + array( 'lhs' => 95, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 3 ), array( 'lhs' => 90, 'rhs' => 1 ), - array( 'lhs' => 90, 'rhs' => 2 ), + array( 'lhs' => 90, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 1 ), + array( 'lhs' => 92, 'rhs' => 2 ), ); /** @@ -1598,7 +1662,7 @@ static public $yy_action = array( 6 => 6, 7 => 7, 8 => 8, - 68 => 8, + 69 => 8, 9 => 9, 10 => 9, 11 => 9, @@ -1608,13 +1672,13 @@ static public $yy_action = array( 16 => 9, 17 => 9, 28 => 9, - 55 => 9, - 67 => 9, - 77 => 9, - 82 => 9, - 83 => 9, - 85 => 9, + 56 => 9, + 68 => 9, + 80 => 9, 87 => 9, + 88 => 9, + 90 => 9, + 92 => 9, 14 => 14, 18 => 18, 19 => 19, @@ -1650,34 +1714,39 @@ static public $yy_action = array( 50 => 50, 51 => 51, 52 => 52, - 57 => 52, + 58 => 52, 53 => 53, - 58 => 53, 54 => 54, - 56 => 56, - 59 => 59, - 86 => 59, + 59 => 54, + 55 => 55, + 57 => 57, 60 => 60, - 64 => 60, + 91 => 60, 61 => 61, 65 => 61, 62 => 62, 66 => 62, 63 => 63, - 69 => 69, + 67 => 63, + 64 => 64, 70 => 70, - 71 => 70, - 72 => 70, - 74 => 70, - 73 => 73, + 71 => 71, + 72 => 72, + 73 => 72, + 74 => 72, + 76 => 72, 75 => 75, - 76 => 76, + 77 => 77, 78 => 78, 79 => 79, - 80 => 80, 81 => 81, + 82 => 82, + 83 => 83, 84 => 84, - 88 => 88, + 85 => 85, + 86 => 86, + 89 => 89, + 93 => 93, ); /* Beginning here are the reduction cases. A typical example ** follows: @@ -1685,46 +1754,46 @@ static public $yy_action = array( ** function yy_r0($yymsp){ ... } // User supplied code ** #line <lineno> <thisfile> */ -#line 80 "Parser.y" +#line 81 "lib/Haanga/Compiler/Parser.y" function yy_r0(){ $this->body = $this->yystack[$this->yyidx + 0]->minor; } -#line 1696 "Parser.php" -#line 82 "Parser.y" +#line 1765 "lib/Haanga/Compiler/Parser.php" +#line 83 "lib/Haanga/Compiler/Parser.y" function yy_r1(){ $this->_retvalue=$this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1699 "Parser.php" -#line 83 "Parser.y" +#line 1768 "lib/Haanga/Compiler/Parser.php" +#line 84 "lib/Haanga/Compiler/Parser.y" function yy_r2(){ $this->_retvalue = array(); } -#line 1702 "Parser.php" -#line 86 "Parser.y" +#line 1771 "lib/Haanga/Compiler/Parser.php" +#line 87 "lib/Haanga/Compiler/Parser.y" function yy_r3(){ if (count($this->yystack[$this->yyidx + 0]->minor)) $this->yystack[$this->yyidx + 0]->minor['line'] = $this->lex->getLine(); $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1705 "Parser.php" -#line 88 "Parser.y" +#line 1774 "lib/Haanga/Compiler/Parser.php" +#line 89 "lib/Haanga/Compiler/Parser.y" function yy_r4(){ $this->_retvalue = array('operation' => 'html', 'html' => $this->yystack[$this->yyidx + 0]->minor, 'line' => $this->lex->getLine() ); } -#line 1710 "Parser.php" -#line 92 "Parser.y" +#line 1779 "lib/Haanga/Compiler/Parser.php" +#line 93 "lib/Haanga/Compiler/Parser.y" function yy_r5(){ $this->yystack[$this->yyidx + 0]->minor=rtrim($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = array('operation' => 'comment', 'comment' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1715 "Parser.php" -#line 96 "Parser.y" +#line 1784 "lib/Haanga/Compiler/Parser.php" +#line 97 "lib/Haanga/Compiler/Parser.y" function yy_r6(){ - $this->_retvalue = array('operation' => 'print_var', 'variable' => $this->yystack[$this->yyidx + -1]->minor, 'line' => $this->lex->getLine() ); + $this->_retvalue = array('operation' => 'print_var', 'expr' => $this->yystack[$this->yyidx + -1]->minor, 'line' => $this->lex->getLine() ); } -#line 1720 "Parser.php" -#line 100 "Parser.y" +#line 1789 "lib/Haanga/Compiler/Parser.php" +#line 101 "lib/Haanga/Compiler/Parser.y" function yy_r7(){ $this->_retvalue = array('operation' => 'base', $this->yystack[$this->yyidx + -1]->minor); } -#line 1723 "Parser.php" -#line 101 "Parser.y" +#line 1792 "lib/Haanga/Compiler/Parser.php" +#line 102 "lib/Haanga/Compiler/Parser.y" function yy_r8(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1726 "Parser.php" -#line 102 "Parser.y" +#line 1795 "lib/Haanga/Compiler/Parser.php" +#line 103 "lib/Haanga/Compiler/Parser.y" function yy_r9(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1729 "Parser.php" -#line 107 "Parser.y" +#line 1798 "lib/Haanga/Compiler/Parser.php" +#line 108 "lib/Haanga/Compiler/Parser.y" function yy_r14(){ $this->_retvalue = array('operation' => 'include', $this->yystack[$this->yyidx + -1]->minor); } -#line 1732 "Parser.php" -#line 111 "Parser.y" +#line 1801 "lib/Haanga/Compiler/Parser.php" +#line 112 "lib/Haanga/Compiler/Parser.y" function yy_r18(){ $this->yystack[$this->yyidx + -5]->minor = strtolower($this->yystack[$this->yyidx + -5]->minor); if ($this->yystack[$this->yyidx + -5]->minor != 'on' && $this->yystack[$this->yyidx + -5]->minor != 'off') { @@ -1735,71 +1804,76 @@ static public $yy_action = array( } $this->_retvalue = array('operation' => 'autoescape', 'value' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1744 "Parser.php" -#line 125 "Parser.y" +#line 1813 "lib/Haanga/Compiler/Parser.php" +#line 126 "lib/Haanga/Compiler/Parser.y" function yy_r19(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1749 "Parser.php" -#line 128 "Parser.y" +#line 1818 "lib/Haanga/Compiler/Parser.php" +#line 129 "lib/Haanga/Compiler/Parser.y" function yy_r20(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -3]->minor, 'as' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1754 "Parser.php" -#line 131 "Parser.y" +#line 1823 "lib/Haanga/Compiler/Parser.php" +#line 132 "lib/Haanga/Compiler/Parser.y" function yy_r21(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -2]->minor, 'list' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1759 "Parser.php" -#line 134 "Parser.y" +#line 1828 "lib/Haanga/Compiler/Parser.php" +#line 135 "lib/Haanga/Compiler/Parser.y" function yy_r22(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -4]->minor, 'as' => $this->yystack[$this->yyidx + -1]->minor, 'list' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1764 "Parser.php" -#line 139 "Parser.y" +#line 1833 "lib/Haanga/Compiler/Parser.php" +#line 140 "lib/Haanga/Compiler/Parser.y" function yy_r23(){ if ('end'.$this->yystack[$this->yyidx + -5]->minor != $this->yystack[$this->yyidx + -1]->minor) { $this->error("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 1772 "Parser.php" -#line 145 "Parser.y" +#line 1841 "lib/Haanga/Compiler/Parser.php" +#line 146 "lib/Haanga/Compiler/Parser.y" function yy_r24(){ if ('end'.$this->yystack[$this->yyidx + -6]->minor != $this->yystack[$this->yyidx + -1]->minor) { $this->error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor); } $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -6]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor, 'list' => $this->yystack[$this->yyidx + -5]->minor); } -#line 1780 "Parser.php" -#line 153 "Parser.y" +#line 1849 "lib/Haanga/Compiler/Parser.php" +#line 154 "lib/Haanga/Compiler/Parser.y" function yy_r25(){ if ('endspacefull' != $this->yystack[$this->yyidx + -1]->minor) { $this->error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor); } $this->_retvalue = array('operation' => 'spacefull', 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1788 "Parser.php" -#line 161 "Parser.y" +#line 1857 "lib/Haanga/Compiler/Parser.php" +#line 162 "lib/Haanga/Compiler/Parser.y" function yy_r26(){ if ($this->yystack[$this->yyidx + -1]->minor != "endwith") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endwith"); } $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 1796 "Parser.php" -#line 169 "Parser.y" +#line 1865 "lib/Haanga/Compiler/Parser.php" +#line 170 "lib/Haanga/Compiler/Parser.y" function yy_r27(){ $this->_retvalue = array('operation' => 'set', 'var' => $this->yystack[$this->yyidx + -2]->minor,'expr' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1799 "Parser.php" -#line 171 "Parser.y" +#line 1868 "lib/Haanga/Compiler/Parser.php" +#line 172 "lib/Haanga/Compiler/Parser.y" function yy_r29(){ + if (is_file(dirname($this->file) . '/' . $this->yystack[$this->yyidx + 0]->minor)) { + $this->yystack[$this->yyidx + 0]->minor = dirname($this->file) . '/' . $this->yystack[$this->yyidx + 0]->minor; + } else if (is_file(getcwd() . '/' . $this->yystack[$this->yyidx + 0]->minor)) { + $this->yystack[$this->yyidx + 0]->minor = getcwd() . '/' . $this->yystack[$this->yyidx + 0]->minor; + } if (!is_file($this->yystack[$this->yyidx + 0]->minor) || !Haanga_Compiler::getOption('enable_load')) { $this->error($this->yystack[$this->yyidx + 0]->minor." is not a valid file"); } require_once $this->yystack[$this->yyidx + 0]->minor; } -#line 1807 "Parser.php" -#line 180 "Parser.y" +#line 1881 "lib/Haanga/Compiler/Parser.php" +#line 186 "lib/Haanga/Compiler/Parser.y" function yy_r30(){ $var = $this->compiler->get_context($this->yystack[$this->yyidx + -1]->minor[0]); if (is_array($var) || $var instanceof Iterator) { @@ -1808,8 +1882,8 @@ static public $yy_action = array( } $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -3]->minor, 'index' => NULL, 'array' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1817 "Parser.php" -#line 188 "Parser.y" +#line 1891 "lib/Haanga/Compiler/Parser.php" +#line 194 "lib/Haanga/Compiler/Parser.y" function yy_r31(){ $var = $this->compiler->get_context($this->yystack[$this->yyidx + -1]->minor[0]); if (is_array($var) || $var instanceof Iterator) { @@ -1819,8 +1893,8 @@ static public $yy_action = array( $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -3]->minor, 'index' => $this->yystack[$this->yyidx + -5]->minor, 'array' => $this->yystack[$this->yyidx + -1]->minor); } -#line 1828 "Parser.php" -#line 198 "Parser.y" +#line 1902 "lib/Haanga/Compiler/Parser.php" +#line 204 "lib/Haanga/Compiler/Parser.y" function yy_r32(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfor") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfor"); @@ -1828,24 +1902,24 @@ static public $yy_action = array( $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor; $this->_retvalue['body'] = $this->yystack[$this->yyidx + -3]->minor; } -#line 1837 "Parser.php" -#line 206 "Parser.y" +#line 1911 "lib/Haanga/Compiler/Parser.php" +#line 212 "lib/Haanga/Compiler/Parser.y" function yy_r33(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfor") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfor"); } $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -7]->minor, 'range' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor, 'variable' => $this->yystack[$this->yyidx + -7]->minor, 'step' => 1); } -#line 1845 "Parser.php" -#line 213 "Parser.y" +#line 1919 "lib/Haanga/Compiler/Parser.php" +#line 219 "lib/Haanga/Compiler/Parser.y" function yy_r34(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfor") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfor"); } $this->_retvalue = array('operation' => 'loop', 'variable' => $this->yystack[$this->yyidx + -9]->minor, 'range' => $this->yystack[$this->yyidx + -7]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor, 'variable' => $this->yystack[$this->yyidx + -9]->minor, 'step' => $this->yystack[$this->yyidx + -5]->minor); } -#line 1853 "Parser.php" -#line 220 "Parser.y" +#line 1927 "lib/Haanga/Compiler/Parser.php" +#line 226 "lib/Haanga/Compiler/Parser.y" function yy_r35(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfor") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfor"); @@ -1854,191 +1928,216 @@ static public $yy_action = array( $this->_retvalue['body'] = $this->yystack[$this->yyidx + -7]->minor; $this->_retvalue['empty'] = $this->yystack[$this->yyidx + -3]->minor; } -#line 1863 "Parser.php" -#line 229 "Parser.y" +#line 1937 "lib/Haanga/Compiler/Parser.php" +#line 235 "lib/Haanga/Compiler/Parser.y" function yy_r36(){ if ($this->yystack[$this->yyidx + -1]->minor != "endif") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endif"); } $this->_retvalue = array('operation' => 'if', 'expr' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1871 "Parser.php" -#line 235 "Parser.y" +#line 1945 "lib/Haanga/Compiler/Parser.php" +#line 241 "lib/Haanga/Compiler/Parser.y" function yy_r37(){ if ($this->yystack[$this->yyidx + -1]->minor != "endif") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endif"); } $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 1879 "Parser.php" -#line 243 "Parser.y" +#line 1953 "lib/Haanga/Compiler/Parser.php" +#line 249 "lib/Haanga/Compiler/Parser.y" function yy_r38(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifchanged") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifchanged"); } $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1887 "Parser.php" -#line 250 "Parser.y" +#line 1961 "lib/Haanga/Compiler/Parser.php" +#line 256 "lib/Haanga/Compiler/Parser.y" function yy_r39(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifchanged") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifchanged"); } $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -3]->minor, 'check' => $this->yystack[$this->yyidx + -5]->minor); } -#line 1895 "Parser.php" -#line 256 "Parser.y" +#line 1969 "lib/Haanga/Compiler/Parser.php" +#line 262 "lib/Haanga/Compiler/Parser.y" function yy_r40(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifchanged") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifchanged"); } $this->_retvalue = array('operation' => 'ifchanged', 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1903 "Parser.php" -#line 263 "Parser.y" +#line 1977 "lib/Haanga/Compiler/Parser.php" +#line 269 "lib/Haanga/Compiler/Parser.y" function yy_r41(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifchanged") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifchanged"); } $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 1911 "Parser.php" -#line 271 "Parser.y" +#line 1985 "lib/Haanga/Compiler/Parser.php" +#line 277 "lib/Haanga/Compiler/Parser.y" function yy_r42(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifequal") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifequal"); } $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '==', 1 => $this->yystack[$this->yyidx + -6]->minor, 2 => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1919 "Parser.php" -#line 277 "Parser.y" +#line 1993 "lib/Haanga/Compiler/Parser.php" +#line 283 "lib/Haanga/Compiler/Parser.y" function yy_r43(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifequal") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifequal"); } $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '==', 1 => $this->yystack[$this->yyidx + -10]->minor, 2 => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1927 "Parser.php" -#line 283 "Parser.y" +#line 2001 "lib/Haanga/Compiler/Parser.php" +#line 289 "lib/Haanga/Compiler/Parser.y" function yy_r44(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifnotequal") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifnotequal"); } $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '!=', 1 => $this->yystack[$this->yyidx + -6]->minor, 2 => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1935 "Parser.php" -#line 289 "Parser.y" +#line 2009 "lib/Haanga/Compiler/Parser.php" +#line 295 "lib/Haanga/Compiler/Parser.y" function yy_r45(){ if ($this->yystack[$this->yyidx + -1]->minor != "endifnotequal") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endifnotequal"); } $this->_retvalue = array('operation' => 'ifequal', 'cmp' => '!=', 1 => $this->yystack[$this->yyidx + -10]->minor, 2 => $this->yystack[$this->yyidx + -9]->minor, 'body' => $this->yystack[$this->yyidx + -7]->minor, 'else' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1943 "Parser.php" -#line 297 "Parser.y" +#line 2017 "lib/Haanga/Compiler/Parser.php" +#line 303 "lib/Haanga/Compiler/Parser.y" function yy_r46(){ if ($this->yystack[$this->yyidx + -1]->minor != "endblock") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endblock"); } $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1951 "Parser.php" -#line 304 "Parser.y" +#line 2025 "lib/Haanga/Compiler/Parser.php" +#line 310 "lib/Haanga/Compiler/Parser.y" function yy_r47(){ if ($this->yystack[$this->yyidx + -2]->minor != "endblock") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -2]->minor.", expecting endblock"); } $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -6]->minor, 'body' => $this->yystack[$this->yyidx + -4]->minor); } -#line 1959 "Parser.php" -#line 311 "Parser.y" +#line 2033 "lib/Haanga/Compiler/Parser.php" +#line 317 "lib/Haanga/Compiler/Parser.y" function yy_r48(){ if ($this->yystack[$this->yyidx + -1]->minor != "endblock") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endblock"); } $this->_retvalue = array('operation' => 'block', 'name' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1967 "Parser.php" -#line 326 "Parser.y" +#line 2041 "lib/Haanga/Compiler/Parser.php" +#line 332 "lib/Haanga/Compiler/Parser.y" function yy_r50(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfilter") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfilter"); } $this->_retvalue = array('operation' => 'filter', 'functions' => $this->yystack[$this->yyidx + -5]->minor, 'body' => $this->yystack[$this->yyidx + -3]->minor); } -#line 1975 "Parser.php" -#line 334 "Parser.y" +#line 2049 "lib/Haanga/Compiler/Parser.php" +#line 340 "lib/Haanga/Compiler/Parser.y" function yy_r51(){ $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 1978 "Parser.php" -#line 337 "Parser.y" +#line 2052 "lib/Haanga/Compiler/Parser.php" +#line 343 "lib/Haanga/Compiler/Parser.y" function yy_r52(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1981 "Parser.php" -#line 338 "Parser.y" - function yy_r53(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 1984 "Parser.php" -#line 340 "Parser.y" - function yy_r54(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, 'args'=>array($this->yystack[$this->yyidx + 0]->minor)); } -#line 1987 "Parser.php" -#line 344 "Parser.y" - function yy_r56(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1990 "Parser.php" -#line 350 "Parser.y" - function yy_r59(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1993 "Parser.php" -#line 351 "Parser.y" - function yy_r60(){ $this->_retvalue = array('number' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1996 "Parser.php" -#line 352 "Parser.y" - function yy_r61(){ $this->_retvalue = trim(@$this->yystack[$this->yyidx + 0]->minor); } -#line 1999 "Parser.php" -#line 353 "Parser.y" - function yy_r62(){ $this->_retvalue = array('string' => $this->yystack[$this->yyidx + 0]->minor); } -#line 2002 "Parser.php" -#line 356 "Parser.y" - function yy_r63(){ $this->_retvalue = array('var_filter' => $this->yystack[$this->yyidx + 0]->minor); } -#line 2005 "Parser.php" -#line 366 "Parser.y" - function yy_r69(){ $this->_retvalue = array('op_expr' => 'not', $this->yystack[$this->yyidx + 0]->minor); } -#line 2008 "Parser.php" -#line 367 "Parser.y" - function yy_r70(){ $this->_retvalue = array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 2011 "Parser.php" -#line 370 "Parser.y" - function yy_r73(){ $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 2014 "Parser.php" -#line 372 "Parser.y" - function yy_r75(){ $this->_retvalue = array('op_expr' => 'expr', array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor)); } -#line 2017 "Parser.php" -#line 373 "Parser.y" - function yy_r76(){ $this->_retvalue = array('op_expr' => 'expr', $this->yystack[$this->yyidx + -1]->minor); } -#line 2020 "Parser.php" -#line 378 "Parser.y" - function yy_r78(){ $this->_retvalue = current($this->compiler->generate_variable_name($this->yystack[$this->yyidx + 0]->minor, false)); } -#line 2023 "Parser.php" -#line 380 "Parser.y" - function yy_r79(){ +#line 2055 "lib/Haanga/Compiler/Parser.php" +#line 344 "lib/Haanga/Compiler/Parser.y" + function yy_r53(){ $this->_retvalue = array(array('string' => $this->yystack[$this->yyidx + -2]->minor)); $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } +#line 2058 "lib/Haanga/Compiler/Parser.php" +#line 345 "lib/Haanga/Compiler/Parser.y" + function yy_r54(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } +#line 2061 "lib/Haanga/Compiler/Parser.php" +#line 347 "lib/Haanga/Compiler/Parser.y" + function yy_r55(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, 'args'=>array($this->yystack[$this->yyidx + 0]->minor)); } +#line 2064 "lib/Haanga/Compiler/Parser.php" +#line 351 "lib/Haanga/Compiler/Parser.y" + function yy_r57(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } +#line 2067 "lib/Haanga/Compiler/Parser.php" +#line 357 "lib/Haanga/Compiler/Parser.y" + function yy_r60(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + 0]->minor); } +#line 2070 "lib/Haanga/Compiler/Parser.php" +#line 358 "lib/Haanga/Compiler/Parser.y" + function yy_r61(){ $this->_retvalue = array('number' => $this->yystack[$this->yyidx + 0]->minor); } +#line 2073 "lib/Haanga/Compiler/Parser.php" +#line 359 "lib/Haanga/Compiler/Parser.y" + function yy_r62(){ $this->_retvalue = trim(@$this->yystack[$this->yyidx + 0]->minor); } +#line 2076 "lib/Haanga/Compiler/Parser.php" +#line 360 "lib/Haanga/Compiler/Parser.y" + function yy_r63(){ $this->_retvalue = array('string' => $this->yystack[$this->yyidx + 0]->minor); } +#line 2079 "lib/Haanga/Compiler/Parser.php" +#line 363 "lib/Haanga/Compiler/Parser.y" + function yy_r64(){ + $this->_retvalue = array('var_filter' => $this->yystack[$this->yyidx + 0]->minor); + } +#line 2084 "lib/Haanga/Compiler/Parser.php" +#line 375 "lib/Haanga/Compiler/Parser.y" + function yy_r70(){ + $this->_retvalue = array('expr_cond' => $this->yystack[$this->yyidx + -4]->minor, 'true' => $this->yystack[$this->yyidx + -2]->minor, 'false' => $this->yystack[$this->yyidx + 0]->minor); + } +#line 2089 "lib/Haanga/Compiler/Parser.php" +#line 378 "lib/Haanga/Compiler/Parser.y" + function yy_r71(){ $this->_retvalue = array('op_expr' => 'not', $this->yystack[$this->yyidx + 0]->minor); } +#line 2092 "lib/Haanga/Compiler/Parser.php" +#line 379 "lib/Haanga/Compiler/Parser.y" + function yy_r72(){ $this->_retvalue = array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } +#line 2095 "lib/Haanga/Compiler/Parser.php" +#line 382 "lib/Haanga/Compiler/Parser.y" + function yy_r75(){ $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 2098 "lib/Haanga/Compiler/Parser.php" +#line 384 "lib/Haanga/Compiler/Parser.y" + function yy_r77(){ $this->_retvalue = array('op_expr' => 'expr', array('op_expr' => @$this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor)); } +#line 2101 "lib/Haanga/Compiler/Parser.php" +#line 385 "lib/Haanga/Compiler/Parser.y" + function yy_r78(){ $this->_retvalue = array('op_expr' => 'expr', array('op_expr' => '|', $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor)); } +#line 2104 "lib/Haanga/Compiler/Parser.php" +#line 386 "lib/Haanga/Compiler/Parser.y" + function yy_r79(){ $this->_retvalue = array('op_expr' => 'expr', $this->yystack[$this->yyidx + -1]->minor); } +#line 2107 "lib/Haanga/Compiler/Parser.php" +#line 391 "lib/Haanga/Compiler/Parser.y" + function yy_r81(){ + $this->_retvalue = hexec($this->yystack[$this->yyidx + -2]->minor)->getArray(); + } +#line 2112 "lib/Haanga/Compiler/Parser.php" +#line 395 "lib/Haanga/Compiler/Parser.y" + function yy_r82(){ + $tmp = hcode(); + $args = array_merge(array($this->yystack[$this->yyidx + -3]->minor), $this->yystack[$this->yyidx + -1]->minor); + $this->_retvalue = call_user_func_array(array($tmp, 'exec'), $args); + } +#line 2119 "lib/Haanga/Compiler/Parser.php" +#line 401 "lib/Haanga/Compiler/Parser.y" + function yy_r83(){ $this->_retvalue = current($this->compiler->generate_variable_name($this->yystack[$this->yyidx + 0]->minor, false)); } +#line 2122 "lib/Haanga/Compiler/Parser.php" +#line 403 "lib/Haanga/Compiler/Parser.y" + function yy_r84(){ if (!is_array($this->yystack[$this->yyidx + -2]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor); } else { $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } $this->_retvalue[]=array('object' => $this->yystack[$this->yyidx + 0]->minor); } -#line 2029 "Parser.php" -#line 385 "Parser.y" - function yy_r80(){ +#line 2128 "lib/Haanga/Compiler/Parser.php" +#line 408 "lib/Haanga/Compiler/Parser.y" + function yy_r85(){ if (!is_array($this->yystack[$this->yyidx + -2]->minor)) { $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor); } else { $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } $this->_retvalue[]=array('class' => '$'.$this->yystack[$this->yyidx + 0]->minor); } -#line 2035 "Parser.php" -#line 390 "Parser.y" - function yy_r81(){ +#line 2134 "lib/Haanga/Compiler/Parser.php" +#line 413 "lib/Haanga/Compiler/Parser.y" + function yy_r86(){ 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 2041 "Parser.php" -#line 399 "Parser.y" - function yy_r84(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 2044 "Parser.php" -#line 405 "Parser.y" - function yy_r88(){ $this->_retvalue = -1 * ($this->yystack[$this->yyidx + 0]->minor); } -#line 2047 "Parser.php" +#line 2140 "lib/Haanga/Compiler/Parser.php" +#line 422 "lib/Haanga/Compiler/Parser.y" + function yy_r89(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } +#line 2143 "lib/Haanga/Compiler/Parser.php" +#line 428 "lib/Haanga/Compiler/Parser.y" + function yy_r93(){ $this->_retvalue = -1 * ($this->yystack[$this->yyidx + 0]->minor); } +#line 2146 "lib/Haanga/Compiler/Parser.php" /** * placeholder for the left hand side in a reduce operation. @@ -2150,14 +2249,14 @@ static public $yy_action = array( */ function yy_syntax_error($yymajor, $TOKEN) { -#line 71 "Parser.y" +#line 72 "lib/Haanga/Compiler/Parser.y" $expect = array(); foreach ($this->yy_get_expected_tokens($yymajor) as $token) { $expect[] = self::$yyTokenName[$token]; } $this->Error('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. ')'); -#line 2167 "Parser.php" +#line 2266 "lib/Haanga/Compiler/Parser.php" } /** @@ -2175,9 +2274,9 @@ static public $yy_action = array( } /* Here code is inserted which will be executed whenever the ** parser accepts */ -#line 57 "Parser.y" +#line 57 "lib/Haanga/Compiler/Parser.y" -#line 2188 "Parser.php" +#line 2287 "lib/Haanga/Compiler/Parser.php" } /** diff --git a/lib/Haanga/lib/Haanga/Compiler/Parser.y b/lib/Haanga/lib/Haanga/Compiler/Parser.y index ee70e510a06946a7761a3bb69b935c0c032cfc60..9b890e32d75b731c260c49629d6d841177d741f7 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Parser.y +++ b/lib/Haanga/lib/Haanga/Compiler/Parser.y @@ -62,12 +62,13 @@ %right T_NOT. %left T_AND. %left T_OR. +%left T_QUESTION T_COLON. %nonassoc T_EQ T_NE. %nonassoc T_GT T_GE T_LT T_LE. %nonassoc T_IN. %left T_PLUS T_MINUS T_CONCAT. %left T_TIMES T_DIV T_MOD. -%left T_PIPE T_BITWISE. +%left T_PIPE T_BITWISE T_FILTER_PIPE. %syntax_error { $expect = array(); @@ -94,8 +95,8 @@ code(A) ::= T_COMMENT(B). { B=rtrim(B); A = array('operation' => 'comment', 'comment' => B); } -code(A) ::= T_PRINT_OPEN filtered_var(B) T_PRINT_CLOSE. { - A = array('operation' => 'print_var', 'variable' => B, 'line' => $this->lex->getLine() ); +code(A) ::= T_PRINT_OPEN expr(B) T_PRINT_CLOSE. { + A = array('operation' => 'print_var', 'expr' => B, 'line' => $this->lex->getLine() ); } stmts(A) ::= T_EXTENDS var_or_string(B) T_TAG_CLOSE. { A = array('operation' => 'base', B); } @@ -170,6 +171,11 @@ alias(A) ::= T_WITH varname(B) T_AS varname(C) T_TAG_CLOSE body(X) T_TAG_OPEN T_ stmt(A) ::= T_SET varname(C) T_ASSIGN expr(X). { A = array('operation' => 'set', 'var' => C,'expr' => X); } stmt(A) ::= regroup(B). { A = B; } stmt ::= T_LOAD string(B). { + if (is_file(dirname($this->file) . '/' . B)) { + B = dirname($this->file) . '/' . B; + } else if (is_file(getcwd() . '/' . B)) { + B = getcwd() . '/' . B; + } if (!is_file(B) || !Haanga_Compiler::getOption('enable_load')) { $this->error(B." is not a valid file"); } @@ -337,7 +343,8 @@ filter_stmt(A) ::= T_FILTER filtered_var(B) T_TAG_CLOSE body(X) T_TAG_OPEN T_CUS regroup(A) ::= T_REGROUP filtered_var(B) T_BY varname(C) T_AS varname(X). { A=array('operation' => 'regroup', 'array' => B, 'row' => C, 'as' => X); } /* variables with filters */ -filtered_var(A) ::= filtered_var(B) T_PIPE varname_args(C). { A = B; A[] = C; } +filtered_var(A) ::= filtered_var(B) T_FILTER_PIPE varname_args(C). { A = B; A[] = C; } +filtered_var(A) ::= string(B) T_FILTER_PIPE varname_args(C). { A = array(array('string' => B)); A[] = C; } filtered_var(A) ::= varname_args(B). { A = array(B); } varname_args(A) ::= varname(B) T_COLON var_or_string(X) . { A = array(B, 'args'=>array(X)); } @@ -356,7 +363,9 @@ var_or_string(A) ::= T_TRUE|T_FALSE(B). { A = trim(@B); } var_or_string(A) ::= string(B). { A = array('string' => B); } /* filtered variables */ -fvar_or_string(A) ::= filtered_var(B). { A = array('var_filter' => B); } +fvar_or_string(A) ::= filtered_var(B). { + A = array('var_filter' => B); +} fvar_or_string(A) ::= number(B). { A = array('number' => B); } fvar_or_string(A) ::= T_TRUE|T_FALSE(B). { A = trim(@B); } fvar_or_string(A) ::= string(B). { A = array('string' => B); } @@ -366,18 +375,32 @@ string(A) ::= T_STRING(B). { A = B; } string(A) ::= T_INTL T_STRING(B) T_RPARENT. { A = B; } /* expr */ +expr(A) ::= expr(Z) T_QUESTION expr(B) T_COLON expr(C). { + A = array('expr_cond' => Z, 'true' => B, 'false' => C); +} expr(A) ::= T_NOT expr(B). { A = array('op_expr' => 'not', B); } expr(A) ::= expr(B) T_AND(X) expr(C). { A = array('op_expr' => @X, B, C); } expr(A) ::= expr(B) T_OR(X) expr(C). { A = array('op_expr' => @X, B, C); } expr(A) ::= expr(B) T_PLUS|T_MINUS|T_CONCAT(X) expr(C). { A = array('op_expr' => @X, B, C); } expr(A) ::= expr(B) T_EQ|T_NE|T_GT|T_GE|T_LT|T_LE|T_IN(X) expr(C). { A = array('op_expr' => trim(@X), B, C); } expr(A) ::= expr(B) T_TIMES|T_DIV|T_MOD(X) expr(C). { A = array('op_expr' => @X, B, C); } -expr(A) ::= expr(B) T_BITWISE|T_PIPE(X) expr(C). { A = array('op_expr' => 'expr', array('op_expr' => @X, B, C)); } +expr(A) ::= expr(B) T_BITWISE(X) expr(C). { A = array('op_expr' => 'expr', array('op_expr' => @X, B, C)); } +expr(A) ::= expr(B) T_PIPE expr(C). { A = array('op_expr' => 'expr', array('op_expr' => '|', B, C)); } expr(A) ::= T_LPARENT expr(B) T_RPARENT. { A = array('op_expr' => 'expr', B); } expr(A) ::= fvar_or_string(B). { A = B; } /* Variable name */ +varname(A) ::= varpart(B) T_LPARENT T_RPARENT. { + A = hexec(B)->getArray(); +} + +varname(A) ::= varpart(B) T_LPARENT params(X) T_RPARENT. { + $tmp = hcode(); + $args = array_merge(array(B), X); + A = call_user_func_array(array($tmp, 'exec'), $args); +} + varname(A) ::= varpart(B). { A = current($this->compiler->generate_variable_name(B, false)); } varpart(A) ::= varpart(B) T_OBJ|T_DOT varpart_single(C). { diff --git a/lib/Haanga/lib/Haanga/Compiler/Runtime.php b/lib/Haanga/lib/Haanga/Compiler/Runtime.php index a076d9907ca65d9e89e90a63b67318c8255d55dc..ce3736b858474436cc43bca6ae1785c1ca169e31 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Runtime.php +++ b/lib/Haanga/lib/Haanga/Compiler/Runtime.php @@ -64,7 +64,7 @@ final class Haanga_Compiler_Runtime extends Haanga_Compiler protected function generate_op_include($details, &$body) { $this->do_print($body, - hexec('Haanga::Load', $details[0], hvar('vars'), + hexec('Haanga::Load', $details[0], $this->getScopeVariable(), TRUE, hvar('blocks')) ); @@ -75,7 +75,7 @@ final class Haanga_Compiler_Runtime extends Haanga_Compiler function expr_call_base_template() { return hexec('Haanga::Load', $this->subtemplate, - hvar('vars'), TRUE, hvar('blocks')); + $this->getScopeVariable(), TRUE, hvar('blocks')); } // }}} diff --git a/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php b/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php index e618b7a025629bd743b339a5e6664a53848b37c4..3448562c5b145cfba28d9207d91db05639d7f2cb 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php +++ b/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php @@ -96,9 +96,10 @@ class Haanga_Compiler_Tokenizer '<' => HG_Parser::T_LT, '=' => HG_Parser::T_ASSIGN, '>' => HG_Parser::T_GT, + '?' => HG_Parser::T_QUESTION, '[' => HG_Parser::T_BRACKETS_OPEN, ']' => HG_Parser::T_BRACKETS_CLOSE, - '|' => HG_Parser::T_PIPE, + '|' => HG_Parser::T_FILTER_PIPE, ); static $operators = array( '!==' => HG_Parser::T_NE, @@ -113,7 +114,7 @@ class Haanga_Compiler_Tokenizer '==' => HG_Parser::T_EQ, '>=' => HG_Parser::T_GE, '>>' => HG_Parser::T_BITWISE, - '||' => HG_Parser::T_OR, + '||' => HG_Parser::T_PIPE, ); static $close_tags = array(); @@ -135,6 +136,8 @@ class Haanga_Compiler_Tokenizer const IN_TAG = 2; const IN_ECHO = 3; + protected $echoFirstToken = false; + function __construct($data, $compiler, $file) { $this->data = $data; @@ -205,6 +208,7 @@ class Haanga_Compiler_Tokenizer break; case HG_Parser::T_PRINT_OPEN: $this->status = self::IN_ECHO; + $this->echoFirstToken = false; break; } return TRUE; @@ -376,14 +380,23 @@ class Haanga_Compiler_Tokenizer if (!$tag) { $tag = Haanga_Extension::getInstance('Tag'); } - $value = $tag->isValid($alpha); - $this->token = $value ? $value : HG_Parser::T_ALPHA; + + if ($this->status == self::IN_ECHO && !$this->echoFirstToken) { + $this->token = HG_Parser::T_ALPHA; + } else { + $value = $tag->isValid($alpha); + $this->token = $value ? $value : HG_Parser::T_ALPHA; + } $this->value = $alpha; } break 2; } } + + if ($this->status == self::IN_ECHO) { + $this->echoFirstToken = true; + } if ($this->token == HG_Parser::T_TAG_CLOSE || $this->token == HG_Parser::T_PRINT_CLOSE) { @@ -545,6 +558,7 @@ class Haanga_Compiler_Tokenizer static function init($template, $compiler, $file='') { $lexer = new Haanga_Compiler_Tokenizer($template, $compiler, $file); + file_put_contents('/var/www/sites/katalogskeivtarkiv/tmp/foo.php', $file . "\n", FILE_APPEND); $parser = new Haanga_Compiler_Parser($lexer, $file); $parser->compiler = $compiler; diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Count.php b/lib/Haanga/lib/Haanga/Extension/Filter/Count.php index 8465c35b2b86143e1afa43b6627be0cf6cd9ece6..01d1bb625cd8610367dce0e8c70b07e6f356555b 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Count.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Count.php @@ -1,6 +1,6 @@ <?php -class Haanga_Extension_Filter_Length +class Haanga_Extension_Filter_Count { public $php_alias = "count"; public $is_safe = TRUE; /* a number if safe */ diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Date.php b/lib/Haanga/lib/Haanga/Extension/Filter/Date.php index b15bdc981df8815d764c2961081f4a638865ee7c..b60b299e17a592dff1ca31d6dd9049961b53848b 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Date.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Date.php @@ -4,8 +4,7 @@ class Haanga_Extension_Filter_Date { static function generator($compiler, $args) { -// return hexec( 'date', $args[1], hexec('strtotime', $args[1])); - return hexec('date', $args[1], hexec('strtotime', $args[0])); + return hexec('date', $args[1], $args[0]); } } diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Decodedescription.php b/lib/Haanga/lib/Haanga/Extension/Filter/Decodedescription.php index 7f9c5cd6cb3d80951af1245b43ea1f23e4d4681c..02a39b2c86e6bffa87bcd35e624743bd7c57af6d 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Decodedescription.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Decodedescription.php @@ -2,20 +2,17 @@ //decodes a any text containing a class Haanga_Extension_Filter_Decodedescription { - static function main($text) { - $allowed_tags ="<u><b><i><strong><br><p><ul><ol><li><iframe><a><img>"; - - $description= strip_tags(html_entity_decode(htmlspecialchars(html_entity_decode($text,ENT_QUOTES,"UTF-8"),ENT_QUOTES,"UTF-8"),ENT_QUOTES,"UTF-8"),$allowed_tags); + static function main($args) { + + $allowed_tags = "<u><b><i><strong><br><p><ul><ol><li><iframe><a><img>"; + + $description = strip_tags(html_entity_decode(htmlspecialchars(html_entity_decode($args,ENT_QUOTES,"UTF-8"),ENT_QUOTES,"UTF-8"),ENT_QUOTES,"UTF-8"),$allowed_tags); - preg_match("/<p(\s[^>]*)?>/i",$description,$matches); - if ($matches) - {} - else - {$description="<p>".$description . "</p>";} - -// public $php_alias = "html_entity_decode"; - // public $is_safe = TRUE; /* a number if safe */ <b> <b;>, < > -> - # return $allowed_tags_regex_strip_not_name; - return $description; -# return htmlspecialchars($allowed_tags_regex); -}} + preg_match("/<p(\s[^>]*)?>/i",$description,$matches); + if ($matches) + {return $description ; } + else + { return "<p>". $description . "</p>"; } + +} +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Divisibleby.php b/lib/Haanga/lib/Haanga/Extension/Filter/Divisibleby.php new file mode 100755 index 0000000000000000000000000000000000000000..fa0bb378847f178142c642f9096c4d8555534a37 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Divisibleby.php @@ -0,0 +1,10 @@ +<?php + +class Haanga_Extension_Filter_Divisibleby +{ + static function main($number, $divisible_by) + { + return ($number % $divisible_by) == 0; + + } +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Explode.php b/lib/Haanga/lib/Haanga/Extension/Filter/Explode.php index 7e6deae3c607a0bf519281e00e71abd01867bc9c..de7561a415756682c83fb043457a74cc3ee420bd 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Explode.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Explode.php @@ -2,12 +2,11 @@ class Haanga_Extension_Filter_Explode { - static function generator($compiler, $args) + public static function generator($compiler, $args) { - if (count($args) != 2) { - $compiler->Error("Explode only needs two parameter"); + if (count($args) == 1 || $args[1] == "") { + return hexec("str_split", $args[0]); } - - return hexec('explode', $args[1], $args[0]); + return hexec("explode", $args[1], $args[0]); } } diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Json.php b/lib/Haanga/lib/Haanga/Extension/Filter/Json.php new file mode 100644 index 0000000000000000000000000000000000000000..3ef6caf866ce20d19e470da371ee36ceead3b30e --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Json.php @@ -0,0 +1,6 @@ +<?php + +class Haanga_Extension_Filter_Json +{ + public $php_alias = "json_encode"; +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Linebreaksbr.php b/lib/Haanga/lib/Haanga/Extension/Filter/Linebreaksbr.php new file mode 100644 index 0000000000000000000000000000000000000000..7be1e83f1a1fa563c93fd4e035ff48ebeb797ac0 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Linebreaksbr.php @@ -0,0 +1,10 @@ +<?php + +class Haanga_Extension_Filter_Linebreaksbr +{ + static function generator($compiler, $args) + { + $compiler->var_is_safe = TRUE; /* we assume that if you use |linebreaksbr, you also want |safe */ + return hexec('preg_replace', "/\r\n|\r|\n/", "<br />\n", $args[0]); + } +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/old-Length.php b/lib/Haanga/lib/Haanga/Extension/Filter/old-Length.php new file mode 100644 index 0000000000000000000000000000000000000000..d0fb526222eff1a0a67b739bfb575686a093a222 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/old-Length.php @@ -0,0 +1,32 @@ +<?php + +class Haanga_Extension_Filter_Length +{ + public $is_safe = TRUE; /* a number if safe */ + static function generator($compiler, $args) + { + $count = hexec('count', $args[0]); + $strlen = hexec('strlen', $args[0]); + $guess = hexpr_cond(hexec('is_array', $args[0]), hexec('count', $args[0]), + hexec('strlen', $args[0])); + + if (Haanga_AST::is_var($args[0])) { + /* if it is a variable, best effort to detect + its type at compile time */ + $value = $compiler->get_context($args[0]['var']); + if (is_array($value)) { + return $count; + } else if (is_string($value)) { + return $strlen; + } else { + return $guess; + } + } + + if (Haanga_AST::is_str($args[0])) { + return $strlen; + } + + return $guess; + } +} diff --git a/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php b/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php index e4390b2940d8ec58f548e081f82cd5e40bdd239c..6fe85a2e14382f861ba149024a1223de3633749d 100644 --- a/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php +++ b/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php @@ -39,7 +39,7 @@ class Haanga_Extension_Tag_Exec $code->decl($assign, $exec); // make it global - $code->decl(hvar('vars', $assign), hvar($assign)); + $code->decl($cmp->getScopeVariable($assign), hvar($assign)); } else { $cmp->do_print($code, $exec); } diff --git a/lib/Haanga/lib/Haanga/Extension/Tag/Inline.php b/lib/Haanga/lib/Haanga/Extension/Tag/Inline.php index 287fd234faa7dec7deec0c15ad9932e7f5e78b3f..aeb593e95a43252961aa219850120be6850b8b64 100644 --- a/lib/Haanga/lib/Haanga/Extension/Tag/Inline.php +++ b/lib/Haanga/lib/Haanga/Extension/Tag/Inline.php @@ -18,7 +18,7 @@ class Haanga_Extension_Tag_Inline $file = $args[0]['string']; if (class_exists('Haanga')) { - $file = Haanga::GetTemplateDir().'/'.$file; + $file = Haanga::getTemplatePath($file); } if (!is_file($file)) { diff --git a/lib/Haanga/lib/Haanga/Extension/Tag/Tryinclude.php b/lib/Haanga/lib/Haanga/Extension/Tag/Tryinclude.php index c4957004c706e6df9f0e4091d9686a69a1a2202e..c7d18057d0342893912b364622f7d5a76742ec38 100644 --- a/lib/Haanga/lib/Haanga/Extension/Tag/Tryinclude.php +++ b/lib/Haanga/lib/Haanga/Extension/Tag/Tryinclude.php @@ -9,7 +9,7 @@ class Haanga_Extension_Tag_Tryinclude } $code = hcode(); - $exec = hexec('Haanga::Safe_Load', $args[0], hvar('vars'), TRUE, array()); + $exec = hexec('Haanga::Safe_Load', $args[0], $cmp->getScopeVariable(), TRUE, array()); $cmp->do_print($code, $exec); diff --git a/lib/Haanga/lib/Haanga/Generator/PHP.php b/lib/Haanga/lib/Haanga/Generator/PHP.php index addf66453d2605377ac8596832211bc31971a80f..09e8a648fcae4dd815fcbbfffd0204e47604cbb8 100644 --- a/lib/Haanga/lib/Haanga/Generator/PHP.php +++ b/lib/Haanga/lib/Haanga/Generator/PHP.php @@ -59,6 +59,7 @@ class Haanga_Generator_PHP { protected $ident; protected $tab = " "; + protected $scopeVariableName; // getCode (AST $op_code) {{{ /** @@ -69,8 +70,9 @@ class Haanga_Generator_PHP * * @return string */ - final function getCode($op_code) + final function getCode($op_code, $scope) { + $this->scopeVariableName = $scope; $this->ident = 0; $code = ""; $size = count($op_code); @@ -195,7 +197,7 @@ class Haanga_Generator_PHP */ function php_function($op) { - $code = "function {$op['name']}(\$vars, \$return=FALSE, \$blocks=array())".$this->ident()."{"; + $code = "function {$op['name']}(\${$this->scopeVariableName}, \$return=FALSE, \$blocks=array())".$this->ident()."{"; $this->ident++; return $code; } @@ -331,7 +333,7 @@ class Haanga_Generator_PHP { $op['array'] = $this->php_get_varname($op['array']); $op['value'] = $this->php_get_varname($op['value']); - $code = "foreach ((array) {$op['array']} as "; + $code = "foreach ({$op['array']} as "; if (!isset($op['key'])) { $code .= " {$op['value']}"; } else { diff --git a/lib/Haanga/lib/Haanga/Loader.php b/lib/Haanga/lib/Haanga/Loader.php new file mode 100644 index 0000000000000000000000000000000000000000..d95d5aa867f5749f0c4f9ff0fdd1654e689fb882 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Loader.php @@ -0,0 +1,133 @@ +<?php +/** + * Autoloader function generated by crodas/Autoloader + * + * https://github.com/crodas/Autoloader + * + * This is a generated file, do not modify it. + */ + +spl_autoload_register(function ($class) { + /* + This array has a map of (class => file) + */ + + // classes {{{ + static $classes = array ( + 'haanga' => '/../Haanga.php', + 'haanga_extension' => '/Extension.php', + 'haanga_exception' => '/Exception.php', + 'haanga_compiler' => '/Compiler.php', + 'hg_parser' => '/Compiler/Tokenizer.php', + 'haanga_compiler_parser' => '/Compiler/Parser.php', + 'haanga_compiler_tokenizer' => '/Compiler/Tokenizer.php', + 'haanga_compiler_runtime' => '/Compiler/Runtime.php', + 'haanga_compiler_exception' => '/Compiler/Exception.php', + 'haanga_yytoken' => '/Compiler/Parser.php', + 'haanga_yystackentry' => '/Compiler/Parser.php', + 'haanga_generator_php' => '/Generator/PHP.php', + 'haanga_extension_filter' => '/Extension/Filter.php', + 'haanga_extension_filter_pluralize' => '/Extension/Filter/Pluralize.php', + 'haanga_extension_filter_count' => '/Extension/Filter/Count.php', + 'haanga_extension_filter_json' => '/Extension/Filter/Json.php', + 'haanga_extension_filter_translation' => '/Extension/Filter/Translation.php', + 'haanga_extension_filter_trans' => '/Extension/Filter/Trans.php', + 'haanga_extension_filter_upper' => '/Extension/Filter/Upper.php', + 'haanga_extension_filter_date' => '/Extension/Filter/Date.php', + 'haanga_extension_filter_empty' => '/Extension/Filter/Empty.php', + 'haanga_extension_filter_reverse' => '/Extension/Filter/Reverse.php', + 'haanga_extension_filter_capfirst' => '/Extension/Filter/Capfirst.php', + 'haanga_extension_filter_exists' => '/Extension/Filter/Exists.php', + 'haanga_extension_filter_intval' => '/Extension/Filter/Intval.php', + 'haanga_extension_filter_null' => '/Extension/Filter/Null.php', + 'haanga_extension_filter_safe' => '/Extension/Filter/Safe.php', + 'haanga_extension_filter_truncatechars' => '/Extension/Filter/Truncatechars.php', + 'haanga_extension_filter_hostname' => '/Extension/Filter/Hostname.php', + 'haanga_extension_filter_length' => '/Extension/Filter/Length.php', + 'haanga_extension_filter_trim' => '/Extension/Filter/Trim.php', + 'haanga_extension_filter_title' => '/Extension/Filter/Title.php', + 'haanga_extension_filter_escape' => '/Extension/Filter/Escape.php', + 'haanga_extension_filter_stringformat' => '/Extension/Filter/Stringformat.php', + 'haanga_extension_filter_join' => '/Extension/Filter/Join.php', + 'haanga_extension_filter_linebreaksbr' => '/Extension/Filter/Linebreaksbr.php', + 'haanga_extension_filter_default' => '/Extension/Filter/Default.php', + 'haanga_extension_filter_dictsort' => '/Extension/Filter/Dictsort.php', + 'haanga_extension_filter_substr' => '/Extension/Filter/Substr.php', + 'haanga_extension_filter_urlencode' => '/Extension/Filter/Urlencode.php', + 'haanga_extension_filter_cut' => '/Extension/Filter/Cut.php', + 'haanga_extension_filter_lower' => '/Extension/Filter/Lower.php', + 'haanga_extension_filter_truncatewords' => '/Extension/Filter/Truncatewords.php', + 'haanga_extension_filter_explode' => '/Extension/Filter/Explode.php', + 'haanga_extension_filter_isarray' => '/Extension/Filter/Isarray.php', + 'haanga_extension_filter_slugify' => '/Extension/Filter/Slugify.php', + 'haanga_extension_filter_decodedescription' => '/Extension/Filter/Decodedescription.php', + 'haanga_extension_filter_deurifier' => '/Extension/Filter/Deurifier.php', + + + 'haanga_extension_tag' => '/Extension/Tag.php', + 'haanga_extension_tag_min' => '/Extension/Tag/Min.php', + 'haanga_extension_tag_upper' => '/Extension/Tag/Upper.php', + 'haanga_extension_tag_tryinclude' => '/Extension/Tag/Tryinclude.php', + 'haanga_extension_tag_setsafe' => '/Extension/Tag/Setsafe.php', + 'haanga_extension_tag_trans' => '/Extension/Tag/Trans.php', + 'haanga_extension_tag_inline' => '/Extension/Tag/Inline.php', + 'haanga_extension_tag_exec' => '/Extension/Tag/Exec.php', + 'haanga_extension_tag_buffer' => '/Extension/Tag/Buffer.php', + 'haanga_extension_tag_currenttime' => '/Extension/Tag/Currenttime.php', + 'haanga_extension_tag_spaceless' => '/Extension/Tag/Spaceless.php', + 'haanga_extension_tag_templatetag' => '/Extension/Tag/Templatetag.php', + 'haanga_extension_tag_cycle' => '/Extension/Tag/Cycle.php', + 'haanga_extension_tag_dictsort' => '/Extension/Tag/Dictsort.php', + 'haanga_extension_tag_firstof' => '/Extension/Tag/Firstof.php', + 'haanga_extension_tag_lower' => '/Extension/Tag/Lower.php', + 'haanga_ast' => '/AST.php', +); + // }}} + + // deps {{{ + static $deps = array ( + 'hg_parser' => + array ( + 0 => 'haanga_compiler_parser', + ), + 'haanga_compiler_runtime' => + array ( + 0 => 'haanga_compiler', + ), + 'haanga_extension_filter' => + array ( + 0 => 'haanga_extension', + ), + 'haanga_extension_filter_translation' => + array ( + 0 => 'haanga_extension_filter_trans', + ), + 'haanga_extension_tag' => + array ( + 0 => 'haanga_extension', + ), +); + // }}} + + $class = strtolower($class); + if (isset($classes[$class])) { + if (!empty($deps[$class])) { + foreach ($deps[$class] as $zclass) { + if (!class_exists($zclass, false)) { + require __DIR__ . $classes[$zclass]; + } + } + } + + if (!class_exists($class, false)) { + + require __DIR__ . $classes[$class]; + + } + return true; + } + + return false; +}); + + diff --git a/utils/install-https b/utils/install-https new file mode 100644 index 0000000000000000000000000000000000000000..a60dd65693bfc7b14d07c5f55e5b2e55b68c6985 --- /dev/null +++ b/utils/install-https @@ -0,0 +1,72 @@ +# +# Installation script for LODSPeaKr (http://lodspeakr.org) +# Author: Alvaro Graves (alvaro@graves.cl) +# Modified by: Tim Lebo (lebot@rpi.edu) +# +# The URL: +# http://lodspeakr.org/install +# 303 redirects to this script. + +lodspeakr_repository="https://github.com/alangrafu/lodspeakr.git" +home=`basename $lodspeakr_repository | sed 's/.git//'` + +source ~/.bashrc +GIT=`which git` + +if [ -z "$GIT" ]; then + echo "git is required to continue installation. Please add git to your \$PATH." + exit 1 +fi + + +_baseurl= +_basens= +_sparqlendpoint= +_chown= +_chmod= +_components= + +options=$@ + +# An array with all the arguments +arguments=($options) + +# Loop index +index=0 + +for argument in $options + do + # Incrementing index + index=`expr $index + 1` + + # The conditions + case $argument in + base-url=*) val=${argument#*=}; + opt=${argument%=$val}; + _baseurl="base-url=${val}" ;; + base-namespace=*) val=${argument#*=}; + opt=${argument%=$val}; + _basens="base-namespace=${val}" ;; + sparql-endpoint=*) val=${argument#*=}; + opt=${argument%=$val}; + _sparqlendpoint="sparql-endpoint=${val}" ;; + chown=*) val=${argument#*=}; + opt=${argument%=$val}; + _chown="chown=${val}" ;; + chmod=*) val=${argument#*=}; + opt=${argument%=$val}; + _chmod="chmod=${val}" ;; + components=*) val=${argument#*=}; + opt=${argument%=$val}; + _components="components=${val}" ;; + esac + done + + +if [ ! -e "$home" ]; then + $GIT clone $lodspeakr_repository + cd $home + ./install.sh $home $_baseurl $_basens $_sparqlendpoint $_chown $_chmod $_components + else + echo "There is already an existing directory called '$home'. Installation cancelled. Remove it first and try again." +fi