initial commit for GitHub

This commit is contained in:
Mike Hamburg
2010-05-26 15:34:42 -07:00
commit 2e423d9517
155 changed files with 31749 additions and 0 deletions

BIN
compress/compiler.jar Normal file

Binary file not shown.

View 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
View 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
View 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
View 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
View 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
View 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;

Binary file not shown.