Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F1141099
smarty_internal_config_file_compiler.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
smarty_internal_config_file_compiler.php
View Options
<?php
/**
* Smarty Internal Plugin Config File Compiler
*
* This is the config file compiler class. It calls the lexer and parser to
* perform the compiling.
*
* @package Smarty
* @subpackage Config
* @author Uwe Tews
*/
/**
* Main config file compiler class
*
* @package Smarty
* @subpackage Config
*/
class
Smarty_Internal_Config_File_Compiler
{
/**
* Lexer object
*
* @var object
*/
public
$lex
;
/**
* Parser object
*
* @var object
*/
public
$parser
;
/**
* Smarty object
*
* @var Smarty object
*/
public
$smarty
;
/**
* Smarty object
*
* @var Smarty_Internal_Config object
*/
public
$config
;
/**
* Compiled config data sections and variables
*
* @var array
*/
public
$config_data
=
array
();
/**
* Initialize compiler
*
* @param Smarty $smarty base instance
*/
public
function
__construct
(
$smarty
)
{
$this
->
smarty
=
$smarty
;
$this
->
config_data
[
'sections'
]
=
array
();
$this
->
config_data
[
'vars'
]
=
array
();
}
/**
* Method to compile a Smarty template.
*
* @param Smarty_Internal_Config $config config object
* @return bool true if compiling succeeded, false if it failed
*/
public
function
compileSource
(
Smarty_Internal_Config
$config
)
{
/* here is where the compiling takes place. Smarty
tags in the templates are replaces with PHP code,
then written to compiled files. */
$this
->
config
=
$config
;
// get config file source
$_content
=
$config
->
source
->
content
.
"
\n
"
;
// on empty template just return
if
(
$_content
==
''
)
{
return
true
;
}
// init the lexer/parser to compile the config file
$lex
=
new
Smarty_Internal_Configfilelexer
(
$_content
,
$this
->
smarty
);
$parser
=
new
Smarty_Internal_Configfileparser
(
$lex
,
$this
);
if
(
$this
->
smarty
->
_parserdebug
)
$parser
->
PrintTrace
();
// get tokens from lexer and parse them
while
(
$lex
->
yylex
())
{
if
(
$this
->
smarty
->
_parserdebug
)
echo
"<br>Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line}
\n
"
;
$parser
->
doParse
(
$lex
->
token
,
$lex
->
value
);
}
// finish parsing process
$parser
->
doParse
(
0
,
0
);
$config
->
compiled_config
=
'<?php $_config_vars = '
.
var_export
(
$this
->
config_data
,
true
)
.
'; ?>'
;
}
/**
* display compiler error messages without dying
*
* If parameter $args is empty it is a parser detected syntax error.
* In this case the parser is called to obtain information about exspected tokens.
*
* If parameter $args contains a string this is used as error message
*
* @param string $args individual error message or null
*/
public
function
trigger_config_file_error
(
$args
=
null
)
{
$this
->
lex
=
Smarty_Internal_Configfilelexer
::
instance
();
$this
->
parser
=
Smarty_Internal_Configfileparser
::
instance
();
// get template source line which has error
$line
=
$this
->
lex
->
line
;
if
(
isset
(
$args
))
{
// $line--;
}
$match
=
preg_split
(
"/
\n
/"
,
$this
->
lex
->
data
);
$error_text
=
"Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line-1]}' "
;
if
(
isset
(
$args
))
{
// individual error message
$error_text
.=
$args
;
}
else
{
// exspected token from parser
foreach
(
$this
->
parser
->
yy_get_expected_tokens
(
$this
->
parser
->
yymajor
)
as
$token
)
{
$exp_token
=
$this
->
parser
->
yyTokenName
[
$token
];
if
(
isset
(
$this
->
lex
->
smarty_token_names
[
$exp_token
]))
{
// token type from lexer
$expect
[]
=
'"'
.
$this
->
lex
->
smarty_token_names
[
$exp_token
]
.
'"'
;
}
else
{
// otherwise internal token name
$expect
[]
=
$this
->
parser
->
yyTokenName
[
$token
];
}
}
// output parser error message
$error_text
.=
' - Unexpected "'
.
$this
->
lex
->
value
.
'", expected one of: '
.
implode
(
' , '
,
$expect
);
}
throw
new
SmartyCompilerException
(
$error_text
);
}
}
?>
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Jul 30, 19:44 (2 d, 11 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25964
Default Alt Text
smarty_internal_config_file_compiler.php (4 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment