variations.cjs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. const emoji_cleanup = require('../cleanup.cjs');
  3. const emoji_convert = require('../convert.cjs');
  4. const emoji_data = require('../data.cjs');
  5. const emoji_format = require('../format.cjs');
  6. function guessQualifiedEmojiSequence(sequence) {
  7. const split = emoji_cleanup.splitEmojiSequences(sequence).map((part) => {
  8. if (part.indexOf(emoji_data.vs16Emoji) !== -1) {
  9. return part;
  10. }
  11. if (part.length === 2) {
  12. const lastNum = part[1];
  13. if (lastNum === emoji_data.keycapEmoji) {
  14. return [part[0], emoji_data.vs16Emoji, lastNum];
  15. }
  16. for (const key in emoji_data.emojiComponents) {
  17. const range = emoji_data.emojiComponents[key];
  18. if (lastNum >= range[0] && lastNum < range[1]) {
  19. return [part[0], emoji_data.vs16Emoji, lastNum];
  20. }
  21. }
  22. }
  23. return part.length === 1 ? [part[0], emoji_data.vs16Emoji] : part;
  24. });
  25. return emoji_cleanup.joinEmojiSequences(split);
  26. }
  27. function getQualifiedEmojiVariation(item) {
  28. const unqualifiedSequence = emoji_cleanup.getUnqualifiedEmojiSequence(
  29. emoji_convert.convertEmojiSequenceToUTF32(item.sequence)
  30. );
  31. const result = {
  32. ...item,
  33. sequence: guessQualifiedEmojiSequence(unqualifiedSequence)
  34. };
  35. if (result.sequenceKey) {
  36. result.sequenceKey = emoji_format.getEmojiSequenceKeyword(unqualifiedSequence);
  37. }
  38. return result;
  39. }
  40. function getQualifiedEmojiVariations(items) {
  41. const results = /* @__PURE__ */ Object.create(null);
  42. for (let i = 0; i < items.length; i++) {
  43. const result = getQualifiedEmojiVariation(items[i]);
  44. const key = emoji_format.getEmojiSequenceKeyword(
  45. emoji_cleanup.getUnqualifiedEmojiSequence(result.sequence)
  46. );
  47. if (!results[key] || results[key].sequence.length < result.sequence.length) {
  48. results[key] = result;
  49. }
  50. }
  51. return Object.values(results);
  52. }
  53. exports.getQualifiedEmojiVariation = getQualifiedEmojiVariation;
  54. exports.getQualifiedEmojiVariations = getQualifiedEmojiVariations;
  55. exports.guessQualifiedEmojiSequence = guessQualifiedEmojiSequence;