using System.Collections.Generic;
|
using System.Text;
|
|
namespace FastJSON
|
{
|
internal static class Formatter
|
{
|
public static string Indent = " ";
|
|
public static void AppendIndent(StringBuilder sb, int count)
|
{
|
for (; count > 0; --count) sb.Append(Indent);
|
}
|
|
public static string PrettyPrint(string input)
|
{
|
var output = new StringBuilder();
|
int depth = 0;
|
int len = input.Length;
|
char[] chars = input.ToCharArray();
|
for (int i = 0; i < len; ++i)
|
{
|
char ch = chars[i];
|
|
if (ch == '\"') // found string span
|
{
|
bool str = true;
|
while (str)
|
{
|
output.Append(ch);
|
ch = chars[++i];
|
if (ch == '\\')
|
{
|
output.Append(ch);
|
ch = chars[++i];
|
}
|
else if (ch == '\"')
|
str = false;
|
}
|
}
|
|
switch (ch)
|
{
|
case '{':
|
case '[':
|
output.Append(ch);
|
output.AppendLine();
|
AppendIndent(output, ++depth);
|
break;
|
case '}':
|
case ']':
|
output.AppendLine();
|
AppendIndent(output, --depth);
|
output.Append(ch);
|
break;
|
case ',':
|
output.Append(ch);
|
output.AppendLine();
|
AppendIndent(output, depth);
|
break;
|
case ':':
|
output.Append(" : ");
|
break;
|
default:
|
if (!char.IsWhiteSpace(ch))
|
output.Append(ch);
|
break;
|
}
|
}
|
|
return output.ToString();
|
}
|
}
|
}
|