67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
class Emoji {
|
|
static emojis;
|
|
static decodeEmojiList(buffer) {
|
|
const view = new DataView(buffer, 0);
|
|
let i = 0;
|
|
function read16() {
|
|
const int = view.getUint16(i);
|
|
i += 2;
|
|
return int;
|
|
}
|
|
function read8() {
|
|
const int = view.getUint8(i);
|
|
i += 1;
|
|
return int;
|
|
}
|
|
function readString8() {
|
|
return readStringNo(read8());
|
|
}
|
|
function readString16() {
|
|
return readStringNo(read16());
|
|
}
|
|
function readStringNo(length) {
|
|
const array = new Uint8Array(length);
|
|
for (let i = 0; i < length; i++) {
|
|
array[i] = read8();
|
|
}
|
|
const decoded = new TextDecoder("utf-8").decode(array.buffer);
|
|
;
|
|
//console.log(array);
|
|
return decoded;
|
|
}
|
|
const build = [];
|
|
let cats = read16();
|
|
for (; cats !== 0; cats--) {
|
|
const name = readString16();
|
|
const emojis = [];
|
|
let emojinumber = read16();
|
|
for (; emojinumber !== 0; emojinumber--) {
|
|
//console.log(emojis);
|
|
const name = readString8();
|
|
const len = read8();
|
|
const skin_tone_support = len > 127;
|
|
const emoji = readStringNo(len - (+skin_tone_support * 128));
|
|
emojis.push({
|
|
name,
|
|
skin_tone_support,
|
|
emoji
|
|
});
|
|
}
|
|
build.push({
|
|
name,
|
|
emojis
|
|
});
|
|
}
|
|
this.emojis = build;
|
|
console.log(build);
|
|
}
|
|
static grabEmoji() {
|
|
fetch("/emoji.bin").then(e => {
|
|
return e.arrayBuffer();
|
|
}).then(e => {
|
|
Emoji.decodeEmojiList(e);
|
|
});
|
|
}
|
|
}
|
|
Emoji.grabEmoji();
|
|
export { Emoji };
|