Files
infocom-systems-design/node_modules/@iconify/utils/lib/emoji/parse.js
2025-10-03 22:27:28 +03:00

51 lines
1.9 KiB
JavaScript

import { getEmojiSequenceFromString, getUnqualifiedEmojiSequence } from "./cleanup.js";
import { getEmojiSequenceKeyword } from "./format.js";
import { parseEmojiTestFile } from "./test/parse.js";
import { getQualifiedEmojiVariations } from "./test/variations.js";
import { findMissingEmojis } from "./test/missing.js";
import { createOptimisedRegexForEmojiSequences } from "./regex/create.js";
import { combineSimilarEmojiTestData } from "./test/similar.js";
import { getEmojiTestDataTree } from "./test/tree.js";
/**
* Prepare emoji for icons list
*
* Test data should be fetched from 'https://unicode.org/Public/emoji/17.0/emoji-test.txt'
* It is used to detect missing emojis and optimise regular expression
*/
function prepareEmojiForIconsList(icons, rawTestData) {
const testData = rawTestData ? parseEmojiTestFile(rawTestData) : void 0;
let iconsList = [];
for (const char in icons) {
const sequence = getEmojiSequenceFromString(char);
iconsList.push({
icon: icons[char],
sequence
});
}
iconsList = getQualifiedEmojiVariations(iconsList);
if (testData) iconsList = iconsList.concat(findMissingEmojis(iconsList, getEmojiTestDataTree(combineSimilarEmojiTestData(testData))));
const preparedIcons = iconsList.map((item) => {
const sequence = getEmojiSequenceKeyword(getUnqualifiedEmojiSequence(item.sequence));
return {
icon: item.icon,
sequence
};
});
const regex = createOptimisedRegexForEmojiSequences(iconsList.map((item) => item.sequence));
return {
regex,
icons: preparedIcons
};
}
/**
* Prepare emoji for an icon set
*
* Test data should be fetched from 'https://unicode.org/Public/emoji/15.1/emoji-test.txt'
* It is used to detect missing emojis and optimise regular expression
*/
function prepareEmojiForIconSet(iconSet, rawTestData) {
return prepareEmojiForIconsList(iconSet.chars || {}, rawTestData);
}
export { prepareEmojiForIconSet, prepareEmojiForIconsList };