private IEnumerable<IFormulaToken> CompleteOperatorForward(IEnumerable<IFormulaToken> tokens, IFormulaOperator operatorToken)
{
var operatorOrder = operatorToken.Order;
return tokens
.TakeWhile(token => !(token is FormulaTokenParameterSeparator))
.WithContext()
.TakeWhile(context =>
{
var previousToken = context[0];
var token = context[1];
if (token == null) return false;
var infixOperatorToken = token as FormulaNodeInfixOperator;
var expectValue = previousToken == null || previousToken is IFormulaOperator;
if (expectValue)
{
// missing value of operator
return infixOperatorToken == null;
}
// operator fully completed
return infixOperatorToken != null && infixOperatorToken.Order > operatorOrder;
}).Select(context => context[1]);
}