diff --git a/classes/BasicSpecialFunction.php b/classes/BasicSpecialFunction.php index 602c7eec8af535d9499aa2971d2c08ad71e45d10..5b5a78f0cd9d6297859883cb200d274ba424650e 100644 --- a/classes/BasicSpecialFunction.php +++ b/classes/BasicSpecialFunction.php @@ -40,27 +40,17 @@ class SpecialFunction extends AbstractSpecialFunction{ try{ $viewFile = $conf['special']['uri'].".".$f.$conf['view']['extension'].".".$extension; $modelFile = $conf['special']['uri'].".".$f.$conf['model']['extension'].".".$extension; - if(!(is_dir($conf['model']['directory'].$modelFile) || is_file($conf['model']['directory'].$modelFile)) || !is_file($conf['view']['directory'].$viewFile)){ - throw new Exception('Method does not exist!'); + if(!(is_dir($conf['model']['directory'].$modelFile) || is_file($conf['model']['directory'].$modelFile))){ + $msg = '<h1>Method does not exist!</h1><br/>This means that <tt>'.$conf['model']['directory'].$modelFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>"; + throw new Exception($msg); + } + if(!is_file($conf['view']['directory'].$viewFile)){ + $msg='<h1>Method does not exist!</h1><br/>This means that <tt>'.$conf['view']['directory'].$viewFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>"; + throw new Exception($msg); } $endpoints = $context['endpoints']; array_pop($params); array_shift($params); - //$query = file_get_contents($conf['model']['directory'].$modelFile); - /*$queryHeader = ""; - $prefixHeader = array(); - for($i=0;$i<sizeof($params);$i++){ - $auxPrefix = Utils::getPrefix($params[$i]); - if($auxPrefix['ns'] != NULL){ - $prefixHeader[$auxPrefix['ns']] = $auxPrefix['prefix']; - } - $query = preg_replace("|%".$i."|", $params[$i], $query); - } - foreach($prefixHeader as $n => $p){ - $queryHeader .= "PREFIX $p: <$n> \n"; - } - $data['query'] =$queryHeader . $query;*/ - //$e->query($data['query'], Utils::getResultsType($query)); $prefixHeader = array(); for($i=0;$i<sizeof($params);$i++){ @@ -81,12 +71,15 @@ class SpecialFunction extends AbstractSpecialFunction{ $data['params'] = $params; $base = $conf['view']['standard']; $base['type'] = $modelFile; + $base['root'] = $conf['root']; + $base['home'] = $conf['basedir']; $base['this']['value'] = $uri; $base['this']['curie'] = Utils::uri2curie($uri); $base['this']['contentType'] = $acceptContentType; $base['model']['directory'] = $conf['model']['directory']; $base['view']['directory'] = $conf['view']['directory']; - $base['ns'] = $conf['ns']; $base['ns'] = $conf['ns']; + $base['ns'] = $conf['ns']; + $base['endpoint'] = $conf['endpoint']; $base['type'] = $modelFile; $base['header'] = $prefixHeader; $base['args'] = $args; @@ -96,8 +89,9 @@ class SpecialFunction extends AbstractSpecialFunction{ $base['view']['directory'] = $conf['home'].$conf['view']['directory']; $base['model']['directory'] = $conf['home'].$conf['model']['directory']; chdir($conf['model']['directory']); - Utils::queryFile($modelFile, $endpoints['local'], $data); - chdir(".."); + $first = array(); + Utils::queryFile($modelFile, $endpoints['local'], $data, $first); + chdir($conf['home']); $data = Utils::internalize($data); if(is_array($data)){ diff --git a/classes/MetaDb.php b/classes/MetaDb.php index 6bed8c9096fdccb8c1a7496d379ebd4d5e230ae8..5cf0d89a8d04cc9a2cd58341c2edf11b09912946 100644 --- a/classes/MetaDb.php +++ b/classes/MetaDb.php @@ -30,13 +30,13 @@ class MetaDb{ global $conf; try{ $db = new PDO('sqlite:'.$this->dbLocation); - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); - - $results = $db->exec($q); + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $results = $db->exec($q); $db = NULL; - }catch(PDOException $e){ - print 'Exception exec: '.$e->getMessage()."\n\n"; - exit(10); + }catch(Exception $e){ + echo "Can't write in SQLite database. Please check you have granted write permissions to <tt>meta/</tt> and <tt>meta/db.sqlite</tt>."; + trigger_error('Exception exec: '.$e->getMessage(), E_USER_ERROR); + exit(1); } return $results; } diff --git a/classes/Utils.php b/classes/Utils.php index e1cb69feb3b0c14a44d1a2e218ac0399c9f792db..2c7581fd54bca5b4accc910fee429ab5075d4802 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -12,7 +12,7 @@ class Utils{ public static function send404($uri){ header("HTTP/1.0 404 Not Found"); - echo "I could not find ".$uri." or information about it.\n\n"; + echo "LODSPeaKr could not find ".$uri." or information about it.\n\n"; exit(0); } @@ -22,9 +22,12 @@ class Utils{ exit(0); } - public static function send500($uri){ + public static function send500($msg = null){ header("HTTP/1.0 500 Internal Server Error"); echo "An internal error ocurred. Please try later\n\n"; + if($msg != null){ + echo $msg; + } exit(0); } @@ -272,7 +275,7 @@ class Utils{ Utils::queryDir($v, $r); } } - chdir(".."); + chdir($conf['home']); //return $data; } diff --git a/common.inc.php b/common.inc.php index 04ac77fa5fa6ccc31bc918f06be5df3aba7e2e47..5f443ea60be8a22eb0b4b75cf1848d00db45594d 100644 --- a/common.inc.php +++ b/common.inc.php @@ -36,7 +36,7 @@ $conf['special']['uri'] = 'special'; $conf['special']['class'] = 'classes/BasicSpecialFunction.php'; //Frontpage when user goes to http://example.org/ -$conf['root'] = 'special/index'; +$conf['root'] = 'index.html'; $conf['extension_connector'] = '.'; //Priority for rdfs:Resource (default). Priorities should be >=0 diff --git a/index.php b/index.php index d0f06e6a185eda0aa323fd53451f8f37432bbf5d..577d3a83e5d78bc7aef666291fefc3da08990317 100755 --- a/index.php +++ b/index.php @@ -128,7 +128,7 @@ chdir($conf['model']['directory']); Utils::queryFile($modelFile, $endpoints['local'], $results, $first); $results = Utils::internalize($results); $base['first'] = Utils::getFirsts($results); -chdir(".."); +chdir($conf['home']); if(is_array($results)){ $resultsObj = Convert::array_to_object($results); }else{ diff --git a/install.sh b/install.sh index b03bd452d7ada372fc2a6c92a2bbbdd09a2ae2fb..fb259b95b3eeea5fddf9563ebffcd62958ec9a0e 100755 --- a/install.sh +++ b/install.sh @@ -27,7 +27,7 @@ while [ "$everything_ok" != "y" ]; do echo echo "LODSPeaKr needs to know three (3) URIs to minimally configure itself:" echo - echo "(1/3) At what URL will `pwd` be available? (e.g. http://localhost/$parent/)" + echo "(1/3) At what URL will `pwd |sed -e 's/lodspeakr$//'` be available? (e.g. http://localhost/$parent/)" echo "**Note** DO NOT include 'lodspeakr/' in the URL" echo -n "(default '$basedir'): " read -u 1 aux_basedir diff --git a/lib/Haanga/LICENSE b/lib/Haanga/LICENSE index 97bf9bbfac53a96c84c42b5675258ed018f03187..f70e9f63bb37f8e2d662309eb31ab5164b7fec88 100644 --- a/lib/Haanga/LICENSE +++ b/lib/Haanga/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010, César D. Rodas <crodas@php.net> and Menéame Comunicacions S.L. +Copyright (c) 2011, César D. Rodas <crodas@php.net> and Menéame Comunicacions S.L. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/lib/Haanga/lib/Haanga/Compiler/Parser.php b/lib/Haanga/lib/Haanga/Compiler/Parser.php index 369fa610dc6fe57d0581f2ba2a67409aeb15e43b..9d16bb5f7e9d5f2be97322ff60ed730ca6bdf014 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Parser.php +++ b/lib/Haanga/lib/Haanga/Compiler/Parser.php @@ -1,99 +1,99 @@ -<?php -/* Driver template for the PHP_Haanga_rGenerator parser generator. (PHP port of LEMON) -*/ - -/** - * This can be used to store both the string representation of - * a token, and any useful meta-data associated with the token. - * - * meta-data should be stored as an array - */ -class Haanga_yyToken implements ArrayAccess -{ - public $string = ''; - public $metadata = array(); - - function __construct($s, $m = array()) - { - if ($s instanceof Haanga_yyToken) { - $this->string = $s->string; - $this->metadata = $s->metadata; - } else { - $this->string = (string) $s; - if ($m instanceof Haanga_yyToken) { - $this->metadata = $m->metadata; - } elseif (is_array($m)) { - $this->metadata = $m; - } - } - } - - function __toString() - { - return $this->_string; - } - - function offsetExists($offset) - { - return isset($this->metadata[$offset]); - } - - function offsetGet($offset) - { - return $this->metadata[$offset]; - } - - function offsetSet($offset, $value) - { - if ($offset === null) { - if (isset($value[0])) { - $x = ($value instanceof Haanga_yyToken) ? - $value->metadata : $value; - $this->metadata = array_merge($this->metadata, $x); - return; - } - $offset = count($this->metadata); - } - if ($value === null) { - return; - } - if ($value instanceof Haanga_yyToken) { - if ($value->metadata) { - $this->metadata[$offset] = $value->metadata; - } - } elseif ($value) { - $this->metadata[$offset] = $value; - } - } - - function offsetUnset($offset) - { - unset($this->metadata[$offset]); - } -} - -/** The following structure represents a single element of the - * parser's stack. Information stored includes: - * - * + The state number for the parser at this level of the stack. - * - * + The value of the token stored at this level of the stack. - * (In other words, the "major" token.) - * - * + The semantic value stored at this level of the stack. This is - * the information used by the action routines in the grammar. - * It is sometimes called the "minor" token. - */ -class Haanga_yyStackEntry -{ - public $stateno; /* The state-number */ - public $major; /* The major token value. This is the code - ** number for the token at this stack level */ - public $minor; /* The user-supplied minor token value. This - ** is the value of the token */ -}; - -// code external to the class is included here +<?php +/* Driver template for the PHP_Haanga_rGenerator parser generator. (PHP port of LEMON) +*/ + +/** + * This can be used to store both the string representation of + * a token, and any useful meta-data associated with the token. + * + * meta-data should be stored as an array + */ +class Haanga_yyToken implements ArrayAccess +{ + public $string = ''; + public $metadata = array(); + + function __construct($s, $m = array()) + { + if ($s instanceof Haanga_yyToken) { + $this->string = $s->string; + $this->metadata = $s->metadata; + } else { + $this->string = (string) $s; + if ($m instanceof Haanga_yyToken) { + $this->metadata = $m->metadata; + } elseif (is_array($m)) { + $this->metadata = $m; + } + } + } + + function __toString() + { + return $this->string; + } + + function offsetExists($offset) + { + return isset($this->metadata[$offset]); + } + + function offsetGet($offset) + { + return $this->metadata[$offset]; + } + + function offsetSet($offset, $value) + { + if ($offset === null) { + if (isset($value[0])) { + $x = ($value instanceof Haanga_yyToken) ? + $value->metadata : $value; + $this->metadata = array_merge($this->metadata, $x); + return; + } + $offset = count($this->metadata); + } + if ($value === null) { + return; + } + if ($value instanceof Haanga_yyToken) { + if ($value->metadata) { + $this->metadata[$offset] = $value->metadata; + } + } elseif ($value) { + $this->metadata[$offset] = $value; + } + } + + function offsetUnset($offset) + { + unset($this->metadata[$offset]); + } +} + +/** The following structure represents a single element of the + * parser's stack. Information stored includes: + * + * + The state number for the parser at this level of the stack. + * + * + The value of the token stored at this level of the stack. + * (In other words, the "major" token.) + * + * + The semantic value stored at this level of the stack. This is + * the information used by the action routines in the grammar. + * It is sometimes called the "minor" token. + */ +class Haanga_yyStackEntry +{ + public $stateno; /* The state-number */ + public $major; /* The major token value. This is the code + ** number for the token at this stack level */ + public $minor; /* The user-supplied minor token value. This + ** is the value of the token */ +}; + +// code external to the class is included here #line 2 "Parser.y" /* @@ -132,13 +132,13 @@ class Haanga_yyStackEntry +---------------------------------------------------------------------------------+ */ #line 136 "Parser.php" - -// declare_class is output here + +// declare_class is output here #line 39 "Parser.y" class Haanga_Compiler_Parser #line 141 "Parser.php" -{ -/* First off, code is included which follows the "include_class" declaration -** in the input file. */ +{ +/* First off, code is included which follows the "include_class" declaration +** in the input file. */ #line 40 "Parser.y" protected $lex; @@ -156,16 +156,16 @@ class Haanga_yyStackEntry } #line 162 "Parser.php" - -/* Next is all token values, as class constants -*/ -/* -** These constants (all generated automatically by the parser generator) -** specify the various kinds of tokens (terminals) that the parser -** understands. -** -** Each symbol here is a terminal symbol in the grammar. -*/ + +/* Next is all token values, as class constants +*/ +/* +** These constants (all generated automatically by the parser generator) +** specify the various kinds of tokens (terminals) that the parser +** understands. +** +** Each symbol here is a terminal symbol in the grammar. +*/ const T_TAG_OPEN = 1; const T_NOT = 2; const T_AND = 3; @@ -224,383 +224,399 @@ class Haanga_yyStackEntry const T_LPARENT = 56; const T_OBJ = 57; const T_DOT = 58; - const T_ALPHA = 59; - const T_CLASS = 60; - const T_BRACKETS_OPEN = 61; - const T_BRACKETS_CLOSE = 62; + 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; - -/* 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 -** functions that take a state number and lookahead value and return an -** action integer. -** -** Suppose the action integer is N. Then the action is determined as -** follows -** -** 0 <= N < self::YYNSTATE Shift N. That is, -** push the lookahead -** token onto the stack -** and goto state N. -** -** self::YYNSTATE <= N < self::YYNSTATE+self::YYNRULE Reduce by rule N-YYNSTATE. -** -** N == self::YYNSTATE+self::YYNRULE A syntax error has occurred. -** -** N == self::YYNSTATE+self::YYNRULE+1 The parser accepts its -** input. (and concludes parsing) -** -** N == self::YYNSTATE+self::YYNRULE+2 No such action. Denotes unused -** slots in the yy_action[] table. -** -** The action table is constructed as a single large static array $yy_action. -** Given state S and lookahead X, the action is computed as -** -** self::$yy_action[self::$yy_shift_ofst[S] + X ] -** -** If the index value self::$yy_shift_ofst[S]+X is out of range or if the value -** self::$yy_lookahead[self::$yy_shift_ofst[S]+X] is not equal to X or if -** self::$yy_shift_ofst[S] is equal to self::YY_SHIFT_USE_DFLT, it means that -** the action is not in the table and that self::$yy_default[S] should be used instead. -** -** The formula above is for computing the action when the lookahead is -** a terminal symbol. If the lookahead is a non-terminal (as occurs after -** a reduce action) then the static $yy_reduce_ofst array is used in place of -** the static $yy_shift_ofst array and self::YY_REDUCE_USE_DFLT is used in place of -** self::YY_SHIFT_USE_DFLT. -** -** The following are the tables generated in this section: -** -** self::$yy_action A single table containing all actions. -** self::$yy_lookahead A table containing the lookahead for each entry in -** yy_action. Used to detect hash collisions. -** self::$yy_shift_ofst For each state, the offset into self::$yy_action for -** shifting terminals. -** self::$yy_reduce_ofst For each state, the offset into self::$yy_action for -** shifting non-terminals after a reduce. -** self::$yy_default Default action for each state. -*/ - const YY_SZ_ACTTAB = 1328; + +/* 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 +** functions that take a state number and lookahead value and return an +** action integer. +** +** Suppose the action integer is N. Then the action is determined as +** follows +** +** 0 <= N < self::YYNSTATE Shift N. That is, +** push the lookahead +** token onto the stack +** and goto state N. +** +** self::YYNSTATE <= N < self::YYNSTATE+self::YYNRULE Reduce by rule N-YYNSTATE. +** +** N == self::YYNSTATE+self::YYNRULE A syntax error has occurred. +** +** N == self::YYNSTATE+self::YYNRULE+1 The parser accepts its +** input. (and concludes parsing) +** +** N == self::YYNSTATE+self::YYNRULE+2 No such action. Denotes unused +** slots in the yy_action[] table. +** +** The action table is constructed as a single large static array $yy_action. +** Given state S and lookahead X, the action is computed as +** +** self::$yy_action[self::$yy_shift_ofst[S] + X ] +** +** If the index value self::$yy_shift_ofst[S]+X is out of range or if the value +** self::$yy_lookahead[self::$yy_shift_ofst[S]+X] is not equal to X or if +** self::$yy_shift_ofst[S] is equal to self::YY_SHIFT_USE_DFLT, it means that +** the action is not in the table and that self::$yy_default[S] should be used instead. +** +** The formula above is for computing the action when the lookahead is +** a terminal symbol. If the lookahead is a non-terminal (as occurs after +** a reduce action) then the static $yy_reduce_ofst array is used in place of +** the static $yy_shift_ofst array and self::YY_REDUCE_USE_DFLT is used in place of +** self::YY_SHIFT_USE_DFLT. +** +** The following are the tables generated in this section: +** +** self::$yy_action A single table containing all actions. +** self::$yy_lookahead A table containing the lookahead for each entry in +** yy_action. Used to detect hash collisions. +** self::$yy_shift_ofst For each state, the offset into self::$yy_action for +** shifting terminals. +** self::$yy_reduce_ofst For each state, the offset into self::$yy_action for +** shifting non-terminals after a reduce. +** self::$yy_default Default action for each state. +*/ + const YY_SZ_ACTTAB = 1402; static public $yy_action = array( - /* 0 */ 47, 57, 49, 65, 152, 39, 194, 40, 172, 64, - /* 10 */ 59, 195, 93, 67, 233, 155, 212, 29, 153, 41, - /* 20 */ 37, 36, 56, 53, 55, 47, 57, 49, 65, 177, - /* 30 */ 39, 247, 40, 172, 64, 59, 57, 93, 67, 25, - /* 40 */ 25, 178, 29, 202, 41, 37, 36, 56, 53, 55, - /* 50 */ 47, 161, 49, 65, 165, 39, 248, 40, 172, 64, - /* 60 */ 59, 224, 93, 67, 242, 126, 238, 29, 162, 41, - /* 70 */ 37, 36, 56, 53, 55, 47, 231, 49, 65, 182, - /* 80 */ 39, 97, 40, 172, 64, 59, 253, 93, 67, 109, - /* 90 */ 128, 201, 29, 189, 41, 37, 36, 56, 53, 55, - /* 100 */ 47, 231, 49, 65, 187, 39, 107, 40, 172, 64, - /* 110 */ 59, 204, 93, 67, 215, 124, 251, 29, 183, 41, - /* 120 */ 37, 36, 56, 53, 55, 47, 231, 49, 65, 169, - /* 130 */ 39, 191, 40, 172, 64, 59, 237, 93, 67, 196, - /* 140 */ 139, 111, 29, 171, 41, 37, 36, 56, 53, 55, - /* 150 */ 47, 231, 49, 65, 158, 39, 199, 40, 172, 64, - /* 160 */ 59, 57, 93, 67, 108, 127, 104, 29, 95, 41, - /* 170 */ 37, 36, 56, 53, 55, 47, 231, 49, 65, 151, - /* 180 */ 39, 197, 40, 172, 64, 59, 57, 93, 67, 106, - /* 190 */ 135, 193, 29, 239, 41, 37, 36, 56, 53, 55, - /* 200 */ 47, 231, 49, 65, 92, 39, 100, 40, 172, 64, - /* 210 */ 59, 244, 93, 67, 210, 125, 110, 29, 115, 41, - /* 220 */ 37, 36, 56, 53, 55, 47, 231, 49, 65, 160, - /* 230 */ 39, 243, 40, 172, 64, 59, 236, 93, 67, 252, - /* 240 */ 130, 209, 29, 50, 41, 37, 36, 56, 53, 55, - /* 250 */ 47, 231, 49, 65, 184, 39, 229, 40, 172, 64, - /* 260 */ 59, 246, 93, 67, 102, 131, 225, 29, 232, 41, - /* 270 */ 37, 36, 56, 53, 55, 47, 231, 49, 65, 173, - /* 280 */ 39, 241, 40, 172, 64, 59, 83, 93, 67, 88, - /* 290 */ 133, 87, 29, 179, 41, 37, 36, 56, 53, 55, - /* 300 */ 47, 231, 49, 65, 188, 39, 184, 40, 172, 64, - /* 310 */ 59, 90, 93, 67, 89, 129, 85, 29, 184, 41, - /* 320 */ 37, 36, 56, 53, 55, 47, 231, 49, 65, 168, - /* 330 */ 39, 84, 40, 172, 64, 59, 86, 93, 67, 355, - /* 340 */ 78, 79, 29, 184, 41, 37, 36, 56, 53, 55, - /* 350 */ 47, 76, 49, 65, 170, 39, 81, 40, 172, 64, - /* 360 */ 59, 74, 93, 67, 75, 71, 77, 29, 184, 41, - /* 370 */ 37, 36, 56, 53, 55, 47, 80, 49, 65, 181, - /* 380 */ 39, 73, 40, 172, 64, 59, 184, 93, 67, 82, - /* 390 */ 72, 70, 29, 184, 41, 37, 36, 56, 53, 55, - /* 400 */ 47, 91, 49, 65, 58, 39, 69, 40, 172, 64, - /* 410 */ 59, 184, 93, 67, 184, 184, 184, 29, 184, 41, - /* 420 */ 37, 36, 56, 53, 55, 47, 184, 49, 65, 185, - /* 430 */ 39, 184, 40, 172, 64, 59, 184, 93, 67, 184, - /* 440 */ 184, 184, 29, 184, 41, 37, 36, 56, 53, 55, - /* 450 */ 47, 184, 49, 65, 149, 39, 184, 40, 172, 64, - /* 460 */ 59, 184, 93, 67, 184, 184, 184, 29, 184, 41, - /* 470 */ 37, 36, 56, 53, 55, 47, 184, 49, 65, 175, - /* 480 */ 39, 184, 40, 172, 64, 59, 184, 93, 67, 184, - /* 490 */ 184, 184, 29, 57, 41, 37, 36, 56, 53, 55, - /* 500 */ 30, 31, 32, 32, 32, 32, 32, 32, 32, 27, - /* 510 */ 27, 27, 26, 26, 26, 25, 25, 26, 26, 26, - /* 520 */ 25, 25, 113, 47, 66, 49, 65, 156, 39, 184, - /* 530 */ 40, 172, 64, 59, 184, 93, 67, 184, 184, 184, - /* 540 */ 29, 184, 41, 37, 36, 56, 53, 55, 47, 184, - /* 550 */ 49, 65, 180, 39, 184, 40, 172, 64, 59, 184, - /* 560 */ 93, 67, 184, 184, 184, 29, 184, 41, 37, 36, - /* 570 */ 56, 53, 55, 30, 31, 32, 32, 32, 32, 32, - /* 580 */ 32, 32, 27, 27, 27, 26, 26, 26, 25, 25, - /* 590 */ 47, 184, 49, 65, 132, 39, 184, 40, 172, 64, - /* 600 */ 59, 184, 93, 67, 257, 231, 143, 29, 45, 41, - /* 610 */ 37, 36, 56, 53, 55, 140, 140, 123, 141, 48, - /* 620 */ 184, 351, 184, 148, 164, 250, 198, 263, 231, 30, - /* 630 */ 31, 32, 32, 32, 32, 32, 32, 32, 27, 27, - /* 640 */ 27, 26, 26, 26, 25, 25, 31, 32, 32, 32, - /* 650 */ 32, 32, 32, 32, 27, 27, 27, 26, 26, 26, - /* 660 */ 25, 25, 32, 32, 32, 32, 32, 32, 32, 27, - /* 670 */ 27, 27, 26, 26, 26, 25, 25, 167, 245, 223, - /* 680 */ 45, 223, 220, 184, 220, 174, 184, 140, 140, 234, - /* 690 */ 141, 48, 144, 220, 61, 220, 132, 28, 122, 220, - /* 700 */ 259, 15, 46, 132, 249, 262, 263, 231, 167, 223, - /* 710 */ 220, 94, 230, 263, 231, 227, 227, 233, 155, 184, - /* 720 */ 203, 200, 54, 230, 220, 51, 220, 226, 219, 184, - /* 730 */ 154, 208, 207, 205, 206, 211, 217, 218, 216, 147, - /* 740 */ 167, 220, 240, 4, 96, 184, 261, 261, 233, 155, - /* 750 */ 132, 24, 213, 184, 230, 184, 220, 62, 220, 219, - /* 760 */ 263, 231, 203, 200, 54, 184, 264, 184, 184, 184, - /* 770 */ 184, 167, 184, 220, 254, 184, 184, 184, 227, 227, - /* 780 */ 233, 155, 184, 99, 138, 42, 230, 220, 228, 220, - /* 790 */ 184, 219, 184, 222, 167, 231, 46, 112, 140, 140, - /* 800 */ 184, 141, 48, 167, 220, 174, 190, 184, 184, 227, - /* 810 */ 227, 233, 155, 184, 184, 98, 132, 230, 116, 220, - /* 820 */ 259, 220, 219, 105, 249, 262, 263, 231, 46, 140, - /* 830 */ 140, 184, 141, 48, 184, 167, 220, 184, 184, 184, - /* 840 */ 184, 227, 227, 233, 155, 219, 184, 101, 184, 230, - /* 850 */ 174, 220, 184, 220, 219, 140, 140, 184, 141, 48, - /* 860 */ 221, 132, 221, 117, 167, 259, 184, 167, 220, 249, - /* 870 */ 262, 263, 231, 227, 227, 233, 155, 254, 184, 103, - /* 880 */ 220, 230, 220, 220, 184, 220, 219, 138, 43, 184, - /* 890 */ 221, 228, 184, 167, 63, 184, 222, 220, 231, 220, - /* 900 */ 220, 220, 184, 184, 184, 227, 227, 233, 155, 220, - /* 910 */ 230, 220, 184, 230, 235, 219, 220, 184, 219, 167, - /* 920 */ 184, 140, 140, 184, 141, 48, 220, 134, 184, 230, - /* 930 */ 184, 227, 227, 233, 155, 220, 176, 220, 231, 230, - /* 940 */ 184, 184, 184, 184, 219, 184, 140, 140, 184, 141, - /* 950 */ 48, 184, 220, 184, 184, 137, 174, 261, 261, 233, - /* 960 */ 155, 184, 192, 184, 198, 230, 231, 132, 13, 260, - /* 970 */ 219, 259, 254, 184, 184, 249, 262, 263, 231, 174, - /* 980 */ 184, 184, 138, 44, 22, 142, 228, 203, 200, 54, - /* 990 */ 132, 222, 121, 231, 259, 184, 132, 174, 249, 262, - /* 1000 */ 263, 231, 9, 203, 200, 54, 263, 231, 132, 184, - /* 1010 */ 118, 184, 259, 184, 184, 174, 249, 262, 263, 231, - /* 1020 */ 184, 203, 200, 54, 38, 184, 132, 174, 145, 184, - /* 1030 */ 259, 184, 184, 184, 249, 262, 263, 231, 132, 184, - /* 1040 */ 120, 174, 259, 184, 184, 184, 249, 262, 263, 231, - /* 1050 */ 184, 68, 132, 184, 119, 184, 259, 184, 184, 184, - /* 1060 */ 249, 262, 263, 231, 184, 174, 33, 184, 184, 184, - /* 1070 */ 140, 140, 184, 141, 48, 184, 132, 184, 136, 174, - /* 1080 */ 259, 184, 184, 184, 249, 262, 263, 231, 140, 140, - /* 1090 */ 132, 141, 48, 146, 259, 184, 184, 174, 163, 262, - /* 1100 */ 263, 231, 52, 184, 132, 60, 184, 184, 132, 174, - /* 1110 */ 184, 184, 259, 184, 263, 231, 35, 262, 263, 231, - /* 1120 */ 132, 184, 184, 174, 259, 114, 184, 184, 186, 262, - /* 1130 */ 263, 231, 140, 140, 132, 141, 48, 184, 259, 184, - /* 1140 */ 184, 184, 34, 262, 263, 231, 214, 184, 140, 140, - /* 1150 */ 184, 141, 48, 184, 184, 184, 159, 140, 140, 184, - /* 1160 */ 141, 48, 184, 184, 184, 184, 138, 184, 184, 184, - /* 1170 */ 228, 184, 184, 166, 256, 222, 184, 231, 140, 140, - /* 1180 */ 184, 141, 48, 138, 138, 184, 21, 228, 228, 258, - /* 1190 */ 255, 184, 222, 222, 231, 231, 184, 184, 184, 138, - /* 1200 */ 138, 184, 150, 228, 228, 203, 200, 54, 222, 222, - /* 1210 */ 231, 231, 138, 3, 184, 137, 228, 184, 20, 184, - /* 1220 */ 184, 222, 157, 231, 198, 23, 231, 184, 184, 184, - /* 1230 */ 184, 184, 203, 200, 54, 18, 184, 203, 200, 54, - /* 1240 */ 11, 184, 184, 184, 203, 200, 54, 1, 140, 140, - /* 1250 */ 184, 141, 48, 2, 203, 200, 54, 17, 184, 203, - /* 1260 */ 200, 54, 10, 184, 184, 184, 203, 200, 54, 14, - /* 1270 */ 184, 184, 203, 200, 54, 5, 203, 200, 54, 16, - /* 1280 */ 184, 203, 200, 54, 6, 184, 184, 184, 203, 200, - /* 1290 */ 54, 19, 184, 184, 203, 200, 54, 7, 203, 200, - /* 1300 */ 54, 12, 184, 203, 200, 54, 8, 184, 184, 184, - /* 1310 */ 203, 200, 54, 184, 184, 184, 203, 200, 54, 184, - /* 1320 */ 203, 200, 54, 184, 184, 203, 200, 54, + /* 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, ); static public $yy_lookahead = array( /* 0 */ 24, 18, 26, 27, 28, 29, 23, 31, 32, 33, - /* 10 */ 34, 25, 36, 37, 53, 54, 25, 41, 42, 43, - /* 20 */ 44, 45, 46, 47, 48, 24, 18, 26, 27, 28, - /* 30 */ 29, 25, 31, 32, 33, 34, 18, 36, 37, 18, - /* 40 */ 19, 40, 41, 25, 43, 44, 45, 46, 47, 48, - /* 50 */ 24, 53, 26, 27, 28, 29, 25, 31, 32, 33, - /* 60 */ 34, 25, 36, 37, 25, 81, 25, 41, 42, 43, - /* 70 */ 44, 45, 46, 47, 48, 24, 92, 26, 27, 28, + /* 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 */ 81, 25, 41, 42, 43, 44, 45, 46, 47, 48, - /* 100 */ 24, 92, 26, 27, 28, 29, 25, 31, 32, 33, - /* 110 */ 34, 25, 36, 37, 25, 81, 25, 41, 42, 43, - /* 120 */ 44, 45, 46, 47, 48, 24, 92, 26, 27, 28, + /* 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 */ 81, 25, 41, 42, 43, 44, 45, 46, 47, 48, - /* 150 */ 24, 92, 26, 27, 28, 29, 25, 31, 32, 33, - /* 160 */ 34, 18, 36, 37, 25, 81, 25, 41, 25, 43, - /* 170 */ 44, 45, 46, 47, 48, 24, 92, 26, 27, 28, - /* 180 */ 29, 25, 31, 32, 33, 34, 18, 36, 37, 25, - /* 190 */ 81, 25, 41, 25, 43, 44, 45, 46, 47, 48, - /* 200 */ 24, 92, 26, 27, 28, 29, 25, 31, 32, 33, - /* 210 */ 34, 25, 36, 37, 25, 81, 25, 41, 25, 43, - /* 220 */ 44, 45, 46, 47, 48, 24, 92, 26, 27, 28, - /* 230 */ 29, 25, 31, 32, 33, 34, 25, 36, 37, 25, - /* 240 */ 81, 64, 41, 63, 43, 44, 45, 46, 47, 48, - /* 250 */ 24, 92, 26, 27, 28, 29, 62, 31, 32, 33, - /* 260 */ 34, 25, 36, 37, 25, 81, 68, 41, 55, 43, - /* 270 */ 44, 45, 46, 47, 48, 24, 92, 26, 27, 28, - /* 280 */ 29, 85, 31, 32, 33, 34, 67, 36, 37, 67, - /* 290 */ 81, 67, 41, 90, 43, 44, 45, 46, 47, 48, - /* 300 */ 24, 92, 26, 27, 28, 29, 93, 31, 32, 33, - /* 310 */ 34, 67, 36, 37, 67, 81, 67, 41, 93, 43, - /* 320 */ 44, 45, 46, 47, 48, 24, 92, 26, 27, 28, - /* 330 */ 29, 67, 31, 32, 33, 34, 67, 36, 37, 66, - /* 340 */ 67, 67, 41, 93, 43, 44, 45, 46, 47, 48, + /* 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, 93, 43, + /* 360 */ 34, 67, 36, 37, 67, 67, 67, 41, 94, 43, /* 370 */ 44, 45, 46, 47, 48, 24, 67, 26, 27, 28, - /* 380 */ 29, 67, 31, 32, 33, 34, 93, 36, 37, 67, - /* 390 */ 67, 67, 41, 93, 43, 44, 45, 46, 47, 48, - /* 400 */ 24, 67, 26, 27, 28, 29, 67, 31, 32, 33, - /* 410 */ 34, 93, 36, 37, 93, 93, 93, 41, 93, 43, - /* 420 */ 44, 45, 46, 47, 48, 24, 93, 26, 27, 28, - /* 430 */ 29, 93, 31, 32, 33, 34, 93, 36, 37, 93, - /* 440 */ 93, 93, 41, 93, 43, 44, 45, 46, 47, 48, - /* 450 */ 24, 93, 26, 27, 28, 29, 93, 31, 32, 33, - /* 460 */ 34, 93, 36, 37, 93, 93, 93, 41, 93, 43, - /* 470 */ 44, 45, 46, 47, 48, 24, 93, 26, 27, 28, - /* 480 */ 29, 93, 31, 32, 33, 34, 93, 36, 37, 93, - /* 490 */ 93, 93, 41, 18, 43, 44, 45, 46, 47, 48, - /* 500 */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - /* 510 */ 13, 14, 15, 16, 17, 18, 19, 15, 16, 17, - /* 520 */ 18, 19, 25, 24, 49, 26, 27, 28, 29, 93, - /* 530 */ 31, 32, 33, 34, 93, 36, 37, 93, 93, 93, - /* 540 */ 41, 93, 43, 44, 45, 46, 47, 48, 24, 93, - /* 550 */ 26, 27, 28, 29, 93, 31, 32, 33, 34, 93, - /* 560 */ 36, 37, 93, 93, 93, 41, 93, 43, 44, 45, - /* 570 */ 46, 47, 48, 3, 4, 5, 6, 7, 8, 9, - /* 580 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - /* 590 */ 24, 93, 26, 27, 81, 29, 93, 31, 32, 33, - /* 600 */ 34, 93, 36, 37, 91, 92, 70, 41, 50, 43, - /* 610 */ 44, 45, 46, 47, 48, 57, 58, 81, 60, 61, - /* 620 */ 93, 63, 93, 87, 88, 55, 90, 91, 92, 3, - /* 630 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - /* 640 */ 14, 15, 16, 17, 18, 19, 4, 5, 6, 7, - /* 650 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - /* 660 */ 18, 19, 5, 6, 7, 8, 9, 10, 11, 12, - /* 670 */ 13, 14, 15, 16, 17, 18, 19, 13, 25, 29, - /* 680 */ 50, 31, 29, 93, 31, 70, 93, 57, 58, 25, - /* 690 */ 60, 61, 70, 29, 30, 31, 81, 2, 83, 46, - /* 700 */ 85, 1, 38, 81, 89, 90, 91, 92, 13, 59, - /* 710 */ 46, 25, 59, 91, 92, 51, 52, 53, 54, 93, - /* 720 */ 20, 21, 22, 59, 29, 39, 31, 69, 64, 93, - /* 730 */ 72, 73, 74, 75, 76, 77, 78, 79, 80, 70, - /* 740 */ 13, 46, 84, 1, 86, 93, 51, 52, 53, 54, - /* 750 */ 81, 56, 25, 93, 59, 93, 29, 30, 31, 64, - /* 760 */ 91, 92, 20, 21, 22, 93, 25, 93, 93, 93, - /* 770 */ 93, 13, 93, 46, 71, 93, 93, 93, 51, 52, - /* 780 */ 53, 54, 93, 25, 81, 82, 59, 29, 85, 31, - /* 790 */ 93, 64, 93, 90, 13, 92, 38, 25, 57, 58, - /* 800 */ 93, 60, 61, 13, 46, 70, 25, 93, 93, 51, - /* 810 */ 52, 53, 54, 93, 93, 25, 81, 59, 83, 29, - /* 820 */ 85, 31, 64, 25, 89, 90, 91, 92, 38, 57, - /* 830 */ 58, 93, 60, 61, 93, 13, 46, 93, 93, 93, - /* 840 */ 93, 51, 52, 53, 54, 64, 93, 25, 93, 59, - /* 850 */ 70, 29, 93, 31, 64, 57, 58, 93, 60, 61, - /* 860 */ 29, 81, 31, 83, 13, 85, 93, 13, 46, 89, - /* 870 */ 90, 91, 92, 51, 52, 53, 54, 71, 93, 25, - /* 880 */ 29, 59, 31, 29, 93, 31, 64, 81, 82, 93, - /* 890 */ 59, 85, 93, 13, 30, 93, 90, 46, 92, 29, - /* 900 */ 46, 31, 93, 93, 93, 51, 52, 53, 54, 29, - /* 910 */ 59, 31, 93, 59, 25, 64, 46, 93, 64, 13, - /* 920 */ 93, 57, 58, 93, 60, 61, 46, 81, 93, 59, - /* 930 */ 93, 51, 52, 53, 54, 29, 90, 31, 92, 59, - /* 940 */ 93, 93, 93, 93, 64, 93, 57, 58, 93, 60, - /* 950 */ 61, 93, 46, 93, 93, 81, 70, 51, 52, 53, - /* 960 */ 54, 93, 88, 93, 90, 59, 92, 81, 1, 83, - /* 970 */ 64, 85, 71, 93, 93, 89, 90, 91, 92, 70, - /* 980 */ 93, 93, 81, 82, 1, 70, 85, 20, 21, 22, - /* 990 */ 81, 90, 83, 92, 85, 93, 81, 70, 89, 90, - /* 1000 */ 91, 92, 1, 20, 21, 22, 91, 92, 81, 93, - /* 1010 */ 83, 93, 85, 93, 93, 70, 89, 90, 91, 92, - /* 1020 */ 93, 20, 21, 22, 11, 93, 81, 70, 83, 93, - /* 1030 */ 85, 93, 93, 93, 89, 90, 91, 92, 81, 93, - /* 1040 */ 83, 70, 85, 93, 93, 93, 89, 90, 91, 92, - /* 1050 */ 93, 38, 81, 93, 83, 93, 85, 93, 93, 93, - /* 1060 */ 89, 90, 91, 92, 93, 70, 35, 93, 93, 93, - /* 1070 */ 57, 58, 93, 60, 61, 93, 81, 93, 83, 70, - /* 1080 */ 85, 93, 93, 93, 89, 90, 91, 92, 57, 58, - /* 1090 */ 81, 60, 61, 70, 85, 93, 93, 70, 89, 90, - /* 1100 */ 91, 92, 11, 93, 81, 30, 93, 93, 81, 70, - /* 1110 */ 93, 93, 85, 93, 91, 92, 89, 90, 91, 92, - /* 1120 */ 81, 93, 93, 70, 85, 25, 93, 93, 89, 90, - /* 1130 */ 91, 92, 57, 58, 81, 60, 61, 93, 85, 93, - /* 1140 */ 93, 93, 89, 90, 91, 92, 25, 93, 57, 58, - /* 1150 */ 93, 60, 61, 93, 93, 93, 71, 57, 58, 93, - /* 1160 */ 60, 61, 93, 93, 93, 93, 81, 93, 93, 93, - /* 1170 */ 85, 93, 93, 71, 71, 90, 93, 92, 57, 58, - /* 1180 */ 93, 60, 61, 81, 81, 93, 1, 85, 85, 71, - /* 1190 */ 71, 93, 90, 90, 92, 92, 93, 93, 93, 81, - /* 1200 */ 81, 93, 71, 85, 85, 20, 21, 22, 90, 90, - /* 1210 */ 92, 92, 81, 1, 93, 81, 85, 93, 1, 93, - /* 1220 */ 93, 90, 88, 92, 90, 1, 92, 93, 93, 93, - /* 1230 */ 93, 93, 20, 21, 22, 1, 93, 20, 21, 22, - /* 1240 */ 1, 93, 93, 93, 20, 21, 22, 1, 57, 58, - /* 1250 */ 93, 60, 61, 1, 20, 21, 22, 1, 93, 20, - /* 1260 */ 21, 22, 1, 93, 93, 93, 20, 21, 22, 1, - /* 1270 */ 93, 93, 20, 21, 22, 1, 20, 21, 22, 1, - /* 1280 */ 93, 20, 21, 22, 1, 93, 93, 93, 20, 21, - /* 1290 */ 22, 1, 93, 93, 20, 21, 22, 1, 20, 21, - /* 1300 */ 22, 1, 93, 20, 21, 22, 1, 93, 93, 93, - /* 1310 */ 20, 21, 22, 93, 93, 93, 20, 21, 22, 93, - /* 1320 */ 20, 21, 22, 93, 93, 20, 21, 22, + /* 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, ); - const YY_SHIFT_USE_DFLT = -40; - const YY_SHIFT_MAX = 189; + const YY_SHIFT_USE_DFLT = -25; + const YY_SHIFT_MAX = 187; static public $yy_shift_ofst = array( - /* 0 */ -40, 101, 51, -24, 76, 1, 26, 451, 499, 524, - /* 10 */ 351, 426, 201, 226, 176, 151, 126, 276, 376, 326, - /* 20 */ 401, 301, 251, 566, 695, 695, 695, 695, 695, 695, - /* 30 */ 695, 695, 695, 695, 906, 906, 906, 906, 851, 727, - /* 40 */ 822, 854, 664, 758, 790, 880, 880, 880, 880, 880, - /* 50 */ 851, 851, 870, 870, 870, 870, 851, 870, 653, 870, - /* 60 */ 870, 870, 870, 870, 870, 870, 870, 870, 870, 1296, - /* 70 */ 1283, 1278, 1274, 1290, 1305, 1300, 967, 1234, 1224, 1239, - /* 80 */ 1246, 1256, 1217, 1212, 742, 700, 983, 1252, 1185, 1001, - /* 90 */ 1261, 1268, 781, -39, -40, -40, -40, -40, -40, -40, - /* 100 */ -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, - /* 110 */ -40, -40, -40, -40, -40, -40, 570, 497, 626, 626, - /* 120 */ 642, 657, 657, 558, 1013, 1100, 798, 1031, 889, 1075, - /* 130 */ 1121, 1091, 630, 864, 772, 741, 502, 1191, 1191, 1191, - /* 140 */ 650, 831, -17, 168, 143, 21, 475, 18, 686, 6, - /* 150 */ -9, -14, 31, 239, 189, -2, 186, 181, 156, 36, - /* 160 */ 166, 213, 191, 193, 180, 236, 194, 177, 206, 211, - /* 170 */ 214, 139, 64, 61, 8, 41, 56, 86, 116, 114, - /* 180 */ 111, 91, 106, 164, 89, 131, 81, 39, 66, 141, + /* 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, ); - const YY_REDUCE_USE_DFLT = -17; - const YY_REDUCE_MAX = 115; + const YY_REDUCE_USE_DFLT = -68; + const YY_REDUCE_MAX = 117; static public $yy_reduce_ofst = array( - /* 0 */ 273, 658, 658, 658, 658, 658, 658, 658, 658, 658, - /* 10 */ 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, - /* 20 */ 658, 658, 658, 658, 735, 886, 945, 995, 927, 780, - /* 30 */ 957, 909, 615, 971, 1039, 1009, 1027, 1053, 536, 703, - /* 40 */ 901, 806, 1119, 1119, 1119, 1118, 1103, 1085, 1102, 1131, - /* 50 */ 874, 1134, 669, 622, 915, 1023, 846, 513, 109, 84, - /* 60 */ 59, 9, 159, 134, 209, -16, 234, 34, 184, 198, - /* 70 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - /* 80 */ 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - /* 90 */ 198, 198, 203, 196, 322, 298, 323, 334, 297, 224, - /* 100 */ 249, 269, 274, 264, 289, 284, 222, 219, 247, 244, - /* 110 */ 294, 339, 299, 309, 314, 324, + /* 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, ); 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, 41, 42, 43, 44, 45, 46, 47, 48, ), - /* 5 */ array(24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37, 40, 41, 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, ), @@ -619,53 +635,53 @@ static public $yy_action = array( /* 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, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 25 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 26 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 27 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 28 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 29 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 30 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 31 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 32 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 33 */ array(2, 13, 29, 31, 46, 51, 52, 53, 54, 56, 59, 64, ), - /* 34 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 35 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 36 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 37 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 38 */ array(13, 29, 31, 46, 59, 64, ), - /* 39 */ array(13, 25, 29, 30, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 40 */ array(13, 25, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 41 */ array(13, 25, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 42 */ array(13, 25, 29, 30, 31, 38, 46, 51, 52, 53, 54, 59, 64, ), - /* 43 */ array(13, 25, 29, 31, 38, 46, 51, 52, 53, 54, 59, 64, ), - /* 44 */ array(13, 25, 29, 31, 38, 46, 51, 52, 53, 54, 59, 64, ), - /* 45 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 46 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 47 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 48 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 49 */ array(13, 29, 31, 46, 51, 52, 53, 54, 59, 64, ), - /* 50 */ array(13, 29, 31, 46, 59, 64, ), - /* 51 */ array(13, 29, 31, 46, 59, 64, ), - /* 52 */ array(29, 31, 46, 59, ), - /* 53 */ array(29, 31, 46, 59, ), - /* 54 */ array(29, 31, 46, 59, ), - /* 55 */ array(29, 31, 46, 59, ), - /* 56 */ array(13, 29, 31, 46, 59, 64, ), - /* 57 */ array(29, 31, 46, 59, ), - /* 58 */ array(25, 29, 31, 46, 59, ), - /* 59 */ array(29, 31, 46, 59, ), - /* 60 */ array(29, 31, 46, 59, ), - /* 61 */ array(29, 31, 46, 59, ), - /* 62 */ array(29, 31, 46, 59, ), - /* 63 */ array(29, 31, 46, 59, ), - /* 64 */ array(29, 31, 46, 59, ), - /* 65 */ array(29, 31, 46, 59, ), - /* 66 */ array(29, 31, 46, 59, ), - /* 67 */ array(29, 31, 46, 59, ), - /* 68 */ array(29, 31, 46, 59, ), - /* 69 */ array(1, 20, 21, 22, ), - /* 70 */ array(1, 20, 21, 22, ), + /* 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, ), @@ -687,10 +703,10 @@ static public $yy_action = array( /* 89 */ array(1, 20, 21, 22, ), /* 90 */ array(1, 20, 21, 22, ), /* 91 */ array(1, 20, 21, 22, ), - /* 92 */ array(13, 25, 64, ), - /* 93 */ array(53, 54, ), - /* 94 */ array(), - /* 95 */ array(), + /* 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(), @@ -711,66 +727,66 @@ static public $yy_action = array( /* 113 */ array(), /* 114 */ array(), /* 115 */ array(), - /* 116 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 55, ), - /* 117 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 25, ), - /* 118 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 119 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 120 */ array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 121 */ array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 122 */ array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ), - /* 123 */ array(50, 57, 58, 60, 61, 63, ), - /* 124 */ array(11, 38, 57, 58, 60, 61, ), - /* 125 */ array(25, 57, 58, 60, 61, ), - /* 126 */ array(25, 57, 58, 60, 61, ), - /* 127 */ array(35, 57, 58, 60, 61, ), - /* 128 */ array(25, 57, 58, 60, 61, ), - /* 129 */ array(30, 57, 58, 60, 61, ), - /* 130 */ array(25, 57, 58, 60, 61, ), - /* 131 */ array(11, 57, 58, 60, 61, ), - /* 132 */ array(50, 57, 58, 60, 61, ), - /* 133 */ array(30, 57, 58, 60, 61, ), - /* 134 */ array(25, 57, 58, 60, 61, ), - /* 135 */ array(25, 57, 58, 60, 61, ), - /* 136 */ array(15, 16, 17, 18, 19, ), - /* 137 */ array(57, 58, 60, 61, ), - /* 138 */ array(57, 58, 60, 61, ), - /* 139 */ array(57, 58, 60, 61, ), - /* 140 */ array(29, 31, 59, ), - /* 141 */ array(29, 31, 59, ), - /* 142 */ array(18, 23, ), - /* 143 */ array(18, 25, ), - /* 144 */ array(18, 25, ), - /* 145 */ array(18, 19, ), - /* 146 */ array(18, 49, ), - /* 147 */ array(18, 25, ), - /* 148 */ array(25, 39, ), + /* 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(25, ), + /* 150 */ array(53, ), /* 151 */ array(25, ), /* 152 */ array(25, ), /* 153 */ array(25, ), - /* 154 */ array(25, ), - /* 155 */ array(53, ), - /* 156 */ array(25, ), + /* 154 */ array(55, ), + /* 155 */ array(25, ), + /* 156 */ array(63, ), /* 157 */ array(25, ), /* 158 */ array(25, ), - /* 159 */ array(25, ), + /* 159 */ array(61, ), /* 160 */ array(25, ), - /* 161 */ array(55, ), - /* 162 */ array(25, ), + /* 161 */ array(64, ), + /* 162 */ array(30, ), /* 163 */ array(25, ), - /* 164 */ array(63, ), + /* 164 */ array(25, ), /* 165 */ array(25, ), - /* 166 */ array(62, ), - /* 167 */ array(64, ), - /* 168 */ array(25, ), - /* 169 */ array(25, ), - /* 170 */ 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(18, ), - /* 175 */ array(25, ), + /* 174 */ array(25, ), + /* 175 */ array(50, ), /* 176 */ array(25, ), /* 177 */ array(25, ), /* 178 */ array(25, ), @@ -783,8 +799,8 @@ static public $yy_action = array( /* 185 */ array(25, ), /* 186 */ array(25, ), /* 187 */ array(25, ), - /* 188 */ array(25, ), - /* 189 */ array(25, ), + /* 188 */ array(), + /* 189 */ array(), /* 190 */ array(), /* 191 */ array(), /* 192 */ array(), @@ -869,128 +885,128 @@ static public $yy_action = array( /* 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, 265, 354, - /* 80 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 90 */ 354, 354, 354, 354, 267, 267, 267, 267, 267, 267, + /* 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, 354, 354, 334, 292, - /* 120 */ 335, 336, 338, 320, 354, 354, 354, 354, 354, 354, - /* 130 */ 354, 354, 320, 354, 354, 354, 337, 351, 324, 316, - /* 140 */ 354, 354, 354, 354, 354, 339, 354, 354, 354, 354, + /* 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 */ 354, 354, 354, 354, 328, 354, 354, 354, 354, 354, - /* 180 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, - /* 190 */ 313, 304, 349, 289, 271, 299, 314, 315, 350, 298, - /* 200 */ 270, 306, 296, 269, 297, 276, 277, 275, 274, 353, + /* 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 */ 348, 345, 325, 344, 272, 266, 268, 326, 327, 346, - /* 230 */ 347, 343, 333, 332, 286, 287, 301, 302, 300, 295, + /* 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, ); -/* The next thing included is series of defines which control -** various aspects of the generated parser. -** self::YYNOCODE is a number which corresponds -** to no legal terminal or nonterminal number. This -** number is used to fill in empty slots of the hash -** table. -** self::YYFALLBACK If defined, this indicates that one or more tokens -** have fall-back values which should be used if the -** original value of the token will not parse. -** self::YYSTACKDEPTH is the maximum depth of the parser's stack. -** self::YYNSTATE the combined number of states. -** self::YYNRULE the number of rules in the grammar -** self::YYERRORSYMBOL is the code number of the error symbol. If not -** defined, then do no error processing. -*/ - const YYNOCODE = 94; +/* The next thing included is series of defines which control +** various aspects of the generated parser. +** self::YYNOCODE is a number which corresponds +** to no legal terminal or nonterminal number. This +** number is used to fill in empty slots of the hash +** table. +** self::YYFALLBACK If defined, this indicates that one or more tokens +** have fall-back values which should be used if the +** original value of the token will not parse. +** self::YYSTACKDEPTH is the maximum depth of the parser's stack. +** self::YYNSTATE the combined number of states. +** self::YYNRULE the number of rules in the grammar +** self::YYERRORSYMBOL is the code number of the error symbol. If not +** defined, then do no error processing. +*/ + const YYNOCODE = 95; const YYSTACKDEPTH = 100; const YYNSTATE = 265; const YYNRULE = 89; const YYERRORSYMBOL = 65; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; - /** The next table maps tokens into fallback tokens. If a construct - * like the following: - * - * %fallback ID X Y Z. - * - * appears in the grammer, then ID becomes a fallback token for X, Y, - * and Z. Whenever one of the tokens X, Y, or Z is input to the parser - * but it does not parse, the type of the token is changed to ID and - * the parse is retried before an error is thrown. - */ - static public $yyFallback = array( - ); - /** - * Turn parser tracing on by giving a stream to which to write the trace - * and a prompt to preface each trace message. Tracing is turned off - * by making either argument NULL - * - * Inputs: - * - * - A stream resource to which trace output should be written. - * If NULL, then tracing is turned off. - * - A prefix string written at the beginning of every - * line of trace output. If NULL, then tracing is - * turned off. - * - * Outputs: - * - * - None. - * @param resource - * @param string - */ - static function Trace($TraceFILE, $zTracePrompt) - { - if (!$TraceFILE) { - $zTracePrompt = 0; - } elseif (!$zTracePrompt) { - $TraceFILE = 0; - } - self::$yyTraceFILE = $TraceFILE; - self::$yyTracePrompt = $zTracePrompt; - } - - /** - * Output debug information to output (php://output stream) - */ - static function PrintTrace() - { - self::$yyTraceFILE = fopen('php://output', 'w'); - self::$yyTracePrompt = ''; - } - - /** - * @var resource|0 - */ - static public $yyTraceFILE; - /** - * String to prepend to debug output - * @var string|0 - */ - static public $yyTracePrompt; - /** - * @var int - */ - public $yyidx; /* Index of top element in stack */ - /** - * @var int - */ - public $yyerrcnt; /* Shifts left before out of the error */ - /** - * @var array - */ - public $yystack = array(); /* The parser's stack */ - - /** - * For tracing shifts, the names of all terminals and nonterminals - * are required. The following table supplies these names - * @var array - */ - static public $yyTokenName = array( + /** The next table maps tokens into fallback tokens. If a construct + * like the following: + * + * %fallback ID X Y Z. + * + * appears in the grammer, then ID becomes a fallback token for X, Y, + * and Z. Whenever one of the tokens X, Y, or Z is input to the parser + * but it does not parse, the type of the token is changed to ID and + * the parse is retried before an error is thrown. + */ + static public $yyFallback = array( + ); + /** + * Turn parser tracing on by giving a stream to which to write the trace + * and a prompt to preface each trace message. Tracing is turned off + * by making either argument NULL + * + * Inputs: + * + * - A stream resource to which trace output should be written. + * If NULL, then tracing is turned off. + * - A prefix string written at the beginning of every + * line of trace output. If NULL, then tracing is + * turned off. + * + * Outputs: + * + * - None. + * @param resource + * @param string + */ + static function Trace($TraceFILE, $zTracePrompt) + { + if (!$TraceFILE) { + $zTracePrompt = 0; + } elseif (!$zTracePrompt) { + $TraceFILE = 0; + } + self::$yyTraceFILE = $TraceFILE; + self::$yyTracePrompt = $zTracePrompt; + } + + /** + * Output debug information to output (php://output stream) + */ + static function PrintTrace() + { + self::$yyTraceFILE = fopen('php://output', 'w'); + self::$yyTracePrompt = ''; + } + + /** + * @var resource|0 + */ + static public $yyTraceFILE; + /** + * String to prepend to debug output + * @var string|0 + */ + static public $yyTracePrompt; + /** + * @var int + */ + public $yyidx = -1; /* Index of top element in stack */ + /** + * @var int + */ + public $yyerrcnt; /* Shifts left before out of the error */ + /** + * @var array + */ + public $yystack = array(); /* The parser's stack */ + + /** + * For tracing shifts, the names of all terminals and nonterminals + * are required. The following table supplies these names + * @var 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', @@ -1005,8 +1021,8 @@ static public $yy_action = array( '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_ALPHA', - 'T_CLASS', 'T_BRACKETS_OPEN', 'T_BRACKETS_CLOSE', 'T_DOTDOT', + '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', @@ -1014,14 +1030,14 @@ static public $yy_action = array( 'ifequal', 'varname', 'params', 'expr', 'regroup', 'string', 'for_def', 'range', 'numvar', 'fvar_or_string', 'number', 'varname_args', - 'varpart', - ); - - /** - * For tracing reduce actions, the names of all rules are required. - * @var array - */ - static public $yyRuleName = array( + 'varpart', 'varpart_single', + ); + + /** + * For tracing reduce actions, the names of all rules are required. + * @var array + */ + static public $yyRuleName = array( /* 0 */ "start ::= body", /* 1 */ "body ::= body code", /* 2 */ "body ::=", @@ -1101,380 +1117,380 @@ static public $yy_action = array( /* 76 */ "expr ::= T_LPARENT expr T_RPARENT", /* 77 */ "expr ::= fvar_or_string", /* 78 */ "varname ::= varpart", - /* 79 */ "varpart ::= varname T_OBJ|T_DOT T_ALPHA|T_CUSTOM_TAG|T_CUSTOM_BLOCK", - /* 80 */ "varpart ::= varname T_CLASS T_ALPHA|T_CUSTOM_TAG|T_CUSTOM_BLOCK", - /* 81 */ "varpart ::= varname T_BRACKETS_OPEN var_or_string T_BRACKETS_CLOSE", - /* 82 */ "varpart ::= T_ALPHA", - /* 83 */ "varpart ::= T_BLOCK|T_CUSTOM_TAG|T_CUSTOM_BLOCK", + /* 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", - ); - - /** - * This function returns the symbolic name associated with a token - * value. - * @param int - * @return string - */ - function tokenName($tokenType) - { - if ($tokenType === 0) { - return 'End of Input'; - } - if ($tokenType > 0 && $tokenType < count(self::$yyTokenName)) { - return self::$yyTokenName[$tokenType]; - } else { - return "Unknown"; - } - } - - /** - * The following function deletes the value associated with a - * symbol. The symbol can be either a terminal or nonterminal. - * @param int the symbol code - * @param mixed the symbol's value - */ - static function yy_destructor($yymajor, $yypminor) - { - switch ($yymajor) { - /* Here is inserted the actions which take place when a - ** terminal or non-terminal is destroyed. This can happen - ** when the symbol is popped from the stack during a - ** reduce or during error processing or when a parser is - ** being destroyed before it is finished parsing. - ** - ** Note: during a reduce, the only symbols destroyed are those - ** which appear on the RHS of the rule, but which are not used - ** inside the C code. - */ - default: break; /* If no destructor action specified: do nothing */ - } - } - - /** - * Pop the parser's stack once. - * - * If there is a destructor routine associated with the token which - * is popped from the stack, then call it. - * - * Return the major token number for the symbol popped. - * @param Haanga_yyParser - * @return int - */ - function yy_pop_parser_stack() - { - if (!count($this->yystack)) { - return; - } - $yytos = array_pop($this->yystack); - if (self::$yyTraceFILE && $this->yyidx >= 0) { - fwrite(self::$yyTraceFILE, - self::$yyTracePrompt . 'Popping ' . self::$yyTokenName[$yytos->major] . - "\n"); - } - $yymajor = $yytos->major; - self::yy_destructor($yymajor, $yytos->minor); - $this->yyidx--; - return $yymajor; - } - - /** - * Deallocate and destroy a parser. Destructors are all called for - * all stack elements before shutting the parser down. - */ - function __destruct() - { - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - if (is_resource(self::$yyTraceFILE)) { - fclose(self::$yyTraceFILE); - } - } - - /** - * Based on the current state and parser stack, get a list of all - * possible lookahead tokens - * @param int - * @return array - */ - function yy_get_expected_tokens($token) - { - $state = $this->yystack[$this->yyidx]->stateno; - $expected = self::$yyExpectedTokens[$state]; - if (in_array($token, self::$yyExpectedTokens[$state], true)) { - return $expected; - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return array_unique($expected); - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs']; - $nextstate = $this->yy_find_reduce_action( - $this->yystack[$this->yyidx]->stateno, - self::$yyRuleInfo[$yyruleno]['lhs']); - if (isset(self::$yyExpectedTokens[$nextstate])) { - $expected += self::$yyExpectedTokens[$nextstate]; - if (in_array($token, - self::$yyExpectedTokens[$nextstate], true)) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return array_unique($expected); - } - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx++; - $x = new Haanga_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno]['lhs']; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return array_unique($expected); - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return $expected; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - return array_unique($expected); - } - - /** - * Based on the parser state and current parser stack, determine whether - * the lookahead token is possible. - * - * The parser will convert the token value to an error token if not. This - * catches some unusual edge cases where the parser would fail. - * @param int - * @return bool - */ - function yy_is_expected_token($token) - { - if ($token === 0) { - return true; // 0 is not part of this - } - $state = $this->yystack[$this->yyidx]->stateno; - if (in_array($token, self::$yyExpectedTokens[$state], true)) { - return true; - } - $stack = $this->yystack; - $yyidx = $this->yyidx; - do { - $yyact = $this->yy_find_shift_action($token); - if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { - // reduce action - $done = 0; - do { - if ($done++ == 100) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // too much recursion prevents proper detection - // so give up - return true; - } - $yyruleno = $yyact - self::YYNSTATE; - $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs']; - $nextstate = $this->yy_find_reduce_action( - $this->yystack[$this->yyidx]->stateno, - self::$yyRuleInfo[$yyruleno]['lhs']); - if (isset(self::$yyExpectedTokens[$nextstate]) && - in_array($token, self::$yyExpectedTokens[$nextstate], true)) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - return true; - } - if ($nextstate < self::YYNSTATE) { - // we need to shift a non-terminal - $this->yyidx++; - $x = new Haanga_yyStackEntry; - $x->stateno = $nextstate; - $x->major = self::$yyRuleInfo[$yyruleno]['lhs']; - $this->yystack[$this->yyidx] = $x; - continue 2; - } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - if (!$token) { - // end of input: this is valid - return true; - } - // the last token was just ignored, we can't accept - // by ignoring input, this is in essence ignoring a - // syntax error! - return false; - } elseif ($nextstate === self::YY_NO_ACTION) { - $this->yyidx = $yyidx; - $this->yystack = $stack; - // input accepted, but not shifted (I guess) - return true; - } else { - $yyact = $nextstate; - } - } while (true); - } - break; - } while (true); - $this->yyidx = $yyidx; - $this->yystack = $stack; - return true; - } - - /** - * Find the appropriate action for a parser given the terminal - * look-ahead token iLookAhead. - * - * If the look-ahead token is YYNOCODE, then check to see if the action is - * independent of the look-ahead. If it is, return the action, otherwise - * return YY_NO_ACTION. - * @param int The look-ahead token - */ - function yy_find_shift_action($iLookAhead) - { - $stateno = $this->yystack[$this->yyidx]->stateno; - - /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ - if (!isset(self::$yy_shift_ofst[$stateno])) { - // no shift actions - return self::$yy_default[$stateno]; - } - $i = self::$yy_shift_ofst[$stateno]; - if ($i === self::YY_SHIFT_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || - self::$yy_lookahead[$i] != $iLookAhead) { - if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) - && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { - if (self::$yyTraceFILE) { - fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " . - self::$yyTokenName[$iLookAhead] . " => " . - self::$yyTokenName[$iFallback] . "\n"); - } - return $this->yy_find_shift_action($iFallback); - } - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - /** - * Find the appropriate action for a parser given the non-terminal - * look-ahead token $iLookAhead. - * - * If the look-ahead token is self::YYNOCODE, then check to see if the action is - * independent of the look-ahead. If it is, return the action, otherwise - * return self::YY_NO_ACTION. - * @param int Current state number - * @param int The look-ahead token - */ - function yy_find_reduce_action($stateno, $iLookAhead) - { - /* $stateno = $this->yystack[$this->yyidx]->stateno; */ - - if (!isset(self::$yy_reduce_ofst[$stateno])) { - return self::$yy_default[$stateno]; - } - $i = self::$yy_reduce_ofst[$stateno]; - if ($i == self::YY_REDUCE_USE_DFLT) { - return self::$yy_default[$stateno]; - } - if ($iLookAhead == self::YYNOCODE) { - return self::YY_NO_ACTION; - } - $i += $iLookAhead; - if ($i < 0 || $i >= self::YY_SZ_ACTTAB || - self::$yy_lookahead[$i] != $iLookAhead) { - return self::$yy_default[$stateno]; - } else { - return self::$yy_action[$i]; - } - } - - /** - * Perform a shift action. - * @param int The new state to shift in - * @param int The major token to shift in - * @param mixed the minor token to shift in - */ - function yy_shift($yyNewState, $yyMajor, $yypMinor) - { - $this->yyidx++; - if ($this->yyidx >= self::YYSTACKDEPTH) { - $this->yyidx--; - if (self::$yyTraceFILE) { - fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - /* Here code is inserted which will execute if the parser - ** stack ever overflows */ - return; - } - $yytos = new Haanga_yyStackEntry; - $yytos->stateno = $yyNewState; - $yytos->major = $yyMajor; - $yytos->minor = $yypMinor; - array_push($this->yystack, $yytos); - if (self::$yyTraceFILE && $this->yyidx > 0) { - fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt, - $yyNewState); - fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt); - for($i = 1; $i <= $this->yyidx; $i++) { - fprintf(self::$yyTraceFILE, " %s", - self::$yyTokenName[$this->yystack[$i]->major]); - } - fwrite(self::$yyTraceFILE,"\n"); - } - } - - /** - * The following table contains information about every rule that - * is used during the reduce. - * - * <pre> - * array( - * array( - * int $lhs; Symbol on the left-hand side of the rule - * int $nrhs; Number of right-hand side symbols in the rule - * ),... - * ); - * </pre> - */ - static public $yyRuleInfo = array( + ); + + /** + * This function returns the symbolic name associated with a token + * value. + * @param int + * @return string + */ + function tokenName($tokenType) + { + if ($tokenType === 0) { + return 'End of Input'; + } + if ($tokenType > 0 && $tokenType < count(self::$yyTokenName)) { + return self::$yyTokenName[$tokenType]; + } else { + return "Unknown"; + } + } + + /** + * The following function deletes the value associated with a + * symbol. The symbol can be either a terminal or nonterminal. + * @param int the symbol code + * @param mixed the symbol's value + */ + static function yy_destructor($yymajor, $yypminor) + { + switch ($yymajor) { + /* Here is inserted the actions which take place when a + ** terminal or non-terminal is destroyed. This can happen + ** when the symbol is popped from the stack during a + ** reduce or during error processing or when a parser is + ** being destroyed before it is finished parsing. + ** + ** Note: during a reduce, the only symbols destroyed are those + ** which appear on the RHS of the rule, but which are not used + ** inside the C code. + */ + default: break; /* If no destructor action specified: do nothing */ + } + } + + /** + * Pop the parser's stack once. + * + * If there is a destructor routine associated with the token which + * is popped from the stack, then call it. + * + * Return the major token number for the symbol popped. + * @param Haanga_yyParser + * @return int + */ + function yy_pop_parser_stack() + { + if (!count($this->yystack)) { + return; + } + $yytos = array_pop($this->yystack); + if (self::$yyTraceFILE && $this->yyidx >= 0) { + fwrite(self::$yyTraceFILE, + self::$yyTracePrompt . 'Popping ' . self::$yyTokenName[$yytos->major] . + "\n"); + } + $yymajor = $yytos->major; + self::yy_destructor($yymajor, $yytos->minor); + $this->yyidx--; + return $yymajor; + } + + /** + * Deallocate and destroy a parser. Destructors are all called for + * all stack elements before shutting the parser down. + */ + function __destruct() + { + while ($this->yyidx >= 0) { + $this->yy_pop_parser_stack(); + } + if (is_resource(self::$yyTraceFILE)) { + fclose(self::$yyTraceFILE); + } + } + + /** + * Based on the current state and parser stack, get a list of all + * possible lookahead tokens + * @param int + * @return array + */ + function yy_get_expected_tokens($token) + { + $state = $this->yystack[$this->yyidx]->stateno; + $expected = self::$yyExpectedTokens[$state]; + if (in_array($token, self::$yyExpectedTokens[$state], true)) { + return $expected; + } + $stack = $this->yystack; + $yyidx = $this->yyidx; + do { + $yyact = $this->yy_find_shift_action($token); + if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { + // reduce action + $done = 0; + do { + if ($done++ == 100) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + // too much recursion prevents proper detection + // so give up + return array_unique($expected); + } + $yyruleno = $yyact - self::YYNSTATE; + $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs']; + $nextstate = $this->yy_find_reduce_action( + $this->yystack[$this->yyidx]->stateno, + self::$yyRuleInfo[$yyruleno]['lhs']); + if (isset(self::$yyExpectedTokens[$nextstate])) { + $expected += self::$yyExpectedTokens[$nextstate]; + if (in_array($token, + self::$yyExpectedTokens[$nextstate], true)) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + return array_unique($expected); + } + } + if ($nextstate < self::YYNSTATE) { + // we need to shift a non-terminal + $this->yyidx++; + $x = new Haanga_yyStackEntry; + $x->stateno = $nextstate; + $x->major = self::$yyRuleInfo[$yyruleno]['lhs']; + $this->yystack[$this->yyidx] = $x; + continue 2; + } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + // the last token was just ignored, we can't accept + // by ignoring input, this is in essence ignoring a + // syntax error! + return array_unique($expected); + } elseif ($nextstate === self::YY_NO_ACTION) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + // input accepted, but not shifted (I guess) + return $expected; + } else { + $yyact = $nextstate; + } + } while (true); + } + break; + } while (true); + return array_unique($expected); + } + + /** + * Based on the parser state and current parser stack, determine whether + * the lookahead token is possible. + * + * The parser will convert the token value to an error token if not. This + * catches some unusual edge cases where the parser would fail. + * @param int + * @return bool + */ + function yy_is_expected_token($token) + { + if ($token === 0) { + return true; // 0 is not part of this + } + $state = $this->yystack[$this->yyidx]->stateno; + if (in_array($token, self::$yyExpectedTokens[$state], true)) { + return true; + } + $stack = $this->yystack; + $yyidx = $this->yyidx; + do { + $yyact = $this->yy_find_shift_action($token); + if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { + // reduce action + $done = 0; + do { + if ($done++ == 100) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + // too much recursion prevents proper detection + // so give up + return true; + } + $yyruleno = $yyact - self::YYNSTATE; + $this->yyidx -= self::$yyRuleInfo[$yyruleno]['rhs']; + $nextstate = $this->yy_find_reduce_action( + $this->yystack[$this->yyidx]->stateno, + self::$yyRuleInfo[$yyruleno]['lhs']); + if (isset(self::$yyExpectedTokens[$nextstate]) && + in_array($token, self::$yyExpectedTokens[$nextstate], true)) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + return true; + } + if ($nextstate < self::YYNSTATE) { + // we need to shift a non-terminal + $this->yyidx++; + $x = new Haanga_yyStackEntry; + $x->stateno = $nextstate; + $x->major = self::$yyRuleInfo[$yyruleno]['lhs']; + $this->yystack[$this->yyidx] = $x; + continue 2; + } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + if (!$token) { + // end of input: this is valid + return true; + } + // the last token was just ignored, we can't accept + // by ignoring input, this is in essence ignoring a + // syntax error! + return false; + } elseif ($nextstate === self::YY_NO_ACTION) { + $this->yyidx = $yyidx; + $this->yystack = $stack; + // input accepted, but not shifted (I guess) + return true; + } else { + $yyact = $nextstate; + } + } while (true); + } + break; + } while (true); + $this->yyidx = $yyidx; + $this->yystack = $stack; + return true; + } + + /** + * Find the appropriate action for a parser given the terminal + * look-ahead token iLookAhead. + * + * If the look-ahead token is YYNOCODE, then check to see if the action is + * independent of the look-ahead. If it is, return the action, otherwise + * return YY_NO_ACTION. + * @param int The look-ahead token + */ + function yy_find_shift_action($iLookAhead) + { + $stateno = $this->yystack[$this->yyidx]->stateno; + + /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ + if (!isset(self::$yy_shift_ofst[$stateno])) { + // no shift actions + return self::$yy_default[$stateno]; + } + $i = self::$yy_shift_ofst[$stateno]; + if ($i === self::YY_SHIFT_USE_DFLT) { + return self::$yy_default[$stateno]; + } + if ($iLookAhead == self::YYNOCODE) { + return self::YY_NO_ACTION; + } + $i += $iLookAhead; + if ($i < 0 || $i >= self::YY_SZ_ACTTAB || + self::$yy_lookahead[$i] != $iLookAhead) { + if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) + && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { + if (self::$yyTraceFILE) { + fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " . + self::$yyTokenName[$iLookAhead] . " => " . + self::$yyTokenName[$iFallback] . "\n"); + } + return $this->yy_find_shift_action($iFallback); + } + return self::$yy_default[$stateno]; + } else { + return self::$yy_action[$i]; + } + } + + /** + * Find the appropriate action for a parser given the non-terminal + * look-ahead token $iLookAhead. + * + * If the look-ahead token is self::YYNOCODE, then check to see if the action is + * independent of the look-ahead. If it is, return the action, otherwise + * return self::YY_NO_ACTION. + * @param int Current state number + * @param int The look-ahead token + */ + function yy_find_reduce_action($stateno, $iLookAhead) + { + /* $stateno = $this->yystack[$this->yyidx]->stateno; */ + + if (!isset(self::$yy_reduce_ofst[$stateno])) { + return self::$yy_default[$stateno]; + } + $i = self::$yy_reduce_ofst[$stateno]; + if ($i == self::YY_REDUCE_USE_DFLT) { + return self::$yy_default[$stateno]; + } + if ($iLookAhead == self::YYNOCODE) { + return self::YY_NO_ACTION; + } + $i += $iLookAhead; + if ($i < 0 || $i >= self::YY_SZ_ACTTAB || + self::$yy_lookahead[$i] != $iLookAhead) { + return self::$yy_default[$stateno]; + } else { + return self::$yy_action[$i]; + } + } + + /** + * Perform a shift action. + * @param int The new state to shift in + * @param int The major token to shift in + * @param mixed the minor token to shift in + */ + function yy_shift($yyNewState, $yyMajor, $yypMinor) + { + $this->yyidx++; + if ($this->yyidx >= self::YYSTACKDEPTH) { + $this->yyidx--; + if (self::$yyTraceFILE) { + fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt); + } + while ($this->yyidx >= 0) { + $this->yy_pop_parser_stack(); + } + /* Here code is inserted which will execute if the parser + ** stack ever overflows */ + return; + } + $yytos = new Haanga_yyStackEntry; + $yytos->stateno = $yyNewState; + $yytos->major = $yyMajor; + $yytos->minor = $yypMinor; + array_push($this->yystack, $yytos); + if (self::$yyTraceFILE && $this->yyidx > 0) { + fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt, + $yyNewState); + fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt); + for ($i = 1; $i <= $this->yyidx; $i++) { + fprintf(self::$yyTraceFILE, " %s", + self::$yyTokenName[$this->yystack[$i]->major]); + } + fwrite(self::$yyTraceFILE,"\n"); + } + } + + /** + * The following table contains information about every rule that + * is used during the reduce. + * + * <pre> + * array( + * array( + * int $lhs; Symbol on the left-hand side of the rule + * int $nrhs; Number of right-hand side symbols in the rule + * ),... + * ); + * </pre> + */ + static public $yyRuleInfo = array( array( 'lhs' => 66, 'rhs' => 1 ), array( 'lhs' => 67, 'rhs' => 2 ), array( 'lhs' => 67, 'rhs' => 0 ), @@ -1558,21 +1574,21 @@ static public $yy_action = array( array( 'lhs' => 92, 'rhs' => 3 ), array( 'lhs' => 92, 'rhs' => 4 ), array( 'lhs' => 92, 'rhs' => 1 ), - 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' => 90, 'rhs' => 1 ), array( 'lhs' => 90, 'rhs' => 2 ), - ); - - /** - * The following table contains a mapping of reduce action to method name - * that handles the reduction. - * - * If a rule is not set, it has no handler. - */ - static public $yyReduceMap = array( + ); + + /** + * The following table contains a mapping of reduce action to method name + * that handles the reduction. + * + * If a rule is not set, it has no handler. + */ + static public $yyReduceMap = array( 0 => 0, 1 => 1, 2 => 2, @@ -1662,53 +1678,53 @@ static public $yy_action = array( 81 => 81, 84 => 84, 88 => 88, - ); - /* Beginning here are the reduction cases. A typical example - ** follows: - ** #line <lineno> <grammarfile> - ** function yy_r0($yymsp){ ... } // User supplied code - ** #line <lineno> <thisfile> - */ + ); + /* Beginning here are the reduction cases. A typical example + ** follows: + ** #line <lineno> <grammarfile> + ** function yy_r0($yymsp){ ... } // User supplied code + ** #line <lineno> <thisfile> + */ #line 80 "Parser.y" function yy_r0(){ $this->body = $this->yystack[$this->yyidx + 0]->minor; } -#line 1680 "Parser.php" +#line 1696 "Parser.php" #line 82 "Parser.y" function yy_r1(){ $this->_retvalue=$this->yystack[$this->yyidx + -1]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1683 "Parser.php" +#line 1699 "Parser.php" #line 83 "Parser.y" function yy_r2(){ $this->_retvalue = array(); } -#line 1686 "Parser.php" +#line 1702 "Parser.php" #line 86 "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 1689 "Parser.php" -#line 87 "Parser.y" +#line 1705 "Parser.php" +#line 88 "Parser.y" function yy_r4(){ $this->_retvalue = array('operation' => 'html', 'html' => $this->yystack[$this->yyidx + 0]->minor, 'line' => $this->lex->getLine() ); } -#line 1694 "Parser.php" -#line 90 "Parser.y" +#line 1710 "Parser.php" +#line 92 "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 1699 "Parser.php" -#line 93 "Parser.y" +#line 1715 "Parser.php" +#line 96 "Parser.y" function yy_r6(){ $this->_retvalue = array('operation' => 'print_var', 'variable' => $this->yystack[$this->yyidx + -1]->minor, 'line' => $this->lex->getLine() ); } -#line 1704 "Parser.php" -#line 97 "Parser.y" +#line 1720 "Parser.php" +#line 100 "Parser.y" function yy_r7(){ $this->_retvalue = array('operation' => 'base', $this->yystack[$this->yyidx + -1]->minor); } -#line 1707 "Parser.php" -#line 98 "Parser.y" +#line 1723 "Parser.php" +#line 101 "Parser.y" function yy_r8(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1710 "Parser.php" -#line 99 "Parser.y" +#line 1726 "Parser.php" +#line 102 "Parser.y" function yy_r9(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1713 "Parser.php" -#line 104 "Parser.y" +#line 1729 "Parser.php" +#line 107 "Parser.y" function yy_r14(){ $this->_retvalue = array('operation' => 'include', $this->yystack[$this->yyidx + -1]->minor); } -#line 1716 "Parser.php" -#line 108 "Parser.y" +#line 1732 "Parser.php" +#line 111 "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') { @@ -1719,71 +1735,71 @@ 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 1728 "Parser.php" -#line 122 "Parser.y" +#line 1744 "Parser.php" +#line 125 "Parser.y" function yy_r19(){ $this->_retvalue = array('operation' => 'custom_tag', 'name' => $this->yystack[$this->yyidx + -1]->minor, 'list'=>array()); } -#line 1733 "Parser.php" -#line 125 "Parser.y" +#line 1749 "Parser.php" +#line 128 "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 1738 "Parser.php" -#line 128 "Parser.y" +#line 1754 "Parser.php" +#line 131 "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 1743 "Parser.php" -#line 131 "Parser.y" +#line 1759 "Parser.php" +#line 134 "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 1748 "Parser.php" -#line 136 "Parser.y" +#line 1764 "Parser.php" +#line 139 "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 1756 "Parser.php" -#line 142 "Parser.y" +#line 1772 "Parser.php" +#line 145 "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 1764 "Parser.php" -#line 150 "Parser.y" +#line 1780 "Parser.php" +#line 153 "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 1772 "Parser.php" -#line 158 "Parser.y" +#line 1788 "Parser.php" +#line 161 "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 1780 "Parser.php" -#line 166 "Parser.y" +#line 1796 "Parser.php" +#line 169 "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 1783 "Parser.php" -#line 168 "Parser.y" +#line 1799 "Parser.php" +#line 171 "Parser.y" function yy_r29(){ 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 1791 "Parser.php" -#line 177 "Parser.y" +#line 1807 "Parser.php" +#line 180 "Parser.y" function yy_r30(){ $var = $this->compiler->get_context($this->yystack[$this->yyidx + -1]->minor[0]); if (is_array($var) || $var instanceof Iterator) { @@ -1792,8 +1808,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 1801 "Parser.php" -#line 185 "Parser.y" +#line 1817 "Parser.php" +#line 188 "Parser.y" function yy_r31(){ $var = $this->compiler->get_context($this->yystack[$this->yyidx + -1]->minor[0]); if (is_array($var) || $var instanceof Iterator) { @@ -1803,8 +1819,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 1812 "Parser.php" -#line 195 "Parser.y" +#line 1828 "Parser.php" +#line 198 "Parser.y" function yy_r32(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfor") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfor"); @@ -1812,24 +1828,24 @@ static public $yy_action = array( $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor; $this->_retvalue['body'] = $this->yystack[$this->yyidx + -3]->minor; } -#line 1821 "Parser.php" -#line 203 "Parser.y" +#line 1837 "Parser.php" +#line 206 "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 1829 "Parser.php" -#line 210 "Parser.y" +#line 1845 "Parser.php" +#line 213 "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 1837 "Parser.php" -#line 217 "Parser.y" +#line 1853 "Parser.php" +#line 220 "Parser.y" function yy_r35(){ if ($this->yystack[$this->yyidx + -1]->minor != "endfor") { $this->Error("Unexpected ".$this->yystack[$this->yyidx + -1]->minor.", expecting endfor"); @@ -1838,462 +1854,476 @@ static public $yy_action = array( $this->_retvalue['body'] = $this->yystack[$this->yyidx + -7]->minor; $this->_retvalue['empty'] = $this->yystack[$this->yyidx + -3]->minor; } -#line 1847 "Parser.php" -#line 226 "Parser.y" +#line 1863 "Parser.php" +#line 229 "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 1855 "Parser.php" -#line 232 "Parser.y" +#line 1871 "Parser.php" +#line 235 "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 1863 "Parser.php" -#line 240 "Parser.y" +#line 1879 "Parser.php" +#line 243 "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 1871 "Parser.php" -#line 247 "Parser.y" +#line 1887 "Parser.php" +#line 250 "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 1879 "Parser.php" -#line 253 "Parser.y" +#line 1895 "Parser.php" +#line 256 "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 1887 "Parser.php" -#line 260 "Parser.y" +#line 1903 "Parser.php" +#line 263 "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 1895 "Parser.php" -#line 268 "Parser.y" +#line 1911 "Parser.php" +#line 271 "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 1903 "Parser.php" -#line 274 "Parser.y" +#line 1919 "Parser.php" +#line 277 "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 1911 "Parser.php" -#line 280 "Parser.y" +#line 1927 "Parser.php" +#line 283 "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 1919 "Parser.php" -#line 286 "Parser.y" +#line 1935 "Parser.php" +#line 289 "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 1927 "Parser.php" -#line 294 "Parser.y" +#line 1943 "Parser.php" +#line 297 "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 1935 "Parser.php" -#line 301 "Parser.y" +#line 1951 "Parser.php" +#line 304 "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 1943 "Parser.php" -#line 308 "Parser.y" +#line 1959 "Parser.php" +#line 311 "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 1951 "Parser.php" -#line 323 "Parser.y" +#line 1967 "Parser.php" +#line 326 "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 1959 "Parser.php" -#line 331 "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 1962 "Parser.php" +#line 1975 "Parser.php" #line 334 "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" function yy_r52(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor; } -#line 1965 "Parser.php" -#line 335 "Parser.y" +#line 1981 "Parser.php" +#line 338 "Parser.y" function yy_r53(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 1968 "Parser.php" -#line 337 "Parser.y" +#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 1971 "Parser.php" -#line 341 "Parser.y" +#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 1974 "Parser.php" -#line 347 "Parser.y" +#line 1990 "Parser.php" +#line 350 "Parser.y" function yy_r59(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1977 "Parser.php" -#line 348 "Parser.y" +#line 1993 "Parser.php" +#line 351 "Parser.y" function yy_r60(){ $this->_retvalue = array('number' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1980 "Parser.php" -#line 349 "Parser.y" +#line 1996 "Parser.php" +#line 352 "Parser.y" function yy_r61(){ $this->_retvalue = trim(@$this->yystack[$this->yyidx + 0]->minor); } -#line 1983 "Parser.php" -#line 350 "Parser.y" - function yy_r62(){ $this->_retvalue = array('string' => $this->yystack[$this->yyidx + 0]->minor); } -#line 1986 "Parser.php" +#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 1989 "Parser.php" -#line 363 "Parser.y" +#line 2005 "Parser.php" +#line 366 "Parser.y" function yy_r69(){ $this->_retvalue = array('op_expr' => 'not', $this->yystack[$this->yyidx + 0]->minor); } -#line 1992 "Parser.php" -#line 364 "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 1995 "Parser.php" +#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 1998 "Parser.php" -#line 369 "Parser.y" +#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 2001 "Parser.php" -#line 370 "Parser.y" +#line 2017 "Parser.php" +#line 373 "Parser.y" function yy_r76(){ $this->_retvalue = array('op_expr' => 'expr', $this->yystack[$this->yyidx + -1]->minor); } -#line 2004 "Parser.php" -#line 375 "Parser.y" +#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 2007 "Parser.php" -#line 376 "Parser.y" +#line 2023 "Parser.php" +#line 380 "Parser.y" function yy_r79(){ 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 2013 "Parser.php" -#line 380 "Parser.y" +#line 2029 "Parser.php" +#line 385 "Parser.y" function yy_r80(){ 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 2019 "Parser.php" -#line 384 "Parser.y" +#line 2035 "Parser.php" +#line 390 "Parser.y" function yy_r81(){ 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 2025 "Parser.php" -#line 392 "Parser.y" +#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 2028 "Parser.php" -#line 398 "Parser.y" +#line 2044 "Parser.php" +#line 405 "Parser.y" function yy_r88(){ $this->_retvalue = -1 * ($this->yystack[$this->yyidx + 0]->minor); } -#line 2031 "Parser.php" - - /** - * placeholder for the left hand side in a reduce operation. - * - * For a parser with a rule like this: - * <pre> - * rule(A) ::= B. { A = 1; } - * </pre> - * - * The parser will translate to something like: - * - * <code> - * function yy_r0(){$this->_retvalue = 1;} - * </code> - */ - private $_retvalue; - - /** - * Perform a reduce action and the shift that must immediately - * follow the reduce. - * - * For a rule such as: - * - * <pre> - * A ::= B blah C. { dosomething(); } - * </pre> - * - * This function will first call the action, if any, ("dosomething();" in our - * example), and then it will pop three states from the stack, - * one for each entry on the right-hand side of the expression - * (B, blah, and C in our example rule), and then push the result of the action - * back on to the stack with the resulting state reduced to (as described in the .out - * file) - * @param int Number of the rule by which to reduce - */ - function yy_reduce($yyruleno) - { - //int $yygoto; /* The next state */ - //int $yyact; /* The next action */ - //mixed $yygotominor; /* The LHS of the rule reduced */ - //Haanga_yyStackEntry $yymsp; /* The top of the parser's stack */ - //int $yysize; /* Amount to pop the stack */ - $yymsp = $this->yystack[$this->yyidx]; - if (self::$yyTraceFILE && $yyruleno >= 0 - && $yyruleno < count(self::$yyRuleName)) { - fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n", - self::$yyTracePrompt, $yyruleno, - self::$yyRuleName[$yyruleno]); - } - - $this->_retvalue = $yy_lefthand_side = null; - if (array_key_exists($yyruleno, self::$yyReduceMap)) { - // call the action - $this->_retvalue = null; - $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); - $yy_lefthand_side = $this->_retvalue; - } - $yygoto = self::$yyRuleInfo[$yyruleno]['lhs']; - $yysize = self::$yyRuleInfo[$yyruleno]['rhs']; - $this->yyidx -= $yysize; - for($i = $yysize; $i; $i--) { - // pop all of the right-hand side parameters - array_pop($this->yystack); - } - $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); - if ($yyact < self::YYNSTATE) { - /* If we are not debugging and the reduce action popped at least - ** one element off the stack, then we can push the new element back - ** onto the stack here, and skip the stack overflow test in yy_shift(). - ** That gives a significant speed improvement. */ - if (!self::$yyTraceFILE && $yysize) { - $this->yyidx++; - $x = new Haanga_yyStackEntry; - $x->stateno = $yyact; - $x->major = $yygoto; - $x->minor = $yy_lefthand_side; - $this->yystack[$this->yyidx] = $x; - } else { - $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); - } - } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { - $this->yy_accept(); - } - } - - /** - * The following code executes when the parse fails - * - * Code from %parse_fail is inserted here - */ - function yy_parse_failed() - { - if (self::$yyTraceFILE) { - fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt); - } - while ($this->yyidx >= 0) { - $this->yy_pop_parser_stack(); - } - /* Here code is inserted which will be executed whenever the - ** parser fails */ - } - - /** - * The following code executes when a syntax error first occurs. - * - * %syntax_error code is inserted here - * @param int The major type of the error token - * @param mixed The minor type of the error token - */ - function yy_syntax_error($yymajor, $TOKEN) - { +#line 2047 "Parser.php" + + /** + * placeholder for the left hand side in a reduce operation. + * + * For a parser with a rule like this: + * <pre> + * rule(A) ::= B. { A = 1; } + * </pre> + * + * The parser will translate to something like: + * + * <code> + * function yy_r0(){$this->_retvalue = 1;} + * </code> + */ + private $_retvalue; + + /** + * Perform a reduce action and the shift that must immediately + * follow the reduce. + * + * For a rule such as: + * + * <pre> + * A ::= B blah C. { dosomething(); } + * </pre> + * + * This function will first call the action, if any, ("dosomething();" in our + * example), and then it will pop three states from the stack, + * one for each entry on the right-hand side of the expression + * (B, blah, and C in our example rule), and then push the result of the action + * back on to the stack with the resulting state reduced to (as described in the .out + * file) + * @param int Number of the rule by which to reduce + */ + function yy_reduce($yyruleno) + { + //int $yygoto; /* The next state */ + //int $yyact; /* The next action */ + //mixed $yygotominor; /* The LHS of the rule reduced */ + //Haanga_yyStackEntry $yymsp; /* The top of the parser's stack */ + //int $yysize; /* Amount to pop the stack */ + $yymsp = $this->yystack[$this->yyidx]; + if (self::$yyTraceFILE && $yyruleno >= 0 + && $yyruleno < count(self::$yyRuleName)) { + fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n", + self::$yyTracePrompt, $yyruleno, + self::$yyRuleName[$yyruleno]); + } + + $this->_retvalue = $yy_lefthand_side = null; + if (array_key_exists($yyruleno, self::$yyReduceMap)) { + // call the action + $this->_retvalue = null; + $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); + $yy_lefthand_side = $this->_retvalue; + } + $yygoto = self::$yyRuleInfo[$yyruleno]['lhs']; + $yysize = self::$yyRuleInfo[$yyruleno]['rhs']; + $this->yyidx -= $yysize; + for ($i = $yysize; $i; $i--) { + // pop all of the right-hand side parameters + array_pop($this->yystack); + } + $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); + if ($yyact < self::YYNSTATE) { + /* If we are not debugging and the reduce action popped at least + ** one element off the stack, then we can push the new element back + ** onto the stack here, and skip the stack overflow test in yy_shift(). + ** That gives a significant speed improvement. */ + if (!self::$yyTraceFILE && $yysize) { + $this->yyidx++; + $x = new Haanga_yyStackEntry; + $x->stateno = $yyact; + $x->major = $yygoto; + $x->minor = $yy_lefthand_side; + $this->yystack[$this->yyidx] = $x; + } else { + $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); + } + } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { + $this->yy_accept(); + } + } + + /** + * The following code executes when the parse fails + * + * Code from %parse_fail is inserted here + */ + function yy_parse_failed() + { + if (self::$yyTraceFILE) { + fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt); + } + while ($this->yyidx >= 0) { + $this->yy_pop_parser_stack(); + } + /* Here code is inserted which will be executed whenever the + ** parser fails */ + } + + /** + * The following code executes when a syntax error first occurs. + * + * %syntax_error code is inserted here + * @param int The major type of the error token + * @param mixed The minor type of the error token + */ + function yy_syntax_error($yymajor, $TOKEN) + { #line 71 "Parser.y" $expect = array(); foreach ($this->yy_get_expected_tokens($yymajor) as $token) { $expect[] = self::$yyTokenName[$token]; } - $this->Error('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. '), expected one of: ' . implode(',', $expect)); -#line 2151 "Parser.php" - } - - /** - * The following is executed when the parser accepts - * - * %parse_accept code is inserted here - */ - function yy_accept() - { - if (self::$yyTraceFILE) { - fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt); - } - while ($this->yyidx >= 0) { - $stack = $this->yy_pop_parser_stack(); - } - /* Here code is inserted which will be executed whenever the - ** parser accepts */ + $this->Error('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. ')'); +#line 2167 "Parser.php" + } + + /** + * The following is executed when the parser accepts + * + * %parse_accept code is inserted here + */ + function yy_accept() + { + if (self::$yyTraceFILE) { + fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt); + } + while ($this->yyidx >= 0) { + $stack = $this->yy_pop_parser_stack(); + } + /* Here code is inserted which will be executed whenever the + ** parser accepts */ #line 57 "Parser.y" -#line 2172 "Parser.php" - } - - /** - * The main parser program. - * - * The first argument is the major token number. The second is - * the token value string as scanned from the input. - * - * @param int the token number - * @param mixed the token value - * @param mixed any extra arguments that should be passed to handlers - */ - function doParse($yymajor, $yytokenvalue) - { -// $yyact; /* The parser action. */ -// $yyendofinput; /* True if we are at the end of input */ - $yyerrorhit = 0; /* True if yymajor has invoked an error */ - - /* (re)initialize the parser, if necessary */ - if ($this->yyidx === null || $this->yyidx < 0) { - /* if ($yymajor == 0) return; // not sure why this was here... */ - $this->yyidx = 0; - $this->yyerrcnt = -1; - $x = new Haanga_yyStackEntry; - $x->stateno = 0; - $x->major = 0; - $this->yystack = array(); - array_push($this->yystack, $x); - } - $yyendofinput = ($yymajor==0); - - if (self::$yyTraceFILE) { - fprintf(self::$yyTraceFILE, "%sInput %s\n", - self::$yyTracePrompt, self::$yyTokenName[$yymajor]); - } - - do { - $yyact = $this->yy_find_shift_action($yymajor); - if ($yymajor < self::YYERRORSYMBOL && - !$this->yy_is_expected_token($yymajor)) { - // force a syntax error - $yyact = self::YY_ERROR_ACTION; - } - if ($yyact < self::YYNSTATE) { - $this->yy_shift($yyact, $yymajor, $yytokenvalue); - $this->yyerrcnt--; - if ($yyendofinput && $this->yyidx >= 0) { - $yymajor = 0; - } else { - $yymajor = self::YYNOCODE; - } - } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { - $this->yy_reduce($yyact - self::YYNSTATE); - } elseif ($yyact == self::YY_ERROR_ACTION) { - if (self::$yyTraceFILE) { - fprintf(self::$yyTraceFILE, "%sSyntax Error!\n", - self::$yyTracePrompt); - } - if (self::YYERRORSYMBOL) { - /* A syntax error has occurred. - ** The response to an error depends upon whether or not the - ** grammar defines an error token "ERROR". - ** - ** This is what we do if the grammar does define ERROR: - ** - ** * Call the %syntax_error function. - ** - ** * Begin popping the stack until we enter a state where - ** it is legal to shift the error symbol, then shift - ** the error symbol. - ** - ** * Set the error count to three. - ** - ** * Begin accepting and shifting new tokens. No new error - ** processing will occur until three tokens have been - ** shifted successfully. - ** - */ - if ($this->yyerrcnt < 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $yymx = $this->yystack[$this->yyidx]->major; - if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){ - if (self::$yyTraceFILE) { - fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n", - self::$yyTracePrompt, self::$yyTokenName[$yymajor]); - } - $this->yy_destructor($yymajor, $yytokenvalue); - $yymajor = self::YYNOCODE; - } else { - while ($this->yyidx >= 0 && - $yymx != self::YYERRORSYMBOL && - ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE - ){ - $this->yy_pop_parser_stack(); - } - if ($this->yyidx < 0 || $yymajor==0) { - $this->yy_destructor($yymajor, $yytokenvalue); - $this->yy_parse_failed(); - $yymajor = self::YYNOCODE; - } elseif ($yymx != self::YYERRORSYMBOL) { - $u2 = 0; - $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); - } - } - $this->yyerrcnt = 3; - $yyerrorhit = 1; - } else { - /* YYERRORSYMBOL is not defined */ - /* This is what we do if the grammar does not define ERROR: - ** - ** * Report an error message, and throw away the input token. - ** - ** * If the input token is $, then fail the parse. - ** - ** As before, subsequent error messages are suppressed until - ** three input tokens have been successfully shifted. - */ - if ($this->yyerrcnt <= 0) { - $this->yy_syntax_error($yymajor, $yytokenvalue); - } - $this->yyerrcnt = 3; - $this->yy_destructor($yymajor, $yytokenvalue); - if ($yyendofinput) { - $this->yy_parse_failed(); - } - $yymajor = self::YYNOCODE; - } - } else { - $this->yy_accept(); - $yymajor = self::YYNOCODE; - } - } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); - } -} \ No newline at end of file +#line 2188 "Parser.php" + } + + /** + * The main parser program. + * + * The first argument is the major token number. The second is + * the token value string as scanned from the input. + * + * @param int $yymajor the token number + * @param mixed $yytokenvalue the token value + * @param mixed ... any extra arguments that should be passed to handlers + * + * @return void + */ + function doParse($yymajor, $yytokenvalue) + { +// $yyact; /* The parser action. */ +// $yyendofinput; /* True if we are at the end of input */ + $yyerrorhit = 0; /* True if yymajor has invoked an error */ + + /* (re)initialize the parser, if necessary */ + if ($this->yyidx === null || $this->yyidx < 0) { + /* if ($yymajor == 0) return; // not sure why this was here... */ + $this->yyidx = 0; + $this->yyerrcnt = -1; + $x = new Haanga_yyStackEntry; + $x->stateno = 0; + $x->major = 0; + $this->yystack = array(); + array_push($this->yystack, $x); + } + $yyendofinput = ($yymajor==0); + + if (self::$yyTraceFILE) { + fprintf( + self::$yyTraceFILE, + "%sInput %s\n", + self::$yyTracePrompt, + self::$yyTokenName[$yymajor] + ); + } + + do { + $yyact = $this->yy_find_shift_action($yymajor); + if ($yymajor < self::YYERRORSYMBOL + && !$this->yy_is_expected_token($yymajor) + ) { + // force a syntax error + $yyact = self::YY_ERROR_ACTION; + } + if ($yyact < self::YYNSTATE) { + $this->yy_shift($yyact, $yymajor, $yytokenvalue); + $this->yyerrcnt--; + if ($yyendofinput && $this->yyidx >= 0) { + $yymajor = 0; + } else { + $yymajor = self::YYNOCODE; + } + } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { + $this->yy_reduce($yyact - self::YYNSTATE); + } elseif ($yyact == self::YY_ERROR_ACTION) { + if (self::$yyTraceFILE) { + fprintf( + self::$yyTraceFILE, + "%sSyntax Error!\n", + self::$yyTracePrompt + ); + } + if (self::YYERRORSYMBOL) { + /* A syntax error has occurred. + ** The response to an error depends upon whether or not the + ** grammar defines an error token "ERROR". + ** + ** This is what we do if the grammar does define ERROR: + ** + ** * Call the %syntax_error function. + ** + ** * Begin popping the stack until we enter a state where + ** it is legal to shift the error symbol, then shift + ** the error symbol. + ** + ** * Set the error count to three. + ** + ** * Begin accepting and shifting new tokens. No new error + ** processing will occur until three tokens have been + ** shifted successfully. + ** + */ + if ($this->yyerrcnt < 0) { + $this->yy_syntax_error($yymajor, $yytokenvalue); + } + $yymx = $this->yystack[$this->yyidx]->major; + if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ) { + if (self::$yyTraceFILE) { + fprintf( + self::$yyTraceFILE, + "%sDiscard input token %s\n", + self::$yyTracePrompt, + self::$yyTokenName[$yymajor] + ); + } + $this->yy_destructor($yymajor, $yytokenvalue); + $yymajor = self::YYNOCODE; + } else { + while ($this->yyidx >= 0 + && $yymx != self::YYERRORSYMBOL + && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE + ) { + $this->yy_pop_parser_stack(); + } + if ($this->yyidx < 0 || $yymajor==0) { + $this->yy_destructor($yymajor, $yytokenvalue); + $this->yy_parse_failed(); + $yymajor = self::YYNOCODE; + } elseif ($yymx != self::YYERRORSYMBOL) { + $u2 = 0; + $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); + } + } + $this->yyerrcnt = 3; + $yyerrorhit = 1; + } else { + /* YYERRORSYMBOL is not defined */ + /* This is what we do if the grammar does not define ERROR: + ** + ** * Report an error message, and throw away the input token. + ** + ** * If the input token is $, then fail the parse. + ** + ** As before, subsequent error messages are suppressed until + ** three input tokens have been successfully shifted. + */ + if ($this->yyerrcnt <= 0) { + $this->yy_syntax_error($yymajor, $yytokenvalue); + } + $this->yyerrcnt = 3; + $this->yy_destructor($yymajor, $yytokenvalue); + if ($yyendofinput) { + $this->yy_parse_failed(); + } + $yymajor = self::YYNOCODE; + } + } else { + $this->yy_accept(); + $yymajor = self::YYNOCODE; + } + } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); + } +} diff --git a/lib/Haanga/lib/Haanga/Compiler/Parser.y b/lib/Haanga/lib/Haanga/Compiler/Parser.y index 445dc3851a3e71c65fb3f851966e7d6d527ebc5b..ee70e510a06946a7761a3bb69b935c0c032cfc60 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Parser.y +++ b/lib/Haanga/lib/Haanga/Compiler/Parser.y @@ -74,7 +74,7 @@ foreach ($this->yy_get_expected_tokens($yymajor) as $token) { $expect[] = self::$yyTokenName[$token]; } - $this->Error('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. '), expected one of: ' . implode(',', $expect)); + $this->Error('Unexpected ' . $this->tokenName($yymajor) . '(' . $TOKEN. ')'); } @@ -379,21 +379,25 @@ expr(A) ::= fvar_or_string(B). { A = B; } /* Variable name */ varname(A) ::= varpart(B). { A = current($this->compiler->generate_variable_name(B, false)); } -varpart(A) ::= varname(B) T_OBJ|T_DOT T_ALPHA|T_CUSTOM_TAG|T_CUSTOM_BLOCK(C). { + +varpart(A) ::= varpart(B) T_OBJ|T_DOT varpart_single(C). { if (!is_array(B)) { A = array(B); } else { A = B; } A[]=array('object' => C); } -varpart(A) ::= varname(B) T_CLASS T_ALPHA|T_CUSTOM_TAG|T_CUSTOM_BLOCK(C). { + +varpart(A) ::= varpart(B) T_CLASS varpart_single(C). { if (!is_array(B)) { A = array(B); } else { A = B; } A[]=array('class' => '$'.C); } -varpart(A) ::= varname(B) T_BRACKETS_OPEN var_or_string(C) T_BRACKETS_CLOSE. { + +varpart(A) ::= varpart(B) T_BRACKETS_OPEN var_or_string(C) T_BRACKETS_CLOSE. { if (!is_array(B)) { A = array(B); } else { A = B; } A[]=C; } -varpart(A) ::= T_ALPHA(B). { A = B; } +varpart(A) ::= varpart_single(B). { A = B; } + /* T_BLOCK|T_CUSTOM|T_CUSTOM_BLOCK are also T_ALPHA */ -varpart(A) ::= T_BLOCK|T_CUSTOM_TAG|T_CUSTOM_BLOCK(B). { A = B; } +varpart_single(A) ::= T_ALPHA|T_BLOCK|T_CUSTOM_TAG|T_CUSTOM_END|T_CUSTOM_BLOCK(B). { A = B; } range(A) ::= numvar(B) T_DOTDOT numvar(C). { A = array(B, C); } diff --git a/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php b/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php index 7db11392a1b0cfdcaefe639cd87699d1d5f59349..e618b7a025629bd743b339a5e6664a53848b37c4 100644 --- a/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php +++ b/lib/Haanga/lib/Haanga/Compiler/Tokenizer.php @@ -560,7 +560,7 @@ class Haanga_Compiler_Tokenizer /* destroy the parser */ try { $parser->doParse(0,0); - } catch (Exception $e) {} + } catch (Exception $y) {} throw $e; /* re-throw exception */ } diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Isarray.php b/lib/Haanga/lib/Haanga/Extension/Filter/Isarray.php new file mode 100644 index 0000000000000000000000000000000000000000..9bf113780f40706f5ca8a6f0e5132b9d8deaeca4 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Isarray.php @@ -0,0 +1,7 @@ +<?php + +class Haanga_Extension_Filter_IsArray +{ + public $php_alias = "is_array"; + public $is_safe = TRUE; /* boolean if safe */ +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Length.php b/lib/Haanga/lib/Haanga/Extension/Filter/Length.php index 60d40594a35372024dca6706b63a68bcdb435356..d0fb526222eff1a0a67b739bfb575686a093a222 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Length.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Length.php @@ -7,7 +7,6 @@ class Haanga_Extension_Filter_Length { $count = hexec('count', $args[0]); $strlen = hexec('strlen', $args[0]); - $props = hexec('count', hexec('array_keys', hexec('get_object_vars', $args[0]))); $guess = hexpr_cond(hexec('is_array', $args[0]), hexec('count', $args[0]), hexec('strlen', $args[0])); @@ -19,8 +18,6 @@ class Haanga_Extension_Filter_Length return $count; } else if (is_string($value)) { return $strlen; - } else if (is_object($value)) { - return $props; } else { return $guess; } diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Null.php b/lib/Haanga/lib/Haanga/Extension/Filter/Null.php new file mode 100644 index 0000000000000000000000000000000000000000..ebf3fdfb7cd81a399750e205856dba352d4de526 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Null.php @@ -0,0 +1,6 @@ +<?php + +class Haanga_Extension_Filter_Null +{ + public $php_alias = 'is_null'; +} diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Substr.php b/lib/Haanga/lib/Haanga/Extension/Filter/Substr.php index 34373d58b9ee8b057de18abe7d880eee12729653..35b393a001e150976b81f18d16594e1a9d26a103 100644 --- a/lib/Haanga/lib/Haanga/Extension/Filter/Substr.php +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Substr.php @@ -2,7 +2,7 @@ class Haanga_Extension_Filter_Substr { - public static function generator($compiler, $args) + public static function generator($cmp, $args) { if (count($args) != 2) { $cmp->Error("substr parameter must have one param"); diff --git a/lib/Haanga/lib/Haanga/Extension/Filter/Truncatechars.php b/lib/Haanga/lib/Haanga/Extension/Filter/Truncatechars.php new file mode 100644 index 0000000000000000000000000000000000000000..2f1f228df6a6a90cd81d8bf1b2b8a187fabd0582 --- /dev/null +++ b/lib/Haanga/lib/Haanga/Extension/Filter/Truncatechars.php @@ -0,0 +1,16 @@ +<?php + +class Haanga_Extension_Filter_Truncatechars +{ + static function main($text, $limit) + { + if(strlen($text) <= $limit) + return $text; + $trunctext = substr($text, 0, $limit); + $trunctext[$limit-3] = '.'; + $trunctext[$limit-2] = '.'; + $trunctext[$limit-1] = '.'; + return $trunctext; + } +} + diff --git a/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php b/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php index 44fb3ce938f17d18d368f0fa1d32789959ce1e47..e4390b2940d8ec58f548e081f82cd5e40bdd239c 100644 --- a/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php +++ b/lib/Haanga/lib/Haanga/Extension/Tag/Exec.php @@ -37,6 +37,9 @@ class Haanga_Extension_Tag_Exec $exec->end(); if ($assign) { $code->decl($assign, $exec); + + // make it global + $code->decl(hvar('vars', $assign), hvar($assign)); } else { $cmp->do_print($code, $exec); } diff --git a/lib/Haanga/lib/Haanga/Generator/PHP.php b/lib/Haanga/lib/Haanga/Generator/PHP.php index 1c272c68cea568ed6f53e9fc9bcbe099a2502e6b..addf66453d2605377ac8596832211bc31971a80f 100644 --- a/lib/Haanga/lib/Haanga/Generator/PHP.php +++ b/lib/Haanga/lib/Haanga/Generator/PHP.php @@ -331,7 +331,7 @@ class Haanga_Generator_PHP { $op['array'] = $this->php_get_varname($op['array']); $op['value'] = $this->php_get_varname($op['value']); - $code = "foreach ({$op['array']} as "; + $code = "foreach ((array) {$op['array']} as "; if (!isset($op['key'])) { $code .= " {$op['value']}"; } else { diff --git a/lib/Haanga/tests/assert_templates/bug_#14.html b/lib/Haanga/tests/assert_templates/bug_#14.html new file mode 100644 index 0000000000000000000000000000000000000000..7ed6ff82de6bcc2a78243fc9c54d3ef5ac14da69 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/bug_#14.html @@ -0,0 +1 @@ +5 diff --git a/lib/Haanga/tests/assert_templates/bug_#14.php b/lib/Haanga/tests/assert_templates/bug_#14.php new file mode 100644 index 0000000000000000000000000000000000000000..de1a98c0ba5c6ba549f278c684ba7b6e684bb3ae --- /dev/null +++ b/lib/Haanga/tests/assert_templates/bug_#14.php @@ -0,0 +1,5 @@ +<?php + +$data = array( + 'endsomething' => array('endbar' => 5), +); diff --git a/lib/Haanga/tests/assert_templates/bug_#14.tpl b/lib/Haanga/tests/assert_templates/bug_#14.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c1a6b843e5ec3489ee796286c2ac9df43eb8b80c --- /dev/null +++ b/lib/Haanga/tests/assert_templates/bug_#14.tpl @@ -0,0 +1 @@ +{{ endsomething.endbar }} diff --git a/lib/Haanga/tests/assert_templates/exec-inc.tpl b/lib/Haanga/tests/assert_templates/exec-inc.tpl new file mode 100644 index 0000000000000000000000000000000000000000..db8a8a4090c9ec68311e233db93e761cf06852dc --- /dev/null +++ b/lib/Haanga/tests/assert_templates/exec-inc.tpl @@ -0,0 +1 @@ +{{ foo }} diff --git a/lib/Haanga/tests/assert_templates/exec.html.php b/lib/Haanga/tests/assert_templates/exec.html.php index 0733e2a5a3ac336840764a99b6b493ea96538633..4a179f65ec80f6cc616ab678df2bd659c559c132 100644 --- a/lib/Haanga/tests/assert_templates/exec.html.php +++ b/lib/Haanga/tests/assert_templates/exec.html.php @@ -1,2 +1,6 @@ <?php echo php_uname();?> + +<?php echo php_uname();?> + + diff --git a/lib/Haanga/tests/assert_templates/exec.tpl b/lib/Haanga/tests/assert_templates/exec.tpl index 817865a1460c7a8460ad1a612a7ff1b77340bf0e..b57c7e320799cf8884fb8286f1d9b99d72fb6495 100644 --- a/lib/Haanga/tests/assert_templates/exec.tpl +++ b/lib/Haanga/tests/assert_templates/exec.tpl @@ -1 +1,3 @@ {% exec php_uname %} +{% exec php_uname as foo %} +{% include "assert_templates/exec-inc.tpl" %} diff --git a/lib/Haanga/tests/assert_templates/expr.html b/lib/Haanga/tests/assert_templates/expr.html new file mode 100644 index 0000000000000000000000000000000000000000..39c7ef6e387c80a104f0f935aba476a4964674cc --- /dev/null +++ b/lib/Haanga/tests/assert_templates/expr.html @@ -0,0 +1,3 @@ + + hola + diff --git a/lib/Haanga/tests/assert_templates/expr.php b/lib/Haanga/tests/assert_templates/expr.php new file mode 100644 index 0000000000000000000000000000000000000000..b80db9ce6ca932b3a73129af3d4b444516245436 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/expr.php @@ -0,0 +1,8 @@ +<?php +$data = array( + 'self' => array( + 'status' => true, + 'tiene_negativos' => true, + 'nsfw' => false, + ) +); diff --git a/lib/Haanga/tests/assert_templates/expr.tpl b/lib/Haanga/tests/assert_templates/expr.tpl new file mode 100644 index 0000000000000000000000000000000000000000..85ffb69c45da41a86d0fae36a39d9fd3354dec77 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/expr.tpl @@ -0,0 +1,3 @@ +{% if self.status == 'published' AND self.tiene_negativos AND !self.nsfw %} + hola +{% endif %} diff --git a/lib/Haanga/tests/assert_templates/is_array.html b/lib/Haanga/tests/assert_templates/is_array.html new file mode 100644 index 0000000000000000000000000000000000000000..8180953eec624616e288e98056e86fdb896e2edc --- /dev/null +++ b/lib/Haanga/tests/assert_templates/is_array.html @@ -0,0 +1,2 @@ + true + diff --git a/lib/Haanga/tests/assert_templates/is_array.php b/lib/Haanga/tests/assert_templates/is_array.php new file mode 100644 index 0000000000000000000000000000000000000000..d07615fe56cc5acc5fd43d76542613276b294fd1 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/is_array.php @@ -0,0 +1,3 @@ +<?php + +$data = array('zfoo' => new stdclass, 'foo' => array()); diff --git a/lib/Haanga/tests/assert_templates/is_array.tpl b/lib/Haanga/tests/assert_templates/is_array.tpl new file mode 100644 index 0000000000000000000000000000000000000000..18f742972737275535cc9186abf07e74f7c54c8b --- /dev/null +++ b/lib/Haanga/tests/assert_templates/is_array.tpl @@ -0,0 +1,2 @@ +{%if foo|isarray %} true {% endif %} +{%if zfoo|isarray %} true {% endif %} diff --git a/lib/Haanga/tests/assert_templates/null.html b/lib/Haanga/tests/assert_templates/null.html new file mode 100644 index 0000000000000000000000000000000000000000..1af338ce1e8aed346e4702a1f50a81810e2a68c9 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/null.html @@ -0,0 +1,13 @@ + + + foo is null + + + + bar is not null + + + + foobar is not null + + diff --git a/lib/Haanga/tests/assert_templates/null.php b/lib/Haanga/tests/assert_templates/null.php new file mode 100644 index 0000000000000000000000000000000000000000..4c0ae20e7a1fab8a4535c927f56b696b447f9b41 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/null.php @@ -0,0 +1,8 @@ +<?php + +$data = array( +'obj' => array( + 'foo' => NULL, + 'bar' => false, + 'foobar' => 0, +)); diff --git a/lib/Haanga/tests/assert_templates/null.tpl b/lib/Haanga/tests/assert_templates/null.tpl new file mode 100644 index 0000000000000000000000000000000000000000..bd47ea72f48bcabcf23765e1b2c04ae37a2b2780 --- /dev/null +++ b/lib/Haanga/tests/assert_templates/null.tpl @@ -0,0 +1,7 @@ +{% for k,val in obj %} + {% if val|null %} + {{ k }} is null + {% else %} + {{ k }} is not null + {% endif %} +{% endfor %} diff --git a/models/special.classes.model.html b/models/special.classes.model.html new file mode 100644 index 0000000000000000000000000000000000000000..754216a5d06ad3f63d94f16f9d259fb1a255a73a --- /dev/null +++ b/models/special.classes.model.html @@ -0,0 +1,8 @@ +{%for h in base.header %} +PREFIX {{h.prefix}}: <{{h.ns}}> +{%endfor%} +SELECT DISTINCT ?resource WHERE { + {%if base.args.arg0 %}GRAPH <{{base.args.arg0}}>{ {%endif%} + [] a ?resource . + {%if base.args.arg0 %} } {%endif%} +} diff --git a/models/special.index.model.html b/models/special.index.model.html deleted file mode 100644 index e32cb2a17ecb5248772260b936078ae00a52624b..0000000000000000000000000000000000000000 --- a/models/special.index.model.html +++ /dev/null @@ -1,3 +0,0 @@ -SELECT DISTINCT ?resource WHERE { - [] a ?resource . -} diff --git a/models/special.namedGraphs.model.html b/models/special.namedGraphs.model.html new file mode 100644 index 0000000000000000000000000000000000000000..b73ae66e3f2a16aed3d8342b2b913e4984f7885a --- /dev/null +++ b/models/special.namedGraphs.model.html @@ -0,0 +1,5 @@ +SELECT DISTINCT ?g WHERE { + GRAPH ?g{ + ?s ?p ?o . + } +} diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000000000000000000000000000000000000..7a29d7e7569c5b9b554bbd8ef752c5c68cf4b90f --- /dev/null +++ b/static/index.html @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" + "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" xmlns:local="http://localhost/lodspeakr/" + version="XHTML+RDFa 1.0" xml:lang="en"> + <head> + <title>Main</title> + <link href="http://localhost/lodspeakr//lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> + </head> + <body> + <h1>Services available</h1> + <ul> + <li><a href='special/classes'>List of classes in the triple store</a></li> + <li><a href='special/namedGraphs'>Named graphs in the triple store</a></li> + </ul> + </body> +</html> + + diff --git a/utils/install b/utils/install new file mode 100644 index 0000000000000000000000000000000000000000..29935f55980c9422e4f73ee8790ad5cfe2373b9c --- /dev/null +++ b/utils/install @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# Installation script for LODSPeaKr (http://lodspeakr.org) +# Author: Alvaro Graves (alvaro@graves.cl) +# Modified by: Tim Lebo (lebot@rpi.edu) + +lodspeakr_repository="git://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 + +if [ ! -e "$home" ]; then + $GIT clone $lodspeakr_repository + cd $home + ./install.sh +else + echo "There is already an existing directory called '$home'. Installation cancelled. Remove it first and try again." +fi diff --git a/utils/link-components.sh b/utils/link-components.sh new file mode 100755 index 0000000000000000000000000000000000000000..430311398d71bf34fd0b12bf568641ed8752c980 --- /dev/null +++ b/utils/link-components.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# +# Script to borrow essential bits ;rom another lodspeakr instance on local machine. +# Desired when lodspeakr essentials are maintained in a project-specfic repository. +# Contributed by Tim Lebo when trying to apply lodspeakr for DataFAQs. +# +# Usage: +# bash-3.2$ pwd +# /Applications/XAMPP/htdocs/hello/lodspeakr +# +# bash-3.2$ sudo rm -rf .htaccess settings.inc.php models views +# +# bash-3.2$ sudo /Users/lebo/projects/lodspeakr/github/lodspeakr/utils/link-components.sh /Users/lebo/projects/DataFAQs/github/DataFAQs/ui/configure-epoch/lodspeakr +# ln -s /Users/lebo/projects/DataFAQs/github/DataFAQs/ui/configure-epoch/lodspeakr/settings.inc.php settings.inc.php +# ln -s /Users/lebo/projects/DataFAQs/github/DataFAQs/ui/configure-epoch/lodspeakr/.htaccess .htaccess +# ln -s /Users/lebo/projects/DataFAQs/github/DataFAQs/ui/configure-epoch/lodspeakr/models models +# ln -s /Users/lebo/projects/DataFAQs/github/DataFAQs/ui/configure-epoch/lodspeakr/views views +# +# bash-3.2$ sudo /Users/lebo/projects/lodspeakr/github/lodspeakr/utils/link-components.sh /Users/lebo/projects/DataFAQs/github/DataFAQs/ui/configure-epoch/lodspeakr +# WARNING: not linking settings.inc.php because it exists. +# WARNING: not linking .htaccess because it exists. +# WARNING: not linking models because it exists. +# WARNING: not linking views because it exists. + +essentials='settings.inc.php .htaccess models views' +if [ $# -lt 1 ]; then + echo "usage: `basename $0` other-lodspeakr-directory" + echo " soft links the following from other-lodspeakr-director to current directory: $essentials" + exit 1 +fi + +otherDir="$1" +if [[ ! -d $otherDir && "$otherDir" != "/" ]]; then + echo "$otherDir does not exist." + exit 1 +fi + +for essential in $essentials; do + if [[ ! -e $essential && -e $otherDir/$essential ]]; then + echo ln -s $otherDir/$essential $essential + ln -s $otherDir/$essential + else + echo "WARNING: not linking $essential because it exists." + fi +done diff --git a/views/header.inc b/views/header.inc new file mode 100644 index 0000000000000000000000000000000000000000..adbefad22dc773222ab0ae36e0d78cecb89e691f --- /dev/null +++ b/views/header.inc @@ -0,0 +1,5 @@ +<h4>Endpoint: {{base.endpoint.local}}</h4> +<div style='float:center'> +<a href='{{base.home}}'>Home</a> | <a href='{{base.home}}special/classes'>Classes</a> | <a href='{{base.home}}special/namedGraphs'>Named Graphs</a> +</div> + diff --git a/views/rdfs:Resource.view.html b/views/rdfs:Resource.view.html index b0cb351b4c3c9055da6cfef476274da9601f3a67..59f3631899154cb32d0456a682340ac5adfff40f 100644 --- a/views/rdfs:Resource.view.html +++ b/views/rdfs:Resource.view.html @@ -6,6 +6,10 @@ <head> <title>Page about {{base.this.value}}</title> <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> + <link rel="alternate" type="application/rdf+xml" title="RDF/XML Version" href="{{base.this.value}}.rdf" /> + <link rel="alternate" type="text/turtle" title="Turtle Version" href="{{base.this.value}}.ttl" /> + <link rel="alternate" type="text/plain" title="N-Triples Version" href="{{base.this.value}}.nt" /> + <link rel="alternate" type="application/json" title="RDFJSON Version" href="{{base.this.value}}.json" /> </head> <body about="{{base.this.value}}"> <h1>Page about <a href='{{base.this.value}}'>{{base.this.curie}}</a></h1> diff --git a/views/special.index.view.html b/views/special.classes.view.html similarity index 73% rename from views/special.index.view.html rename to views/special.classes.view.html index 7258ca945ff4944e18cd4778493d3482e3a157fa..8a7777fe863303235d9f846e0be11cfbb70b9f00 100644 --- a/views/special.index.view.html +++ b/views/special.classes.view.html @@ -9,15 +9,10 @@ </head> <body> <h1>Classes available</h1> +{%include "header.inc"%} <ul> - {% if r.resource.value != null %} - <!-- Only one class available --> - <li><a href='{{base.baseUrl}}special/instances/{{ r.resource.curie }}'>{{r.resource.curie}}</a></li> - {% endif %} {% for row in r %} - {% if row.resource.value %} <li><a href='{{base.baseUrl}}special/instances/{{ row.resource.curie }}'>{{row.resource.curie}}</a></li> - {% endif %} {% endfor %} </ul> </body> diff --git a/views/special.instances.view.html b/views/special.instances.view.html index 3a8247c16e73456ff2f6f174b70995afaeeebcf6..b164024cf0adbbd522503ca1bd7e72e2066057ae 100644 --- a/views/special.instances.view.html +++ b/views/special.instances.view.html @@ -9,6 +9,7 @@ </head> <body> <h1>Instances of {{base.args.arg0}}</h1> +{%include "header.inc"%} <ul> {% for row in r %} <li><a href='{{ row.resource.value }}'>{{row.resource.curie}}</a></li> diff --git a/views/special.namedGraphs.view.html b/views/special.namedGraphs.view.html new file mode 100644 index 0000000000000000000000000000000000000000..65ee0d422589ded5522de1f6a0330367f293fefc --- /dev/null +++ b/views/special.namedGraphs.view.html @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" + "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> + <html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}" + {%endfor%}version="XHTML+RDFa 1.0" xml:lang="en"> + <head> + <title>Graphs available in the triple store</title> + <link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" /> + </head> + <body> + <h1>Graphs available</h1> +{%include "header.inc"%} + <ul> + {% for row in r %} + <li>{{row.g.curie}}</li> + {% endfor %} + </ul> + </body> +</html> +