| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 'use strict';
- const emoji_regex_base = require('./base.cjs');
- const emoji_cleanup = require('../cleanup.cjs');
- const emoji_convert = require('../convert.cjs');
- const emoji_regex_numbers = require('./numbers.cjs');
- const emoji_data = require('../data.cjs');
- const emoji_regex_similar = require('./similar.cjs');
- function createEmojisTree(sequences) {
- const root = [];
- for (let i = 0; i < sequences.length; i++) {
- const split = emoji_cleanup.splitEmojiSequences(
- emoji_convert.convertEmojiSequenceToUTF32(sequences[i])
- );
- let parent = root;
- for (let j = 0; j < split.length; j++) {
- const regex = emoji_regex_numbers.createRegexForNumbersSequence(split[j]);
- let item;
- const match = parent.find(
- (item2) => item2.regex.regex === regex.regex
- );
- if (!match) {
- item = {
- regex
- };
- parent.push(item);
- } else {
- item = match;
- }
- if (j === split.length - 1) {
- item.end = true;
- break;
- }
- parent = item.children || (item.children = []);
- }
- }
- return root;
- }
- function parseEmojiTree(items) {
- function mergeParsedChildren(items2) {
- const parsedItems = [];
- const mapWithoutEnd = /* @__PURE__ */ Object.create(null);
- const mapWithEnd = /* @__PURE__ */ Object.create(null);
- for (let i = 0; i < items2.length; i++) {
- const item = items2[i];
- const children = item.children;
- if (children) {
- const fullItem = item;
- const target = item.end ? mapWithEnd : mapWithoutEnd;
- const regex = children.regex;
- if (!target[regex]) {
- target[regex] = [fullItem];
- } else {
- target[regex].push(fullItem);
- }
- } else {
- parsedItems.push(item.regex);
- }
- }
- [mapWithEnd, mapWithoutEnd].forEach((source) => {
- for (const regex in source) {
- const items3 = source[regex];
- const firstItem = items3[0];
- let childSequence = [
- emoji_regex_base.createUTF16EmojiRegexItem([emoji_data.joinerEmoji]),
- firstItem.children
- ];
- if (firstItem.end) {
- childSequence = [
- emoji_regex_base.createOptionalEmojiRegexItem(
- emoji_regex_base.createSequenceEmojiRegexItem(childSequence)
- )
- ];
- }
- let mergedRegex;
- if (items3.length === 1) {
- mergedRegex = firstItem.regex;
- } else {
- mergedRegex = emoji_regex_similar.mergeSimilarItemsInSet(
- emoji_regex_base.createSetEmojiRegexItem(items3.map((item) => item.regex))
- );
- }
- const sequence = emoji_regex_base.createSequenceEmojiRegexItem([
- mergedRegex,
- ...childSequence
- ]);
- parsedItems.push(sequence);
- }
- });
- if (parsedItems.length === 1) {
- return parsedItems[0];
- }
- const set = emoji_regex_base.createSetEmojiRegexItem(parsedItems);
- const result = emoji_regex_similar.mergeSimilarItemsInSet(set);
- return result;
- }
- function parseItemChildren(item) {
- const result = {
- regex: item.regex,
- end: !!item.end
- };
- const children = item.children;
- if (!children) {
- return result;
- }
- const parsedChildren = children.map(parseItemChildren);
- result.children = mergeParsedChildren(parsedChildren);
- return result;
- }
- const parsed = items.map(parseItemChildren);
- return mergeParsedChildren(parsed);
- }
- exports.createEmojisTree = createEmojisTree;
- exports.parseEmojiTree = parseEmojiTree;
|