{"version":3,"file":"splitRunes.mjs","sources":["../src/splitRunes.ts"],"sourcesContent":["// @ts-nocheck\n// https://github.com/dotcypress/runes\n\nconst HIGH_SURROGATE_START = 0xd800\nconst HIGH_SURROGATE_END = 0xdbff\n\nconst LOW_SURROGATE_START = 0xdc00\n\nconst REGIONAL_INDICATOR_START = 0x1f1e6\nconst REGIONAL_INDICATOR_END = 0x1f1ff\n\nconst FITZPATRICK_MODIFIER_START = 0x1f3fb\nconst FITZPATRICK_MODIFIER_END = 0x1f3ff\n\nconst VARIATION_MODIFIER_START = 0xfe00\nconst VARIATION_MODIFIER_END = 0xfe0f\n\nconst DIACRITICAL_MARKS_START = 0x20d0\nconst DIACRITICAL_MARKS_END = 0x20ff\n\nconst ZWJ = 0x200d\n\nconst GRAPHEMES = [\n\t0x0308, // ( ◌̈ ) COMBINING DIAERESIS\n\t0x0937, // ( ष ) DEVANAGARI LETTER SSA\n\t0x0937, // ( ष ) DEVANAGARI LETTER SSA\n\t0x093f, // ( ि ) DEVANAGARI VOWEL SIGN I\n\t0x093f, // ( ि ) DEVANAGARI VOWEL SIGN I\n\t0x0ba8, // ( ந ) TAMIL LETTER NA\n\t0x0bbf, // ( ி ) TAMIL VOWEL SIGN I\n\t0x0bcd, // ( ◌்) TAMIL SIGN VIRAMA\n\t0x0e31, // ( ◌ั ) THAI CHARACTER MAI HAN-AKAT\n\t0x0e33, // ( ำ ) THAI CHARACTER SARA AM\n\t0x0e40, // ( เ ) THAI CHARACTER SARA E\n\t0x0e49, // ( เ ) THAI CHARACTER MAI THO\n\t0x1100, // ( ᄀ ) HANGUL CHOSEONG KIYEOK\n\t0x1161, // ( ᅡ ) HANGUL JUNGSEONG A\n\t0x11a8, // ( ᆨ ) HANGUL JONGSEONG KIYEOK\n]\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function splitRunes(string: string) {\n\tconst result = []\n\tlet i = 0\n\tlet increment = 0\n\twhile (i < string.length) {\n\t\tincrement += nextUnits(i + increment, string)\n\t\tif (isGrapheme(string[i + increment])) {\n\t\t\tincrement++\n\t\t}\n\n\t\tif (isVariationSelector(string[i + increment])) {\n\t\t\tincrement++\n\t\t}\n\n\t\tif (isDiacriticalMark(string[i + increment])) {\n\t\t\tincrement++\n\t\t}\n\n\t\tif (isZeroWidthJoiner(string[i + increment])) {\n\t\t\tincrement++\n\t\t\tcontinue\n\t\t}\n\n\t\t// @ts-ignore\n\t\tresult.push(string.substring(i, i + increment))\n\t\ti += increment\n\t\tincrement = 0\n\t}\n\treturn result\n}\n\n// Decide how many code units make up the current character.\n// BMP characters: 1 code unit\n// Non-BMP characters (represented by surrogate pairs): 2 code units\n// Emoji with skin-tone modifiers: 4 code units (2 code points)\n// Country flags: 4 code units (2 code points)\n// Variations: 2 code units\nfunction nextUnits(i, string: string) {\n\tconst current = string[i]\n\t// If we don't have a value that is part of a surrogate pair, or we're at\n\t// the end, only take the value at i\n\tif (!isFirstOfSurrogatePair(current) || i === string.length - 1) {\n\t\treturn 1\n\t}\n\n\tconst currentPair = current + string[i + 1]\n\tlet nextPair = string.substring(i + 2, i + 5)\n\n\t// Country flags are comprised of two regional indicator symbols,\n\t// each represented by a surrogate pair.\n\t// See http://emojipedia.org/flags/\n\t// If both pairs are regional indicator symbols, take 4\n\tif (isRegionalIndicator(currentPair) && isRegionalIndicator(nextPair)) {\n\t\treturn 4\n\t}\n\n\t// If the next pair make a Fitzpatrick skin tone\n\t// modifier, take 4\n\t// See http://emojipedia.org/modifiers/\n\t// Technically, only some code points are meant to be\n\t// combined with the skin tone modifiers. This function\n\t// does not check the current pair to see if it is\n\t// one of them.\n\tif (isFitzpatrickModifier(nextPair)) {\n\t\treturn 4\n\t}\n\treturn 2\n}\n\nfunction isFirstOfSurrogatePair(string: string) {\n\treturn string && betweenInclusive(string[0].charCodeAt(0), HIGH_SURROGATE_START, HIGH_SURROGATE_END)\n}\n\nfunction isRegionalIndicator(string: string) {\n\treturn betweenInclusive(codePointFromSurrogatePair(string), REGIONAL_INDICATOR_START, REGIONAL_INDICATOR_END)\n}\n\nfunction isFitzpatrickModifier(string: string) {\n\treturn betweenInclusive(codePointFromSurrogatePair(string), FITZPATRICK_MODIFIER_START, FITZPATRICK_MODIFIER_END)\n}\n\nfunction isVariationSelector(string: string) {\n\treturn (\n\t\ttypeof string === \"string\" &&\n\t\tbetweenInclusive(string.charCodeAt(0), VARIATION_MODIFIER_START, VARIATION_MODIFIER_END)\n\t)\n}\n\nfunction isDiacriticalMark(string: string) {\n\treturn (\n\t\ttypeof string === \"string\" && betweenInclusive(string.charCodeAt(0), DIACRITICAL_MARKS_START, DIACRITICAL_MARKS_END)\n\t)\n}\n\nfunction isGrapheme(string: string) {\n\treturn typeof string === \"string\" && GRAPHEMES.indexOf(string.charCodeAt(0)) !== -1\n}\n\nfunction isZeroWidthJoiner(string: string) {\n\treturn typeof string === \"string\" && string.charCodeAt(0) === ZWJ\n}\n\nfunction codePointFromSurrogatePair(pair) {\n\tconst highOffset = pair.charCodeAt(0) - HIGH_SURROGATE_START\n\tconst lowOffset = pair.charCodeAt(1) - LOW_SURROGATE_START\n\treturn (highOffset << 10) + lowOffset + 0x10000\n}\n\nfunction betweenInclusive(value, lower, upper) {\n\treturn value >= lower && value <= upper\n}\n"],"names":[],"mappings":"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"}