mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-17 21:07:18 +00:00
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:
+24
-14
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 &&
|
||||
|
||||
Reference in New Issue
Block a user