| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  | <?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 Templatelexer | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class Smarty_Internal_Configfilelexer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public $data; | 
					
						
							|  |  |  |     public $counter; | 
					
						
							|  |  |  |     public $token; | 
					
						
							|  |  |  |     public $value; | 
					
						
							|  |  |  |     public $node; | 
					
						
							|  |  |  |     public $line; | 
					
						
							|  |  |  |     private $state = 1; | 
					
						
							|  |  |  |     public $smarty_token_names = array (		// Text for parser error messages
 | 
					
						
							|  |  |  |    				); | 
					
						
							|  |  |  |     				 | 
					
						
							|  |  |  |     				 | 
					
						
							| 
									
										
										
										
											2009-08-08 17:28:23 +00:00
										 |  |  |     function __construct($data, $smarty) | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |         // set instance object
 | 
					
						
							|  |  |  |         self::instance($this);  | 
					
						
							|  |  |  |         $this->data = $data; | 
					
						
							|  |  |  |         $this->counter = 0; | 
					
						
							|  |  |  |         $this->line = 1; | 
					
						
							| 
									
										
										
										
											2009-08-08 17:28:23 +00:00
										 |  |  |         $this->smarty = $smarty;  | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |      } | 
					
						
							|  |  |  |     public static function &instance($new_instance = null) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         static $instance = null; | 
					
						
							|  |  |  |         if (isset($new_instance) && is_object($new_instance)) | 
					
						
							|  |  |  |             $instance = $new_instance; | 
					
						
							|  |  |  |         return $instance; | 
					
						
							|  |  |  |     }  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private $_yy_state = 1; | 
					
						
							|  |  |  |     private $_yy_stack = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function yylex() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return $this->{'yylex' . $this->_yy_state}(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function yypushstate($state) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         array_push($this->_yy_stack, $this->_yy_state); | 
					
						
							|  |  |  |         $this->_yy_state = $state; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function yypopstate() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->_yy_state = array_pop($this->_yy_stack); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function yybegin($state) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->_yy_state = $state; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function yylex1() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $tokenMap = array ( | 
					
						
							|  |  |  |               1 => 0, | 
					
						
							|  |  |  |               2 => 0, | 
					
						
							|  |  |  |               3 => 0, | 
					
						
							|  |  |  |               4 => 0, | 
					
						
							|  |  |  |               5 => 0, | 
					
						
							|  |  |  |               6 => 0, | 
					
						
							|  |  |  |               7 => 0, | 
					
						
							|  |  |  |               8 => 1, | 
					
						
							|  |  |  |               10 => 1, | 
					
						
							|  |  |  |               12 => 0, | 
					
						
							|  |  |  |               13 => 0, | 
					
						
							|  |  |  |               14 => 0, | 
					
						
							|  |  |  |               15 => 0, | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |         if ($this->counter >= strlen($this->data)) { | 
					
						
							|  |  |  |             return false; // end of input
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $yy_global_pattern = "/^(#)|^('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*')|^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)/"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         do { | 
					
						
							|  |  |  |             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) { | 
					
						
							|  |  |  |                 $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'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 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]); | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     $yysubmatches = array(); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $this->value = current($yymatches); // token value
 | 
					
						
							|  |  |  |                 $r = $this->{'yy_r1_' . $this->token}($yysubmatches); | 
					
						
							|  |  |  |                 if ($r === null) { | 
					
						
							|  |  |  |                     $this->counter += strlen($this->value); | 
					
						
							|  |  |  |                     $this->line += substr_count($this->value, "\n"); | 
					
						
							|  |  |  |                     // accept this token
 | 
					
						
							|  |  |  |                     return true; | 
					
						
							|  |  |  |                 } elseif ($r === true) { | 
					
						
							|  |  |  |                     // we have changed state
 | 
					
						
							|  |  |  |                     // process this token in the new state
 | 
					
						
							|  |  |  |                     return $this->yylex(); | 
					
						
							|  |  |  |                 } elseif ($r === false) { | 
					
						
							|  |  |  |                     $this->counter += strlen($this->value); | 
					
						
							|  |  |  |                     $this->line += substr_count($this->value, "\n"); | 
					
						
							|  |  |  |                     if ($this->counter >= strlen($this->data)) { | 
					
						
							|  |  |  |                         return false; // end of input
 | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     // skip this token
 | 
					
						
							|  |  |  |                     continue; | 
					
						
							|  |  |  |                 } else {                    $yy_yymore_patterns = array( | 
					
						
							|  |  |  |         1 => array(0, "^('[^'\\\\\\\\]*(?:\\\\\\\\.[^'\\\\\\\\]*)*')|^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         2 => array(0, "^(\"\"\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\"\"\")|^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         3 => array(0, "^(\"[^\"\\\\\\\\]*(?:\\\\\\\\.[^\"\\\\\\\\]*)*\")|^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         4 => array(0, "^(\\[)|^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         5 => array(0, "^(])|^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         6 => array(0, "^(\\s*=\\s*)|^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         7 => array(0, "^(\\d+(\\.\\d+)?)|^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         8 => array(1, "^((\n|\r\n))|^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         10 => array(2, "^([\s]+)|^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         12 => array(2, "^(\\.)|^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         13 => array(2, "^(\\w+)|^(.)"), | 
					
						
							|  |  |  |         14 => array(2, "^(.)"), | 
					
						
							|  |  |  |         15 => array(2, ""), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     // yymore is needed
 | 
					
						
							|  |  |  |                     do { | 
					
						
							|  |  |  |                         if (!strlen($yy_yymore_patterns[$this->token][1])) { | 
					
						
							|  |  |  |                             throw new Exception('cannot do yymore for the last token'); | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         $yysubmatches = array(); | 
					
						
							|  |  |  |                         if (preg_match('/' . $yy_yymore_patterns[$this->token][1] . '/', | 
					
						
							|  |  |  |                               substr($this->data, $this->counter), $yymatches)) { | 
					
						
							|  |  |  |                             $yysubmatches = $yymatches; | 
					
						
							|  |  |  |                             $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
 | 
					
						
							|  |  |  |                             next($yymatches); // skip global match
 | 
					
						
							|  |  |  |                             $this->token += key($yymatches) + $yy_yymore_patterns[$this->token][0]; // token number
 | 
					
						
							|  |  |  |                             $this->value = current($yymatches); // token value
 | 
					
						
							|  |  |  |                             $this->line = substr_count($this->value, "\n"); | 
					
						
							|  |  |  |                             if ($tokenMap[$this->token]) { | 
					
						
							|  |  |  |                                 // extract sub-patterns for passing to lex function
 | 
					
						
							|  |  |  |                                 $yysubmatches = array_slice($yysubmatches, $this->token + 1, | 
					
						
							|  |  |  |                                     $tokenMap[$this->token]); | 
					
						
							|  |  |  |                             } else { | 
					
						
							|  |  |  |                                 $yysubmatches = array(); | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     	$r = $this->{'yy_r1_' . $this->token}($yysubmatches); | 
					
						
							|  |  |  |                     } while ($r !== null && !is_bool($r)); | 
					
						
							|  |  |  | 			        if ($r === true) { | 
					
						
							|  |  |  | 			            // we have changed state
 | 
					
						
							|  |  |  | 			            // process this token in the new state
 | 
					
						
							|  |  |  | 			            return $this->yylex(); | 
					
						
							|  |  |  |                     } elseif ($r === false) { | 
					
						
							|  |  |  |                         $this->counter += strlen($this->value); | 
					
						
							|  |  |  |                         $this->line += substr_count($this->value, "\n"); | 
					
						
							|  |  |  |                         if ($this->counter >= strlen($this->data)) { | 
					
						
							|  |  |  |                             return false; // end of input
 | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         // skip this token
 | 
					
						
							|  |  |  |                         continue; | 
					
						
							|  |  |  | 			        } else { | 
					
						
							|  |  |  | 	                    // accept
 | 
					
						
							|  |  |  | 	                    $this->counter += strlen($this->value); | 
					
						
							|  |  |  | 	                    $this->line += substr_count($this->value, "\n"); | 
					
						
							|  |  |  | 	                    return true; | 
					
						
							|  |  |  | 			        } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 throw new Exception('Unexpected input at line' . $this->line . | 
					
						
							|  |  |  |                     ': ' . $this->data[$this->counter]); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         } while (true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } // end function
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const START = 1; | 
					
						
							|  |  |  |     function yy_r1_1($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_2($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_SI_QSTR; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_3($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_ML_QSTR; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_4($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_DO_QSTR; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_5($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_6($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_7($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_8($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_NUMBER; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_10($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_EOL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_12($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_SPACE; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_13($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_DOT; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_14($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_ID; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function yy_r1_15($yy_subpatterns) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |