diff --git a/main.c b/main.c index f65bb20..35eceb7 100644 --- a/main.c +++ b/main.c @@ -2,21 +2,71 @@ #include #include +const int indent = 2; +int scope = 0; + +void print_indent() { + for (int i = 0; i < indent * scope; i++) { + putchar(' '); + } +} + +void ln() { + putchar('\n'); + print_indent(); +} + + int main() { - int scope = 0; bool in_string = false; bool escape_next = false; char c; while (read(STDIN_FILENO, &c, 1) > 0) { - putchar(c); + switch (c) { + case '\"': + if (!escape_next) { + in_string = !in_string; + } - if (c == '{' || c == '[') { + putchar(c); + break; + case '\\': + escape_next = true; + + putchar(c); + break; + case '{': + case '[': + putchar(c); scope++; - putchar('\n'); - } - else if (c == '}' || c == ']') { + + ln(); + break; + case '}': + case ']': scope--; + ln(); + + putchar(c); + break; + case ',': + putchar(c); + if (!in_string) { + ln(); + } + + break; + case ':': + putchar(c); + if (!in_string) { + putchar(' '); + } + + break; + default: + putchar(c); + break; } }