public static IList<string> SplitWS(string s, bool decode)
{
List<string> lst = new List<string>(2);
StringBuilder sb = new StringBuilder();
int pos = 0, end = s.Length;
while (pos < end)
{
char ch = s[pos++];
if (char.IsWhiteSpace(ch))
{
if (sb.Length > 0)
{
lst.Add(sb.ToString());
sb = new StringBuilder();
}
continue;
}
if (ch == '\\')
{
if (!decode)
{
sb.Append(ch);
}
if (pos >= end) // ERROR, or let it go?
{
break;
}
ch = s[pos++];
if (decode)
{
switch (ch)
{
case 'n':
ch = '\n';
break;
case 't':
ch = '\t';
break;
case 'r':
ch = '\r';
break;
case 'b':
ch = '\b';
break;
case 'f':
ch = '\f';
break;
}
}
}
sb.Append(ch);
}
if (sb.Length > 0)
{
lst.Add(sb.ToString());
}
return lst;
}