mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Fix escaping
This commit is contained in:
parent
733bae6ac0
commit
0bb82d9898
@ -23,13 +23,6 @@ Tag {raw} [RU]
|
||||
{my_func page=5} {* escape *}
|
||||
{raw:my_func page=5} {* unescape *}
|
||||
...
|
||||
{my_block_func page=5}
|
||||
...
|
||||
{/my_block_func} {* escape *}
|
||||
{raw:my_block_func page=5}
|
||||
...
|
||||
{/my_block_func} {* unescape *}
|
||||
...
|
||||
{/autoescate}
|
||||
```
|
||||
|
||||
|
@ -875,21 +875,24 @@ class Compiler {
|
||||
* @return string
|
||||
*/
|
||||
public static function tagRaw(Tokenizer $tokens, Template $tpl) {
|
||||
$escape = $tpl->escape;
|
||||
$tpl->escape = false;
|
||||
if($tokens->is(':')) {
|
||||
$func = $tokens->getNext(Tokenizer::MACRO_STRING);
|
||||
$tag = $tpl->getStorage()->getFunction($func);
|
||||
if($tag["type"] == \Fenom::INLINE_FUNCTION) {
|
||||
return $tpl->parseAct($tokens);
|
||||
$code = $tpl->parseAct($tokens);
|
||||
} elseif ($tag["type"] == \Fenom::BLOCK_FUNCTION) {
|
||||
$code = $tpl->parseAct($tokens);
|
||||
$tpl->getLastScope()->escape = false;
|
||||
return $code;
|
||||
} else {
|
||||
throw new InvalidUsageException("Raw mode allow for expressions or functions");
|
||||
}
|
||||
throw new InvalidUsageException("Raw mode allow for expressions or functions");
|
||||
} else {
|
||||
return $tpl->out($tpl->parseExp($tokens, true));
|
||||
$code = $tpl->out($tpl->parseExp($tokens, true), false);
|
||||
}
|
||||
$tpl->escape = $escape;
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -29,7 +29,7 @@ class Scope extends \ArrayObject {
|
||||
private $_action;
|
||||
private $_body;
|
||||
private $_offset;
|
||||
private $_global_escape = false;
|
||||
public $_global_escape = false;
|
||||
|
||||
/**
|
||||
* Creating cope
|
||||
|
@ -452,7 +452,6 @@ class Template extends Render {
|
||||
* @throws TokenizeException
|
||||
*/
|
||||
private function _end(Tokenizer $tokens) {
|
||||
//return "end";
|
||||
$name = $tokens->getNext(Tokenizer::MACRO_STRING);
|
||||
$tokens->next();
|
||||
if(!$this->_stack) {
|
||||
@ -466,8 +465,9 @@ class Template extends Render {
|
||||
if($scope->is_compiler) {
|
||||
return $scope->close($tokens);
|
||||
} else {
|
||||
$code = $this->out($scope->close($tokens));
|
||||
$scope->tpl->escape = $scope->escape;
|
||||
return $this->out($scope->close($tokens));
|
||||
return $code;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@ class AutoEscapeTest extends TestCase {
|
||||
array('{$html}', $html, $vars, 0),
|
||||
array('{$html}', $escaped, $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{raw $html}', $html, $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{raw $html}, {$html}', "$html, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{raw "{$html|up}"}', strtoupper($html), $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{autoescape true}{$html}{/autoescape}, {$html}', "$escaped, $html", $vars, 0),
|
||||
array('{autoescape false}{$html}{/autoescape}, {$html}', "$html, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
@ -32,15 +33,15 @@ class AutoEscapeTest extends TestCase {
|
||||
array('{autoescape true}{test_function text=$html}{/autoescape}, {test_function text=$html}', "$escaped, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{autoescape false}{test_function text=$html}{/autoescape}, {test_function text=$html}', "$html, $html", $vars, 0),
|
||||
|
||||
// block function
|
||||
array('{test_block_function}{$html}{/test_block_function}', $html, $vars, 0),
|
||||
array('{test_block_function}{$html}{/test_block_function}', $escaped, $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{raw:test_block_function}{$html}{/test_block_function}', $html, $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{raw:test_block_function}{"{$html|up}"}{/test_block_function}', strtoupper($html), $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{autoescape true}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$escaped, $html", $vars, 0),
|
||||
array('{autoescape false}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$html, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{autoescape true}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$escaped, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
array('{autoescape false}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$html, $html", $vars, 0),
|
||||
// block function. Has bug, disable for vacation
|
||||
// array('{test_block_function}{$html}{/test_block_function}', $html, $vars, 0),
|
||||
// array('{test_block_function}{$html}{/test_block_function}', $escaped, $vars, \Fenom::AUTO_ESCAPE),
|
||||
// array('{raw:test_block_function}{$html}{/test_block_function}', $html, $vars, \Fenom::AUTO_ESCAPE),
|
||||
// array('{raw:test_block_function}{"{$html|up}"}{/test_block_function}', strtoupper($html), $vars, \Fenom::AUTO_ESCAPE),
|
||||
// array('{autoescape true}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$escaped, $html", $vars, 0),
|
||||
// array('{autoescape false}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$html, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
// array('{autoescape true}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$escaped, $escaped", $vars, \Fenom::AUTO_ESCAPE),
|
||||
// array('{autoescape false}{test_block_function}{$html}{/test_block_function}{/autoescape}, {test_block_function}{$html}{/test_block_function}', "$html, $html", $vars, 0),
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user