private IToken MatchText()
{
bool modifiedText = false;
StringBuilder buf = new StringBuilder();
while (c != EOF && c != delimiterStartChar)
{
if (c == '\r' || c == '\n')
break;
if (c == '}' && subtemplateDepth > 0)
break;
if (c == '\\')
{
if (input.LA(2) == '\\')
{
// convert \\ to \
Consume();
Consume();
buf.Append('\\');
modifiedText = true;
continue;
}
if (input.LA(2) == delimiterStartChar || input.LA(2) == '}')
{
modifiedText = true;
// toss out \ char
Consume();
buf.Append(c);
Consume();
}
else
{
buf.Append(c);
Consume();
}
continue;
}
buf.Append(c);
Consume();
}
if (modifiedText)
return NewToken(TEXT, buf.ToString());
else
return NewToken(TEXT);
}