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. * It removes spaces between HTML tags.
* *
* @internal Not used anymore, to be removed in 3.0
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*/ */
class SpacelessNode extends Node class SpacelessNode extends Node
+16 -3
View File
@@ -11,7 +11,10 @@
namespace Twig\TokenParser; 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; use Twig\Token;
/** /**
@@ -30,13 +33,23 @@ class SpacelessTokenParser extends AbstractTokenParser
{ {
public function parse(Token $token) 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); $this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
$body = $this->parser->subparse([$this, 'decideSpacelessEnd'], true); $body = $this->parser->subparse([$this, 'decideSpacelessEnd'], true);
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE); $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) public function decideSpacelessEnd(Token $token)