mirror of
https://github.com/S2-/minifyfromhtml.git
synced 2025-08-03 04:10:04 +02:00
52 lines
1.0 KiB
JavaScript
52 lines
1.0 KiB
JavaScript
"use strict";
|
|
|
|
const CHARSET = ("abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ$_").split("");
|
|
module.exports = class Charset {
|
|
constructor(shouldConsider) {
|
|
this.shouldConsider = shouldConsider;
|
|
this.chars = CHARSET.slice();
|
|
this.frequency = {};
|
|
this.chars.forEach(c => {
|
|
this.frequency[c] = 0;
|
|
});
|
|
this.finalized = false;
|
|
}
|
|
|
|
consider(str) {
|
|
if (!this.shouldConsider) {
|
|
return;
|
|
}
|
|
|
|
str.split("").forEach(c => {
|
|
if (this.frequency[c] != null) {
|
|
this.frequency[c]++;
|
|
}
|
|
});
|
|
}
|
|
|
|
sort() {
|
|
if (this.shouldConsider) {
|
|
this.chars = this.chars.sort((a, b) => this.frequency[b] - this.frequency[a]);
|
|
}
|
|
|
|
this.finalized = true;
|
|
}
|
|
|
|
getIdentifier(num) {
|
|
if (!this.finalized) {
|
|
throw new Error("Should sort first");
|
|
}
|
|
|
|
let ret = "";
|
|
num++;
|
|
|
|
do {
|
|
num--;
|
|
ret += this.chars[num % this.chars.length];
|
|
num = Math.floor(num / this.chars.length);
|
|
} while (num > 0);
|
|
|
|
return ret;
|
|
}
|
|
|
|
}; |