75 lines
2 KiB
TypeScript
75 lines
2 KiB
TypeScript
class Emoji{
|
|
static emojis:{
|
|
name:string,
|
|
emojis:{
|
|
name:string,
|
|
emoji:string,
|
|
}[]
|
|
}[];
|
|
static decodeEmojiList(buffer:ArrayBuffer){
|
|
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:number){
|
|
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:{name:string,emojis:{name:string,emoji:string}[]}[]=[];
|
|
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};
|