interface Emoji {
name: string;
codepoints: string[];
qualification: string;
version: string;
group: string;
subgroup: string;
}
export async function emojiData(): Promise<Emoji[]> {
const res = await fetch("https://www.unicode.org/Public/draft/emoji/emoji-test.txt");
const text = await res.text();
const lines = text.split("\n");
const emoji = [];
let currentGroup = null;
let currentSubgroup = null;
for (const line of lines) {
if (line.startsWith("# group:")) {
currentGroup = line.replace("# group:", "").trim();
continue;
}
if (line.startsWith("# subgroup:")) {
currentSubgroup = line.replace("# subgroup:", "").trim();
continue;
}
if (line.startsWith("#")) {
continue;
}
const columns = line.split(/;|(?:#\s)/);
if (columns.length < 3) {
continue;
}
const codepoints = columns[0].trim();
const qualification = columns[1].trim();
const comment = columns[2].trim();
const [, version, ...nameParts] = comment.split(" ");
emoji.push({
name: nameParts.join(" "),
codepoints: codepoints.split(" "),
qualification,
version: version.slice(1),
group: currentGroup,
subgroup: currentSubgroup,
});
}
return emoji;
}