mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-05 10:54:27 +02:00
- optimization of lexer speed https://github.com/smarty-php/smarty/issues/311
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
===== 3.1.31-dev ===== (xx.xx.xx)
|
===== 3.1.31-dev ===== (xx.xx.xx)
|
||||||
|
07.11.2016
|
||||||
|
- optimization of lexer speed https://github.com/smarty-php/smarty/issues/311
|
||||||
|
|
||||||
27.10.2016
|
27.10.2016
|
||||||
- bugfix template function definitions array has not been cached between Smarty::fetch() and Smarty::display() calls
|
- bugfix template function definitions array has not been cached between Smarty::fetch() and Smarty::display() calls
|
||||||
https://github.com/smarty-php/smarty/issues/301
|
https://github.com/smarty-php/smarty/issues/301
|
||||||
|
@@ -25,6 +25,12 @@ class Smarty_Internal_Configfilelexer
|
|||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
public $data;
|
public $data;
|
||||||
|
/**
|
||||||
|
* Source length
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $dataLenght = null;
|
||||||
/**
|
/**
|
||||||
* byte counter
|
* byte counter
|
||||||
*
|
*
|
||||||
@@ -120,9 +126,8 @@ class Smarty_Internal_Configfilelexer
|
|||||||
*/
|
*/
|
||||||
function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
|
function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
|
||||||
{
|
{
|
||||||
// set instance object
|
|
||||||
self::instance($this);
|
|
||||||
$this->data = $data . "\n"; //now all lines are \n-terminated
|
$this->data = $data . "\n"; //now all lines are \n-terminated
|
||||||
|
$this->dataLenght = strlen($data);
|
||||||
$this->counter = 0;
|
$this->counter = 0;
|
||||||
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
|
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
|
||||||
$this->counter += strlen($match[0]);
|
$this->counter += strlen($match[0]);
|
||||||
@@ -133,15 +138,6 @@ class Smarty_Internal_Configfilelexer
|
|||||||
$this->configBooleanize = $this->smarty->config_booleanize;
|
$this->configBooleanize = $this->smarty->config_booleanize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function &instance($new_instance = null)
|
|
||||||
{
|
|
||||||
static $instance = null;
|
|
||||||
if (isset($new_instance) && is_object($new_instance)) {
|
|
||||||
$instance = $new_instance;
|
|
||||||
}
|
|
||||||
return $instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function PrintTrace()
|
public function PrintTrace()
|
||||||
{
|
{
|
||||||
$this->yyTraceFILE = fopen('php://output', 'w');
|
$this->yyTraceFILE = fopen('php://output', 'w');
|
||||||
|
@@ -91,8 +91,6 @@ class Smarty_Internal_Configfileparser
|
|||||||
*/
|
*/
|
||||||
function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
|
function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
|
||||||
{
|
{
|
||||||
// set instance object
|
|
||||||
self::instance($this);
|
|
||||||
$this->lex = $lex;
|
$this->lex = $lex;
|
||||||
$this->smarty = $compiler->smarty;
|
$this->smarty = $compiler->smarty;
|
||||||
$this->compiler = $compiler;
|
$this->compiler = $compiler;
|
||||||
@@ -100,20 +98,6 @@ class Smarty_Internal_Configfileparser
|
|||||||
$this->configReadHidden = $this->smarty->config_read_hidden;
|
$this->configReadHidden = $this->smarty->config_read_hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param null $new_instance
|
|
||||||
*
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
public static function &instance($new_instance = null)
|
|
||||||
{
|
|
||||||
static $instance = null;
|
|
||||||
if (isset($new_instance) && is_object($new_instance)) {
|
|
||||||
$instance = $new_instance;
|
|
||||||
}
|
|
||||||
return $instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse optional boolean keywords
|
* parse optional boolean keywords
|
||||||
*
|
*
|
||||||
|
@@ -25,6 +25,13 @@ class Smarty_Internal_Templatelexer
|
|||||||
*/
|
*/
|
||||||
public $data;
|
public $data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source length
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $dataLenght = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* byte counter
|
* byte counter
|
||||||
*
|
*
|
||||||
@@ -225,6 +232,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
|
function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
|
||||||
{
|
{
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
|
$this->dataLenght = strlen($data);
|
||||||
$this->counter = 0;
|
$this->counter = 0;
|
||||||
if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) {
|
if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) {
|
||||||
$this->counter += strlen($match[0]);
|
$this->counter += strlen($match[0]);
|
||||||
@@ -366,7 +374,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
$this->compiler->getTagCompiler('private_php')->parsePhp($this);
|
$this->compiler->getTagCompiler('private_php')->parsePhp($this);
|
||||||
}
|
}
|
||||||
text {
|
text {
|
||||||
$to = strlen($this->data);
|
$to = $this->dataLenght;
|
||||||
preg_match("/($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])/i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
|
preg_match("/($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])/i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
|
||||||
if (isset($match[0][1])) {
|
if (isset($match[0][1])) {
|
||||||
$to = $match[0][1];
|
$to = $match[0][1];
|
||||||
@@ -606,7 +614,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
text {
|
text {
|
||||||
$to = strlen($this->data);
|
$to = $this->dataLenght;
|
||||||
preg_match("/{$this->ldel}[\/]?literal{$this->rdel}/i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
|
preg_match("/{$this->ldel}[\/]?literal{$this->rdel}/i",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
|
||||||
if (isset($match[0][1])) {
|
if (isset($match[0][1])) {
|
||||||
$to = $match[0][1];
|
$to = $match[0][1];
|
||||||
@@ -670,7 +678,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
|
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
|
||||||
}
|
}
|
||||||
text {
|
text {
|
||||||
$to = strlen($this->data);
|
$to = $this->dataLenght;
|
||||||
$this->value = substr($this->data,$this->counter,$to-$this->counter);
|
$this->value = substr($this->data,$this->counter,$to-$this->counter);
|
||||||
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
|
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
|
||||||
}
|
}
|
||||||
|
@@ -114,7 +114,7 @@ class Smarty extends Smarty_Internal_TemplateBase
|
|||||||
/**
|
/**
|
||||||
* smarty version
|
* smarty version
|
||||||
*/
|
*/
|
||||||
const SMARTY_VERSION = '3.1.31-dev/40';
|
const SMARTY_VERSION = '3.1.31-dev/41';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* define variable scopes
|
* define variable scopes
|
||||||
|
@@ -111,11 +111,11 @@ class Smarty_Internal_Config_File_Compiler
|
|||||||
$this->smarty->_debug->start_compile($this->template);
|
$this->smarty->_debug->start_compile($this->template);
|
||||||
}
|
}
|
||||||
// init the lexer/parser to compile the config file
|
// init the lexer/parser to compile the config file
|
||||||
/* @var Smarty_Internal_ConfigFileLexer $lex */
|
/* @var Smarty_Internal_ConfigFileLexer $this->lex */
|
||||||
$lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) . "\n",
|
$this->lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) . "\n",
|
||||||
$this);
|
$this);
|
||||||
/* @var Smarty_Internal_ConfigFileParser $parser */
|
/* @var Smarty_Internal_ConfigFileParser $this->parser */
|
||||||
$parser = new $this->parser_class($lex, $this);
|
$this->parser = new $this->parser_class($this->lex, $this);
|
||||||
|
|
||||||
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
|
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
|
||||||
$mbEncoding = mb_internal_encoding();
|
$mbEncoding = mb_internal_encoding();
|
||||||
@@ -125,17 +125,17 @@ class Smarty_Internal_Config_File_Compiler
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->smarty->_parserdebug) {
|
if ($this->smarty->_parserdebug) {
|
||||||
$parser->PrintTrace();
|
$this->parser->PrintTrace();
|
||||||
}
|
}
|
||||||
// get tokens from lexer and parse them
|
// get tokens from lexer and parse them
|
||||||
while ($lex->yylex()) {
|
while ($this->lex->yylex()) {
|
||||||
if ($this->smarty->_parserdebug) {
|
if ($this->smarty->_parserdebug) {
|
||||||
echo "<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
|
echo "<br>Parsing {$this->parser->yyTokenName[$this->lex->token]} Token {$this->lex->value} Line {$this->lex->line} \n";
|
||||||
}
|
}
|
||||||
$parser->doParse($lex->token, $lex->value);
|
$this->parser->doParse($this->lex->token, $this->lex->value);
|
||||||
}
|
}
|
||||||
// finish parsing process
|
// finish parsing process
|
||||||
$parser->doParse(0, 0);
|
$this->parser->doParse(0, 0);
|
||||||
|
|
||||||
if ($mbEncoding) {
|
if ($mbEncoding) {
|
||||||
mb_internal_encoding($mbEncoding);
|
mb_internal_encoding($mbEncoding);
|
||||||
@@ -166,8 +166,6 @@ class Smarty_Internal_Config_File_Compiler
|
|||||||
*/
|
*/
|
||||||
public function trigger_config_file_error($args = null)
|
public function trigger_config_file_error($args = null)
|
||||||
{
|
{
|
||||||
$this->lex = Smarty_Internal_Configfilelexer::instance();
|
|
||||||
$this->parser = Smarty_Internal_Configfileparser::instance();
|
|
||||||
// get config source line which has error
|
// get config source line which has error
|
||||||
$line = $this->lex->line;
|
$line = $this->lex->line;
|
||||||
if (isset($args)) {
|
if (isset($args)) {
|
||||||
|
@@ -28,6 +28,13 @@ class Smarty_Internal_Configfilelexer
|
|||||||
*/
|
*/
|
||||||
public $data;
|
public $data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source length
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $dataLenght = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* byte counter
|
* byte counter
|
||||||
*
|
*
|
||||||
@@ -109,7 +116,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
/**
|
/**
|
||||||
* storage for assembled token patterns
|
* storage for assembled token patterns
|
||||||
*
|
*
|
||||||
* @var sring
|
* @var string
|
||||||
*/
|
*/
|
||||||
private $yy_global_pattern1 = null;
|
private $yy_global_pattern1 = null;
|
||||||
|
|
||||||
@@ -139,9 +146,8 @@ class Smarty_Internal_Configfilelexer
|
|||||||
*/
|
*/
|
||||||
function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
|
function __construct($data, Smarty_Internal_Config_File_Compiler $compiler)
|
||||||
{
|
{
|
||||||
// set instance object
|
|
||||||
self::instance($this);
|
|
||||||
$this->data = $data . "\n"; //now all lines are \n-terminated
|
$this->data = $data . "\n"; //now all lines are \n-terminated
|
||||||
|
$this->dataLenght = strlen($data);
|
||||||
$this->counter = 0;
|
$this->counter = 0;
|
||||||
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
|
if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) {
|
||||||
$this->counter += strlen($match[ 0 ]);
|
$this->counter += strlen($match[ 0 ]);
|
||||||
@@ -152,15 +158,6 @@ class Smarty_Internal_Configfilelexer
|
|||||||
$this->configBooleanize = $this->smarty->config_booleanize;
|
$this->configBooleanize = $this->smarty->config_booleanize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function &instance($new_instance = null)
|
|
||||||
{
|
|
||||||
static $instance = null;
|
|
||||||
if (isset($new_instance) && is_object($new_instance)) {
|
|
||||||
$instance = $new_instance;
|
|
||||||
}
|
|
||||||
return $instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function PrintTrace()
|
public function PrintTrace()
|
||||||
{
|
{
|
||||||
$this->yyTraceFILE = fopen('php://output', 'w');
|
$this->yyTraceFILE = fopen('php://output', 'w');
|
||||||
@@ -223,17 +220,19 @@ class Smarty_Internal_Configfilelexer
|
|||||||
$this->yy_global_pattern1 =
|
$this->yy_global_pattern1 =
|
||||||
"/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS";
|
"/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -255,7 +254,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -328,17 +327,19 @@ class Smarty_Internal_Configfilelexer
|
|||||||
$this->yy_global_pattern2 =
|
$this->yy_global_pattern2 =
|
||||||
"/\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)/isS";
|
"/\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)/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -360,7 +361,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -452,17 +453,19 @@ class Smarty_Internal_Configfilelexer
|
|||||||
if (!isset($this->yy_global_pattern3)) {
|
if (!isset($this->yy_global_pattern3)) {
|
||||||
$this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS";
|
$this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -484,7 +487,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -512,17 +515,19 @@ class Smarty_Internal_Configfilelexer
|
|||||||
if (!isset($this->yy_global_pattern4)) {
|
if (!isset($this->yy_global_pattern4)) {
|
||||||
$this->yy_global_pattern4 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS";
|
$this->yy_global_pattern4 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -544,7 +549,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -584,17 +589,19 @@ class Smarty_Internal_Configfilelexer
|
|||||||
if (!isset($this->yy_global_pattern5)) {
|
if (!isset($this->yy_global_pattern5)) {
|
||||||
$this->yy_global_pattern5 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS";
|
$this->yy_global_pattern5 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -616,7 +623,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -650,17 +657,19 @@ class Smarty_Internal_Configfilelexer
|
|||||||
if (!isset($this->yy_global_pattern6)) {
|
if (!isset($this->yy_global_pattern6)) {
|
||||||
$this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS";
|
$this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -682,7 +691,7 @@ class Smarty_Internal_Configfilelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
|
@@ -168,8 +168,6 @@ class Smarty_Internal_Configfileparser
|
|||||||
*/
|
*/
|
||||||
function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
|
function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler)
|
||||||
{
|
{
|
||||||
// set instance object
|
|
||||||
self::instance($this);
|
|
||||||
$this->lex = $lex;
|
$this->lex = $lex;
|
||||||
$this->smarty = $compiler->smarty;
|
$this->smarty = $compiler->smarty;
|
||||||
$this->compiler = $compiler;
|
$this->compiler = $compiler;
|
||||||
@@ -177,20 +175,6 @@ class Smarty_Internal_Configfileparser
|
|||||||
$this->configReadHidden = $this->smarty->config_read_hidden;
|
$this->configReadHidden = $this->smarty->config_read_hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param null $new_instance
|
|
||||||
*
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
public static function &instance($new_instance = null)
|
|
||||||
{
|
|
||||||
static $instance = null;
|
|
||||||
if (isset($new_instance) && is_object($new_instance)) {
|
|
||||||
$instance = $new_instance;
|
|
||||||
}
|
|
||||||
return $instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse optional boolean keywords
|
* parse optional boolean keywords
|
||||||
*
|
*
|
||||||
@@ -736,7 +720,7 @@ class Smarty_Internal_Configfileparser
|
|||||||
while ($this->yyidx >= 0) {
|
while ($this->yyidx >= 0) {
|
||||||
$this->yy_pop_parser_stack();
|
$this->yy_pop_parser_stack();
|
||||||
}
|
}
|
||||||
#line 255 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 239 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
|
|
||||||
$this->internalError = true;
|
$this->internalError = true;
|
||||||
$this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
|
$this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
|
||||||
@@ -771,27 +755,27 @@ class Smarty_Internal_Configfileparser
|
|||||||
6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 14 => 14,
|
6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 14 => 14,
|
||||||
15 => 15, 16 => 16, 17 => 17, 18 => 17,);
|
15 => 15, 16 => 16, 17 => 17, 18 => 17,);
|
||||||
|
|
||||||
#line 261 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 245 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r0()
|
function yy_r0()
|
||||||
{
|
{
|
||||||
$this->_retvalue = null;
|
$this->_retvalue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 266 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 250 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r1()
|
function yy_r1()
|
||||||
{
|
{
|
||||||
$this->add_global_vars($this->yystack[ $this->yyidx + 0 ]->minor);
|
$this->add_global_vars($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||||
$this->_retvalue = null;
|
$this->_retvalue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 280 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 264 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r4()
|
function yy_r4()
|
||||||
{
|
{
|
||||||
$this->add_section_vars($this->yystack[ $this->yyidx + - 3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
|
$this->add_section_vars($this->yystack[ $this->yyidx + - 3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor);
|
||||||
$this->_retvalue = null;
|
$this->_retvalue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 269 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r5()
|
function yy_r5()
|
||||||
{
|
{
|
||||||
if ($this->configReadHidden) {
|
if ($this->configReadHidden) {
|
||||||
@@ -801,75 +785,75 @@ class Smarty_Internal_Configfileparser
|
|||||||
$this->_retvalue = null;
|
$this->_retvalue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 293 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 277 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r6()
|
function yy_r6()
|
||||||
{
|
{
|
||||||
$this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
|
$this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 297 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 281 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r7()
|
function yy_r7()
|
||||||
{
|
{
|
||||||
$this->_retvalue =
|
$this->_retvalue =
|
||||||
array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, Array($this->yystack[ $this->yyidx + 0 ]->minor));
|
array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, Array($this->yystack[ $this->yyidx + 0 ]->minor));
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 301 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 285 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r8()
|
function yy_r8()
|
||||||
{
|
{
|
||||||
$this->_retvalue = Array();
|
$this->_retvalue = Array();
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 307 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 291 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r9()
|
function yy_r9()
|
||||||
{
|
{
|
||||||
$this->_retvalue = Array("key" => $this->yystack[ $this->yyidx + - 2 ]->minor,
|
$this->_retvalue = Array("key" => $this->yystack[ $this->yyidx + - 2 ]->minor,
|
||||||
"value" => $this->yystack[ $this->yyidx + 0 ]->minor);
|
"value" => $this->yystack[ $this->yyidx + 0 ]->minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 296 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r10()
|
function yy_r10()
|
||||||
{
|
{
|
||||||
$this->_retvalue = (float) $this->yystack[ $this->yyidx + 0 ]->minor;
|
$this->_retvalue = (float) $this->yystack[ $this->yyidx + 0 ]->minor;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 300 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r11()
|
function yy_r11()
|
||||||
{
|
{
|
||||||
$this->_retvalue = (int) $this->yystack[ $this->yyidx + 0 ]->minor;
|
$this->_retvalue = (int) $this->yystack[ $this->yyidx + 0 ]->minor;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 304 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r12()
|
function yy_r12()
|
||||||
{
|
{
|
||||||
$this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor);
|
$this->_retvalue = $this->parse_bool($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 308 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r13()
|
function yy_r13()
|
||||||
{
|
{
|
||||||
$this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
|
$this->_retvalue = self::parse_single_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 328 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 312 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r14()
|
function yy_r14()
|
||||||
{
|
{
|
||||||
$this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
|
$this->_retvalue = self::parse_double_quoted_string($this->yystack[ $this->yyidx + 0 ]->minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 332 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 316 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r15()
|
function yy_r15()
|
||||||
{
|
{
|
||||||
$this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + - 1 ]->minor);
|
$this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[ $this->yyidx + - 1 ]->minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 336 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 320 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r16()
|
function yy_r16()
|
||||||
{
|
{
|
||||||
$this->_retvalue = '';
|
$this->_retvalue = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 340 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 324 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
function yy_r17()
|
function yy_r17()
|
||||||
{
|
{
|
||||||
$this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
|
$this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor;
|
||||||
@@ -927,7 +911,7 @@ class Smarty_Internal_Configfileparser
|
|||||||
|
|
||||||
public function yy_syntax_error($yymajor, $TOKEN)
|
public function yy_syntax_error($yymajor, $TOKEN)
|
||||||
{
|
{
|
||||||
#line 248 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 232 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
|
|
||||||
$this->internalError = true;
|
$this->internalError = true;
|
||||||
$this->yymajor = $yymajor;
|
$this->yymajor = $yymajor;
|
||||||
@@ -942,7 +926,7 @@ class Smarty_Internal_Configfileparser
|
|||||||
while ($this->yyidx >= 0) {
|
while ($this->yyidx >= 0) {
|
||||||
$this->yy_pop_parser_stack();
|
$this->yy_pop_parser_stack();
|
||||||
}
|
}
|
||||||
#line 241 "../smarty/lexer/smarty_internal_configfileparser.y"
|
#line 225 "../smarty/lexer/smarty_internal_configfileparser.y"
|
||||||
|
|
||||||
$this->successful = !$this->internalError;
|
$this->successful = !$this->internalError;
|
||||||
$this->internalError = false;
|
$this->internalError = false;
|
||||||
|
@@ -25,6 +25,13 @@ class Smarty_Internal_Templatelexer
|
|||||||
*/
|
*/
|
||||||
public $data;
|
public $data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source length
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $dataLenght = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* byte counter
|
* byte counter
|
||||||
*
|
*
|
||||||
@@ -202,6 +209,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
|
function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler)
|
||||||
{
|
{
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
|
$this->dataLenght = strlen($data);
|
||||||
$this->counter = 0;
|
$this->counter = 0;
|
||||||
if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) {
|
if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) {
|
||||||
$this->counter += strlen($match[ 0 ]);
|
$this->counter += strlen($match[ 0 ]);
|
||||||
@@ -291,17 +299,19 @@ class Smarty_Internal_Templatelexer
|
|||||||
")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel .
|
")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel .
|
||||||
")|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|(<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|([?][>])|([%][>]))|\G([\S\s])/isS";
|
")|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|(<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|([?][>])|([%][>]))|\G([\S\s])/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -323,7 +333,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -405,7 +415,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
function yy_r1_19()
|
function yy_r1_19()
|
||||||
{
|
{
|
||||||
|
|
||||||
$to = strlen($this->data);
|
$to = $this->dataLenght;
|
||||||
preg_match("/($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])/i",
|
preg_match("/($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|(<script\s+language\s*=\s*[\"']?\s*php\s*[\"']?\s*>)|([?][>])|([%][>])/i",
|
||||||
$this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
|
$this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
|
||||||
if (isset($match[ 0 ][ 1 ])) {
|
if (isset($match[ 0 ][ 1 ])) {
|
||||||
@@ -426,17 +436,19 @@ class Smarty_Internal_Templatelexer
|
|||||||
$this->ldel . "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel .
|
$this->ldel . "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel .
|
||||||
"\\s*[\/])|\G(" . $this->ldel . "\\s*)/isS";
|
"\\s*[\/])|\G(" . $this->ldel . "\\s*)/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -458,7 +470,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -567,17 +579,19 @@ class Smarty_Internal_Templatelexer
|
|||||||
$this->yy_global_pattern3 = "/\G(\\s*" . $this->rdel . ")|\G(" . $this->ldel .
|
$this->yy_global_pattern3 = "/\G(\\s*" . $this->rdel . ")|\G(" . $this->ldel .
|
||||||
"\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+(is\\s+(not\\s+)?(odd|even|div)\\s+by)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G(([!]\\s*)|(not\\s+))|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS";
|
"\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+(is\\s+(not\\s+)?(odd|even|div)\\s+by)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G(([!]\\s*)|(not\\s+))|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -599,7 +613,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -912,17 +926,19 @@ class Smarty_Internal_Templatelexer
|
|||||||
"/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" .
|
"/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" .
|
||||||
$this->rdel . ")|\G([\S\s])/isS";
|
$this->rdel . ")|\G([\S\s])/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -944,7 +960,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -982,7 +998,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
function yy_r4_3()
|
function yy_r4_3()
|
||||||
{
|
{
|
||||||
|
|
||||||
$to = strlen($this->data);
|
$to = $this->dataLenght;
|
||||||
preg_match("/{$this->ldel}[\/]?literal{$this->rdel}/i", $this->data, $match, PREG_OFFSET_CAPTURE,
|
preg_match("/{$this->ldel}[\/]?literal{$this->rdel}/i", $this->data, $match, PREG_OFFSET_CAPTURE,
|
||||||
$this->counter);
|
$this->counter);
|
||||||
if (isset($match[ 0 ][ 1 ])) {
|
if (isset($match[ 0 ][ 1 ])) {
|
||||||
@@ -1004,17 +1020,19 @@ class Smarty_Internal_Templatelexer
|
|||||||
"\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" .
|
"\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" .
|
||||||
$this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS";
|
$this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS";
|
||||||
}
|
}
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if (!isset($this->dataLenght)) {
|
||||||
|
$this->dataLenght = strlen($this->data);
|
||||||
|
}
|
||||||
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) {
|
if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) {
|
||||||
$yysubmatches = $yymatches;
|
if (!isset($yymatches[ 0 ][ 1 ])) {
|
||||||
if (strlen($yysubmatches[ 0 ]) < 200) {
|
$yymatches = preg_grep("/(.|\s)+/", $yymatches);
|
||||||
$yymatches = preg_grep("/(.|\s)+/", $yysubmatches);
|
|
||||||
} else {
|
} else {
|
||||||
$yymatches = array_filter($yymatches, 'strlen');
|
$yymatches = array_filter($yymatches);
|
||||||
}
|
}
|
||||||
if (empty($yymatches)) {
|
if (empty($yymatches)) {
|
||||||
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' .
|
||||||
@@ -1036,7 +1054,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
} elseif ($r === false) {
|
} elseif ($r === false) {
|
||||||
$this->counter += strlen($this->value);
|
$this->counter += strlen($this->value);
|
||||||
$this->line += substr_count($this->value, "\n");
|
$this->line += substr_count($this->value, "\n");
|
||||||
if ($this->counter >= strlen($this->data)) {
|
if ($this->counter >= $this->dataLenght) {
|
||||||
return false; // end of input
|
return false; // end of input
|
||||||
}
|
}
|
||||||
// skip this token
|
// skip this token
|
||||||
@@ -1141,7 +1159,7 @@ class Smarty_Internal_Templatelexer
|
|||||||
function yy_r5_14()
|
function yy_r5_14()
|
||||||
{
|
{
|
||||||
|
|
||||||
$to = strlen($this->data);
|
$to = $this->dataLenght;
|
||||||
$this->value = substr($this->data, $this->counter, $to - $this->counter);
|
$this->value = substr($this->data, $this->counter, $to - $this->counter);
|
||||||
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
|
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user