re-implemented the spaceless tag to reuse the filter tag logic

This commit is contained in:
Fabien Potencier
2019-03-07 10:16:11 +01:00
parent b823898ee1
commit 743767bce8
2 changed files with 18 additions and 3 deletions
+2
View File
@@ -18,6 +18,8 @@ use Twig\Compiler;
*
* It removes spaces between HTML tags.
*
* @internal Not used anymore, to be removed in 3.0
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class SpacelessNode extends Node
+16 -3
View File
@@ -11,7 +11,10 @@
namespace Twig\TokenParser;
use Twig\Node\SpacelessNode;
use Twig\Node\BlockNode;
use Twig\Node\Expression\BlockReferenceExpression;
use Twig\Node\Expression\ConstantExpression;
use Twig\Node\PrintNode;
use Twig\Token;
/**
@@ -30,13 +33,23 @@ class SpacelessTokenParser extends AbstractTokenParser
{
public function parse(Token $token)
{
$lineno = $token->getLine();
$this->parser->getStream()->injectTokens([
new Token(Token::NAME_TYPE, 'spaceless', $token->getLine()),
]);
$name = $this->parser->getVarName();
$ref = new BlockReferenceExpression(new ConstantExpression($name, $token->getLine()), null, $token->getLine(), $this->getTag());
$filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag());
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
$body = $this->parser->subparse([$this, 'decideSpacelessEnd'], true);
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
return new SpacelessNode($body, $lineno, $this->getTag());
$block = new BlockNode($name, $body, $token->getLine());
$this->parser->setBlock($name, $block);
return new PrintNode($filter, $token->getLine(), $this->getTag());
}
public function decideSpacelessEnd(Token $token)