public function getTests() { $left = Apishka_Templater_Node_Expression_Constant::apishka(1, 1); $right = Apishka_Templater_Node_Expression_Constant::apishka(2, 1); $node = Apishka_Templater_Node_Expression_Binary_Concat::apishka($left, $right, 1); return array(array($node, '(1 . 2)')); }
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(Apishka_Templater_Token::STRING_TYPE))) { $nodes[] = Apishka_Templater_Node_Expression_Constant::apishka($token->getValue(), $token->getLine()); $nextCanBeString = false; } elseif ($stream->nextIf(Apishka_Templater_Token::INTERPOLATION_START_TYPE)) { $nodes[] = $this->parseExpression(); $stream->expect(Apishka_Templater_Token::INTERPOLATION_END_TYPE); $nextCanBeString = true; } else { break; } } $expr = array_shift($nodes); foreach ($nodes as $node) { $expr = Apishka_Templater_Node_Expression_Binary_Concat::apishka($expr, $node, $node->getLine()); } return $expr; }
public function getTestsForString() { return array(array('{{ "foo" }}', Apishka_Templater_Node_Expression_Constant::apishka('foo', 1)), array('{{ "foo #{bar}" }}', Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1)), array('{{ "foo #{bar} baz" }}', Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(' baz', 1), 1)), array('{{ "foo #{"foo #{bar} baz"} baz" }}', Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(' baz', 1), 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(' baz', 1), 1))); }