public string Resolve()
{
var currentState = States.CopyingLiterals;
_Result = new Result();
StringBuilder currentExpression = null;
foreach (var character in _template.ToCharArray())
{
switch (currentState)
{
case States.CopyingLiterals:
if (character == '{')
{
currentState = States.ParsingExpression;
currentExpression = new StringBuilder();
}
else if (character == '}')
{
throw new ArgumentException("Malformed template, unexpected } : " + _Result.ToString());
}
else
{
_Result.Append(character);
}
break;
case States.ParsingExpression:
if (character == '}')
{
ProcessExpression(currentExpression);
currentState = States.CopyingLiterals;
}
else
{
currentExpression.Append(character);
}
break;
}
}
if (currentState == States.ParsingExpression)
{
_Result.Append("{");
_Result.Append(currentExpression.ToString());
throw new ArgumentException("Malformed template, missing } : " + _Result.ToString());
}
if (_ErrorDetected)
{
throw new ArgumentException("Malformed template : " + _Result.ToString());
}
return _Result.ToString();
}