123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using System.Text;
- internal static class Formatter
- {
- public static string Indent = " ";
- public static void AppendIndent(StringBuilder sb, int count)
- {
- while (count > 0)
- {
- sb.Append(Indent);
- count--;
- }
- }
- public static bool IsEscaped(StringBuilder sb, int index)
- {
- bool escaped = false;
- while (index > 0 && sb[--index] == '\\')
- {
- escaped = !escaped;
- }
- return escaped;
- }
- public static string PrettyPrint(string input)
- {
- StringBuilder output = new StringBuilder(input.Length * 2);
- char? quote = null;
- int depth = 0;
- for (int i = 0; i < input.Length; i++)
- {
- char ch = input[i];
- switch (ch)
- {
- case '[':
- case '{':
- output.Append(ch);
- if (!quote.HasValue)
- {
- output.AppendLine();
- AppendIndent(output, ++depth);
- }
- break;
- case ']':
- case '}':
- if (quote.HasValue)
- {
- output.Append(ch);
- break;
- }
- output.AppendLine();
- AppendIndent(output, --depth);
- output.Append(ch);
- break;
- case '"':
- case '\'':
- output.Append(ch);
- if (quote.HasValue)
- {
- if (!IsEscaped(output, i))
- {
- quote = null;
- }
- }
- else
- {
- quote = ch;
- }
- break;
- case ',':
- output.Append(ch);
- if (!quote.HasValue)
- {
- output.AppendLine();
- AppendIndent(output, depth);
- }
- break;
- case ':':
- if (quote.HasValue)
- {
- output.Append(ch);
- }
- else
- {
- output.Append(" : ");
- }
- break;
- default:
- if (quote.HasValue || !char.IsWhiteSpace(ch))
- {
- output.Append(ch);
- }
- break;
- }
- }
- return output.ToString();
- }
- }
|