aboutsummaryrefslogtreecommitdiffstats
path: root/release/build/js/Words.js
diff options
context:
space:
mode:
Diffstat (limited to 'release/build/js/Words.js')
-rw-r--r--release/build/js/Words.js62
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
+ }
+});