f8470165 (kx 2023-04-07 06:34:02 +0300 1) #!/usr/bin/perl -w
f8470165 (kx 2023-04-07 06:34:02 +0300 2)
f8470165 (kx 2023-04-07 06:34:02 +0300 3) use strict;
f8470165 (kx 2023-04-07 06:34:02 +0300 4) use Getopt::Long qw(:config no_ignore_case bundling);
f8470165 (kx 2023-04-07 06:34:02 +0300 5) use File::Basename;
f8470165 (kx 2023-04-07 06:34:02 +0300 6) use utf8;
f8470165 (kx 2023-04-07 06:34:02 +0300 7)
f8470165 (kx 2023-04-07 06:34:02 +0300 8) my $ifname = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 9) my $ofname = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 10) my $stdio = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 11) my $last = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 12)
f8470165 (kx 2023-04-07 06:34:02 +0300 13) my $version = "@VERSION@";
f8470165 (kx 2023-04-07 06:34:02 +0300 14)
f8470165 (kx 2023-04-07 06:34:02 +0300 15) my ( $if, $of );
f8470165 (kx 2023-04-07 06:34:02 +0300 16)
f8470165 (kx 2023-04-07 06:34:02 +0300 17) sub usage
f8470165 (kx 2023-04-07 06:34:02 +0300 18) {
f8470165 (kx 2023-04-07 06:34:02 +0300 19) my $p = basename( $0 );
f8470165 (kx 2023-04-07 06:34:02 +0300 20)
f8470165 (kx 2023-04-07 06:34:02 +0300 21) print <<EOF;
f8470165 (kx 2023-04-07 06:34:02 +0300 22)
f8470165 (kx 2023-04-07 06:34:02 +0300 23) Usage: $p [options] [input_file_name]
f8470165 (kx 2023-04-07 06:34:02 +0300 24) Options:
f8470165 (kx 2023-04-07 06:34:02 +0300 25) --output | -o - output file name;
f8470165 (kx 2023-04-07 06:34:02 +0300 26) --version | -v - print version numver;
f8470165 (kx 2023-04-07 06:34:02 +0300 27) --help | -h | -? - print this message;
f8470165 (kx 2023-04-07 06:34:02 +0300 28) -- - an option terminator;
f8470165 (kx 2023-04-07 06:34:02 +0300 29) - - use std{io|out} instead of files.
f8470165 (kx 2023-04-07 06:34:02 +0300 30)
f8470165 (kx 2023-04-07 06:34:02 +0300 31) Examples:
f8470165 (kx 2023-04-07 06:34:02 +0300 32)
f8470165 (kx 2023-04-07 06:34:02 +0300 33) Input file is 'full.json', output file is 'min.json':
f8470165 (kx 2023-04-07 06:34:02 +0300 34)
f8470165 (kx 2023-04-07 06:34:02 +0300 35) \$ $p -o min.json full.json
f8470165 (kx 2023-04-07 06:34:02 +0300 36)
f8470165 (kx 2023-04-07 06:34:02 +0300 37) Input file is 'STDIN', output file is 'min.json':
f8470165 (kx 2023-04-07 06:34:02 +0300 38)
f8470165 (kx 2023-04-07 06:34:02 +0300 39) \$ $p -o min.json -
f8470165 (kx 2023-04-07 06:34:02 +0300 40)
f8470165 (kx 2023-04-07 06:34:02 +0300 41) Please note that to terminate your input by keyboard you have to use
f8470165 (kx 2023-04-07 06:34:02 +0300 42) <Ctrl>+d combination;
f8470165 (kx 2023-04-07 06:34:02 +0300 43)
f8470165 (kx 2023-04-07 06:34:02 +0300 44) Input file is 'full.json', output file is 'STDOUT':
f8470165 (kx 2023-04-07 06:34:02 +0300 45)
f8470165 (kx 2023-04-07 06:34:02 +0300 46) \$ $p -- full.json
f8470165 (kx 2023-04-07 06:34:02 +0300 47)
f8470165 (kx 2023-04-07 06:34:02 +0300 48) Use stdin, stdout:
f8470165 (kx 2023-04-07 06:34:02 +0300 49)
f8470165 (kx 2023-04-07 06:34:02 +0300 50) \$ $p - < full.json > min.json
f8470165 (kx 2023-04-07 06:34:02 +0300 51)
f8470165 (kx 2023-04-07 06:34:02 +0300 52) Enjoj.
f8470165 (kx 2023-04-07 06:34:02 +0300 53)
f8470165 (kx 2023-04-07 06:34:02 +0300 54) EOF
f8470165 (kx 2023-04-07 06:34:02 +0300 55) exit;
f8470165 (kx 2023-04-07 06:34:02 +0300 56) }
f8470165 (kx 2023-04-07 06:34:02 +0300 57)
f8470165 (kx 2023-04-07 06:34:02 +0300 58) sub version
f8470165 (kx 2023-04-07 06:34:02 +0300 59) {
f8470165 (kx 2023-04-07 06:34:02 +0300 60) print <<EOF;
f8470165 (kx 2023-04-07 06:34:02 +0300 61) $version
f8470165 (kx 2023-04-07 06:34:02 +0300 62) EOF
f8470165 (kx 2023-04-07 06:34:02 +0300 63) exit;
f8470165 (kx 2023-04-07 06:34:02 +0300 64) }
f8470165 (kx 2023-04-07 06:34:02 +0300 65)
f8470165 (kx 2023-04-07 06:34:02 +0300 66)
f8470165 (kx 2023-04-07 06:34:02 +0300 67) my $a = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 68) my $b = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 69) my $x = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 70) my $y = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 71)
f8470165 (kx 2023-04-07 06:34:02 +0300 72) my $lookahead = 0;
f8470165 (kx 2023-04-07 06:34:02 +0300 73)
f8470165 (kx 2023-04-07 06:34:02 +0300 74)
f8470165 (kx 2023-04-07 06:34:02 +0300 75) sub get
f8470165 (kx 2023-04-07 06:34:02 +0300 76) {
f8470165 (kx 2023-04-07 06:34:02 +0300 77) my $c = 0;
f8470165 (kx 2023-04-07 06:34:02 +0300 78)
f8470165 (kx 2023-04-07 06:34:02 +0300 79) $c = $lookahead;
f8470165 (kx 2023-04-07 06:34:02 +0300 80) $lookahead = 0;
f8470165 (kx 2023-04-07 06:34:02 +0300 81)
f8470165 (kx 2023-04-07 06:34:02 +0300 82) if( $c == 0 )
f8470165 (kx 2023-04-07 06:34:02 +0300 83) {
f8470165 (kx 2023-04-07 06:34:02 +0300 84) if( ! eof( $if ) )
f8470165 (kx 2023-04-07 06:34:02 +0300 85) {
f8470165 (kx 2023-04-07 06:34:02 +0300 86) my $ch = getc( $if );
f8470165 (kx 2023-04-07 06:34:02 +0300 87) $c = ord( $ch );
f8470165 (kx 2023-04-07 06:34:02 +0300 88) }
f8470165 (kx 2023-04-07 06:34:02 +0300 89) else
f8470165 (kx 2023-04-07 06:34:02 +0300 90) {
f8470165 (kx 2023-04-07 06:34:02 +0300 91) $c = 0;
f8470165 (kx 2023-04-07 06:34:02 +0300 92) }
f8470165 (kx 2023-04-07 06:34:02 +0300 93) }
f8470165 (kx 2023-04-07 06:34:02 +0300 94) if( $c >= ord(" ") || $c == ord("\n") || $c == 0 )
f8470165 (kx 2023-04-07 06:34:02 +0300 95) {
f8470165 (kx 2023-04-07 06:34:02 +0300 96) return $c;
f8470165 (kx 2023-04-07 06:34:02 +0300 97) }
f8470165 (kx 2023-04-07 06:34:02 +0300 98) if( $c == ord("\r") )
f8470165 (kx 2023-04-07 06:34:02 +0300 99) {
f8470165 (kx 2023-04-07 06:34:02 +0300 100) return ord("\n");
f8470165 (kx 2023-04-07 06:34:02 +0300 101) }
f8470165 (kx 2023-04-07 06:34:02 +0300 102) return ord(" ");
f8470165 (kx 2023-04-07 06:34:02 +0300 103) }
f8470165 (kx 2023-04-07 06:34:02 +0300 104)
f8470165 (kx 2023-04-07 06:34:02 +0300 105) sub peek
f8470165 (kx 2023-04-07 06:34:02 +0300 106) {
f8470165 (kx 2023-04-07 06:34:02 +0300 107) $lookahead = get();
f8470165 (kx 2023-04-07 06:34:02 +0300 108) return $lookahead;
f8470165 (kx 2023-04-07 06:34:02 +0300 109) }
f8470165 (kx 2023-04-07 06:34:02 +0300 110)
f8470165 (kx 2023-04-07 06:34:02 +0300 111) sub next_cn
f8470165 (kx 2023-04-07 06:34:02 +0300 112) {
f8470165 (kx 2023-04-07 06:34:02 +0300 113) my $c = get();
f8470165 (kx 2023-04-07 06:34:02 +0300 114)
f8470165 (kx 2023-04-07 06:34:02 +0300 115) if( $c == ord("/") )
f8470165 (kx 2023-04-07 06:34:02 +0300 116) {
f8470165 (kx 2023-04-07 06:34:02 +0300 117) my $char = chr( peek() );
f8470165 (kx 2023-04-07 06:34:02 +0300 118) if( $char eq "/" )
f8470165 (kx 2023-04-07 06:34:02 +0300 119) {
f8470165 (kx 2023-04-07 06:34:02 +0300 120) for(;;) { $c = get(); if( $c <= ord("\n") ) { last; } }
f8470165 (kx 2023-04-07 06:34:02 +0300 121) }
f8470165 (kx 2023-04-07 06:34:02 +0300 122) elsif( $char eq "*" )
f8470165 (kx 2023-04-07 06:34:02 +0300 123) {
f8470165 (kx 2023-04-07 06:34:02 +0300 124) get();
f8470165 (kx 2023-04-07 06:34:02 +0300 125) while( $c != ord(" ") )
f8470165 (kx 2023-04-07 06:34:02 +0300 126) {
f8470165 (kx 2023-04-07 06:34:02 +0300 127) my $cn = get();
f8470165 (kx 2023-04-07 06:34:02 +0300 128) if( chr( $cn ) eq "*" )
f8470165 (kx 2023-04-07 06:34:02 +0300 129) {
f8470165 (kx 2023-04-07 06:34:02 +0300 130) if( chr( peek() ) eq "/" ) { get(); $c = ord(" "); }
f8470165 (kx 2023-04-07 06:34:02 +0300 131) }
f8470165 (kx 2023-04-07 06:34:02 +0300 132) elsif( $cn == 0 )
f8470165 (kx 2023-04-07 06:34:02 +0300 133) {
f8470165 (kx 2023-04-07 06:34:02 +0300 134) print STDERR "Unterminated comment.\n"; exit 1;
f8470165 (kx 2023-04-07 06:34:02 +0300 135) }
f8470165 (kx 2023-04-07 06:34:02 +0300 136) }
f8470165 (kx 2023-04-07 06:34:02 +0300 137) }
f8470165 (kx 2023-04-07 06:34:02 +0300 138) }
f8470165 (kx 2023-04-07 06:34:02 +0300 139) $y = $x;
f8470165 (kx 2023-04-07 06:34:02 +0300 140) $x = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 141)
f8470165 (kx 2023-04-07 06:34:02 +0300 142) return $c;
f8470165 (kx 2023-04-07 06:34:02 +0300 143) }
f8470165 (kx 2023-04-07 06:34:02 +0300 144)
f8470165 (kx 2023-04-07 06:34:02 +0300 145) sub action
f8470165 (kx 2023-04-07 06:34:02 +0300 146) {
f8470165 (kx 2023-04-07 06:34:02 +0300 147) my $d = $_[0];
f8470165 (kx 2023-04-07 06:34:02 +0300 148)
f8470165 (kx 2023-04-07 06:34:02 +0300 149) if( $d == 1 )
f8470165 (kx 2023-04-07 06:34:02 +0300 150) {
f8470165 (kx 2023-04-07 06:34:02 +0300 151) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 152) if(
f8470165 (kx 2023-04-07 06:34:02 +0300 153) ( $y eq "\n" || $y eq " " ) &&
f8470165 (kx 2023-04-07 06:34:02 +0300 154) ( $a eq "+" || $a eq "-" || $a eq "*" || $a eq "/" ) &&
f8470165 (kx 2023-04-07 06:34:02 +0300 155) ( $b eq "+" || $b eq "-" || $b eq "*" || $b eq "/" )
f8470165 (kx 2023-04-07 06:34:02 +0300 156) )
f8470165 (kx 2023-04-07 06:34:02 +0300 157) {
f8470165 (kx 2023-04-07 06:34:02 +0300 158) print $of $y;
f8470165 (kx 2023-04-07 06:34:02 +0300 159) }
f8470165 (kx 2023-04-07 06:34:02 +0300 160) $d = 2;
f8470165 (kx 2023-04-07 06:34:02 +0300 161) }
f8470165 (kx 2023-04-07 06:34:02 +0300 162)
f8470165 (kx 2023-04-07 06:34:02 +0300 163) if( $d == 2 )
f8470165 (kx 2023-04-07 06:34:02 +0300 164) {
f8470165 (kx 2023-04-07 06:34:02 +0300 165) $a = $b;
f8470165 (kx 2023-04-07 06:34:02 +0300 166) if( $a eq "\'" || $a eq "\"" || $a eq "`" )
f8470165 (kx 2023-04-07 06:34:02 +0300 167) {
f8470165 (kx 2023-04-07 06:34:02 +0300 168) for(;;)
f8470165 (kx 2023-04-07 06:34:02 +0300 169) {
f8470165 (kx 2023-04-07 06:34:02 +0300 170) my $c;
f8470165 (kx 2023-04-07 06:34:02 +0300 171)
f8470165 (kx 2023-04-07 06:34:02 +0300 172) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 173) $c = get(); $a = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 174) if( $a eq $b ) { last; }
f8470165 (kx 2023-04-07 06:34:02 +0300 175) if( $a eq "\\" )
f8470165 (kx 2023-04-07 06:34:02 +0300 176) {
f8470165 (kx 2023-04-07 06:34:02 +0300 177) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 178) $c = get(); $a = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 179) }
f8470165 (kx 2023-04-07 06:34:02 +0300 180) if( $c == 0 )
f8470165 (kx 2023-04-07 06:34:02 +0300 181) {
f8470165 (kx 2023-04-07 06:34:02 +0300 182) print STDERR "Unterminated string literal.\n"; exit 1;
f8470165 (kx 2023-04-07 06:34:02 +0300 183) }
f8470165 (kx 2023-04-07 06:34:02 +0300 184) }
f8470165 (kx 2023-04-07 06:34:02 +0300 185) }
f8470165 (kx 2023-04-07 06:34:02 +0300 186) $d = 3;
f8470165 (kx 2023-04-07 06:34:02 +0300 187) }
f8470165 (kx 2023-04-07 06:34:02 +0300 188)
f8470165 (kx 2023-04-07 06:34:02 +0300 189) if( $d == 3 )
f8470165 (kx 2023-04-07 06:34:02 +0300 190) {
f8470165 (kx 2023-04-07 06:34:02 +0300 191) $b = chr( next_cn() );
f8470165 (kx 2023-04-07 06:34:02 +0300 192) if( $b eq "/" &&
f8470165 (kx 2023-04-07 06:34:02 +0300 193) ( $a eq "(" || $a eq "," || $a eq "=" || $a eq ":" ||
f8470165 (kx 2023-04-07 06:34:02 +0300 194) $a eq "[" || $a eq "!" || $a eq "&" || $a eq "|" ||
f8470165 (kx 2023-04-07 06:34:02 +0300 195) $a eq "?" || $a eq "+" || $a eq "-" || $a eq "~" ||
f8470165 (kx 2023-04-07 06:34:02 +0300 196) $a eq "*" || $a eq "/" || $a eq "{" || $a eq "\n"
f8470165 (kx 2023-04-07 06:34:02 +0300 197) )
f8470165 (kx 2023-04-07 06:34:02 +0300 198) )
f8470165 (kx 2023-04-07 06:34:02 +0300 199) {
f8470165 (kx 2023-04-07 06:34:02 +0300 200) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 201) if( $a eq "/" || $a eq "*" ) { print $of " "; }
f8470165 (kx 2023-04-07 06:34:02 +0300 202) print $of $b;
f8470165 (kx 2023-04-07 06:34:02 +0300 203) for(;;)
f8470165 (kx 2023-04-07 06:34:02 +0300 204) {
f8470165 (kx 2023-04-07 06:34:02 +0300 205) my $c;
f8470165 (kx 2023-04-07 06:34:02 +0300 206)
f8470165 (kx 2023-04-07 06:34:02 +0300 207) $c = get(); $a = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 208) if( $a eq "[" )
f8470165 (kx 2023-04-07 06:34:02 +0300 209) {
f8470165 (kx 2023-04-07 06:34:02 +0300 210) for(;;)
f8470165 (kx 2023-04-07 06:34:02 +0300 211) {
f8470165 (kx 2023-04-07 06:34:02 +0300 212) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 213) $c = get(); $a = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 214) if( $a eq "]" )
f8470165 (kx 2023-04-07 06:34:02 +0300 215) {
f8470165 (kx 2023-04-07 06:34:02 +0300 216) last;
f8470165 (kx 2023-04-07 06:34:02 +0300 217) }
f8470165 (kx 2023-04-07 06:34:02 +0300 218) if( $a eq "\\" )
f8470165 (kx 2023-04-07 06:34:02 +0300 219) {
f8470165 (kx 2023-04-07 06:34:02 +0300 220) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 221) $c = get(); $a = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 222) }
f8470165 (kx 2023-04-07 06:34:02 +0300 223) if( $c == 0 )
f8470165 (kx 2023-04-07 06:34:02 +0300 224) {
f8470165 (kx 2023-04-07 06:34:02 +0300 225) print STDERR "Unterminated regular expression literal.\n"; exit 1;
f8470165 (kx 2023-04-07 06:34:02 +0300 226) }
f8470165 (kx 2023-04-07 06:34:02 +0300 227) }
f8470165 (kx 2023-04-07 06:34:02 +0300 228) }
f8470165 (kx 2023-04-07 06:34:02 +0300 229) elsif( $a eq "/" )
f8470165 (kx 2023-04-07 06:34:02 +0300 230) {
f8470165 (kx 2023-04-07 06:34:02 +0300 231) my $ch = chr( peek() );
f8470165 (kx 2023-04-07 06:34:02 +0300 232) if( $ch eq "/" || $ch eq "*" )
f8470165 (kx 2023-04-07 06:34:02 +0300 233) {
f8470165 (kx 2023-04-07 06:34:02 +0300 234) print STDERR "Unterminated regular expression literal.\n"; exit 1;
f8470165 (kx 2023-04-07 06:34:02 +0300 235) }
f8470165 (kx 2023-04-07 06:34:02 +0300 236) last;
f8470165 (kx 2023-04-07 06:34:02 +0300 237) }
f8470165 (kx 2023-04-07 06:34:02 +0300 238) elsif( $a eq "\\" )
f8470165 (kx 2023-04-07 06:34:02 +0300 239) {
f8470165 (kx 2023-04-07 06:34:02 +0300 240) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 241) $c = get(); $a = chr( $c );
f8470165 (kx 2023-04-07 06:34:02 +0300 242) }
f8470165 (kx 2023-04-07 06:34:02 +0300 243) elsif( $c == 0 )
f8470165 (kx 2023-04-07 06:34:02 +0300 244) {
f8470165 (kx 2023-04-07 06:34:02 +0300 245) print STDERR "Unterminated regular expression literal.\n"; exit 1;
f8470165 (kx 2023-04-07 06:34:02 +0300 246) }
f8470165 (kx 2023-04-07 06:34:02 +0300 247) print $of $a;
f8470165 (kx 2023-04-07 06:34:02 +0300 248) }
f8470165 (kx 2023-04-07 06:34:02 +0300 249) $b = chr( next_cn() );
f8470165 (kx 2023-04-07 06:34:02 +0300 250) }
f8470165 (kx 2023-04-07 06:34:02 +0300 251) }
f8470165 (kx 2023-04-07 06:34:02 +0300 252) }
f8470165 (kx 2023-04-07 06:34:02 +0300 253)
f8470165 (kx 2023-04-07 06:34:02 +0300 254)
f8470165 (kx 2023-04-07 06:34:02 +0300 255) sub isalnum
f8470165 (kx 2023-04-07 06:34:02 +0300 256) {
f8470165 (kx 2023-04-07 06:34:02 +0300 257) my $ch = $_[0];
f8470165 (kx 2023-04-07 06:34:02 +0300 258)
f8470165 (kx 2023-04-07 06:34:02 +0300 259) if( ($ch ge "a" && $ch le "z") || ($ch ge "0" && $ch le "9") ||
f8470165 (kx 2023-04-07 06:34:02 +0300 260) ($ch ge "A" && $ch le "Z") || $ch eq "_" || $ch eq "\$" ||
f8470165 (kx 2023-04-07 06:34:02 +0300 261) $ch eq "\\" || $ch gt "~"
f8470165 (kx 2023-04-07 06:34:02 +0300 262) ) { return 1; } else { return 0; }
f8470165 (kx 2023-04-07 06:34:02 +0300 263) }
f8470165 (kx 2023-04-07 06:34:02 +0300 264)
f8470165 (kx 2023-04-07 06:34:02 +0300 265)
f8470165 (kx 2023-04-07 06:34:02 +0300 266) sub jsmin
f8470165 (kx 2023-04-07 06:34:02 +0300 267) {
f8470165 (kx 2023-04-07 06:34:02 +0300 268) if( peek() == 0xEF ) { get(); get(); get(); }
f8470165 (kx 2023-04-07 06:34:02 +0300 269) $a = "\n";
f8470165 (kx 2023-04-07 06:34:02 +0300 270) action( 3 );
f8470165 (kx 2023-04-07 06:34:02 +0300 271) while( $a ne "" && $a ne "\0" )
f8470165 (kx 2023-04-07 06:34:02 +0300 272) {
f8470165 (kx 2023-04-07 06:34:02 +0300 273) if( $a eq " " )
f8470165 (kx 2023-04-07 06:34:02 +0300 274) {
f8470165 (kx 2023-04-07 06:34:02 +0300 275) action( isalnum( $b ) ? 1 : 2 );
f8470165 (kx 2023-04-07 06:34:02 +0300 276) }
f8470165 (kx 2023-04-07 06:34:02 +0300 277) elsif( $a eq "\n" )
f8470165 (kx 2023-04-07 06:34:02 +0300 278) {
f8470165 (kx 2023-04-07 06:34:02 +0300 279) if( $b eq "{" || $b eq "[" || $b eq "(" || $b eq "+" ||
f8470165 (kx 2023-04-07 06:34:02 +0300 280) $b eq "-" || $b eq "!" || $b eq "~"
f8470165 (kx 2023-04-07 06:34:02 +0300 281) )
f8470165 (kx 2023-04-07 06:34:02 +0300 282) {
f8470165 (kx 2023-04-07 06:34:02 +0300 283) action( 1 );
f8470165 (kx 2023-04-07 06:34:02 +0300 284) }
f8470165 (kx 2023-04-07 06:34:02 +0300 285) elsif( $b eq " " )
f8470165 (kx 2023-04-07 06:34:02 +0300 286) {
f8470165 (kx 2023-04-07 06:34:02 +0300 287) action( 3 );
f8470165 (kx 2023-04-07 06:34:02 +0300 288) }
f8470165 (kx 2023-04-07 06:34:02 +0300 289) else
f8470165 (kx 2023-04-07 06:34:02 +0300 290) {
f8470165 (kx 2023-04-07 06:34:02 +0300 291) action( isalnum( $b ) ? 1 : 2 );
f8470165 (kx 2023-04-07 06:34:02 +0300 292) }
f8470165 (kx 2023-04-07 06:34:02 +0300 293) }
f8470165 (kx 2023-04-07 06:34:02 +0300 294) else
f8470165 (kx 2023-04-07 06:34:02 +0300 295) {
f8470165 (kx 2023-04-07 06:34:02 +0300 296) if( $b eq " " )
f8470165 (kx 2023-04-07 06:34:02 +0300 297) {
f8470165 (kx 2023-04-07 06:34:02 +0300 298) action( isalnum( $a ) ? 1 : 3 );
f8470165 (kx 2023-04-07 06:34:02 +0300 299) }
f8470165 (kx 2023-04-07 06:34:02 +0300 300) elsif( $b eq "\n" )
f8470165 (kx 2023-04-07 06:34:02 +0300 301) {
f8470165 (kx 2023-04-07 06:34:02 +0300 302) if( $a eq "}" || $a eq "]" || $a eq ")" || $a eq "+" ||
f8470165 (kx 2023-04-07 06:34:02 +0300 303) $a eq "-" || $a eq "\"" || $a eq "\'" || $a eq "`"
f8470165 (kx 2023-04-07 06:34:02 +0300 304) )
f8470165 (kx 2023-04-07 06:34:02 +0300 305) {
f8470165 (kx 2023-04-07 06:34:02 +0300 306) action( 1 );
f8470165 (kx 2023-04-07 06:34:02 +0300 307) }
f8470165 (kx 2023-04-07 06:34:02 +0300 308) else
f8470165 (kx 2023-04-07 06:34:02 +0300 309) {
f8470165 (kx 2023-04-07 06:34:02 +0300 310) action( isalnum( $a ) ? 1 : 3 );
f8470165 (kx 2023-04-07 06:34:02 +0300 311) }
f8470165 (kx 2023-04-07 06:34:02 +0300 312) }
f8470165 (kx 2023-04-07 06:34:02 +0300 313) else
f8470165 (kx 2023-04-07 06:34:02 +0300 314) {
f8470165 (kx 2023-04-07 06:34:02 +0300 315) action( 1 );
f8470165 (kx 2023-04-07 06:34:02 +0300 316) }
f8470165 (kx 2023-04-07 06:34:02 +0300 317) }
f8470165 (kx 2023-04-07 06:34:02 +0300 318) }
f8470165 (kx 2023-04-07 06:34:02 +0300 319) #lats carriage return
f8470165 (kx 2023-04-07 06:34:02 +0300 320) print $of "\n";
f8470165 (kx 2023-04-07 06:34:02 +0300 321) }
f8470165 (kx 2023-04-07 06:34:02 +0300 322)
f8470165 (kx 2023-04-07 06:34:02 +0300 323)
f8470165 (kx 2023-04-07 06:34:02 +0300 324) local $SIG{__WARN__} = sub {
f8470165 (kx 2023-04-07 06:34:02 +0300 325) my $message = shift;
f8470165 (kx 2023-04-07 06:34:02 +0300 326) print STDERR "ERROR: " . $message;
f8470165 (kx 2023-04-07 06:34:02 +0300 327) usage();
f8470165 (kx 2023-04-07 06:34:02 +0300 328) };
f8470165 (kx 2023-04-07 06:34:02 +0300 329)
f8470165 (kx 2023-04-07 06:34:02 +0300 330) if( ! GetOptions( 'o=s' => \$ofname,
f8470165 (kx 2023-04-07 06:34:02 +0300 331) 'output=s' => \$ofname,
f8470165 (kx 2023-04-07 06:34:02 +0300 332) '' => \$stdio,
f8470165 (kx 2023-04-07 06:34:02 +0300 333) 'help|h|?' => sub { usage() },
f8470165 (kx 2023-04-07 06:34:02 +0300 334) 'version|v' => sub { version() }
f8470165 (kx 2023-04-07 06:34:02 +0300 335) )
f8470165 (kx 2023-04-07 06:34:02 +0300 336) )
f8470165 (kx 2023-04-07 06:34:02 +0300 337) {
f8470165 (kx 2023-04-07 06:34:02 +0300 338) usage();
f8470165 (kx 2023-04-07 06:34:02 +0300 339) }
f8470165 (kx 2023-04-07 06:34:02 +0300 340)
f8470165 (kx 2023-04-07 06:34:02 +0300 341) foreach( @ARGV )
f8470165 (kx 2023-04-07 06:34:02 +0300 342) {
f8470165 (kx 2023-04-07 06:34:02 +0300 343) $last = $_;
f8470165 (kx 2023-04-07 06:34:02 +0300 344)
f8470165 (kx 2023-04-07 06:34:02 +0300 345) if( $#ARGV )
f8470165 (kx 2023-04-07 06:34:02 +0300 346) {
f8470165 (kx 2023-04-07 06:34:02 +0300 347) usage();
f8470165 (kx 2023-04-07 06:34:02 +0300 348) }
f8470165 (kx 2023-04-07 06:34:02 +0300 349)
f8470165 (kx 2023-04-07 06:34:02 +0300 350) # NOTE: The '--' is an option terminator!
f8470165 (kx 2023-04-07 06:34:02 +0300 351) # So ./script -- - returns last equal to '-'.
f8470165 (kx 2023-04-07 06:34:02 +0300 352) #
f8470165 (kx 2023-04-07 06:34:02 +0300 353) # The $last argument is a ifname by default;
f8470165 (kx 2023-04-07 06:34:02 +0300 354) #
f8470165 (kx 2023-04-07 06:34:02 +0300 355) }
f8470165 (kx 2023-04-07 06:34:02 +0300 356)
f8470165 (kx 2023-04-07 06:34:02 +0300 357)
f8470165 (kx 2023-04-07 06:34:02 +0300 358) if( $ifname eq '' && $ofname eq '' && ! $stdio )
f8470165 (kx 2023-04-07 06:34:02 +0300 359) {
f8470165 (kx 2023-04-07 06:34:02 +0300 360) usage();
f8470165 (kx 2023-04-07 06:34:02 +0300 361) }
f8470165 (kx 2023-04-07 06:34:02 +0300 362)
f8470165 (kx 2023-04-07 06:34:02 +0300 363) if( $ofname ne '' && $stdio && $last ne '' )
f8470165 (kx 2023-04-07 06:34:02 +0300 364) {
f8470165 (kx 2023-04-07 06:34:02 +0300 365) # like that:
f8470165 (kx 2023-04-07 06:34:02 +0300 366) # ./script -o min.json full.json -
f8470165 (kx 2023-04-07 06:34:02 +0300 367) # ./script -o min.json - full.json
f8470165 (kx 2023-04-07 06:34:02 +0300 368) #
f8470165 (kx 2023-04-07 06:34:02 +0300 369) print "ERROR: Input file defined twice: as 'stdin' and as a orfinary file '$last'\n";
f8470165 (kx 2023-04-07 06:34:02 +0300 370) usage();
f8470165 (kx 2023-04-07 06:34:02 +0300 371) }
f8470165 (kx 2023-04-07 06:34:02 +0300 372) else
f8470165 (kx 2023-04-07 06:34:02 +0300 373) {
f8470165 (kx 2023-04-07 06:34:02 +0300 374) $ifname = $last; $last = '';
f8470165 (kx 2023-04-07 06:34:02 +0300 375) }
f8470165 (kx 2023-04-07 06:34:02 +0300 376)
f8470165 (kx 2023-04-07 06:34:02 +0300 377) if( $ofname eq '' ) { $ofname = '-'; }
f8470165 (kx 2023-04-07 06:34:02 +0300 378) if( $ifname eq '' ) { $ifname = '-'; }
f8470165 (kx 2023-04-07 06:34:02 +0300 379) if( $ifname eq '-' ) { $if = *STDIN; } else { open( $if, "< $ifname" ); }
f8470165 (kx 2023-04-07 06:34:02 +0300 380) if( $ofname eq '-' ) { $of = *STDOUT; } else { open( $of, "> $ofname" ); }
f8470165 (kx 2023-04-07 06:34:02 +0300 381)
f8470165 (kx 2023-04-07 06:34:02 +0300 382)
f8470165 (kx 2023-04-07 06:34:02 +0300 383) jsmin();
f8470165 (kx 2023-04-07 06:34:02 +0300 384)
f8470165 (kx 2023-04-07 06:34:02 +0300 385)
f8470165 (kx 2023-04-07 06:34:02 +0300 386) close $if;
f8470165 (kx 2023-04-07 06:34:02 +0300 387) close $of;
f8470165 (kx 2023-04-07 06:34:02 +0300 388)
f8470165 (kx 2023-04-07 06:34:02 +0300 389) exit 0;