public function Twig_ExpressionParser::parseStringExpression

1 call to Twig_ExpressionParser::parseStringExpression()
Twig_ExpressionParser::parsePrimaryExpression in drupal/core/vendor/twig/twig/lib/Twig/ExpressionParser.php

File

drupal/core/vendor/twig/twig/lib/Twig/ExpressionParser.php, line 168

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 ($stream
      ->test(Twig_Token::STRING_TYPE) && $nextCanBeString) {
      $token = $stream
        ->next();
      $nodes[] = new Twig_Node_Expression_Constant($token
        ->getValue(), $token
        ->getLine());
      $nextCanBeString = false;
    }
    elseif ($stream
      ->test(Twig_Token::INTERPOLATION_START_TYPE)) {
      $stream
        ->next();
      $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;
}