private IEnumerable<IFormulaToken> CompleteOperator(IList<IFormulaToken> tokens, int index)
{
var operatorToken = (IFormulaOperator) tokens[index];
var operatorTokens = Enumerable.Repeat((IFormulaToken) operatorToken, 1);
// handle minus token
var minusToken = operatorToken as FormulaNodeSubtract;
if (minusToken != null) operatorToken = InterpretMinusToken(index == 0 ? null : tokens[index - 1], minusToken);
// gather tokens before
if (operatorToken is FormulaNodeInfixOperator)
{
var tokensBefore = tokens.Take(index).Reverse();
tokensBefore = CompleteBrackets(tokensBefore, false);
tokensBefore = CompleteFunctionsBackwards(tokensBefore);
tokensBefore = CompleteNumbers(tokensBefore);
tokensBefore = InterpretMinusTokenBackwards(tokensBefore);
operatorTokens = CompleteOperatorBackwards(tokensBefore, operatorToken).Reverse().Concat(operatorTokens);
}
// gather tokens afterwards
var tokensAfterwards = tokens.Skip(index + 1);
tokensAfterwards = CompleteBrackets(tokensAfterwards);
tokensAfterwards = CompleteFunctionsForward(tokensAfterwards);
tokensAfterwards = CompleteNumbers(tokensAfterwards);
tokensAfterwards = InterpretMinusTokenForward(tokensAfterwards);
operatorTokens = operatorTokens.Concat(CompleteOperatorForward(tokensAfterwards, operatorToken));
return operatorTokens;
}