| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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 };
|