internal static string Escape(string input)
{
for (int i = 0; i < input.Length; i++)
{
if (IsMetachar(input[i]))
{
StringBuilder sb = StringBuilderCache.Acquire();
char ch = input[i];
int lastpos;
sb.Append(input, 0, i);
do
{
sb.Append('\\');
switch (ch)
{
case '\n':
ch = 'n';
break;
case '\r':
ch = 'r';
break;
case '\t':
ch = 't';
break;
case '\f':
ch = 'f';
break;
}
sb.Append(ch);
i++;
lastpos = i;
while (i < input.Length)
{
ch = input[i];
if (IsMetachar(ch))
break;
i++;
}
sb.Append(input, lastpos, i - lastpos);
} while (i < input.Length);
return StringBuilderCache.GetStringAndRelease(sb);
}
}
return input;
}