Updated build to packer3
[jquery.git] / build / js / Words.js
diff --git a/build/js/Words.js b/build/js/Words.js
new file mode 100644 (file)
index 0000000..264d42f
--- /dev/null
@@ -0,0 +1,62 @@
+\r
+var Words = Collection.extend({\r
+       constructor: function(script) {\r
+               this.base();\r
+               forEach (script.match(WORDS), this.add, this);\r
+               this.encode();\r
+       },\r
+       \r
+       add: function(word) {\r
+               if (!this.exists(word)) this.base(word);\r
+               word = this.fetch(word);\r
+               word.count++;\r
+               return word;\r
+       },\r
+       \r
+       encode: function() {\r
+               // sort by frequency\r
+               this.sort(function(word1, word2) {\r
+                       return word2.count - word1.count;\r
+               });\r
+               \r
+               eval("var a=62,e=" + Packer.ENCODE62);\r
+               var encode = e;         \r
+               var encoded = new Collection; // a dictionary of base62 -> base10\r
+               var count = this.count();\r
+               for (var i = 0; i < count; i++) {\r
+                       encoded.store(encode(i), i);\r
+               }\r
+               \r
+               var empty = function() {return ""};\r
+               var index = 0;\r
+               forEach (this, function(word) {\r
+                       if (encoded.exists(word)) {\r
+                               word.index = encoded.fetch(word);\r
+                               word.toString = empty;\r
+                       } else {\r
+                               while (this.exists(encode(index))) index++;\r
+                               word.index = index++;\r
+                       }\r
+                       word.encoded = encode(word.index);\r
+               }, this);\r
+               \r
+               // sort by encoding\r
+               this.sort(function(word1, word2) {\r
+                       return word1.index - word2.index;\r
+               });\r
+       },\r
+       \r
+       toString: function() {\r
+               return this.values().join("|");\r
+       }\r
+}, {\r
+       Item: {\r
+               constructor: function(word) {\r
+                       this.toString = function() {return word};\r
+               },\r
+               \r
+               count: 0,\r
+               encoded: "",\r
+               index: -1\r
+       }\r
+});\r