| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 'use strict';
- const emoji_data = require('./data.cjs');
- function getEmojiCodePoint(code) {
- return parseInt(code, 16);
- }
- function utf32FirstNum(code) {
- return (code - emoji_data.minUTF32 >> 10 | 0) + emoji_data.startUTF32Pair1;
- }
- function utf32SecondNum(code) {
- return (code - emoji_data.minUTF32 & 1023) + emoji_data.startUTF32Pair2;
- }
- function splitUTF32Number(code) {
- if (code >= emoji_data.minUTF32) {
- return [utf32FirstNum(code), utf32SecondNum(code)];
- }
- }
- function isUTF32SplitNumber(value) {
- if (value >= emoji_data.startUTF32Pair1) {
- if (value < emoji_data.startUTF32Pair2) {
- return 1;
- }
- if (value < emoji_data.endUTF32Pair) {
- return 2;
- }
- }
- return false;
- }
- function mergeUTF32Numbers(part1, part2) {
- if (part1 < emoji_data.startUTF32Pair1 || part1 >= emoji_data.startUTF32Pair2 || part2 < emoji_data.startUTF32Pair2 || part2 >= emoji_data.endUTF32Pair) {
- return;
- }
- return (part1 - emoji_data.startUTF32Pair1 << 10) + (part2 - emoji_data.startUTF32Pair2) + emoji_data.minUTF32;
- }
- function getEmojiUnicode(code) {
- return String.fromCodePoint(
- typeof code === "number" ? code : getEmojiCodePoint(code)
- );
- }
- function convertEmojiSequenceToUTF16(numbers) {
- const results = [];
- for (let i = 0; i < numbers.length; i++) {
- const code = numbers[i];
- if (code >= emoji_data.minUTF32) {
- results.push(utf32FirstNum(code));
- results.push(utf32SecondNum(code));
- } else {
- results.push(code);
- }
- }
- return results;
- }
- function convertEmojiSequenceToUTF32(numbers, throwOnError = true) {
- const results = [];
- for (let i = 0; i < numbers.length; i++) {
- const code = numbers[i];
- if (code >= emoji_data.minUTF32) {
- results.push(code);
- continue;
- }
- const part = isUTF32SplitNumber(code);
- if (!part) {
- results.push(code);
- continue;
- }
- if (part === 1 && numbers.length > i + 1) {
- const merged = mergeUTF32Numbers(code, numbers[i + 1]);
- if (merged) {
- i++;
- results.push(merged);
- continue;
- }
- }
- if (throwOnError) {
- const nextCode = numbers[i + 1];
- throw new Error(
- `Invalid UTF-16 sequence: ${code.toString(16)}-${nextCode ? nextCode.toString(16) : "undefined"}`
- );
- }
- results.push(code);
- }
- return results;
- }
- exports.convertEmojiSequenceToUTF16 = convertEmojiSequenceToUTF16;
- exports.convertEmojiSequenceToUTF32 = convertEmojiSequenceToUTF32;
- exports.getEmojiCodePoint = getEmojiCodePoint;
- exports.getEmojiUnicode = getEmojiUnicode;
- exports.isUTF32SplitNumber = isUTF32SplitNumber;
- exports.mergeUTF32Numbers = mergeUTF32Numbers;
- exports.splitUTF32Number = splitUTF32Number;
|