astro-ghostcms/.pnpm-store/v3/files/73/27019c4b012942435d206fa532d...

55 lines
1.8 KiB
Plaintext

import { splitEmojiSequences, joinEmojiSequences, getUnqualifiedEmojiSequence } from '../cleanup.mjs';
import { convertEmojiSequenceToUTF32 } from '../convert.mjs';
import { vs16Emoji, keycapEmoji, emojiComponents } from '../data.mjs';
import { getEmojiSequenceKeyword } from '../format.mjs';
function guessQualifiedEmojiSequence(sequence) {
const split = splitEmojiSequences(sequence).map((part) => {
if (part.indexOf(vs16Emoji) !== -1) {
return part;
}
if (part.length === 2) {
const lastNum = part[1];
if (lastNum === keycapEmoji) {
return [part[0], vs16Emoji, lastNum];
}
for (const key in emojiComponents) {
const range = emojiComponents[key];
if (lastNum >= range[0] && lastNum < range[1]) {
return [part[0], vs16Emoji, lastNum];
}
}
}
return part.length === 1 ? [part[0], vs16Emoji] : part;
});
return joinEmojiSequences(split);
}
function getQualifiedEmojiVariation(item) {
const unqualifiedSequence = getUnqualifiedEmojiSequence(
convertEmojiSequenceToUTF32(item.sequence)
);
const result = {
...item,
sequence: guessQualifiedEmojiSequence(unqualifiedSequence)
};
if (result.sequenceKey) {
result.sequenceKey = getEmojiSequenceKeyword(unqualifiedSequence);
}
return result;
}
function getQualifiedEmojiVariations(items) {
const results = /* @__PURE__ */ Object.create(null);
for (let i = 0; i < items.length; i++) {
const result = getQualifiedEmojiVariation(items[i]);
const key = getEmojiSequenceKeyword(
getUnqualifiedEmojiSequence(result.sequence)
);
if (!results[key] || results[key].sequence.length < result.sequence.length) {
results[key] = result;
}
}
return Object.values(results);
}
export { getQualifiedEmojiVariation, getQualifiedEmojiVariations, guessQualifiedEmojiSequence };