modified: bom3.sh
[misc/.git] / js_beautify.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use JavaScript::Beautifier qw/js_beautify/;
6 use Getopt::Long;
7 use Pod::Usage;
8 use IO::File;
9 use Carp qw/croak/;
10
11 my $file = pop @ARGV;
12 pod2usage(1) unless ($file);
13
14 my %params;
15 GetOptions(
16         \%params,
17         "help|?",
18         "o",
19         "output=s",
20         "s|indent_size=i",
21         "c|indent_character=s",
22         "p|preserve_newlines",
23 ) or pod2usage(2);
24
25 pod2usage(1) if $params{help};
26
27 my $file_io;
28 if ($file eq '-') {
29     my $io = new IO::Handle;
30     $file_io = $io->fdopen(fileno(STDIN),"r");
31 } else {
32     $file_io = new IO::File($file, "<");
33     defined $file_io or croak "can't open $file: $!";
34 }
35 local $/;
36 my $js_source_code = <$file_io>;
37 $file_io->close;
38
39 my $pretty_js = js_beautify( $js_source_code, {
40     indent_size => $params{s} || 4,
41     indent_character => $params{c} || ' ',
42     preserve_newlines => $params{p} || 1
43 } );
44
45 if ( $params{output} or $params{o} ) {
46     my $to_file = $params{output} || $file;
47     open(my $fh, '>', $file);
48     print $fh $pretty_js;
49     close($fh);
50 } else {
51     print $pretty_js;
52 }
53
54 1;
55 __END__
56
57 =head1 NAME
58
59 js_beautify.pl - command tool to beautify your javascript files
60
61 =head1 SYNOPSIS
62
63     js_beautify.pl [options] FILE
64     js_beautify.pl [options] -
65
66 =head1 OPTIONS
67
68 =over 4
69
70 =item B<-?>, B<--help>
71
72 =item B<-o>, B<--output>
73
74 By default, we will print beautified javascript to STDOUT
75
76 if B<-o>, it will override the C<FILE>
77
78 if B<-output=newfile.js>, it will write into C<newfile.js>
79
80 =item B<-s>, B<--indent_size>
81
82 =item B<-c>, B<--indent_character>
83
84 By default, we use 4 spaces.
85
86 but if you prefer 8 spaces, we can do B<-s=8>
87
88 =item B<-p>, B<--preserve_newlines>
89
90 1 by default
91
92 =back
93
94 =head1 COPYRIGHT & LICENSE
95
96 Copyright 2009 Fayland Lam, all rights reserved.
97
98 This program is free software; you can redistribute it and/or modify it
99 under the same terms as Perl itself.
100
101 =cut