private char ParseEscapeSequence(out bool success)
{
int errorCount = Errors.Count;
char ch = default(char);
MatchTerminalString("\\\\", out success);
if (success) { return '\\'; }
MatchTerminalString("\\'", out success);
if (success) { return '\''; }
MatchTerminalString("\\\"", out success);
if (success) { return '\"'; }
MatchTerminalString("\\r", out success);
if (success) { return '\r'; }
MatchTerminalString("\\n", out success);
if (success) { return '\n'; }
MatchTerminalString("\\t", out success);
if (success) { return '\t'; }
MatchTerminalString("\\v", out success);
if (success) { return '\v'; }
MatchTerminalString("\\a", out success);
if (success) { return '\a'; }
MatchTerminalString("\\b", out success);
if (success) { return '\b'; }
MatchTerminalString("\\f", out success);
if (success) { return '\f'; }
MatchTerminalString("\\0", out success);
if (success) { return '\0'; }
MatchTerminalString("\\/", out success);
if (success) { return '/'; }
MatchTerminalString("\\ ", out success);
if (success) { return ' '; }
MatchTerminalString("\\\t", out success);
if (success) { return ' '; }
MatchTerminalString("\\_", out success);
if (success) { return '\u00A0'; }
MatchTerminalString("\\e", out success);
if (success) { return '\u001B'; }
MatchTerminalString("\\N", out success);
if (success) { return '\u0085'; }
MatchTerminalString("\\L", out success);
if (success) { return '\u2028'; }
MatchTerminalString("\\P", out success);
if (success) { return '\u2029'; }
while (true)
{
int seq_start_position1 = position;
MatchTerminalString("\\x", out success);
if (!success)
{
Error("Failed to parse '\\\\x' of EscapeSequence.");
break;
}
char char1 = ParseHexDigit(out success);
if (!success)
{
Error("Failed to parse char1 of EscapeSequence.");
position = seq_start_position1;
break;
}
char char2 = ParseHexDigit(out success);
if (success) { return Convert.ToChar(int.Parse(String.Format("{0}{1}", char1, char2), System.Globalization.NumberStyles.HexNumber)); }
else
{
Error("Failed to parse char2 of EscapeSequence.");
position = seq_start_position1;
}
break;
}
if (success) { ClearError(errorCount); return ch; }
while (true)
{
int seq_start_position2 = position;
MatchTerminalString("\\u", out success);
if (!success)
{
Error("Failed to parse '\\\\u' of EscapeSequence.");
break;
}
char char1 = ParseHexDigit(out success);
if (!success)
{
Error("Failed to parse char1 of EscapeSequence.");
position = seq_start_position2;
break;
}
char char2 = ParseHexDigit(out success);
if (!success)
{
Error("Failed to parse char2 of EscapeSequence.");
position = seq_start_position2;
break;
}
char char3 = ParseHexDigit(out success);
if (!success)
{
Error("Failed to parse char3 of EscapeSequence.");
position = seq_start_position2;
break;
}
char char4 = ParseHexDigit(out success);
if (success) { return Convert.ToChar(int.Parse(String.Format("{0}{1}{2}{3}", char1, char2, char3, char4), System.Globalization.NumberStyles.HexNumber)); }
else
{
Error("Failed to parse char4 of EscapeSequence.");
position = seq_start_position2;
}
break;
}
if (success) { ClearError(errorCount); return ch; }
return ch;
}