diff options
Diffstat (limited to 'Widgets/smarty/libs/sysplugins/smarty_internal_configfilelexer.php')
-rw-r--r-- | Widgets/smarty/libs/sysplugins/smarty_internal_configfilelexer.php | 396 |
1 files changed, 181 insertions, 215 deletions
diff --git a/Widgets/smarty/libs/sysplugins/smarty_internal_configfilelexer.php b/Widgets/smarty/libs/sysplugins/smarty_internal_configfilelexer.php index f0292196..326d8f97 100644 --- a/Widgets/smarty/libs/sysplugins/smarty_internal_configfilelexer.php +++ b/Widgets/smarty/libs/sysplugins/smarty_internal_configfilelexer.php @@ -1,16 +1,15 @@ <?php /** - * Smarty Internal Plugin Configfilelexer - * This is the lexer to break the config file source into tokens - * - * @package Smarty - * @subpackage Config - * @author Uwe Tews - */ - +* Smarty Internal Plugin Configfilelexer +* +* This is the lexer to break the config file source into tokens +* @package Smarty +* @subpackage Config +* @author Uwe Tews +*/ /** - * Smarty Internal Plugin Configfilelexer - */ +* Smarty Internal Plugin Configfilelexer +*/ class Smarty_Internal_Configfilelexer { @@ -21,112 +20,89 @@ class Smarty_Internal_Configfilelexer public $node; public $line; private $state = 1; - public $yyTraceFILE; - public $yyTracePrompt; - public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'); - public $smarty_token_names = array( // Text for parser error messages - ); + public $smarty_token_names = array ( // Text for parser error messages + ); + - function __construct($data, $compiler) + function __construct($data, $smarty) { // set instance object self::instance($this); $this->data = $data . "\n"; //now all lines are \n-terminated $this->counter = 0; - if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) { - $this->counter += strlen($match[0]); - } $this->line = 1; - $this->compiler = $compiler; - $this->smarty = $compiler->smarty; + $this->smarty = $smarty; + $this->mbstring_overload = ini_get('mbstring.func_overload') & 2; } - public static function &instance($new_instance = null) { static $instance = null; - if (isset($new_instance) && is_object($new_instance)) { + if (isset($new_instance) && is_object($new_instance)) $instance = $new_instance; - } return $instance; } - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } + private $_yy_state = 1; private $_yy_stack = array(); - public function yylex() + function yylex() { return $this->{'yylex' . $this->_yy_state}(); } - public function yypushstate($state) + function yypushstate($state) { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } array_push($this->_yy_stack, $this->_yy_state); $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } } - public function yypopstate() + function yypopstate() { - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } $this->_yy_state = array_pop($this->_yy_stack); - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } } - public function yybegin($state) + function yybegin($state) { $this->_yy_state = $state; - if ($this->yyTraceFILE) { - fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); - } } - public function yylex1() + + + + function yylex1() { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - 4 => 0, - 5 => 0, - 6 => 0, - 7 => 0, - 8 => 0, - ); + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 0, + ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/iS"; do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state START'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state START'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); + $tokenMap[$this->token]); } else { $yysubmatches = array(); } @@ -149,101 +125,96 @@ class Smarty_Internal_Configfilelexer } // skip this token continue; - } - } else { + } } else { throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); + ': ' . $this->data[$this->counter]); } break; } while (true); + } // end function - const START = 1; + const START = 1; function yy_r1_1($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; - $this->yypushstate(self::COMMENT); + $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; + $this->yypushstate(self::COMMENT); } - function yy_r1_2($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; - $this->yypushstate(self::SECTION); + $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; + $this->yypushstate(self::SECTION); } - function yy_r1_3($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; + $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; } - function yy_r1_4($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; - $this->yypushstate(self::VALUE); + $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; + $this->yypushstate(self::VALUE); } - function yy_r1_5($yy_subpatterns) { - return false; + return false; } - function yy_r1_6($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; + $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; } - function yy_r1_7($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_ID; + $this->token = Smarty_Internal_Configfileparser::TPC_ID; } - function yy_r1_8($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; + $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; } - public function yylex2() + + + function yylex2() { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - 4 => 0, - 5 => 0, - 6 => 0, - 7 => 0, - 8 => 0, - 9 => 0, - ); + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 0, + 4 => 0, + 5 => 0, + 6 => 0, + 7 => 0, + 8 => 0, + 9 => 0, + ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS"; do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state VALUE'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state VALUE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); + $tokenMap[$this->token]); } else { $yysubmatches = array(); } @@ -266,111 +237,105 @@ class Smarty_Internal_Configfilelexer } // skip this token continue; - } - } else { + } } else { throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); + ': ' . $this->data[$this->counter]); } break; } while (true); + } // end function - const VALUE = 2; + const VALUE = 2; function yy_r2_1($yy_subpatterns) { - return false; + return false; } - function yy_r2_2($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; + $this->yypopstate(); } - function yy_r2_3($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_INT; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_INT; + $this->yypopstate(); } - function yy_r2_4($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; - $this->yypushstate(self::TRIPPLE); + $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; + $this->yypushstate(self::TRIPPLE); } - function yy_r2_5($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; + $this->yypopstate(); } - function yy_r2_6($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; + $this->yypopstate(); } - function yy_r2_7($yy_subpatterns) { - if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no"))) { - $this->yypopstate(); - $this->yypushstate(self::NAKED_STRING_VALUE); - return true; //reprocess in new state - } else { - $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; - $this->yypopstate(); - } + if (!$this->smarty->config_booleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) { + $this->yypopstate(); + $this->yypushstate(self::NAKED_STRING_VALUE); + return true; //reprocess in new state + } else { + $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; + $this->yypopstate(); + } } - function yy_r2_8($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->yypopstate(); } - function yy_r2_9($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->value = ""; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->value = ""; + $this->yypopstate(); } - public function yylex3() + + + function yylex3() { - $tokenMap = array( - 1 => 0, - ); + $tokenMap = array ( + 1 => 0, + ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/\G([^\n]+?(?=[ \t\r]*\n))/iS"; do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state NAKED_STRING_VALUE'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state NAKED_STRING_VALUE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); + $tokenMap[$this->token]); } else { $yysubmatches = array(); } @@ -393,51 +358,53 @@ class Smarty_Internal_Configfilelexer } // skip this token continue; - } - } else { + } } else { throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); + ': ' . $this->data[$this->counter]); } break; } while (true); + } // end function - const NAKED_STRING_VALUE = 3; + const NAKED_STRING_VALUE = 3; function yy_r3_1($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->yypopstate(); } - public function yylex4() + + + function yylex4() { - $tokenMap = array( - 1 => 0, - 2 => 0, - 3 => 0, - ); + $tokenMap = array ( + 1 => 0, + 2 => 0, + 3 => 0, + ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS"; do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state COMMENT'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state COMMENT'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); + $tokenMap[$this->token]); } else { $yysubmatches = array(); } @@ -460,62 +427,62 @@ class Smarty_Internal_Configfilelexer } // skip this token continue; - } - } else { + } } else { throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); + ': ' . $this->data[$this->counter]); } break; } while (true); + } // end function - const COMMENT = 4; + const COMMENT = 4; function yy_r4_1($yy_subpatterns) { - return false; + return false; } - function yy_r4_2($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; + $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; } - function yy_r4_3($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; + $this->yypopstate(); } - public function yylex5() + + + function yylex5() { - $tokenMap = array( - 1 => 0, - 2 => 0, - ); + $tokenMap = array ( + 1 => 0, + 2 => 0, + ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/iS"; do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state SECTION'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state SECTION'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); + $tokenMap[$this->token]); } else { $yysubmatches = array(); } @@ -538,56 +505,56 @@ class Smarty_Internal_Configfilelexer } // skip this token continue; - } - } else { + } } else { throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); + ': ' . $this->data[$this->counter]); } break; } while (true); + } // end function - const SECTION = 5; + const SECTION = 5; function yy_r5_1($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_DOT; + $this->token = Smarty_Internal_Configfileparser::TPC_DOT; } - function yy_r5_2($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; - $this->yypopstate(); + $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; + $this->yypopstate(); } - public function yylex6() + + function yylex6() { - $tokenMap = array( - 1 => 0, - 2 => 0, - ); + $tokenMap = array ( + 1 => 0, + 2 => 0, + ); if ($this->counter >= strlen($this->data)) { return false; // end of input } $yy_global_pattern = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/iS"; do { - if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) { + if ($this->mbstring_overload ? preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns if (!count($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . - ' an empty string. Input "' . substr($this->data, - $this->counter, 5) . '... state TRIPPLE'); + ' an empty string. Input "' . substr($this->data, + $this->counter, 5) . '... state TRIPPLE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number if ($tokenMap[$this->token]) { // extract sub-patterns for passing to lex function $yysubmatches = array_slice($yysubmatches, $this->token + 1, - $tokenMap[$this->token]); + $tokenMap[$this->token]); } else { $yysubmatches = array(); } @@ -610,37 +577,36 @@ class Smarty_Internal_Configfilelexer } // skip this token continue; - } - } else { + } } else { throw new Exception('Unexpected input at line' . $this->line . - ': ' . $this->data[$this->counter]); + ': ' . $this->data[$this->counter]); } break; } while (true); + } // end function - const TRIPPLE = 6; + const TRIPPLE = 6; function yy_r6_1($yy_subpatterns) { - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; - $this->yypopstate(); - $this->yypushstate(self::START); + $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; + $this->yypopstate(); + $this->yypushstate(self::START); } - function yy_r6_2($yy_subpatterns) { - $to = strlen($this->data); - preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data, $this->counter, $to - $this->counter); - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; + $to = strlen($this->data); + preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); + if (isset($match[0][1])) { + $to = $match[0][1]; + } + $this->value = substr($this->data,$this->counter,$to-$this->counter); + $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; } -} + +} +?>
\ No newline at end of file |