internal char ScanCharEscape()
{
char ch;
ch = MoveRightGetChar();
if (ch >= '0' && ch <= '7')
{
MoveLeft();
return ScanOctal();
}
switch (ch)
{
case 'x':
return ScanHex(2);
case 'u':
return ScanHex(4);
case 'a':
return '\u0007';
case 'b':
return '\b';
case 'e':
return '\u001B';
case 'f':
return '\f';
case 'n':
return '\n';
case 'r':
return '\r';
case 't':
return '\t';
case 'v':
return '\u000B';
case 'c':
return ScanControl();
default:
if (!UseOptionE() && RegexCharClass.IsWordChar(ch))
throw MakeException(SR.Format(SR.UnrecognizedEscape, ch.ToString()));
return ch;
}
}
internal static string Unescape(string input) { for (int i = 0; i < input.Length; i++) { if (input[i] == '\\') { StringBuilder builder = new StringBuilder(); RegexParser parser = new RegexParser(CultureInfo.InvariantCulture); parser.SetPattern(input); builder.Append(input, 0, i); do { i++; parser.Textto(i); if (i < input.Length) { builder.Append(parser.ScanCharEscape()); } i = parser.Textpos(); int startIndex = i; while ((i < input.Length) && (input[i] != '\\')) { i++; } builder.Append(input, startIndex, i - startIndex); } while (i < input.Length); return builder.ToString(); } } return input; }