Permalink
Browse files

added {% line \d+ %} directive

  • Loading branch information...
1 parent 7e45720 commit 5ec19550b24c2626971337dcdbd5ac33a5de07ad @arnaud-lb arnaud-lb committed Jun 5, 2011
Showing with 45 additions and 0 deletions.
  1. +5 −0 lib/Twig/Lexer.php
  2. +40 −0 test/Twig/Tests/LexerTest.php
View
@@ -162,6 +162,11 @@ protected function lexData()
$this->moveCursor($match[0]);
$this->lexRawData();
$this->state = self::STATE_DATA;
+ // {% line \d+ %}
+ } else if (preg_match('/\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '/').'/As', $this->code, $match, null, $this->cursor)) {
+ $this->moveCursor($match[0]);
+ $this->lineno = (int) $match[1];
+ $this->state = self::STATE_DATA;
} else {
$this->pushToken(Twig_Token::BLOCK_START_TYPE);
$this->state = self::STATE_BLOCK;
@@ -36,4 +36,44 @@ protected function countToken($template, $type, $value = null)
return $count;
}
+
+ public function testLineDirective()
+ {
+ $template = "foo\n"
+ . "bar\n"
+ . "{% line 10 %}\n"
+ . "{{\n"
+ . "baz\n"
+ . "}}\n";
+
+ $lexer = new Twig_Lexer(new Twig_Environment());
+ $stream = $lexer->tokenize($template);
+
+ // foo\nbar\n
+ $this->assertSame(1, $stream->expect(Twig_Token::TEXT_TYPE)->getLine());
+ // \n (after {% line %})
+ $this->assertSame(10, $stream->expect(Twig_Token::TEXT_TYPE)->getLine());
+ // {{
+ $this->assertSame(11, $stream->expect(Twig_Token::VAR_START_TYPE)->getLine());
+ // baz
+ $this->assertSame(12, $stream->expect(Twig_Token::NAME_TYPE)->getLine());
+ }
+
+ public function testLineDirectiveInline()
+ {
+ $template = "foo\n"
+ . "bar{% line 10 %}{{\n"
+ . "baz\n"
+ . "}}\n";
+
+ $lexer = new Twig_Lexer(new Twig_Environment());
+ $stream = $lexer->tokenize($template);
+
+ // foo\nbar
+ $this->assertSame(1, $stream->expect(Twig_Token::TEXT_TYPE)->getLine());
+ // {{
+ $this->assertSame(10, $stream->expect(Twig_Token::VAR_START_TYPE)->getLine());
+ // baz
+ $this->assertSame(11, $stream->expect(Twig_Token::NAME_TYPE)->getLine());
+ }
}

0 comments on commit 5ec1955

Please sign in to comment.