You are here

public function Twig_ExpressionParser::parseStringExpression in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/twig/twig/lib/Twig/ExpressionParser.php \Twig_ExpressionParser::parseStringExpression()
1 call to Twig_ExpressionParser::parseStringExpression()
Twig_ExpressionParser::parsePrimaryExpression in vendor/twig/twig/lib/Twig/ExpressionParser.php

File

vendor/twig/twig/lib/Twig/ExpressionParser.php, line 197

Class

Twig_ExpressionParser
Parses expressions.

Code

public function parseStringExpression() {
  $stream = $this->parser
    ->getStream();
  $nodes = array();

  // a string cannot be followed by another string in a single expression
  $nextCanBeString = true;
  while (true) {
    if ($nextCanBeString && ($token = $stream
      ->nextIf(Twig_Token::STRING_TYPE))) {
      $nodes[] = new Twig_Node_Expression_Constant($token
        ->getValue(), $token
        ->getLine());
      $nextCanBeString = false;
    }
    elseif ($stream
      ->nextIf(Twig_Token::INTERPOLATION_START_TYPE)) {
      $nodes[] = $this
        ->parseExpression();
      $stream
        ->expect(Twig_Token::INTERPOLATION_END_TYPE);
      $nextCanBeString = true;
    }
    else {
      break;
    }
  }
  $expr = array_shift($nodes);
  foreach ($nodes as $node) {
    $expr = new Twig_Node_Expression_Binary_Concat($expr, $node, $node
      ->getLine());
  }
  return $expr;
}