mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-13 02:46:29 +00:00
parser support for interpolated strings
This commit is contained in:
@@ -143,11 +143,15 @@ class Twig_ExpressionParser
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Twig_Token::NUMBER_TYPE:
|
case Twig_Token::NUMBER_TYPE:
|
||||||
case Twig_Token::STRING_TYPE:
|
|
||||||
$this->parser->getStream()->next();
|
$this->parser->getStream()->next();
|
||||||
$node = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
|
$node = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Twig_Token::STRING_TYPE:
|
||||||
|
case Twig_Token::INTERPOLATION_START_TYPE:
|
||||||
|
$node = $this->parseStringExpression();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if ($token->test(Twig_Token::PUNCTUATION_TYPE, '[')) {
|
if ($token->test(Twig_Token::PUNCTUATION_TYPE, '[')) {
|
||||||
$node = $this->parseArrayExpression();
|
$node = $this->parseArrayExpression();
|
||||||
@@ -161,6 +165,38 @@ class Twig_ExpressionParser
|
|||||||
return $this->parsePostfixExpression($node);
|
return $this->parsePostfixExpression($node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function parseStringExpression()
|
||||||
|
{
|
||||||
|
$stream = $this->parser->getStream();
|
||||||
|
|
||||||
|
$nodes = array();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
if ($stream->test(Twig_Token::STRING_TYPE)) {
|
||||||
|
$token = $stream->next();
|
||||||
|
$nodes[] = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
|
||||||
|
} else if ($stream->test(Twig_Token::INTERPOLATION_START_TYPE)) {
|
||||||
|
$stream->next();
|
||||||
|
$nodes[] = $this->parseExpression();
|
||||||
|
$stream->expect(Twig_Token::INTERPOLATION_END_TYPE);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$expr = null;
|
||||||
|
|
||||||
|
foreach(array_reverse($nodes) as $node) {
|
||||||
|
if (null === $expr) {
|
||||||
|
$expr = $node;
|
||||||
|
} else {
|
||||||
|
$expr = new Twig_Node_Expression_Binary_Concat($node, $expr, $node->getLine());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $expr;
|
||||||
|
}
|
||||||
|
|
||||||
public function parseArrayExpression()
|
public function parseArrayExpression()
|
||||||
{
|
{
|
||||||
$stream = $this->parser->getStream();
|
$stream = $this->parser->getStream();
|
||||||
|
|||||||
Reference in New Issue
Block a user