: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* This file is part of Twig.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
namespace WPML\Core\Twig;
use WPML\Core\Twig\Error\SyntaxError;
* Represents a token stream.
* @author Fabien Potencier <fabien@symfony.com>
* @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, $name = null, $source = null)
if (!$name instanceof \WPML\Core\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 \WPML\Core\Twig\Source($source, $name);
// deprecated, not used anymore, to be removed in 2.0
$this->filename = $this->source->getName();
public function __toString()
return \implode("\n", $this->tokens);
public function injectTokens(array $tokens)
$this->tokens = \array_merge(\array_slice($this->tokens, 0, $this->current), $tokens, \array_slice($this->tokens, $this->current));
* Sets the pointer to the next token and returns the old one.
if (!isset($this->tokens[++$this->current])) {
throw new \WPML\Core\Twig\Error\SyntaxError('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 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)) {
* Tests a token and returns it or throws a syntax error.
public function expect($type, $value = null, $message = null)
$token = $this->tokens[$this->current];
if (!$token->test($type, $value)) {
$line = $token->getLine();
throw new \WPML\Core\Twig\Error\SyntaxError(\sprintf('%sUnexpected token "%s"%s ("%s" expected%s).', $message ? $message . '. ' : '', \WPML\Core\Twig\Token::typeToEnglish($token->getType()), $token->getValue() ? \sprintf(' of value "%s"', $token->getValue()) : '', \WPML\Core\Twig\Token::typeToEnglish($type), $value ? \sprintf(' with value "%s"', $value) : ''), $line, $this->source);
* Looks at the next token.
public function look($number = 1)
if (!isset($this->tokens[$this->current + $number])) {
throw new \WPML\Core\Twig\Error\SyntaxError('Unexpected end of template.', $this->tokens[$this->current + $number - 1]->getLine(), $this->source);
return $this->tokens[$this->current + $number];
* Tests the current token.
public function test($primary, $secondary = null)
return $this->tokens[$this->current]->test($primary, $secondary);
* Checks if end of stream was reached.
return \WPML\Core\Twig\Token::EOF_TYPE === $this->tokens[$this->current]->getType();
public function getCurrent()
return $this->tokens[$this->current];
* Gets the name associated with this stream (null if not defined).
* @deprecated since 1.27 (to be removed in 2.0)
public function getFilename()
@\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.
* @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.
public function getSourceContext()
\class_alias('WPML\\Core\\Twig\\TokenStream', 'WPML\\Core\\Twig_TokenStream');