private static IList<ExpressionPosition> GetExpressionsPositions(string code)
{
List<ExpressionPosition> bracesPositions = new List<ExpressionPosition>();
bool prevCharWasDollar = false;
for (int index = 0; index < code.Length; index++)
{
if (code[index] == '{')
{
bracesPositions.Add(new ExpressionPosition(index - 1, -1, prevCharWasDollar));
}
if (code[index] == '}' && bracesPositions.Count > 0)
{
ExpressionPosition position = bracesPositions[bracesPositions.Count - 1];
if (ParentExpressionIsNotValid(bracesPositions, bracesPositions.Count))
{
bracesPositions.RemoveAt(bracesPositions.Count - 1);
}
else if (position.End==-1)
{
position.End = index;
}
}
//handles escaping expressions with $$ as well
prevCharWasDollar = code[index] == '$' && !prevCharWasDollar;
}
bracesPositions.RemoveAll(delegate(ExpressionPosition obj)
{
return !obj.PrevCharWasDollar;
});
return bracesPositions;
}