diff options
Diffstat (limited to 'release/build/js/Words.js')
-rw-r--r-- | release/build/js/Words.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/release/build/js/Words.js b/release/build/js/Words.js new file mode 100644 index 000000000..cbd9cab45 --- /dev/null +++ b/release/build/js/Words.js @@ -0,0 +1,62 @@ + +var Words = Collection.extend({ + constructor: function(script) { + this.base(); + forEach (script.match(WORDS), this.add, this); + this.encode(); + }, + + add: function(word) { + if (!this.exists(word)) this.base(word); + word = this.fetch(word); + word.count++; + return word; + }, + + encode: function() { + // sort by frequency + this.sort(function(word1, word2) { + return word2.count - word1.count; + }); + + eval("var a=62,e=" + Packer.ENCODE62); + var encode = e; + var encoded = new Collection; // a dictionary of base62 -> base10 + var count = this.count(); + for (var i = 0; i < count; i++) { + encoded.store(encode(i), i); + } + + var empty = function() {return ""}; + var index = 0; + forEach (this, function(word) { + if (encoded.exists(word)) { + word.index = encoded.fetch(word); + word.toString = empty; + } else { + while (this.exists(encode(index))) index++; + word.index = index++; + } + word.encoded = encode(word.index); + }, this); + + // sort by encoding + this.sort(function(word1, word2) { + return word1.index - word2.index; + }); + }, + + toString: function() { + return this.values().join("|"); + } +}, { + Item: { + constructor: function(word) { + this.toString = function() {return word}; + }, + + count: 0, + encoded: "", + index: -1 + } +}); |