added an exception when the parser want to move after the EOF, and added a better error when a if tag is not closed properly (closes #12)

This commit is contained in:
Fabien Potencier
2010-02-19 18:19:11 +01:00
parent 4d5ce3ddf8
commit d2b44781e3
2 changed files with 29 additions and 14 deletions
+24 -14
View File
@@ -23,23 +23,33 @@ class Twig_TokenParser_If extends Twig_TokenParser
$end = false;
while (!$end)
{
switch ($this->parser->getStream()->next()->getValue())
try
{
case 'else':
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
$else = $this->parser->subparse(array($this, 'decideIfEnd'));
break;
switch ($this->parser->getStream()->next()->getValue())
{
case 'else':
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
$else = $this->parser->subparse(array($this, 'decideIfEnd'));
break;
case 'elseif':
$expr = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
$body = $this->parser->subparse(array($this, 'decideIfFork'));
$tests[] = array($expr, $body);
break;
case 'elseif':
$expr = $this->parser->getExpressionParser()->parseExpression();
$this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
$body = $this->parser->subparse(array($this, 'decideIfFork'));
$tests[] = array($expr, $body);
break;
case 'endif':
$end = true;
break;
case 'endif':
$end = true;
break;
default:
throw new Twig_SyntaxError('', -1);
}
}
catch (Twig_SyntaxError $e)
{
throw new Twig_SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), -1);
}
}
+5
View File
@@ -63,6 +63,11 @@ class Twig_TokenStream
$token = array_shift($this->tokens);
}
if (null === $token)
{
throw new Twig_SyntaxError('Unexpected end of template', -1);
}
// trim blocks
if ($this->trimBlocks &&
$this->current &&