private string ParseString()
{
bool escape = false;
StringBuilder builder = new StringBuilder();
while (Pointer < Data.Length && Data[Pointer] != '"')
if (Data[Pointer] == '\\')
{
escape = true;
Pointer++;
}
else if (escape)
switch (Data[Pointer])
{
case 'n':
builder.Append('\n');
Pointer++;
break;
case 'r':
builder.Append('\r');
Pointer++;
break;
case 'x':
if (Pointer + 2 >= Data.Length)
{
throw new Exception("Not enough data to parse \\x!");
}
else
{
int value = Convert.ToInt32(Data.Substring(Pointer + 1, 2), 16);
builder.Append((char)value);
Pointer += 3;
}
break;
default:
builder.Append(Data[Pointer++]);
break;
}
else
builder.Append(Data[Pointer++]);
Pointer++;
return builder.ToString();
}