summaryrefslogtreecommitdiff
path: root/inc/lib/Twig/TokenStream.php
diff options
context:
space:
mode:
authorBenjamin Southall <applemansigloo@gmail.com>2019-02-26 10:11:12 +1000
committerBenjamin Southall <applemansigloo@gmail.com>2019-02-26 10:11:12 +1000
commitf79395851b044689567e0e6c9504acbcaa742782 (patch)
treeee539aee9ffa90e8accd6f130b30a8ebed7a232e /inc/lib/Twig/TokenStream.php
parent28f32baf0125ca5085266e73dc5071e5814d8e3b (diff)
Twig update to latest Twig 1.x legacy as per vichan
Diffstat (limited to 'inc/lib/Twig/TokenStream.php')
-rw-r--r--inc/lib/Twig/TokenStream.php114
1 files changed, 83 insertions, 31 deletions
diff --git a/inc/lib/Twig/TokenStream.php b/inc/lib/Twig/TokenStream.php
index a78189f6..81c043ca 100644
--- a/inc/lib/Twig/TokenStream.php
+++ b/inc/lib/Twig/TokenStream.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.
@@ -13,32 +13,40 @@
/**
* Represents a token stream.
*
+ * @final
+ *
* @author Fabien Potencier <fabien@symfony.com>
*/
class Twig_TokenStream
{
protected $tokens;
- protected $current;
+ protected $current = 0;
protected $filename;
+ private $source;
+
/**
- * Constructor.
- *
- * @param array $tokens An array of tokens
- * @param string $filename The name of the filename which tokens are associated with
+ * @param array $tokens An array of tokens
+ * @param string|null $name The name of the template which tokens are associated with
+ * @param string|null $source The source code associated with the tokens
*/
- public function __construct(array $tokens, $filename = null)
+ public function __construct(array $tokens, $name = null, $source = null)
{
- $this->tokens = $tokens;
- $this->current = 0;
- $this->filename = $filename;
+ if (!$name instanceof Twig_Source) {
+ if (null !== $name || null !== $source) {
+ @trigger_error(sprintf('Passing a string as the $name argument of %s() is deprecated since version 1.27. Pass a Twig_Source instance instead.', __METHOD__), E_USER_DEPRECATED);
+ }
+ $this->source = new Twig_Source($source, $name);
+ } else {
+ $this->source = $name;
+ }
+
+ $this->tokens = $tokens;
+
+ // deprecated, not used anymore, to be removed in 2.0
+ $this->filename = $this->source->getName();
}
- /**
- * Returns a string representation of the token stream.
- *
- * @return string
- */
public function __toString()
{
return implode("\n", $this->tokens);
@@ -57,13 +65,25 @@ class Twig_TokenStream
public function next()
{
if (!isset($this->tokens[++$this->current])) {
- throw new Twig_Error_Syntax('Unexpected end of template', $this->tokens[$this->current - 1]->getLine(), $this->filename);
+ throw new Twig_Error_Syntax('Unexpected end of template.', $this->tokens[$this->current - 1]->getLine(), $this->source);
}
return $this->tokens[$this->current - 1];
}
/**
+ * Tests a token, sets the pointer to the next one and returns it or throws a syntax error.
+ *
+ * @return Twig_Token|null The next token if the condition is true, null otherwise
+ */
+ public function nextIf($primary, $secondary = null)
+ {
+ if ($this->tokens[$this->current]->test($primary, $secondary)) {
+ return $this->next();
+ }
+ }
+
+ /**
* Tests a token and returns it or throws a syntax error.
*
* @return Twig_Token
@@ -73,12 +93,12 @@ class Twig_TokenStream
$token = $this->tokens[$this->current];
if (!$token->test($type, $value)) {
$line = $token->getLine();
- throw new Twig_Error_Syntax(sprintf('%sUnexpected token "%s" of value "%s" ("%s" expected%s)',
+ throw new Twig_Error_Syntax(sprintf('%sUnexpected token "%s" of value "%s" ("%s" expected%s).',
$message ? $message.'. ' : '',
- Twig_Token::typeToEnglish($token->getType(), $line), $token->getValue(),
- Twig_Token::typeToEnglish($type, $line), $value ? sprintf(' with value "%s"', $value) : ''),
+ Twig_Token::typeToEnglish($token->getType()), $token->getValue(),
+ Twig_Token::typeToEnglish($type), $value ? sprintf(' with value "%s"', $value) : ''),
$line,
- $this->filename
+ $this->source
);
}
$this->next();
@@ -89,21 +109,21 @@ class Twig_TokenStream
/**
* Looks at the next token.
*
- * @param integer $number
+ * @param int $number
*
* @return Twig_Token
*/
public function look($number = 1)
{
if (!isset($this->tokens[$this->current + $number])) {
- throw new Twig_Error_Syntax('Unexpected end of template', $this->tokens[$this->current + $number - 1]->getLine(), $this->filename);
+ throw new Twig_Error_Syntax('Unexpected end of template.', $this->tokens[$this->current + $number - 1]->getLine(), $this->source);
}
return $this->tokens[$this->current + $number];
}
/**
- * Tests the current token
+ * Tests the current token.
*
* @return bool
*/
@@ -113,18 +133,16 @@ class Twig_TokenStream
}
/**
- * Checks if end of stream was reached
+ * Checks if end of stream was reached.
*
* @return bool
*/
public function isEOF()
{
- return $this->tokens[$this->current]->getType() === Twig_Token::EOF_TYPE;
+ return Twig_Token::EOF_TYPE === $this->tokens[$this->current]->getType();
}
/**
- * Gets the current token
- *
* @return Twig_Token
*/
public function getCurrent()
@@ -133,12 +151,46 @@ class Twig_TokenStream
}
/**
- * Gets the filename associated with this stream
+ * Gets the name associated with this stream (null if not defined).
*
- * @return string
+ * @return string|null
+ *
+ * @deprecated since 1.27 (to be removed in 2.0)
*/
public function getFilename()
{
- return $this->filename;
+ @trigger_error(sprintf('The %s() method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', __METHOD__), E_USER_DEPRECATED);
+
+ return $this->source->getName();
+ }
+
+ /**
+ * Gets the source code associated with this stream.
+ *
+ * @return string
+ *
+ * @internal Don't use this as it might be empty depending on the environment configuration
+ *
+ * @deprecated since 1.27 (to be removed in 2.0)
+ */
+ public function getSource()
+ {
+ @trigger_error(sprintf('The %s() method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', __METHOD__), E_USER_DEPRECATED);
+
+ return $this->source->getCode();
+ }
+
+ /**
+ * Gets the source associated with this stream.
+ *
+ * @return Twig_Source
+ *
+ * @internal
+ */
+ public function getSourceContext()
+ {
+ return $this->source;
}
}
+
+class_alias('Twig_TokenStream', 'Twig\TokenStream', false);