aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xjson-format.pl23
1 files changed, 12 insertions, 11 deletions
diff --git a/json-format.pl b/json-format.pl
index 49fb5ce..f43488c 100755
--- a/json-format.pl
+++ b/json-format.pl
@@ -16,14 +16,15 @@ my %format = (
ERROR => color('bold white on_red'),
);
-my $color = 'auto';
-my $help;
-if (!GetOptions('color=s' => \$color, 'help' => \$help) || $help) {
+my ($color, $keep_ws, $help) = 'auto';
+if (!GetOptions('color=s' => \$color, 'keep-ws' => \$keep_ws, 'help' => \$help)
+ || $help) {
print STDERR
"Usage: $0 [OPTION...] [FILE...]\n" .
"Pretty-print and colorify JSON\n" .
"\n" .
" --help print this help\n" .
+ " --keep-ws retain all original whitespace\n" .
" --color=COLOR 'always', 'never' or 'auto' (the default)\n";
exit 2;
}
@@ -77,7 +78,7 @@ sub nexttoken ($) {
sub skip_ws ($) {
my $json = shift;
while (my ($token, $text) = nexttoken $json) {
- next if $token eq 'WS';
+ next if !$keep_ws && $token eq 'WS';
return $token, $text;
}
return;
@@ -103,9 +104,9 @@ sub do_object ($) {
}
if ($token eq 'RBRACE') {
$indent--;
- printindent;
+ printindent unless $keep_ws;
} elsif ($first) {
- printindent;
+ printindent unless $keep_ws;
$first = 0;
}
do_value $token, $text, $json;
@@ -119,9 +120,9 @@ sub do_array ($) {
while (my ($token, $text) = skip_ws $json) {
if ($token eq 'RBRACKET') {
$indent--;
- printindent;
+ printindent unless $keep_ws;
} elsif ($first) {
- printindent;
+ printindent unless $keep_ws;
$first = 0;
}
do_value $token, $text, $json;
@@ -143,9 +144,9 @@ sub do_value ($$$) {
$indent++;
do_array $json;
} elsif ($token eq 'COMMA') {
- printindent;
+ printindent unless $keep_ws;
} elsif ($token eq 'COLON') {
- print ' ';
+ print ' ' unless $keep_ws;
}
}
@@ -153,4 +154,4 @@ my @buffer;
while (my ($token, $text) = skip_ws \@buffer) {
do_value $token, $text, \@buffer;
}
-print "\n";
+print "\n" unless $keep_ws;