X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=build%2Fjs%2FPacker.js;h=88c47d0f42862e4f1027aa3d1bd4486a3ad8ada9;hb=003af8e383be2bf6f60338aa6135332ad33ba990;hp=4e907cfb1e2673c1a8e5f0ca2ce78bd642e91515;hpb=ed1e3f7e0501be92411bb7d9fd6c25ab1e81cc73;p=jquery.git diff --git a/build/js/Packer.js b/build/js/Packer.js index 4e907cf..88c47d0 100644 --- a/build/js/Packer.js +++ b/build/js/Packer.js @@ -1,5 +1,5 @@ /* - Packer version 3.0 (beta 5) - copyright 2004-2007, Dean Edwards + Packer version 3.0 (beta 8) - copyright 2004-2007, Dean Edwards http://www.opensource.org/licenses/mit-license */ @@ -13,14 +13,14 @@ var WORDS = /\w+/g; var Packer = Base.extend({ minify: function(script) { script = script.replace(Packer.CONTINUE, ""); - script = Packer.clean.exec(script); + script = Packer.data.exec(script); script = Packer.whitespace.exec(script); - script = Packer.clean.exec(script); // seem to grab a few more bytes on the second pass + script = Packer.clean.exec(script); return script; }, pack: function(script, base62, shrink) { - script = this.minify(script); + script = this.minify(script + "\n"); if (shrink) script = this._shrinkVariables(script); if (base62) script = this._base62Encode(script); return script; @@ -59,8 +59,13 @@ var Packer = Base.extend({ }; var data = []; // encoded strings and regular expressions + var REGEXP = /^[^'"]\//; var store = function(string) { var replacement = "#" + data.length; + if (REGEXP.test(string)) { + replacement = string.charAt(0) + replacement; + string = string.slice(1); + } data.push(string); return replacement; }; @@ -74,7 +79,7 @@ var Packer = Base.extend({ // identify blocks, particularly identify function blocks (which define scope) var BLOCK = /(function\s*[\w$]*\s*\(\s*([^\)]*)\s*\)\s*)?(\{([^{}]*)\})/; var VAR_ = /var\s+/g; - var VAR_NAME = /var\s+[\w$]{2,}/g; // > 1 char + var VAR_NAME = /var\s+[\w$]+/g; var COMMA = /\s*,\s*/; var blocks = []; // store program blocks (anything between braces {}) // encoder for program blocks @@ -93,8 +98,9 @@ var Packer = Base.extend({ // process each identifier var count = 0, shortId; forEach (ids, function(id) { - id = rescape(trim(id)); - if (id) { + id = trim(id); + if (id && id.length > 1) { // > 1 char + id = rescape(id); // find the next free short name (check everything in the current scope) do shortId = encode52(count++); while (new RegExp("[^\\w$.]" + shortId + "[^\\w$:]").test(block)); @@ -106,13 +112,13 @@ var Packer = Base.extend({ } }); } - var replacement = "~" + blocks.length; + var replacement = "~" + blocks.length + "~"; blocks.push(block); return replacement; }; // decoder for program blocks - var ENCODED = /~(\d+)/; + var ENCODED = /~(\d+)~/; var decode = function(script) { while (ENCODED.test(script)) { script = script.replace(global(ENCODED), function(match, index) { @@ -158,16 +164,15 @@ var Packer = Base.extend({ "replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('%1',%2,%3,'%4'.split('|'),0,{}))", init: function() { - this.data = reduce(this.data, new RegGrp, function(data, replacement, expression) { + this.data = reduce(this.data, function(data, replacement, expression) { data.store(this.javascript.exec(expression), replacement); return data; - }, this); + }, new RegGrp, this); this.clean = this.data.union(this.clean); this.whitespace = this.data.union(this.whitespace); }, clean: { - ";;;[^\\n]*": REMOVE, // triple semi-colons treated like line comments "\\(\\s*;\\s*;\\s*\\)": "(;;)", // for (;;) loops "throw[^};]+[};]": IGNORE, // a safari 1.3 bug ";+\\s*([};])": "$1" @@ -178,17 +183,16 @@ var Packer = Base.extend({ "STRING1": IGNORE, 'STRING2': IGNORE, "CONDITIONAL": IGNORE, // conditional comments - "(COMMENT1)\\n\\s*(REGEXP)?": "\n$2", + "(COMMENT1)\\n\\s*(REGEXP)?": "\n$3", "(COMMENT2)\\s*(REGEXP)?": " $3", - "COMMENT1$": REMOVE, "([\\[(\\^=,{}:;&|!*?])\\s*(REGEXP)": "$1$2" }, javascript: new RegGrp({ - COMMENT1: /\/\/[^\n]*/.source, + COMMENT1: /(\/\/|;;;)[^\n]*/.source, COMMENT2: /\/\*[^*]*\*+([^\/][^*]*\*+)*\//.source, CONDITIONAL: /\/\*@|@\*\/|\/\/@[^\n]*\n/.source, - REGEXP: /\/(\\\/|[^*\/])(\\.|[^\/\n\\])*\//.source, + REGEXP: /\/(\\[\/\\]|[^*\/])(\\.|[^\/\n\\])*\/[gim]*/.source, STRING1: /'(\\.|[^'\\])*'/.source, STRING2: /"(\\.|[^"\\])*"/.source }),