Format code

This commit is contained in:
bzick
2013-08-02 21:50:04 +04:00
parent c27df81545
commit e51eb9f3d8
4 changed files with 113 additions and 106 deletions

View File

@ -110,28 +110,28 @@ class Fenom
* @var string[] list of modifiers [modifier_name => callable] * @var string[] list of modifiers [modifier_name => callable]
*/ */
protected $_modifiers = array( protected $_modifiers = array(
"upper" => 'strtoupper', "upper" => 'strtoupper',
"up" => 'strtoupper', "up" => 'strtoupper',
"lower" => 'strtolower', "lower" => 'strtolower',
"low" => 'strtolower', "low" => 'strtolower',
"date_format" => 'Fenom\Modifier::dateFormat', "date_format" => 'Fenom\Modifier::dateFormat',
"date" => 'Fenom\Modifier::date', "date" => 'Fenom\Modifier::date',
"truncate" => 'Fenom\Modifier::truncate', "truncate" => 'Fenom\Modifier::truncate',
"escape" => 'Fenom\Modifier::escape', "escape" => 'Fenom\Modifier::escape',
"e" => 'Fenom\Modifier::escape', // alias of escape "e" => 'Fenom\Modifier::escape', // alias of escape
"unescape" => 'Fenom\Modifier::unescape', "unescape" => 'Fenom\Modifier::unescape',
"strip" => 'Fenom\Modifier::strip', "strip" => 'Fenom\Modifier::strip',
"length" => 'Fenom\Modifier::length', "length" => 'Fenom\Modifier::length',
"iterable" => 'Fenom\Modifier::isIterable' "iterable" => 'Fenom\Modifier::isIterable'
); );
/** /**
* @var array of allowed PHP functions * @var array of allowed PHP functions
*/ */
protected $_allowed_funcs = array( protected $_allowed_funcs = array(
"count" => 1, "is_string" => 1, "is_array" => 1, "is_numeric" => 1, "is_int" => 1, "count" => 1, "is_string" => 1, "is_array" => 1, "is_numeric" => 1, "is_int" => 1,
"is_object" => 1, "strtotime" => 1, "gettype" => 1, "is_double" => 1, "json_encode" => 1, "json_decode" => 1, "is_object" => 1, "strtotime" => 1, "gettype" => 1, "is_double" => 1, "json_encode" => 1, "json_decode" => 1,
"ip2long" => 1, "long2ip" => 1, "strip_tags" => 1, "nl2br" => 1, "explode" => 1, "implode" => 1 "ip2long" => 1, "long2ip" => 1, "strip_tags" => 1, "nl2br" => 1, "explode" => 1, "implode" => 1
); );
/** /**
@ -312,7 +312,8 @@ class Fenom
return $this; return $this;
} }
public function getPreFilters() { public function getPreFilters()
{
return $this->pre_filters; return $this->pre_filters;
} }
@ -328,7 +329,8 @@ class Fenom
} }
public function getPostFilters() { public function getPostFilters()
{
return $this->post_filters; return $this->post_filters;
} }
@ -343,7 +345,8 @@ class Fenom
} }
public function getFilters() { public function getFilters()
{
return $this->filters; return $this->filters;
} }

View File

@ -197,7 +197,7 @@ class Template extends Render
{ {
$end = $pos = 0; $end = $pos = 0;
$this->escape = $this->_options & Fenom::AUTO_ESCAPE; $this->escape = $this->_options & Fenom::AUTO_ESCAPE;
foreach($this->_fenom->getPreFilters() as $filter) { foreach ($this->_fenom->getPreFilters() as $filter) {
$this->_src = call_user_func($filter, $this->_src, $this); $this->_src = call_user_func($filter, $this->_src, $this);
} }
@ -279,7 +279,7 @@ class Template extends Render
} }
} }
$this->addDepend($this); // for 'verify' performance $this->addDepend($this); // for 'verify' performance
foreach($this->_fenom->getPostFilters() as $filter) { foreach ($this->_fenom->getPostFilters() as $filter) {
$this->_body = call_user_func($filter, $this->_body, $this); $this->_body = call_user_func($filter, $this->_body, $this);
} }
} }
@ -610,27 +610,28 @@ class Template extends Render
* @return string * @return string
* @throws Error\UnexpectedTokenException * @throws Error\UnexpectedTokenException
*/ */
public function parseExp(Tokenizer $tokens, $required = false) { public function parseExp(Tokenizer $tokens, $required = false)
$exp = array(); {
$var = false; // last term was: true - variable, false - mixed $exp = array();
$op = false; // last exp was operator $var = false; // last term was: true - variable, false - mixed
$op = false; // last exp was operator
$cond = false; // was conditional operator $cond = false; // was conditional operator
while($tokens->valid()) { while ($tokens->valid()) {
// parse term // parse term
$term = $this->parseTerm($tokens, $var); $term = $this->parseTerm($tokens, $var);
if($term !== false) { if ($term !== false) {
$exp[] = $term; $exp[] = $term;
$op = false; $op = false;
} else { } else {
break; break;
} }
if(!$tokens->valid()) { if (!$tokens->valid()) {
break; break;
} }
// parse operator // parse operator
if($tokens->is(Tokenizer::MACRO_BINARY)) { if ($tokens->is(Tokenizer::MACRO_BINARY)) {
if ($tokens->is(Tokenizer::MACRO_COND)) { if ($tokens->is(Tokenizer::MACRO_COND)) {
if ($cond) { if ($cond) {
break; break;
@ -638,12 +639,12 @@ class Template extends Render
$cond = true; $cond = true;
} }
$op = $tokens->getAndNext(); $op = $tokens->getAndNext();
} elseif($tokens->is(Tokenizer::MACRO_EQUALS)) { } elseif ($tokens->is(Tokenizer::MACRO_EQUALS)) {
if(!$var) { if (!$var) {
break; break;
} }
$op = $tokens->getAndNext(); $op = $tokens->getAndNext();
} elseif($tokens->is(T_STRING)) { } elseif ($tokens->is(T_STRING)) {
if (!$exp) { if (!$exp) {
break; break;
} }
@ -657,12 +658,12 @@ class Template extends Render
} else { } else {
break; break;
} }
} elseif($tokens->is('~')) { } elseif ($tokens->is('~')) {
// string concat coming soon // string concat coming soon
} else { } else {
break; break;
} }
if($op) { if ($op) {
$exp[] = $op; $exp[] = $op;
} }
} }
@ -686,83 +687,84 @@ class Template extends Render
* @throws Error\TokenizeException * @throws Error\TokenizeException
* @throws \Exception * @throws \Exception
*/ */
public function parseTerm(Tokenizer $tokens, &$is_var = false) { public function parseTerm(Tokenizer $tokens, &$is_var = false)
{
$is_var = false; $is_var = false;
$unary = ""; $unary = "";
term: { term: {
if($tokens->is(T_LNUMBER, T_DNUMBER)) { if ($tokens->is(T_LNUMBER, T_DNUMBER)) {
return $unary.$this->parseScalar($tokens, true); return $unary . $this->parseScalar($tokens, true);
} elseif($tokens->is(T_CONSTANT_ENCAPSED_STRING, '"', T_ENCAPSED_AND_WHITESPACE)) { } elseif ($tokens->is(T_CONSTANT_ENCAPSED_STRING, '"', T_ENCAPSED_AND_WHITESPACE)) {
if($unary) { if ($unary) {
throw new UnexpectedTokenException($tokens->back()); throw new UnexpectedTokenException($tokens->back());
} }
return $this->parseScalar($tokens, true); return $this->parseScalar($tokens, true);
} elseif($tokens->is(T_VARIABLE)) { } elseif ($tokens->is(T_VARIABLE)) {
$var = $this->parseVar($tokens); $var = $this->parseVar($tokens);
if ($tokens->is(Tokenizer::MACRO_INCDEC, "|", "!", "?")) { if ($tokens->is(Tokenizer::MACRO_INCDEC, "|", "!", "?")) {
return $unary.$this->parseVariable($tokens, 0, $var); return $unary . $this->parseVariable($tokens, 0, $var);
} elseif($tokens->is("(") && $tokens->hasBackList(T_STRING)) { // method call } elseif ($tokens->is("(") && $tokens->hasBackList(T_STRING)) { // method call
return $unary.$this->parseVariable($tokens, 0, $var); return $unary . $this->parseVariable($tokens, 0, $var);
} elseif($unary) { } elseif ($unary) {
return $unary.$var; return $unary . $var;
} else { } else {
$is_var = true; $is_var = true;
return $var; return $var;
} }
} elseif($tokens->is(Tokenizer::MACRO_INCDEC)) { } elseif ($tokens->is(Tokenizer::MACRO_INCDEC)) {
return $unary.$this->parseVariable($tokens); return $unary . $this->parseVariable($tokens);
} elseif($tokens->is("(")) { } elseif ($tokens->is("(")) {
$tokens->next(); $tokens->next();
$exp = $unary."(" . $this->parseExp($tokens, true).")"; $exp = $unary . "(" . $this->parseExp($tokens, true) . ")";
$tokens->need(")")->next(); $tokens->need(")")->next();
return $exp; return $exp;
} elseif($tokens->is(Tokenizer::MACRO_UNARY)) { } elseif ($tokens->is(Tokenizer::MACRO_UNARY)) {
if($unary) { if ($unary) {
throw new UnexpectedTokenException($tokens);
}
$unary = $tokens->getAndNext();
goto term;
} elseif($tokens->is(T_STRING)) {
if ($tokens->isSpecialVal()) {
return $unary.$tokens->getAndNext();
} elseif ($tokens->isNext("(") && !$tokens->getWhitespace()) {
$func = $this->_fenom->getModifier($tokens->current(), $this);
if (!$func) {
throw new \Exception("Function " . $tokens->getAndNext() . " not found");
}
$tokens->next();
$func = $func . $this->parseArgs($tokens);
if ($tokens->is('|')) {
return $unary.$this->parseModifier($tokens, $func);
} else {
return $unary.$func;
}
} else {
return false;
}
} elseif($tokens->is(T_ISSET, T_EMPTY)) {
$func = $tokens->getAndNext();
if ($tokens->is("(") && $tokens->isNext(T_VARIABLE)) {
$tokens->next();
$exp = $func . "(" . $this->parseVar($tokens) . ")";
$tokens->need(')')->next();
return $unary.$exp;
} else {
throw new TokenizeException("Unexpected token " . $tokens->getNext() . ", isset() and empty() accept only variables");
}
} elseif($tokens->is('[')) {
if($unary) {
throw new UnexpectedTokenException($tokens->back());
}
return $this->parseArray($tokens);
} elseif($unary) {
$tokens->back();
throw new UnexpectedTokenException($tokens); throw new UnexpectedTokenException($tokens);
}
$unary = $tokens->getAndNext();
goto term;
} elseif ($tokens->is(T_STRING)) {
if ($tokens->isSpecialVal()) {
return $unary . $tokens->getAndNext();
} elseif ($tokens->isNext("(") && !$tokens->getWhitespace()) {
$func = $this->_fenom->getModifier($tokens->current(), $this);
if (!$func) {
throw new \Exception("Function " . $tokens->getAndNext() . " not found");
}
$tokens->next();
$func = $func . $this->parseArgs($tokens);
if ($tokens->is('|')) {
return $unary . $this->parseModifier($tokens, $func);
} else {
return $unary . $func;
}
} else { } else {
return false; return false;
} }
} elseif ($tokens->is(T_ISSET, T_EMPTY)) {
$func = $tokens->getAndNext();
if ($tokens->is("(") && $tokens->isNext(T_VARIABLE)) {
$tokens->next();
$exp = $func . "(" . $this->parseVar($tokens) . ")";
$tokens->need(')')->next();
return $unary . $exp;
} else {
throw new TokenizeException("Unexpected token " . $tokens->getNext() . ", isset() and empty() accept only variables");
}
} elseif ($tokens->is('[')) {
if ($unary) {
throw new UnexpectedTokenException($tokens->back());
}
return $this->parseArray($tokens);
} elseif ($unary) {
$tokens->back();
throw new UnexpectedTokenException($tokens);
} else {
return false;
} }
} }
}
/** /**
* Parse simple variable (without modifier etc) * Parse simple variable (without modifier etc)
@ -1142,9 +1144,10 @@ class Template extends Render
* @param Tokenizer $tokens * @param Tokenizer $tokens
* @param null $first_member * @param null $first_member
*/ */
public function parseConcat(Tokenizer $tokens, $first_member = null) { public function parseConcat(Tokenizer $tokens, $first_member = null)
{
$concat = array(); $concat = array();
if($first_member) { if ($first_member) {
} }
} }

View File

@ -328,7 +328,7 @@ class Tokenizer
* @return mixed * @return mixed
* @throws UnexpectedTokenException * @throws UnexpectedTokenException
*/ */
public function getAndNext(/* $token1, ... */) public function getAndNext( /* $token1, ... */)
{ {
if ($this->curr) { if ($this->curr) {
$cur = $this->curr[1]; $cur = $this->curr[1];

View File

@ -115,7 +115,8 @@ class FenomTest extends \Fenom\TestCase
// $this->assertSame($this->fenom->getOptions(), $flags & ~$option); // $this->assertSame($this->fenom->getOptions(), $flags & ~$option);
} }
public function testFilter() { public function testFilter()
{
$punit = $this; $punit = $this;
$this->fenom->addPreFilter(function ($src, $tpl) use ($punit) { $this->fenom->addPreFilter(function ($src, $tpl) use ($punit) {
$this->assertInstanceOf('Fenom\Template', $tpl); $this->assertInstanceOf('Fenom\Template', $tpl);