cleanup.mjs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { getEmojiCodePoint } from './convert.mjs';
  2. import { joinerEmoji, vs16Emoji } from './data.mjs';
  3. function getEmojiSequenceFromString(value) {
  4. return value.trim().split(/[^0-9A-F]+/i).filter((item) => item.length > 0).map(getEmojiCodePoint);
  5. }
  6. function getSequenceFromEmojiStringOrKeyword(value) {
  7. if (!value.match(/^[0-9a-fA-F-\s]+$/)) {
  8. const results = [];
  9. for (const codePoint of value) {
  10. const code = codePoint.codePointAt(0);
  11. if (code) {
  12. results.push(code);
  13. } else {
  14. return getEmojiSequenceFromString(value);
  15. }
  16. }
  17. return results;
  18. }
  19. return getEmojiSequenceFromString(value);
  20. }
  21. function splitEmojiSequences(sequence, separator = joinerEmoji) {
  22. const results = [];
  23. let queue = [];
  24. for (let i = 0; i < sequence.length; i++) {
  25. const code = sequence[i];
  26. if (code === separator) {
  27. results.push(queue);
  28. queue = [];
  29. } else {
  30. queue.push(code);
  31. }
  32. }
  33. results.push(queue);
  34. return results;
  35. }
  36. function joinEmojiSequences(sequences, separator = joinerEmoji) {
  37. let results = [];
  38. for (let i = 0; i < sequences.length; i++) {
  39. if (i > 0) {
  40. results.push(separator);
  41. }
  42. results = results.concat(sequences[i]);
  43. }
  44. return results;
  45. }
  46. function getUnqualifiedEmojiSequence(sequence) {
  47. return sequence.filter((num) => num !== vs16Emoji);
  48. }
  49. export { getEmojiSequenceFromString, getSequenceFromEmojiStringOrKeyword, getUnqualifiedEmojiSequence, joinEmojiSequences, splitEmojiSequences };