public function rewriteExpression(ExpressionInterface $expression) { /** @var JoinedExpression $expression */ $rewritten_inner_expression = $this->getRecursiveHandler()->rewriteExpression($expression->getExpression()); $rewritten_seperator_expression = $this->getRecursiveHandler()->rewriteExpression($expression->getSeperator()); $repeater_part = new ConcatenatedExpression(array($rewritten_seperator_expression->getExpression(), $rewritten_inner_expression->getExpression())); $maximum = $expression->getMaximum(); if ($maximum !== null) { $maximum = $maximum - 1; } $maybe_part = new ConcatenatedExpression(array($rewritten_inner_expression->getExpression(), new RepeaterExpression($repeater_part, $expression->isLazy(), max(0, $expression->getMinimum() - 1), $maximum))); return new RewrittenExpressionContainer(new AlternativeExpression(array($maybe_part, new ConstantExpression(""))), new JoinedExpressionResultRewriter($rewritten_inner_expression->getResultRewriter(), $rewritten_seperator_expression->getResultRewriter())); }