initial commit for GitHub
This commit is contained in:
BIN
compress/compiler.jar
Normal file
BIN
compress/compiler.jar
Normal file
Binary file not shown.
15
compress/compress_with_closure.sh
Executable file
15
compress/compress_with_closure.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
DIR=`dirname $0`
|
||||
|
||||
$DIR/remove_constants.pl $1 | $DIR/opacify.pl > ._tmpRC.js
|
||||
|
||||
echo -n '"use strict";'
|
||||
java -jar $DIR/compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS \
|
||||
--js ._tmpRC.js \
|
||||
| $DIR/digitize.pl \
|
||||
| $DIR/dewindowize.pl
|
||||
|
||||
|
||||
rm -f ._tmpRC.js
|
||||
|
||||
13
compress/compress_with_yui.sh
Executable file
13
compress/compress_with_yui.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Compress $1 with YUI Compressor 2.4.2, returning the compressed script on stdout
|
||||
|
||||
DIR=`dirname $0`
|
||||
|
||||
$DIR/remove_constants.pl $1 > ._tmpRC.js
|
||||
|
||||
java -jar $DIR/yuicompressor-2.4.2.jar ._tmpRC.js \
|
||||
| $DIR/digitize.pl
|
||||
|
||||
rm -f ._tmpRC.js
|
||||
|
||||
8
compress/dewindowize.pl
Executable file
8
compress/dewindowize.pl
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
while (<>) {
|
||||
s/window\.sjcl\s*=/var sjcl=/g;
|
||||
s/window\.sjcl/sjcl/g;
|
||||
print;
|
||||
}
|
||||
|
||||
22
compress/digitize.pl
Executable file
22
compress/digitize.pl
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# Convert numbers to hex, when doing so is likely to increase compressibility.
|
||||
# This actually makes the script slightly longer, but generally makes it compress
|
||||
# to something shorter.
|
||||
#
|
||||
# Here we're targeting constants like 0xFF, 0xFFFF0000, 0x10101, 0x100000000, etc.
|
||||
|
||||
sub digitize {
|
||||
my $number = shift;
|
||||
if ($number >= 256) {
|
||||
my $nn = sprintf("%x", $number);
|
||||
if ($nn =~ /^[01f]+$/i) { return "0x$nn"; }
|
||||
}
|
||||
return $number;
|
||||
}
|
||||
|
||||
while (<>) {
|
||||
s/([^a-zA-Z0-9_])(\d+)/$1 . digitize $2/eg;
|
||||
print;
|
||||
}
|
||||
|
||||
32
compress/opacify.pl
Executable file
32
compress/opacify.pl
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# This script is a hack.
|
||||
#
|
||||
# Opacify all non-private names by turning them into strings.
|
||||
# That way, the Google compressor won't rename them.
|
||||
#
|
||||
# The script ignores properties whose names begin with _, because they
|
||||
# are believed to be private.
|
||||
#
|
||||
# XXX TODO FIXME: this messes with strings, so it screws up exceptions.
|
||||
|
||||
my $script = join '', <>;
|
||||
|
||||
# remove comments
|
||||
$script =~ s=/\*([^\*]|\*+[^\/])*\*/==g;
|
||||
$script =~ s=//.*==g;
|
||||
|
||||
# stringify property names
|
||||
$script =~ s=\.([a-zA-Z0-9][_a-zA-Z0-9]*)=['$1']=g;
|
||||
|
||||
# stringify sjcl
|
||||
$script =~ s=(?:var\s+)?sjcl(\.|\s*\=)=window['sjcl']$1=g;
|
||||
|
||||
# stringify object notation
|
||||
$script =~ s=([\{,]\s*)([a-zA-Z0-9][_a-zA-Z0-9]*):=$1'$2':=g;
|
||||
|
||||
# Export sjcl. This is a bit of a hack, and might get replaced later.
|
||||
print $script;
|
||||
|
||||
# not necessary with windowization.
|
||||
# print "window\['sjcl'\] = sjcl;\n";
|
||||
69
compress/remove_constants.pl
Executable file
69
compress/remove_constants.pl
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# This script is a hack. It identifies things which it believes to be
|
||||
# constant, then replaces them throughout the code.
|
||||
#
|
||||
# Constants are identified as properties declared in object notation
|
||||
# with values consisting only of capital letters and underscores. If
|
||||
# the first character is an underscore, the constant is private, and
|
||||
# can be removed entirely.
|
||||
#
|
||||
# The script dies if any two constants have the same property name but
|
||||
# different values.
|
||||
my $script = join '', <>;
|
||||
|
||||
# remove comments
|
||||
$script =~ s=/\*([^\*]|\*+[^\/])*\*/==g;
|
||||
$script =~ s=//.*==g;
|
||||
|
||||
sub preserve {
|
||||
my $stuff = shift;
|
||||
$stuff =~ s/,//;
|
||||
return $stuff;
|
||||
}
|
||||
|
||||
my %constants = ();
|
||||
|
||||
sub add_constant {
|
||||
my ($name, $value) = @_;
|
||||
if (defined $constants{$name} && $constants{$name} ne $value) {
|
||||
print STDERR "variant constant $name = $value";
|
||||
die;
|
||||
} else {
|
||||
$constants{$name} = $value;
|
||||
#print STDERR "constant: $name = $value\n";
|
||||
}
|
||||
}
|
||||
|
||||
# find private constants
|
||||
while ($script =~
|
||||
s/([,\{]) \s* # indicator that this is part of an object
|
||||
(_[A-Z0-9_]+) \s* : \s* # all-caps variable name beginning with _
|
||||
(\d+|0x[0-9A-Fa-f]+) \s* # numeric value
|
||||
([,\}]) # next part of object
|
||||
/preserve "$1$4"/ex) {
|
||||
add_constant $2, $3;
|
||||
}
|
||||
|
||||
my $script2 = '';
|
||||
|
||||
# find public constants
|
||||
while ($script =~
|
||||
s/^(.*?) # beginning of script
|
||||
([,\{]) \s* # indicator that this is part of an object
|
||||
([A-Z0-9_]+) \s* : \s* # all-caps variable name
|
||||
(\d+|0x[0-9A-Fa-f]+) \s* # numeric value
|
||||
([,\}]) # next part of object([,\{]) \s*
|
||||
/$5/esx) {
|
||||
$script2 .= "$1$2$3:$4";
|
||||
add_constant $3, $4;
|
||||
}
|
||||
|
||||
$script = "$script2$script";
|
||||
|
||||
foreach (keys %constants) {
|
||||
my $value = $constants{$_};
|
||||
$script =~ s/(?:[a-zA-Z0-9_]+\.)+$_(?=[^a-zA-Z0-9_])/$value/g;
|
||||
}
|
||||
|
||||
print $script;
|
||||
BIN
compress/yuicompressor-2.4.2.jar
Normal file
BIN
compress/yuicompressor-2.4.2.jar
Normal file
Binary file not shown.
Reference in New Issue
Block a user