2012-07-04 05:23:08 +00:00
< ? php
/**
2014-09-07 11:38:28 +00:00
* Smarty Internal Plugin Configfilelexer
* This is the lexer to break the config file source into tokens
*
* @ package Smarty
* @ subpackage Config
* @ author Uwe Tews
*/
2012-07-04 05:23:08 +00:00
/**
2014-09-07 11:38:28 +00:00
* Smarty Internal Plugin Configfilelexer
*/
2012-07-04 05:23:08 +00:00
class Smarty_Internal_Configfilelexer
{
public $data ;
public $counter ;
public $token ;
public $value ;
public $node ;
public $line ;
private $state = 1 ;
2014-09-07 11:38:28 +00:00
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
);
2012-07-04 05:23:08 +00:00
2014-09-07 11:38:28 +00:00
function __construct ( $data , $compiler )
2012-07-04 05:23:08 +00:00
{
// set instance object
self :: instance ( $this );
$this -> data = $data . " \n " ; //now all lines are \n-terminated
$this -> counter = 0 ;
$this -> line = 1 ;
2014-09-07 11:38:28 +00:00
$this -> compiler = $compiler ;
$this -> smarty = $compiler -> smarty ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
public static function & instance ( $new_instance = null )
{
static $instance = null ;
2014-09-07 11:38:28 +00:00
if ( isset ( $new_instance ) && is_object ( $new_instance )) {
2012-07-04 05:23:08 +00:00
$instance = $new_instance ;
2014-09-07 11:38:28 +00:00
}
2012-07-04 05:23:08 +00:00
return $instance ;
}
2014-09-07 11:38:28 +00:00
public function PrintTrace ()
{
$this -> yyTraceFILE = fopen ( 'php://output' , 'w' );
$this -> yyTracePrompt = '<br>' ;
}
2012-07-04 05:23:08 +00:00
private $_yy_state = 1 ;
private $_yy_stack = array ();
2014-09-07 11:38:28 +00:00
public function yylex ()
2012-07-04 05:23:08 +00:00
{
return $this -> { 'yylex' . $this -> _yy_state }();
}
2014-09-07 11:38:28 +00:00
public function yypushstate ( $state )
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
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 );
}
2012-07-04 05:23:08 +00:00
array_push ( $this -> _yy_stack , $this -> _yy_state );
$this -> _yy_state = $state ;
2014-09-07 11:38:28 +00:00
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 );
}
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yypopstate ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
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 );
}
2012-07-04 05:23:08 +00:00
$this -> _yy_state = array_pop ( $this -> _yy_stack );
2014-09-07 11:38:28 +00:00
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 );
}
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yybegin ( $state )
2012-07-04 05:23:08 +00:00
{
$this -> _yy_state = $state ;
2014-09-07 11:38:28 +00:00
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 );
}
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yylex1 ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
$tokenMap = array (
1 => 0 ,
2 => 0 ,
3 => 0 ,
4 => 0 ,
5 => 0 ,
6 => 0 ,
7 => 0 ,
8 => 0 ,
);
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
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 {
2014-09-07 11:38:28 +00:00
if ( preg_match ( $yy_global_pattern , $this -> data , $yymatches , null , $this -> counter )) {
2012-07-04 05:23:08 +00:00
$yysubmatches = $yymatches ;
$yymatches = array_filter ( $yymatches , 'strlen' ); // remove empty sub-patterns
if ( ! count ( $yymatches )) {
throw new Exception ( 'Error: lexing failed because a rule matched' .
2014-09-07 11:38:28 +00:00
' an empty string. Input "' . substr ( $this -> data ,
$this -> counter , 5 ) . '... state START' );
2012-07-04 05:23:08 +00:00
}
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 ,
2014-09-07 11:38:28 +00:00
$tokenMap [ $this -> token ]);
2012-07-04 05:23:08 +00:00
} else {
$yysubmatches = array ();
}
$this -> value = current ( $yymatches ); // token value
$r = $this -> { 'yy_r1_' . $this -> token }( $yysubmatches );
if ( $r === null ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$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 ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$this -> line += substr_count ( $this -> value , " \n " );
2014-09-07 11:38:28 +00:00
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
// skip this token
continue ;
2014-09-07 11:38:28 +00:00
}
} else {
2012-07-04 05:23:08 +00:00
throw new Exception ( 'Unexpected input at line' . $this -> line .
2014-09-07 11:38:28 +00:00
': ' . $this -> data [ $this -> counter ]);
2012-07-04 05:23:08 +00:00
}
break ;
} while ( true );
} // end function
const START = 1 ;
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_1 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_COMMENTSTART ;
$this -> yypushstate ( self :: COMMENT );
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_2 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_OPENB ;
$this -> yypushstate ( self :: SECTION );
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_3 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_CLOSEB ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_4 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_EQUAL ;
$this -> yypushstate ( self :: VALUE );
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_5 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
return false ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_6 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_NEWLINE ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_7 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_ID ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r1_8 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_OTHER ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yylex2 ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
$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 )) {
2012-07-04 05:23:08 +00:00
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 {
2014-09-07 11:38:28 +00:00
if ( preg_match ( $yy_global_pattern , $this -> data , $yymatches , null , $this -> counter )) {
2012-07-04 05:23:08 +00:00
$yysubmatches = $yymatches ;
$yymatches = array_filter ( $yymatches , 'strlen' ); // remove empty sub-patterns
if ( ! count ( $yymatches )) {
throw new Exception ( 'Error: lexing failed because a rule matched' .
2014-09-07 11:38:28 +00:00
' an empty string. Input "' . substr ( $this -> data ,
$this -> counter , 5 ) . '... state VALUE' );
2012-07-04 05:23:08 +00:00
}
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 ,
2014-09-07 11:38:28 +00:00
$tokenMap [ $this -> token ]);
2012-07-04 05:23:08 +00:00
} else {
$yysubmatches = array ();
}
$this -> value = current ( $yymatches ); // token value
$r = $this -> { 'yy_r2_' . $this -> token }( $yysubmatches );
if ( $r === null ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$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 ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$this -> line += substr_count ( $this -> value , " \n " );
2014-09-07 11:38:28 +00:00
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
// skip this token
continue ;
2014-09-07 11:38:28 +00:00
}
} else {
2012-07-04 05:23:08 +00:00
throw new Exception ( 'Unexpected input at line' . $this -> line .
2014-09-07 11:38:28 +00:00
': ' . $this -> data [ $this -> counter ]);
2012-07-04 05:23:08 +00:00
}
break ;
} while ( true );
} // end function
const VALUE = 2 ;
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_1 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
return false ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_2 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_FLOAT ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_3 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_INT ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_4 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_TRIPPLE_QUOTES ;
$this -> yypushstate ( self :: TRIPPLE );
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_5 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_SINGLE_QUOTED_STRING ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_6 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_DOUBLE_QUOTED_STRING ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_7 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
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 ();
}
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_8 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_NAKED_STRING ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r2_9 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_NAKED_STRING ;
$this -> value = " " ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yylex3 ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
$tokenMap = array (
1 => 0 ,
);
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
$yy_global_pattern = " / \ G([^ \n ]+?(?=[ \t \r ]* \n ))/iS " ;
do {
2014-09-07 11:38:28 +00:00
if ( preg_match ( $yy_global_pattern , $this -> data , $yymatches , null , $this -> counter )) {
2012-07-04 05:23:08 +00:00
$yysubmatches = $yymatches ;
$yymatches = array_filter ( $yymatches , 'strlen' ); // remove empty sub-patterns
if ( ! count ( $yymatches )) {
throw new Exception ( 'Error: lexing failed because a rule matched' .
2014-09-07 11:38:28 +00:00
' an empty string. Input "' . substr ( $this -> data ,
$this -> counter , 5 ) . '... state NAKED_STRING_VALUE' );
2012-07-04 05:23:08 +00:00
}
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 ,
2014-09-07 11:38:28 +00:00
$tokenMap [ $this -> token ]);
2012-07-04 05:23:08 +00:00
} else {
$yysubmatches = array ();
}
$this -> value = current ( $yymatches ); // token value
$r = $this -> { 'yy_r3_' . $this -> token }( $yysubmatches );
if ( $r === null ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$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 ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$this -> line += substr_count ( $this -> value , " \n " );
2014-09-07 11:38:28 +00:00
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
// skip this token
continue ;
2014-09-07 11:38:28 +00:00
}
} else {
2012-07-04 05:23:08 +00:00
throw new Exception ( 'Unexpected input at line' . $this -> line .
2014-09-07 11:38:28 +00:00
': ' . $this -> data [ $this -> counter ]);
2012-07-04 05:23:08 +00:00
}
break ;
} while ( true );
} // end function
const NAKED_STRING_VALUE = 3 ;
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r3_1 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_NAKED_STRING ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yylex4 ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
$tokenMap = array (
1 => 0 ,
2 => 0 ,
3 => 0 ,
);
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
$yy_global_pattern = " / \ G([ \t \r ]+)| \ G([^ \n ]+?(?=[ \t \r ]* \n ))| \ G( \n )/iS " ;
do {
2014-09-07 11:38:28 +00:00
if ( preg_match ( $yy_global_pattern , $this -> data , $yymatches , null , $this -> counter )) {
2012-07-04 05:23:08 +00:00
$yysubmatches = $yymatches ;
$yymatches = array_filter ( $yymatches , 'strlen' ); // remove empty sub-patterns
if ( ! count ( $yymatches )) {
throw new Exception ( 'Error: lexing failed because a rule matched' .
2014-09-07 11:38:28 +00:00
' an empty string. Input "' . substr ( $this -> data ,
$this -> counter , 5 ) . '... state COMMENT' );
2012-07-04 05:23:08 +00:00
}
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 ,
2014-09-07 11:38:28 +00:00
$tokenMap [ $this -> token ]);
2012-07-04 05:23:08 +00:00
} else {
$yysubmatches = array ();
}
$this -> value = current ( $yymatches ); // token value
$r = $this -> { 'yy_r4_' . $this -> token }( $yysubmatches );
if ( $r === null ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$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 ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$this -> line += substr_count ( $this -> value , " \n " );
2014-09-07 11:38:28 +00:00
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
// skip this token
continue ;
2014-09-07 11:38:28 +00:00
}
} else {
2012-07-04 05:23:08 +00:00
throw new Exception ( 'Unexpected input at line' . $this -> line .
2014-09-07 11:38:28 +00:00
': ' . $this -> data [ $this -> counter ]);
2012-07-04 05:23:08 +00:00
}
break ;
} while ( true );
} // end function
const COMMENT = 4 ;
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r4_1 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
return false ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r4_2 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_NAKED_STRING ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r4_3 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_NEWLINE ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yylex5 ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
$tokenMap = array (
1 => 0 ,
2 => 0 ,
);
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
$yy_global_pattern = " / \ G( \\ .)| \ G(.*?(?=[ \ .=[ \ ] \r \n ]))/iS " ;
do {
2014-09-07 11:38:28 +00:00
if ( preg_match ( $yy_global_pattern , $this -> data , $yymatches , null , $this -> counter )) {
2012-07-04 05:23:08 +00:00
$yysubmatches = $yymatches ;
$yymatches = array_filter ( $yymatches , 'strlen' ); // remove empty sub-patterns
if ( ! count ( $yymatches )) {
throw new Exception ( 'Error: lexing failed because a rule matched' .
2014-09-07 11:38:28 +00:00
' an empty string. Input "' . substr ( $this -> data ,
$this -> counter , 5 ) . '... state SECTION' );
2012-07-04 05:23:08 +00:00
}
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 ,
2014-09-07 11:38:28 +00:00
$tokenMap [ $this -> token ]);
2012-07-04 05:23:08 +00:00
} else {
$yysubmatches = array ();
}
$this -> value = current ( $yymatches ); // token value
$r = $this -> { 'yy_r5_' . $this -> token }( $yysubmatches );
if ( $r === null ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$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 ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$this -> line += substr_count ( $this -> value , " \n " );
2014-09-07 11:38:28 +00:00
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
// skip this token
continue ;
2014-09-07 11:38:28 +00:00
}
} else {
2012-07-04 05:23:08 +00:00
throw new Exception ( 'Unexpected input at line' . $this -> line .
2014-09-07 11:38:28 +00:00
': ' . $this -> data [ $this -> counter ]);
2012-07-04 05:23:08 +00:00
}
break ;
} while ( true );
} // end function
const SECTION = 5 ;
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r5_1 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_DOT ;
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r5_2 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_SECTION ;
$this -> yypopstate ();
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
public function yylex6 ()
2012-07-04 05:23:08 +00:00
{
2014-09-07 11:38:28 +00:00
$tokenMap = array (
1 => 0 ,
2 => 0 ,
);
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
$yy_global_pattern = " / \ G( \" \" \" (?=[ \t \r ]*[ \n #;]))| \ G([ \ S \ s])/iS " ;
do {
2014-09-07 11:38:28 +00:00
if ( preg_match ( $yy_global_pattern , $this -> data , $yymatches , null , $this -> counter )) {
2012-07-04 05:23:08 +00:00
$yysubmatches = $yymatches ;
$yymatches = array_filter ( $yymatches , 'strlen' ); // remove empty sub-patterns
if ( ! count ( $yymatches )) {
throw new Exception ( 'Error: lexing failed because a rule matched' .
2014-09-07 11:38:28 +00:00
' an empty string. Input "' . substr ( $this -> data ,
$this -> counter , 5 ) . '... state TRIPPLE' );
2012-07-04 05:23:08 +00:00
}
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 ,
2014-09-07 11:38:28 +00:00
$tokenMap [ $this -> token ]);
2012-07-04 05:23:08 +00:00
} else {
$yysubmatches = array ();
}
$this -> value = current ( $yymatches ); // token value
$r = $this -> { 'yy_r6_' . $this -> token }( $yysubmatches );
if ( $r === null ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$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 ) {
2014-09-07 11:38:28 +00:00
$this -> counter += strlen ( $this -> value );
2012-07-04 05:23:08 +00:00
$this -> line += substr_count ( $this -> value , " \n " );
2014-09-07 11:38:28 +00:00
if ( $this -> counter >= strlen ( $this -> data )) {
2012-07-04 05:23:08 +00:00
return false ; // end of input
}
// skip this token
continue ;
2014-09-07 11:38:28 +00:00
}
} else {
2012-07-04 05:23:08 +00:00
throw new Exception ( 'Unexpected input at line' . $this -> line .
2014-09-07 11:38:28 +00:00
': ' . $this -> data [ $this -> counter ]);
2012-07-04 05:23:08 +00:00
}
break ;
} while ( true );
} // end function
const TRIPPLE = 6 ;
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r6_1 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$this -> token = Smarty_Internal_Configfileparser :: TPC_TRIPPLE_QUOTES_END ;
$this -> yypopstate ();
$this -> yypushstate ( self :: START );
2012-07-04 05:23:08 +00:00
}
2014-09-07 11:38:28 +00:00
2012-07-04 05:23:08 +00:00
function yy_r6_2 ( $yy_subpatterns )
{
2014-09-07 11:38:28 +00:00
$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 ;
2012-07-04 05:23:08 +00:00
}
}
2014-09-07 11:38:28 +00:00