added support for optional length in the slice [] notation
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 14 Jan 2012 08:27:35 +0000 (09:27 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 14 Jan 2012 08:27:35 +0000 (09:27 +0100)
lib/Twig/ExpressionParser.php
test/Twig/Tests/Fixtures/filters/slice.test

index bbe5d97..ddbdc8f 100644 (file)
@@ -354,8 +354,14 @@ class Twig_ExpressionParser
             if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ':')) {
                 $stream->next();
 
+                if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) {
+                    $length = new Twig_Node_Expression_Constant(null, $token->getLine());
+                } else {
+                    $length = $this->parseExpression();
+                }
+
                 $class = $this->getFilterNodeClass('slice');
-                $arguments = new Twig_Node(array($arg, $this->parseExpression()));
+                $arguments = new Twig_Node(array($arg, $length));
                 $filter = new $class($node, new Twig_Node_Expression_Constant('slice', $token->getLine()), $arguments, $token->getLine());
 
                 $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']');
index da9861f..ae64b26 100644 (file)
@@ -1,7 +1,7 @@
 --TEST--
 "slice" filter
 --TEMPLATE--
-{{ [1, 2, 3, 4][1:2]|join('')}}
+{{ [1, 2, 3, 4][1:2]|join('') }}
 {{ {a: 1, b: 2, c: 3, d: 4}[1:2]|join('') }}
 {{ [1, 2, 3, 4][start:length]|join('') }}
 {{ [1, 2, 3, 4]|slice(1, 2)|join('') }}
@@ -10,6 +10,9 @@
 {{ '1234'[1:2] }}
 {{ arr|slice(1, 2)|join('') }}
 {{ arr[1:2]|join('') }}
+
+{{ [1, 2, 3, 4]|slice(1)|join('') }}
+{{ [1, 2, 3, 4][1:]|join('') }}
 --DATA--
 return array('start' => 1, 'length' => 2, 'arr' => new ArrayObject(array(1, 2, 3, 4)))
 --EXPECT--
@@ -22,3 +25,6 @@ return array('start' => 1, 'length' => 2, 'arr' => new ArrayObject(array(1, 2, 3
 23
 23
 23
+
+234
+234