| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 'use strict';
- const emoji_cleanup = require('../cleanup.cjs');
- const emoji_data = require('../data.cjs');
- const emoji_format = require('../format.cjs');
- const emoji_test_components = require('./components.cjs');
- require('../convert.cjs');
- function findMissingEmojis(sequences, testDataTree) {
- const results = [];
- const existingItems = /* @__PURE__ */ Object.create(null);
- const copiedItems = /* @__PURE__ */ Object.create(null);
- sequences.forEach((item) => {
- const sequence = emoji_cleanup.getUnqualifiedEmojiSequence(item.sequence);
- const key = emoji_format.getEmojiSequenceKeyword(sequence);
- if (!existingItems[key] || // If multiple matches for same sequence exist, use longest version
- existingItems[key].sequence.length < item.sequence.length) {
- existingItems[key] = item;
- }
- });
- const iterate = (type, parentTree, parentValues, parentItem, deep) => {
- const childTree = parentTree.children?.[type];
- if (!childTree) {
- return;
- }
- const range = emoji_data.emojiComponents[type];
- for (let number = range[0]; number < range[1]; number++) {
- const values = {
- "hair-style": [...parentValues["hair-style"]],
- "skin-tone": [...parentValues["skin-tone"]]
- };
- values[type].push(number);
- const sequence = emoji_test_components.replaceEmojiComponentsInCombinedSequence(
- childTree.item.sequence,
- values
- );
- const key = emoji_format.getEmojiSequenceKeyword(
- emoji_cleanup.getUnqualifiedEmojiSequence(sequence)
- );
- const oldItem = existingItems[key];
- let item;
- if (oldItem) {
- item = oldItem;
- } else {
- item = copiedItems[key];
- if (!item) {
- item = {
- ...parentItem,
- sequence
- };
- if (item.sequenceKey) {
- item.sequenceKey = key;
- }
- copiedItems[key] = item;
- results.push(item);
- }
- }
- if (deep || oldItem) {
- for (const key2 in values) {
- iterate(
- key2,
- childTree,
- values,
- item,
- deep
- );
- }
- }
- }
- };
- const parse = (key, deep) => {
- const treeItem = testDataTree[key];
- const sequenceKey = treeItem.item.sequenceKey;
- const rootItem = existingItems[sequenceKey];
- if (!rootItem) {
- return;
- }
- const values = {
- "skin-tone": [],
- "hair-style": []
- };
- for (const key2 in values) {
- iterate(
- key2,
- treeItem,
- values,
- rootItem,
- deep
- );
- }
- };
- for (const key in testDataTree) {
- parse(key, false);
- parse(key, true);
- }
- return results;
- }
- exports.findMissingEmojis = findMissingEmojis;
|