mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Add custom parsers for accessors
This commit is contained in:
@@ -53,6 +53,10 @@ class Fenom
|
||||
|
||||
const MAX_MACRO_RECURSIVE = 32;
|
||||
|
||||
const ACCESSOR_CUSTOM = null;
|
||||
const ACCESSOR_VAR = 'Fenom\Accessor::parserVar';
|
||||
const ACCESSOR_CALL = 'Fenom\Accessor::parserCall';
|
||||
|
||||
/**
|
||||
* @var int[] of possible options, as associative array
|
||||
* @see setOptions
|
||||
@@ -796,12 +800,16 @@ class Fenom
|
||||
/**
|
||||
* Add global accessor ($.)
|
||||
* @param string $name
|
||||
* @param callable $parser
|
||||
* @param callable|string $accessor
|
||||
* @param string $parser
|
||||
* @return Fenom
|
||||
*/
|
||||
public function addAccessor($name, $parser)
|
||||
public function addAccessor($name, $accessor, $parser = self::ACCESSOR_CUSTOM)
|
||||
{
|
||||
$this->_accessors[$name] = $parser;
|
||||
$this->_accessors[$name] = array(
|
||||
"accessor" => $accessor,
|
||||
"parser" => $parser
|
||||
);
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,10 +28,20 @@ class Accessor {
|
||||
'env' => '$_ENV'
|
||||
);
|
||||
|
||||
public static function parserVar($var, Tokenizer $tokens, Template $tpl, &$is_var) {
|
||||
$is_var = true;
|
||||
return $tpl->parseVariable($tokens, $var);
|
||||
}
|
||||
|
||||
public static function parserCall($accessor, Tokenizer $tokens, Template $tpl) {
|
||||
// return $tpl->parseVariable($tokens, $var);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accessor for global variables
|
||||
* @param Tokenizer $tokens
|
||||
* @param Template $tpl
|
||||
* @return string
|
||||
*/
|
||||
public static function getVar(Tokenizer $tokens, Template $tpl)
|
||||
{
|
||||
@@ -47,6 +57,7 @@ class Accessor {
|
||||
/**
|
||||
* Accessor for template information
|
||||
* @param Tokenizer $tokens
|
||||
* @return string
|
||||
*/
|
||||
public static function tpl(Tokenizer $tokens)
|
||||
{
|
||||
|
||||
@@ -795,8 +795,16 @@ class Template extends Render
|
||||
}
|
||||
$code = $this->parseScalar($tokens, true);
|
||||
break;
|
||||
case '$':
|
||||
$code = $this->parseAccessor($tokens, $is_var);
|
||||
if(!$is_var) {
|
||||
$code = $unary . $code;
|
||||
break;
|
||||
}
|
||||
case T_VARIABLE:
|
||||
$code = $this->parseVariable($tokens);
|
||||
if(!isset($code)) {
|
||||
$code = $this->parseVariable($tokens);
|
||||
}
|
||||
if ($tokens->is("(") && $tokens->hasBackList(T_STRING, T_OBJECT_OPERATOR)) {
|
||||
if ($this->_options & Fenom::DENY_METHODS) {
|
||||
throw new \LogicException("Forbidden to call methods");
|
||||
@@ -817,9 +825,6 @@ class Template extends Render
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '$':
|
||||
$code = $unary . $this->parseAccessor($tokens, $is_var);
|
||||
break;
|
||||
case T_DEC:
|
||||
case T_INC:
|
||||
if($this->_options & Fenom::FORCE_VERIFY) {
|
||||
|
||||
Reference in New Issue
Block a user