Remove spreadString in favor of polyfilled Array.from
Fix https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/10120 We use this to split up astral symbols ```js // ["🖐", "🏿"] Array.from('🖐🏿'); ```
This commit is contained in:
parent
8f6608af65
commit
5e24ac8efa
2 changed files with 3 additions and 55 deletions
|
@ -1,5 +1,3 @@
|
|||
import spreadString from './spread_string';
|
||||
|
||||
// On Windows, flags render as two-letter country codes, see http://emojipedia.org/flags/
|
||||
const flagACodePoint = 127462; // parseInt('1F1E6', 16)
|
||||
const flagZCodePoint = 127487; // parseInt('1F1FF', 16)
|
||||
|
@ -20,7 +18,7 @@ function isKeycapEmoji(emojiUnicode) {
|
|||
const tone1 = 127995;// parseInt('1F3FB', 16)
|
||||
const tone5 = 127999;// parseInt('1F3FF', 16)
|
||||
function isSkinToneComboEmoji(emojiUnicode) {
|
||||
return emojiUnicode.length > 2 && spreadString(emojiUnicode).some((char) => {
|
||||
return emojiUnicode.length > 2 && Array.from(emojiUnicode).some((char) => {
|
||||
const cp = char.codePointAt(0);
|
||||
return cp >= tone1 && cp <= tone5;
|
||||
});
|
||||
|
@ -30,7 +28,7 @@ function isSkinToneComboEmoji(emojiUnicode) {
|
|||
// doesn't support the skin tone versions of horse racing
|
||||
const horseRacingCodePoint = 127943;// parseInt('1F3C7', 16)
|
||||
function isHorceRacingSkinToneComboEmoji(emojiUnicode) {
|
||||
return spreadString(emojiUnicode)[0].codePointAt(0) === horseRacingCodePoint &&
|
||||
return Array.from(emojiUnicode)[0].codePointAt(0) === horseRacingCodePoint &&
|
||||
isSkinToneComboEmoji(emojiUnicode);
|
||||
}
|
||||
|
||||
|
@ -42,7 +40,7 @@ const personEndCodePoint = 128105; // parseInt('1F469', 16)
|
|||
function isPersonZwjEmoji(emojiUnicode) {
|
||||
let hasPersonEmoji = false;
|
||||
let hasZwj = false;
|
||||
spreadString(emojiUnicode).forEach((character) => {
|
||||
Array.from(emojiUnicode).forEach((character) => {
|
||||
const cp = character.codePointAt(0);
|
||||
if (cp === zwj) {
|
||||
hasZwj = true;
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt#Fixing_charCodeAt()_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_known
|
||||
function knownCharCodeAt(givenString, index) {
|
||||
const str = `${givenString}`;
|
||||
const end = str.length;
|
||||
|
||||
const surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
||||
let idx = index;
|
||||
while ((surrogatePairs.exec(str)) != null) {
|
||||
const li = surrogatePairs.lastIndex;
|
||||
if (li - 2 < idx) {
|
||||
idx += 1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (idx >= end || idx < 0) {
|
||||
return NaN;
|
||||
}
|
||||
|
||||
const code = str.charCodeAt(idx);
|
||||
|
||||
let high;
|
||||
let low;
|
||||
if (code >= 0xD800 && code <= 0xDBFF) {
|
||||
high = code;
|
||||
low = str.charCodeAt(idx + 1);
|
||||
// Go one further, since one of the "characters" is part of a surrogate pair
|
||||
return ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
// See http://stackoverflow.com/a/38901550/796832
|
||||
// ES5/PhantomJS compatible version of spreading a string
|
||||
//
|
||||
// [...'foo'] -> ['f', 'o', 'o']
|
||||
// [...'🖐🏿'] -> ['🖐', '🏿']
|
||||
function spreadString(str) {
|
||||
const arr = [];
|
||||
let i = 0;
|
||||
while (!isNaN(knownCharCodeAt(str, i))) {
|
||||
const codePoint = knownCharCodeAt(str, i);
|
||||
arr.push(String.fromCodePoint(codePoint));
|
||||
i += 1;
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
export default spreadString;
|
Loading…
Reference in a new issue