summaryrefslogtreecommitdiff
path: root/inc/lib/Twig/TokenParser
diff options
context:
space:
mode:
Diffstat (limited to 'inc/lib/Twig/TokenParser')
-rw-r--r--inc/lib/Twig/TokenParser/AutoEscape.php24
-rw-r--r--inc/lib/Twig/TokenParser/Block.php32
-rw-r--r--inc/lib/Twig/TokenParser/Do.php18
-rw-r--r--inc/lib/Twig/TokenParser/Embed.php33
-rw-r--r--inc/lib/Twig/TokenParser/Extends.php28
-rw-r--r--inc/lib/Twig/TokenParser/Filter.php20
-rw-r--r--inc/lib/Twig/TokenParser/Flush.php18
-rw-r--r--inc/lib/Twig/TokenParser/For.php35
-rw-r--r--inc/lib/Twig/TokenParser/From.php32
-rw-r--r--inc/lib/Twig/TokenParser/If.php22
-rw-r--r--inc/lib/Twig/TokenParser/Import.php18
-rw-r--r--inc/lib/Twig/TokenParser/Include.php29
-rw-r--r--inc/lib/Twig/TokenParser/Macro.php24
-rw-r--r--inc/lib/Twig/TokenParser/Sandbox.php27
-rw-r--r--inc/lib/Twig/TokenParser/Set.php25
-rw-r--r--inc/lib/Twig/TokenParser/Spaceless.php18
-rw-r--r--inc/lib/Twig/TokenParser/Use.php36
-rw-r--r--inc/lib/Twig/TokenParser/With.php52
18 files changed, 203 insertions, 288 deletions
diff --git a/inc/lib/Twig/TokenParser/AutoEscape.php b/inc/lib/Twig/TokenParser/AutoEscape.php
index 27560288..a20dedd1 100644
--- a/inc/lib/Twig/TokenParser/AutoEscape.php
+++ b/inc/lib/Twig/TokenParser/AutoEscape.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -26,16 +26,11 @@
* using the js escaping strategy
* {% endautoescape %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_AutoEscape extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
@@ -46,7 +41,7 @@ class Twig_TokenParser_AutoEscape extends Twig_TokenParser
} else {
$expr = $this->parser->getExpressionParser()->parseExpression();
if (!$expr instanceof Twig_Node_Expression_Constant) {
- throw new Twig_Error_Syntax('An escaping strategy must be a string or a Boolean.', $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax('An escaping strategy must be a string or a bool.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
$value = $expr->getAttribute('value');
@@ -57,8 +52,10 @@ class Twig_TokenParser_AutoEscape extends Twig_TokenParser
}
if ($compat && $stream->test(Twig_Token::NAME_TYPE)) {
+ @trigger_error('Using the autoescape tag with "true" or "false" before the strategy name is deprecated since version 1.21.', E_USER_DEPRECATED);
+
if (false === $value) {
- throw new Twig_Error_Syntax('Unexpected escaping strategy as you set autoescaping to false.', $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax('Unexpected escaping strategy as you set autoescaping to false.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
$value = $stream->next()->getValue();
@@ -77,13 +74,10 @@ class Twig_TokenParser_AutoEscape extends Twig_TokenParser
return $token->test('endautoescape');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'autoescape';
}
}
+
+class_alias('Twig_TokenParser_AutoEscape', 'Twig\TokenParser\AutoEscapeTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Block.php b/inc/lib/Twig/TokenParser/Block.php
index a2e017f3..f30f86b5 100644
--- a/inc/lib/Twig/TokenParser/Block.php
+++ b/inc/lib/Twig/TokenParser/Block.php
@@ -3,8 +3,8 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
+ * (c) Fabien Potencier
+ * (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -19,37 +19,30 @@
* <title>{% block title %}{% endblock %} - My Webpage</title>
* {% endblock %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Block extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
$stream = $this->parser->getStream();
$name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
if ($this->parser->hasBlock($name)) {
- throw new Twig_Error_Syntax(sprintf("The block '$name' has already been defined line %d", $this->parser->getBlock($name)->getLine()), $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax(sprintf("The block '%s' has already been defined line %d.", $name, $this->parser->getBlock($name)->getTemplateLine()), $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
$this->parser->setBlock($name, $block = new Twig_Node_Block($name, new Twig_Node(array()), $lineno));
$this->parser->pushLocalScope();
$this->parser->pushBlockStack($name);
- if ($stream->test(Twig_Token::BLOCK_END_TYPE)) {
- $stream->next();
-
+ if ($stream->nextIf(Twig_Token::BLOCK_END_TYPE)) {
$body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
- if ($stream->test(Twig_Token::NAME_TYPE)) {
- $value = $stream->next()->getValue();
+ if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) {
+ $value = $token->getValue();
if ($value != $name) {
- throw new Twig_Error_Syntax(sprintf("Expected endblock for block '$name' (but %s given)", $value), $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax(sprintf('Expected endblock for block "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
}
} else {
@@ -71,13 +64,10 @@ class Twig_TokenParser_Block extends Twig_TokenParser
return $token->test('endblock');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'block';
}
}
+
+class_alias('Twig_TokenParser_Block', 'Twig\TokenParser\BlockTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Do.php b/inc/lib/Twig/TokenParser/Do.php
index f50939dd..8ce08808 100644
--- a/inc/lib/Twig/TokenParser/Do.php
+++ b/inc/lib/Twig/TokenParser/Do.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2011 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -11,16 +11,11 @@
/**
* Evaluates an expression, discarding the returned value.
+ *
+ * @final
*/
class Twig_TokenParser_Do extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$expr = $this->parser->getExpressionParser()->parseExpression();
@@ -30,13 +25,10 @@ class Twig_TokenParser_Do extends Twig_TokenParser
return new Twig_Node_Do($expr, $token->getLine(), $this->getTag());
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'do';
}
}
+
+class_alias('Twig_TokenParser_Do', 'Twig\TokenParser\DoTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Embed.php b/inc/lib/Twig/TokenParser/Embed.php
index 69cb5f35..44644cc6 100644
--- a/inc/lib/Twig/TokenParser/Embed.php
+++ b/inc/lib/Twig/TokenParser/Embed.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2012 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -11,16 +11,11 @@
/**
* Embeds a template.
+ *
+ * @final
*/
class Twig_TokenParser_Embed extends Twig_TokenParser_Include
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$stream = $this->parser->getStream();
@@ -29,24 +24,33 @@ class Twig_TokenParser_Embed extends Twig_TokenParser_Include
list($variables, $only, $ignoreMissing) = $this->parseArguments();
+ $parentToken = $fakeParentToken = new Twig_Token(Twig_Token::STRING_TYPE, '__parent__', $token->getLine());
+ if ($parent instanceof Twig_Node_Expression_Constant) {
+ $parentToken = new Twig_Token(Twig_Token::STRING_TYPE, $parent->getAttribute('value'), $token->getLine());
+ } elseif ($parent instanceof Twig_Node_Expression_Name) {
+ $parentToken = new Twig_Token(Twig_Token::NAME_TYPE, $parent->getAttribute('name'), $token->getLine());
+ }
+
// inject a fake parent to make the parent() function work
$stream->injectTokens(array(
new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', $token->getLine()),
new Twig_Token(Twig_Token::NAME_TYPE, 'extends', $token->getLine()),
- new Twig_Token(Twig_Token::STRING_TYPE, '__parent__', $token->getLine()),
+ $parentToken,
new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', $token->getLine()),
));
$module = $this->parser->parse($stream, array($this, 'decideBlockEnd'), true);
// override the parent with the correct one
- $module->setNode('parent', $parent);
+ if ($fakeParentToken === $parentToken) {
+ $module->setNode('parent', $parent);
+ }
$this->parser->embedTemplate($module);
$stream->expect(Twig_Token::BLOCK_END_TYPE);
- return new Twig_Node_Embed($module->getAttribute('filename'), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag());
+ return new Twig_Node_Embed($module->getTemplateName(), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag());
}
public function decideBlockEnd(Twig_Token $token)
@@ -54,13 +58,10 @@ class Twig_TokenParser_Embed extends Twig_TokenParser_Include
return $token->test('endembed');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'embed';
}
}
+
+class_alias('Twig_TokenParser_Embed', 'Twig\TokenParser\EmbedTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Extends.php b/inc/lib/Twig/TokenParser/Extends.php
index f5ecee21..31168cce 100644
--- a/inc/lib/Twig/TokenParser/Extends.php
+++ b/inc/lib/Twig/TokenParser/Extends.php
@@ -3,8 +3,8 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
+ * (c) Fabien Potencier
+ * (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -16,37 +16,31 @@
* <pre>
* {% extends "base.html" %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Extends extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
+ $stream = $this->parser->getStream();
+
if (!$this->parser->isMainScope()) {
- throw new Twig_Error_Syntax('Cannot extend from a block', $token->getLine(), $this->parser->getFilename());
+ throw new Twig_Error_Syntax('Cannot extend from a block.', $token->getLine(), $stream->getSourceContext());
}
if (null !== $this->parser->getParent()) {
- throw new Twig_Error_Syntax('Multiple extends tags are forbidden', $token->getLine(), $this->parser->getFilename());
+ throw new Twig_Error_Syntax('Multiple extends tags are forbidden.', $token->getLine(), $stream->getSourceContext());
}
$this->parser->setParent($this->parser->getExpressionParser()->parseExpression());
- $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'extends';
}
}
+
+class_alias('Twig_TokenParser_Extends', 'Twig\TokenParser\ExtendsTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Filter.php b/inc/lib/Twig/TokenParser/Filter.php
index 2b97475a..76017829 100644
--- a/inc/lib/Twig/TokenParser/Filter.php
+++ b/inc/lib/Twig/TokenParser/Filter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -17,20 +17,15 @@
* This text becomes uppercase
* {% endfilter %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Filter extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$name = $this->parser->getVarName();
- $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), true, $token->getLine(), $this->getTag());
+ $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), null, $token->getLine(), $this->getTag());
$filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag());
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
@@ -49,13 +44,10 @@ class Twig_TokenParser_Filter extends Twig_TokenParser
return $token->test('endfilter');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'filter';
}
}
+
+class_alias('Twig_TokenParser_Filter', 'Twig\TokenParser\FilterTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Flush.php b/inc/lib/Twig/TokenParser/Flush.php
index 4e15e785..51832c77 100644
--- a/inc/lib/Twig/TokenParser/Flush.php
+++ b/inc/lib/Twig/TokenParser/Flush.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2011 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -13,16 +13,11 @@
* Flushes the output to the client.
*
* @see flush()
+ *
+ * @final
*/
class Twig_TokenParser_Flush extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
@@ -30,13 +25,10 @@ class Twig_TokenParser_Flush extends Twig_TokenParser
return new Twig_Node_Flush($token->getLine(), $this->getTag());
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'flush';
}
}
+
+class_alias('Twig_TokenParser_Flush', 'Twig\TokenParser\FlushTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/For.php b/inc/lib/Twig/TokenParser/For.php
index 98a6d079..8e737c5f 100644
--- a/inc/lib/Twig/TokenParser/For.php
+++ b/inc/lib/Twig/TokenParser/For.php
@@ -3,8 +3,8 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
+ * (c) Fabien Potencier
+ * (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -20,16 +20,11 @@
* {% endfor %}
* </ul>
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_For extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
@@ -39,14 +34,13 @@ class Twig_TokenParser_For extends Twig_TokenParser
$seq = $this->parser->getExpressionParser()->parseExpression();
$ifexpr = null;
- if ($stream->test(Twig_Token::NAME_TYPE, 'if')) {
- $stream->next();
+ if ($stream->nextIf(Twig_Token::NAME_TYPE, 'if')) {
$ifexpr = $this->parser->getExpressionParser()->parseExpression();
}
$stream->expect(Twig_Token::BLOCK_END_TYPE);
$body = $this->parser->subparse(array($this, 'decideForFork'));
- if ($stream->next()->getValue() == 'else') {
+ if ('else' == $stream->next()->getValue()) {
$stream->expect(Twig_Token::BLOCK_END_TYPE);
$else = $this->parser->subparse(array($this, 'decideForEnd'), true);
} else {
@@ -56,13 +50,13 @@ class Twig_TokenParser_For extends Twig_TokenParser
if (count($targets) > 1) {
$keyTarget = $targets->getNode(0);
- $keyTarget = new Twig_Node_Expression_AssignName($keyTarget->getAttribute('name'), $keyTarget->getLine());
+ $keyTarget = new Twig_Node_Expression_AssignName($keyTarget->getAttribute('name'), $keyTarget->getTemplateLine());
$valueTarget = $targets->getNode(1);
- $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine());
+ $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine());
} else {
$keyTarget = new Twig_Node_Expression_AssignName('_key', $lineno);
$valueTarget = $targets->getNode(0);
- $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine());
+ $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine());
}
if ($ifexpr) {
@@ -87,7 +81,7 @@ class Twig_TokenParser_For extends Twig_TokenParser
protected function checkLoopUsageCondition(Twig_TokenStream $stream, Twig_NodeInterface $node)
{
if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) {
- throw new Twig_Error_Syntax('The "loop" variable cannot be used in a looping condition', $node->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax('The "loop" variable cannot be used in a looping condition.', $node->getTemplateLine(), $stream->getSourceContext());
}
foreach ($node as $n) {
@@ -106,7 +100,7 @@ class Twig_TokenParser_For extends Twig_TokenParser
if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) {
$attribute = $node->getNode('attribute');
if ($attribute instanceof Twig_Node_Expression_Constant && in_array($attribute->getAttribute('value'), array('length', 'revindex0', 'revindex', 'last'))) {
- throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition', $attribute->getAttribute('value')), $node->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition.', $attribute->getAttribute('value')), $node->getTemplateLine(), $stream->getSourceContext());
}
}
@@ -124,13 +118,10 @@ class Twig_TokenParser_For extends Twig_TokenParser
}
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'for';
}
}
+
+class_alias('Twig_TokenParser_For', 'Twig\TokenParser\ForTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/From.php b/inc/lib/Twig/TokenParser/From.php
index ff6e5756..f3053da4 100644
--- a/inc/lib/Twig/TokenParser/From.php
+++ b/inc/lib/Twig/TokenParser/From.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2010 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -15,16 +15,11 @@
* <pre>
* {% from 'forms.html' import forms %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_From extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$macro = $this->parser->getExpressionParser()->parseExpression();
@@ -36,19 +31,15 @@ class Twig_TokenParser_From extends Twig_TokenParser
$name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
$alias = $name;
- if ($stream->test('as')) {
- $stream->next();
-
+ if ($stream->nextIf('as')) {
$alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
}
$targets[$name] = $alias;
- if (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ',')) {
+ if (!$stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
break;
}
-
- $stream->next();
} while (true);
$stream->expect(Twig_Token::BLOCK_END_TYPE);
@@ -56,19 +47,20 @@ class Twig_TokenParser_From extends Twig_TokenParser
$node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser->getVarName(), $token->getLine()), $token->getLine(), $this->getTag());
foreach ($targets as $name => $alias) {
- $this->parser->addImportedSymbol('macro', $alias, $name, $node->getNode('var'));
+ if ($this->parser->isReservedMacroName($name)) {
+ throw new Twig_Error_Syntax(sprintf('"%s" cannot be an imported macro as it is a reserved keyword.', $name), $token->getLine(), $stream->getSourceContext());
+ }
+
+ $this->parser->addImportedSymbol('function', $alias, 'get'.$name, $node->getNode('var'));
}
return $node;
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'from';
}
}
+
+class_alias('Twig_TokenParser_From', 'Twig\TokenParser\FromTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/If.php b/inc/lib/Twig/TokenParser/If.php
index 3d7d1f51..f081df3a 100644
--- a/inc/lib/Twig/TokenParser/If.php
+++ b/inc/lib/Twig/TokenParser/If.php
@@ -3,8 +3,8 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
+ * (c) Fabien Potencier
+ * (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -22,16 +22,11 @@
* </ul>
* {% endif %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_If extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
@@ -63,7 +58,7 @@ class Twig_TokenParser_If extends Twig_TokenParser
break;
default:
- throw new Twig_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
}
@@ -82,13 +77,10 @@ class Twig_TokenParser_If extends Twig_TokenParser
return $token->test(array('endif'));
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'if';
}
}
+
+class_alias('Twig_TokenParser_If', 'Twig\TokenParser\IfTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Import.php b/inc/lib/Twig/TokenParser/Import.php
index e7050c70..47802f50 100644
--- a/inc/lib/Twig/TokenParser/Import.php
+++ b/inc/lib/Twig/TokenParser/Import.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -15,16 +15,11 @@
* <pre>
* {% import 'forms.html' as forms %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Import extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$macro = $this->parser->getExpressionParser()->parseExpression();
@@ -37,13 +32,10 @@ class Twig_TokenParser_Import extends Twig_TokenParser
return new Twig_Node_Import($macro, $var, $token->getLine(), $this->getTag());
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'import';
}
}
+
+class_alias('Twig_TokenParser_Import', 'Twig\TokenParser\ImportTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Include.php b/inc/lib/Twig/TokenParser/Include.php
index 4a317868..309f11db 100644
--- a/inc/lib/Twig/TokenParser/Include.php
+++ b/inc/lib/Twig/TokenParser/Include.php
@@ -3,8 +3,8 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
- * (c) 2009 Armin Ronacher
+ * (c) Fabien Potencier
+ * (c) Armin Ronacher
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,13 +21,6 @@
*/
class Twig_TokenParser_Include extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$expr = $this->parser->getExpressionParser()->parseExpression();
@@ -42,24 +35,19 @@ class Twig_TokenParser_Include extends Twig_TokenParser
$stream = $this->parser->getStream();
$ignoreMissing = false;
- if ($stream->test(Twig_Token::NAME_TYPE, 'ignore')) {
- $stream->next();
+ if ($stream->nextIf(Twig_Token::NAME_TYPE, 'ignore')) {
$stream->expect(Twig_Token::NAME_TYPE, 'missing');
$ignoreMissing = true;
}
$variables = null;
- if ($stream->test(Twig_Token::NAME_TYPE, 'with')) {
- $stream->next();
-
+ if ($stream->nextIf(Twig_Token::NAME_TYPE, 'with')) {
$variables = $this->parser->getExpressionParser()->parseExpression();
}
$only = false;
- if ($stream->test(Twig_Token::NAME_TYPE, 'only')) {
- $stream->next();
-
+ if ($stream->nextIf(Twig_Token::NAME_TYPE, 'only')) {
$only = true;
}
@@ -68,13 +56,10 @@ class Twig_TokenParser_Include extends Twig_TokenParser
return array($variables, $only, $ignoreMissing);
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'include';
}
}
+
+class_alias('Twig_TokenParser_Include', 'Twig\TokenParser\IncludeTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Macro.php b/inc/lib/Twig/TokenParser/Macro.php
index 82b4fa6d..4287934b 100644
--- a/inc/lib/Twig/TokenParser/Macro.php
+++ b/inc/lib/Twig/TokenParser/Macro.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -17,16 +17,11 @@
* <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
* {% endmacro %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Macro extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
@@ -38,11 +33,11 @@ class Twig_TokenParser_Macro extends Twig_TokenParser
$stream->expect(Twig_Token::BLOCK_END_TYPE);
$this->parser->pushLocalScope();
$body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
- if ($stream->test(Twig_Token::NAME_TYPE)) {
- $value = $stream->next()->getValue();
+ if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) {
+ $value = $token->getValue();
if ($value != $name) {
- throw new Twig_Error_Syntax(sprintf("Expected endmacro for macro '$name' (but %s given)", $value), $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax(sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
}
$this->parser->popLocalScope();
@@ -56,13 +51,10 @@ class Twig_TokenParser_Macro extends Twig_TokenParser
return $token->test('endmacro');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'macro';
}
}
+
+class_alias('Twig_TokenParser_Macro', 'Twig\TokenParser\MacroTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Sandbox.php b/inc/lib/Twig/TokenParser/Sandbox.php
index 9457325a..7fc70d9a 100644
--- a/inc/lib/Twig/TokenParser/Sandbox.php
+++ b/inc/lib/Twig/TokenParser/Sandbox.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2010 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -18,22 +18,18 @@
* {% endsandbox %}
* </pre>
*
- * @see http://www.twig-project.org/doc/api.html#sandbox-extension for details
+ * @see https://twig.symfony.com/doc/api.html#sandbox-extension for details
+ *
+ * @final
*/
class Twig_TokenParser_Sandbox extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
- $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+ $stream = $this->parser->getStream();
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
$body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
- $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
// in a sandbox tag, only include tags are allowed
if (!$body instanceof Twig_Node_Include) {
@@ -43,7 +39,7 @@ class Twig_TokenParser_Sandbox extends Twig_TokenParser
}
if (!$node instanceof Twig_Node_Include) {
- throw new Twig_Error_Syntax('Only "include" tags are allowed within a "sandbox" section', $node->getLine(), $this->parser->getFilename());
+ throw new Twig_Error_Syntax('Only "include" tags are allowed within a "sandbox" section.', $node->getTemplateLine(), $stream->getSourceContext());
}
}
}
@@ -56,13 +52,10 @@ class Twig_TokenParser_Sandbox extends Twig_TokenParser
return $token->test('endsandbox');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'sandbox';
}
}
+
+class_alias('Twig_TokenParser_Sandbox', 'Twig\TokenParser\SandboxTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Set.php b/inc/lib/Twig/TokenParser/Set.php
index 70e0b41b..48c6b3ae 100644
--- a/inc/lib/Twig/TokenParser/Set.php
+++ b/inc/lib/Twig/TokenParser/Set.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2009 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -25,16 +25,11 @@
*
* {% set foo %}Some content{% endset %}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Set extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
@@ -42,20 +37,19 @@ class Twig_TokenParser_Set extends Twig_TokenParser
$names = $this->parser->getExpressionParser()->parseAssignmentExpression();
$capture = false;
- if ($stream->test(Twig_Token::OPERATOR_TYPE, '=')) {
- $stream->next();
+ if ($stream->nextIf(Twig_Token::OPERATOR_TYPE, '=')) {
$values = $this->parser->getExpressionParser()->parseMultitargetExpression();
$stream->expect(Twig_Token::BLOCK_END_TYPE);
if (count($names) !== count($values)) {
- throw new Twig_Error_Syntax("When using set, you must have the same number of variables and assignments.", $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
} else {
$capture = true;
if (count($names) > 1) {
- throw new Twig_Error_Syntax("When using set with a block, you cannot have a multi-target.", $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
$stream->expect(Twig_Token::BLOCK_END_TYPE);
@@ -72,13 +66,10 @@ class Twig_TokenParser_Set extends Twig_TokenParser
return $token->test('endset');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'set';
}
}
+
+class_alias('Twig_TokenParser_Set', 'Twig\TokenParser\SetTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Spaceless.php b/inc/lib/Twig/TokenParser/Spaceless.php
index 1e3fa8f3..cecf27c6 100644
--- a/inc/lib/Twig/TokenParser/Spaceless.php
+++ b/inc/lib/Twig/TokenParser/Spaceless.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2010 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,16 +21,11 @@
*
* {# output will be <div><strong>foo</strong></div> #}
* </pre>
+ *
+ * @final
*/
class Twig_TokenParser_Spaceless extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$lineno = $token->getLine();
@@ -47,13 +42,10 @@ class Twig_TokenParser_Spaceless extends Twig_TokenParser
return $token->test('endspaceless');
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'spaceless';
}
}
+
+class_alias('Twig_TokenParser_Spaceless', 'Twig\TokenParser\SpacelessTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/Use.php b/inc/lib/Twig/TokenParser/Use.php
index bc0e09ef..1ab24e2c 100644
--- a/inc/lib/Twig/TokenParser/Use.php
+++ b/inc/lib/Twig/TokenParser/Use.php
@@ -3,7 +3,7 @@
/*
* This file is part of Twig.
*
- * (c) 2011 Fabien Potencier
+ * (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,62 +21,50 @@
* {% block content %}{% endblock %}
* </pre>
*
- * @see http://www.twig-project.org/doc/templates.html#horizontal-reuse for details.
+ * @see https://twig.symfony.com/doc/templates.html#horizontal-reuse for details.
+ *
+ * @final
*/
class Twig_TokenParser_Use extends Twig_TokenParser
{
- /**
- * Parses a token and returns a node.
- *
- * @param Twig_Token $token A Twig_Token instance
- *
- * @return Twig_NodeInterface A Twig_NodeInterface instance
- */
public function parse(Twig_Token $token)
{
$template = $this->parser->getExpressionParser()->parseExpression();
$stream = $this->parser->getStream();
if (!$template instanceof Twig_Node_Expression_Constant) {
- throw new Twig_Error_Syntax('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getFilename());
+ throw new Twig_Error_Syntax('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
$targets = array();
- if ($stream->test('with')) {
- $stream->next();
-
+ if ($stream->nextIf('with')) {
do {
$name = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
$alias = $name;
- if ($stream->test('as')) {
- $stream->next();
-
+ if ($stream->nextIf('as')) {
$alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue();
}
$targets[$name] = new Twig_Node_Expression_Constant($alias, -1);
- if (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ',')) {
+ if (!$stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) {
break;
}
-
- $stream->next();
} while (true);
}
$stream->expect(Twig_Token::BLOCK_END_TYPE);
$this->parser->addTrait(new Twig_Node(array('template' => $template, 'targets' => new Twig_Node($targets))));
+
+ return new Twig_Node();
}
- /**
- * Gets the tag name associated with this token parser.
- *
- * @return string The tag name
- */
public function getTag()
{
return 'use';
}
}
+
+class_alias('Twig_TokenParser_Use', 'Twig\TokenParser\UseTokenParser', false);
diff --git a/inc/lib/Twig/TokenParser/With.php b/inc/lib/Twig/TokenParser/With.php
new file mode 100644
index 00000000..7a692597
--- /dev/null
+++ b/inc/lib/Twig/TokenParser/With.php
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Creates a nested scope.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final
+ */
+class Twig_TokenParser_With extends Twig_TokenParser
+{
+ public function parse(Twig_Token $token)
+ {
+ $stream = $this->parser->getStream();
+
+ $variables = null;
+ $only = false;
+ if (!$stream->test(Twig_Token::BLOCK_END_TYPE)) {
+ $variables = $this->parser->getExpressionParser()->parseExpression();
+ $only = $stream->nextIf(Twig_Token::NAME_TYPE, 'only');
+ }
+
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+ $body = $this->parser->subparse(array($this, 'decideWithEnd'), true);
+
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+ return new Twig_Node_With($body, $variables, $only, $token->getLine(), $this->getTag());
+ }
+
+ public function decideWithEnd(Twig_Token $token)
+ {
+ return $token->test('endwith');
+ }
+
+ public function getTag()
+ {
+ return 'with';
+ }
+}
+
+class_alias('Twig_TokenParser_With', 'Twig\TokenParser\WithTokenParser', false);