mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-11 18:06:46 +00:00
fixed various small bugs
This commit is contained in:
@@ -470,6 +470,7 @@ class Environment
|
|||||||
$this->cache->load($key);
|
$this->cache->load($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$source = null;
|
||||||
if (!class_exists($cls, false)) {
|
if (!class_exists($cls, false)) {
|
||||||
$loader = $this->getLoader();
|
$loader = $this->getLoader();
|
||||||
if (!$loader instanceof SourceContextLoaderInterface) {
|
if (!$loader instanceof SourceContextLoaderInterface) {
|
||||||
|
|||||||
@@ -1658,7 +1658,7 @@ function twig_constant_is_defined($constant, $object = null)
|
|||||||
function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
||||||
{
|
{
|
||||||
if (!twig_test_iterable($items)) {
|
if (!twig_test_iterable($items)) {
|
||||||
throw new RuntimeError(sprintf('The "batch" filter expects an array or "Traversable", got "%s".', \is_object($from) ? \get_class($from) : \gettype($from)));
|
throw new RuntimeError(sprintf('The "batch" filter expects an array or "Traversable", got "%s".', \is_object($items) ? \get_class($items) : \gettype($items)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$size = ceil($size);
|
$size = ceil($size);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class_alias('Twig\Extension\StringLoaderExtension', 'Twig_Extension_StringLoader
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
use Twig\Environment;
|
use Twig\Environment;
|
||||||
use Twig\Template;
|
use Twig\TemplateWrapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a template from a string.
|
* Loads a template from a string.
|
||||||
@@ -45,7 +45,7 @@ use Twig\Template;
|
|||||||
* @param string $template A template as a string or object implementing __toString()
|
* @param string $template A template as a string or object implementing __toString()
|
||||||
* @param string $name An optional name of the template to be used in error messages
|
* @param string $name An optional name of the template to be used in error messages
|
||||||
*
|
*
|
||||||
* @return Template
|
* @return TemplateWrapper
|
||||||
*/
|
*/
|
||||||
function twig_template_from_string(Environment $env, $template, $name = null)
|
function twig_template_from_string(Environment $env, $template, $name = null)
|
||||||
{
|
{
|
||||||
|
|||||||
+14
-14
@@ -277,11 +277,11 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
|
|
||||||
case $this->options['tag_block'][0]:
|
case $this->options['tag_block'][0]:
|
||||||
// raw data?
|
// raw data?
|
||||||
if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, null, $this->cursor)) {
|
if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
$this->lexRawData($match[1]);
|
$this->lexRawData($match[1]);
|
||||||
// {% line \d+ %}
|
// {% line \d+ %}
|
||||||
} elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, null, $this->cursor)) {
|
} elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
$this->lineno = (int) $match[1];
|
$this->lineno = (int) $match[1];
|
||||||
} else {
|
} else {
|
||||||
@@ -301,7 +301,7 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
|
|
||||||
protected function lexBlock()
|
protected function lexBlock()
|
||||||
{
|
{
|
||||||
if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, null, $this->cursor)) {
|
if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->pushToken(Token::BLOCK_END_TYPE);
|
$this->pushToken(Token::BLOCK_END_TYPE);
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
$this->popState();
|
$this->popState();
|
||||||
@@ -312,7 +312,7 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
|
|
||||||
protected function lexVar()
|
protected function lexVar()
|
||||||
{
|
{
|
||||||
if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, null, $this->cursor)) {
|
if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->pushToken(Token::VAR_END_TYPE);
|
$this->pushToken(Token::VAR_END_TYPE);
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
$this->popState();
|
$this->popState();
|
||||||
@@ -324,7 +324,7 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
protected function lexExpression()
|
protected function lexExpression()
|
||||||
{
|
{
|
||||||
// whitespace
|
// whitespace
|
||||||
if (preg_match('/\s+/A', $this->code, $match, null, $this->cursor)) {
|
if (preg_match('/\s+/A', $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
|
|
||||||
if ($this->cursor >= $this->end) {
|
if ($this->cursor >= $this->end) {
|
||||||
@@ -333,17 +333,17 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
// operators
|
// operators
|
||||||
if (preg_match($this->regexes['operator'], $this->code, $match, null, $this->cursor)) {
|
if (preg_match($this->regexes['operator'], $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->pushToken(Token::OPERATOR_TYPE, preg_replace('/\s+/', ' ', $match[0]));
|
$this->pushToken(Token::OPERATOR_TYPE, preg_replace('/\s+/', ' ', $match[0]));
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
}
|
}
|
||||||
// names
|
// names
|
||||||
elseif (preg_match(self::REGEX_NAME, $this->code, $match, null, $this->cursor)) {
|
elseif (preg_match(self::REGEX_NAME, $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->pushToken(Token::NAME_TYPE, $match[0]);
|
$this->pushToken(Token::NAME_TYPE, $match[0]);
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
}
|
}
|
||||||
// numbers
|
// numbers
|
||||||
elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, null, $this->cursor)) {
|
elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, 0, $this->cursor)) {
|
||||||
$number = (float) $match[0]; // floats
|
$number = (float) $match[0]; // floats
|
||||||
if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) {
|
if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) {
|
||||||
$number = (int) $match[0]; // integers lower than the maximum
|
$number = (int) $match[0]; // integers lower than the maximum
|
||||||
@@ -373,12 +373,12 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
++$this->cursor;
|
++$this->cursor;
|
||||||
}
|
}
|
||||||
// strings
|
// strings
|
||||||
elseif (preg_match(self::REGEX_STRING, $this->code, $match, null, $this->cursor)) {
|
elseif (preg_match(self::REGEX_STRING, $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->pushToken(Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1)));
|
$this->pushToken(Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1)));
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
}
|
}
|
||||||
// opening double quoted string
|
// opening double quoted string
|
||||||
elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) {
|
elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->brackets[] = ['"', $this->lineno];
|
$this->brackets[] = ['"', $this->lineno];
|
||||||
$this->pushState(self::STATE_STRING);
|
$this->pushState(self::STATE_STRING);
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
@@ -428,15 +428,15 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
|
|
||||||
protected function lexString()
|
protected function lexString()
|
||||||
{
|
{
|
||||||
if (preg_match($this->regexes['interpolation_start'], $this->code, $match, null, $this->cursor)) {
|
if (preg_match($this->regexes['interpolation_start'], $this->code, $match, 0, $this->cursor)) {
|
||||||
$this->brackets[] = [$this->options['interpolation'][0], $this->lineno];
|
$this->brackets[] = [$this->options['interpolation'][0], $this->lineno];
|
||||||
$this->pushToken(Token::INTERPOLATION_START_TYPE);
|
$this->pushToken(Token::INTERPOLATION_START_TYPE);
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
$this->pushState(self::STATE_INTERPOLATION);
|
$this->pushState(self::STATE_INTERPOLATION);
|
||||||
} elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, null, $this->cursor) && \strlen($match[0]) > 0) {
|
} elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, 0, $this->cursor) && \strlen($match[0]) > 0) {
|
||||||
$this->pushToken(Token::STRING_TYPE, stripcslashes($match[0]));
|
$this->pushToken(Token::STRING_TYPE, stripcslashes($match[0]));
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
} elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) {
|
} elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) {
|
||||||
list($expect, $lineno) = array_pop($this->brackets);
|
list($expect, $lineno) = array_pop($this->brackets);
|
||||||
if ('"' != $this->code[$this->cursor]) {
|
if ('"' != $this->code[$this->cursor]) {
|
||||||
throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source);
|
throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source);
|
||||||
@@ -453,7 +453,7 @@ class Lexer implements \Twig_LexerInterface
|
|||||||
protected function lexInterpolation()
|
protected function lexInterpolation()
|
||||||
{
|
{
|
||||||
$bracket = end($this->brackets);
|
$bracket = end($this->brackets);
|
||||||
if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, null, $this->cursor)) {
|
if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, 0, $this->cursor)) {
|
||||||
array_pop($this->brackets);
|
array_pop($this->brackets);
|
||||||
$this->pushToken(Token::INTERPOLATION_END_TYPE);
|
$this->pushToken(Token::INTERPOLATION_END_TYPE);
|
||||||
$this->moveCursor($match[0]);
|
$this->moveCursor($match[0]);
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ abstract class IntegrationTestCase extends TestCase
|
|||||||
$message = $e->getMessage();
|
$message = $e->getMessage();
|
||||||
$this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $message)));
|
$this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $message)));
|
||||||
$last = substr($message, \strlen($message) - 1);
|
$last = substr($message, \strlen($message) - 1);
|
||||||
$this->assertTrue('.' === $last || '?' === $last, $message, 'Exception message must end with a dot or a question mark.');
|
$this->assertTrue('.' === $last || '?' === $last, 'Exception message must end with a dot or a question mark.');
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ abstract class NodeTestCase extends TestCase
|
|||||||
$line = $line > 0 ? "// line {$line}\n" : '';
|
$line = $line > 0 ? "// line {$line}\n" : '';
|
||||||
|
|
||||||
if (\PHP_VERSION_ID >= 70000) {
|
if (\PHP_VERSION_ID >= 70000) {
|
||||||
return sprintf('%s($context["%s"] ?? null)', $line, $name, $name);
|
return sprintf('%s($context["%s"] ?? null)', $line, $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\PHP_VERSION_ID >= 50400) {
|
if (\PHP_VERSION_ID >= 50400) {
|
||||||
|
|||||||
Reference in New Issue
Block a user