slate 0.70.0 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/index.es.js +160 -197
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +171 -205
- package/dist/index.js.map +1 -1
- package/dist/slate.js +171 -205
- package/dist/slate.min.js +2 -2
- package/dist/utils/deep-equal.d.ts.map +1 -1
- package/dist/utils/string.d.ts +1 -1
- package/dist/utils/string.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -694,140 +694,79 @@ function _unsupportedIterableToArray$6(o, minLen) { if (!o) return; if (typeof o
|
|
|
694
694
|
|
|
695
695
|
function _arrayLikeToArray$6(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
696
696
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
697
|
+
// Character (grapheme cluster) boundaries are determined according to
|
|
698
|
+
// the default grapheme cluster boundary specification, extended grapheme clusters variant[1].
|
|
699
|
+
//
|
|
700
|
+
// References:
|
|
701
|
+
//
|
|
702
|
+
// [1] https://www.unicode.org/reports/tr29/#Default_Grapheme_Cluster_Table
|
|
703
|
+
// [2] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt
|
|
704
|
+
// [3] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.html
|
|
705
|
+
// [4] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
|
|
706
|
+
|
|
703
707
|
/**
|
|
704
708
|
* Get the distance to the end of the first character in a string of text.
|
|
705
709
|
*/
|
|
706
|
-
|
|
707
|
-
var CodepointType;
|
|
708
|
-
|
|
709
|
-
(function (CodepointType) {
|
|
710
|
-
// ZWJ sequences consist of multiple emojis separated by ZWJ character. They
|
|
711
|
-
// are used to combine multiple emojis into one emoji.
|
|
712
|
-
// https://en.wikipedia.org/wiki/Zero-width_joiner
|
|
713
|
-
CodepointType[CodepointType["ZeroWidthJoiner"] = 0] = "ZeroWidthJoiner"; // Kecap sequences consit of a digit, an asterisk or a number sign followed by
|
|
714
|
-
// the Combining Enclosing Keycap character. They are used to create emoji
|
|
715
|
-
// with a keycap appearance. https://emojipedia.org/emoji-keycap-sequence
|
|
716
|
-
|
|
717
|
-
CodepointType[CodepointType["Keycap"] = 1] = "Keycap"; // Modifiers are used in ZWJ sequences to apply a skin tone to an emoji.
|
|
718
|
-
// https://en.wikipedia.org/wiki/Emoticons_(Unicode_block)#Emoji_modifiers
|
|
719
|
-
|
|
720
|
-
CodepointType[CodepointType["Modifier"] = 2] = "Modifier"; // Variation selectors are used to specify if a character should be displayed
|
|
721
|
-
// as text or as an emoji.
|
|
722
|
-
|
|
723
|
-
CodepointType[CodepointType["VariationSelector"] = 3] = "VariationSelector"; // Flag sequences consist of a pair of regional indicators.
|
|
724
|
-
// https://en.wikipedia.org/wiki/Regional_indicator_symbol
|
|
725
|
-
|
|
726
|
-
CodepointType[CodepointType["RegionalIndicator"] = 4] = "RegionalIndicator"; // Tag sequences consist of a Black Flag emoji followed by a series of Tag
|
|
727
|
-
// codepoints, then the Cancel Tag codepoint.
|
|
728
|
-
// https://en.wikipedia.org/wiki/Tags_(Unicode_block)
|
|
729
|
-
|
|
730
|
-
CodepointType[CodepointType["Tag"] = 5] = "Tag";
|
|
731
|
-
CodepointType[CodepointType["Character"] = 6] = "Character";
|
|
732
|
-
})(CodepointType || (CodepointType = {}));
|
|
733
|
-
|
|
734
710
|
var getCharacterDistance = function getCharacterDistance(str) {
|
|
735
711
|
var isRTL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
736
|
-
var codepoints = isRTL ? codepointsIteratorRTL(str) : str;
|
|
737
712
|
var isLTR = !isRTL;
|
|
713
|
+
var codepoints = isRTL ? codepointsIteratorRTL(str) : str;
|
|
714
|
+
var left = CodepointType.None;
|
|
715
|
+
var right = CodepointType.None;
|
|
716
|
+
var distance = 0; // Evaluation of these conditions are deferred.
|
|
738
717
|
|
|
739
|
-
var
|
|
740
|
-
_ref2 = _slicedToArray(_ref, 4),
|
|
741
|
-
isKeycapStart = _ref2[0],
|
|
742
|
-
isKeycapEnd = _ref2[1],
|
|
743
|
-
isTagStart = _ref2[2],
|
|
744
|
-
isTagEnd = _ref2[3];
|
|
718
|
+
var gb11 = null; // Is GB11 applicable?
|
|
745
719
|
|
|
746
|
-
var
|
|
747
|
-
var previousType = null;
|
|
720
|
+
var gb12Or13 = null; // Is GB12 or GB13 applicable?
|
|
748
721
|
|
|
749
722
|
var _iterator = _createForOfIteratorHelper$6(codepoints),
|
|
750
723
|
_step;
|
|
751
724
|
|
|
752
725
|
try {
|
|
753
726
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
754
|
-
var
|
|
755
|
-
var code = codepoint.codePointAt(0);
|
|
756
|
-
if (!code) break;
|
|
727
|
+
var _char = _step.value;
|
|
757
728
|
|
|
758
|
-
|
|
759
|
-
break;
|
|
760
|
-
}
|
|
729
|
+
var code = _char.codePointAt(0);
|
|
761
730
|
|
|
762
|
-
if (
|
|
763
|
-
|
|
764
|
-
previousType = CodepointType.ZeroWidthJoiner;
|
|
765
|
-
continue;
|
|
766
|
-
}
|
|
731
|
+
if (!code) break;
|
|
732
|
+
var type = getCodepointType(_char, code);
|
|
767
733
|
|
|
768
|
-
|
|
769
|
-
if (previousType === CodepointType.Keycap) break;
|
|
770
|
-
distance += codepoint.length;
|
|
771
|
-
previousType = CodepointType.Keycap;
|
|
772
|
-
continue;
|
|
773
|
-
}
|
|
734
|
+
var _ref = isLTR ? [right, type] : [type, left];
|
|
774
735
|
|
|
775
|
-
|
|
776
|
-
distance += codepoint.length;
|
|
777
|
-
break;
|
|
778
|
-
}
|
|
736
|
+
var _ref2 = _slicedToArray(_ref, 2);
|
|
779
737
|
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
distance += codepoint.length;
|
|
783
|
-
previousType = CodepointType.VariationSelector;
|
|
784
|
-
continue;
|
|
785
|
-
}
|
|
738
|
+
left = _ref2[0];
|
|
739
|
+
right = _ref2[1];
|
|
786
740
|
|
|
787
|
-
if (
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
741
|
+
if (intersects(left, CodepointType.ZWJ) && intersects(right, CodepointType.ExtPict)) {
|
|
742
|
+
if (isLTR) {
|
|
743
|
+
gb11 = endsWithEmojiZWJ(str.substring(0, distance));
|
|
744
|
+
} else {
|
|
745
|
+
gb11 = endsWithEmojiZWJ(str.substring(0, str.length - distance));
|
|
746
|
+
}
|
|
792
747
|
|
|
793
|
-
|
|
794
|
-
if (previousType === CodepointType.Tag) break;
|
|
795
|
-
distance += codepoint.length;
|
|
796
|
-
previousType = CodepointType.Tag;
|
|
797
|
-
continue;
|
|
748
|
+
if (!gb11) break;
|
|
798
749
|
}
|
|
799
750
|
|
|
800
|
-
if (
|
|
801
|
-
if (
|
|
802
|
-
|
|
803
|
-
|
|
751
|
+
if (intersects(left, CodepointType.RI) && intersects(right, CodepointType.RI)) {
|
|
752
|
+
if (gb12Or13 !== null) {
|
|
753
|
+
gb12Or13 = !gb12Or13;
|
|
754
|
+
} else {
|
|
755
|
+
if (isLTR) {
|
|
756
|
+
gb12Or13 = true;
|
|
757
|
+
} else {
|
|
758
|
+
gb12Or13 = endsWithOddNumberOfRIs(str.substring(0, str.length - distance));
|
|
759
|
+
}
|
|
804
760
|
}
|
|
805
761
|
|
|
806
|
-
if (
|
|
807
|
-
|
|
808
|
-
continue;
|
|
809
|
-
}
|
|
762
|
+
if (!gb12Or13) break;
|
|
763
|
+
}
|
|
810
764
|
|
|
765
|
+
if (left !== CodepointType.None && right !== CodepointType.None && isBoundaryPair(left, right)) {
|
|
811
766
|
break;
|
|
812
767
|
}
|
|
813
768
|
|
|
814
|
-
|
|
815
|
-
if (previousType && previousType !== CodepointType.RegionalIndicator) {
|
|
816
|
-
break;
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
distance += codepoint.length;
|
|
820
|
-
if (previousType === CodepointType.RegionalIndicator) break;
|
|
821
|
-
previousType = CodepointType.RegionalIndicator;
|
|
822
|
-
continue;
|
|
823
|
-
} // If previous and curent codepoints are regular characters. it means we are
|
|
824
|
-
// not in a sequence.
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
if (previousType === CodepointType.Character) break;
|
|
828
|
-
distance += codepoint.length;
|
|
829
|
-
previousType = CodepointType.Character;
|
|
830
|
-
continue;
|
|
769
|
+
distance += _char.length;
|
|
831
770
|
}
|
|
832
771
|
} catch (err) {
|
|
833
772
|
_iterator.e(err);
|
|
@@ -837,6 +776,9 @@ var getCharacterDistance = function getCharacterDistance(str) {
|
|
|
837
776
|
|
|
838
777
|
return distance || 1;
|
|
839
778
|
};
|
|
779
|
+
var SPACE = /\s/;
|
|
780
|
+
var PUNCTUATION = /[\u0021-\u0023\u0025-\u002A\u002C-\u002F\u003A\u003B\u003F\u0040\u005B-\u005D\u005F\u007B\u007D\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/;
|
|
781
|
+
var CHAMELEON = /['\u2018\u2019]/;
|
|
840
782
|
/**
|
|
841
783
|
* Get the distance to the end of the first word in a string of text.
|
|
842
784
|
*/
|
|
@@ -851,10 +793,10 @@ var getWordDistance = function getWordDistance(text) {
|
|
|
851
793
|
|
|
852
794
|
var _splitByCharacterDist = splitByCharacterDistance(text, charDist, isRTL),
|
|
853
795
|
_splitByCharacterDist2 = _slicedToArray(_splitByCharacterDist, 2),
|
|
854
|
-
|
|
796
|
+
_char2 = _splitByCharacterDist2[0],
|
|
855
797
|
remaining = _splitByCharacterDist2[1];
|
|
856
798
|
|
|
857
|
-
if (isWordCharacter(
|
|
799
|
+
if (isWordCharacter(_char2, remaining, isRTL)) {
|
|
858
800
|
started = true;
|
|
859
801
|
dist += charDist;
|
|
860
802
|
} else if (!started) {
|
|
@@ -886,16 +828,16 @@ var splitByCharacterDistance = function splitByCharacterDistance(str, dist, isRT
|
|
|
886
828
|
* because sometimes you must read subsequent characters to truly determine it.
|
|
887
829
|
*/
|
|
888
830
|
|
|
889
|
-
var isWordCharacter = function isWordCharacter(
|
|
831
|
+
var isWordCharacter = function isWordCharacter(_char3, remaining) {
|
|
890
832
|
var isRTL = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
891
833
|
|
|
892
|
-
if (SPACE.test(
|
|
834
|
+
if (SPACE.test(_char3)) {
|
|
893
835
|
return false;
|
|
894
836
|
} // Chameleons count as word characters as long as they're in a word, so
|
|
895
837
|
// recurse to see if the next one is a word character or not.
|
|
896
838
|
|
|
897
839
|
|
|
898
|
-
if (CHAMELEON.test(
|
|
840
|
+
if (CHAMELEON.test(_char3)) {
|
|
899
841
|
var charDist = getCharacterDistance(remaining, isRTL);
|
|
900
842
|
|
|
901
843
|
var _splitByCharacterDist3 = splitByCharacterDistance(remaining, charDist, isRTL),
|
|
@@ -908,104 +850,12 @@ var isWordCharacter = function isWordCharacter(_char2, remaining) {
|
|
|
908
850
|
}
|
|
909
851
|
}
|
|
910
852
|
|
|
911
|
-
if (PUNCTUATION.test(
|
|
853
|
+
if (PUNCTUATION.test(_char3)) {
|
|
912
854
|
return false;
|
|
913
855
|
}
|
|
914
856
|
|
|
915
857
|
return true;
|
|
916
858
|
};
|
|
917
|
-
/**
|
|
918
|
-
* Does `code` form Modifier with next one.
|
|
919
|
-
*
|
|
920
|
-
* https://emojipedia.org/modifiers/
|
|
921
|
-
*/
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
var isModifier = function isModifier(code) {
|
|
925
|
-
return code >= 0x1f3fb && code <= 0x1f3ff;
|
|
926
|
-
};
|
|
927
|
-
/**
|
|
928
|
-
* Is `code` a Variation Selector.
|
|
929
|
-
*
|
|
930
|
-
* https://codepoints.net/variation_selectors
|
|
931
|
-
*/
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
var isVariationSelector = function isVariationSelector(code) {
|
|
935
|
-
return code <= 0xfe0f && code >= 0xfe00;
|
|
936
|
-
};
|
|
937
|
-
/**
|
|
938
|
-
* Is `code` a code point used in keycap sequence.
|
|
939
|
-
*
|
|
940
|
-
* https://emojipedia.org/emoji-keycap-sequence/
|
|
941
|
-
*/
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
var isKeycap = function isKeycap(code) {
|
|
945
|
-
return code >= 0x30 && code <= 0x39 || // digits
|
|
946
|
-
code === 0x23 || // number sign
|
|
947
|
-
code === 0x2a;
|
|
948
|
-
};
|
|
949
|
-
/**
|
|
950
|
-
* Is `code` a Combining Enclosing Keycap.
|
|
951
|
-
*
|
|
952
|
-
* https://emojipedia.org/combining-enclosing-keycap/
|
|
953
|
-
*/
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
var isCombiningEnclosingKeycap = function isCombiningEnclosingKeycap(code) {
|
|
957
|
-
return code === 0x20e3;
|
|
958
|
-
};
|
|
959
|
-
/**
|
|
960
|
-
* Is `code` a Regional Indicator.
|
|
961
|
-
*
|
|
962
|
-
* https://en.wikipedia.org/wiki/Regional_indicator_symbol
|
|
963
|
-
*/
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
var isRegionalIndicator = function isRegionalIndicator(code) {
|
|
967
|
-
return code >= 0x1f1e6 && code <= 0x1f1ff;
|
|
968
|
-
};
|
|
969
|
-
/**
|
|
970
|
-
* Is `code` a Zero Width Joiner.
|
|
971
|
-
*
|
|
972
|
-
* https://emojipedia.org/zero-width-joiner/
|
|
973
|
-
*/
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
var isZWJ = function isZWJ(code) {
|
|
977
|
-
return code === 0x200d;
|
|
978
|
-
};
|
|
979
|
-
/**
|
|
980
|
-
* Is `code` a Black Flag.
|
|
981
|
-
*
|
|
982
|
-
* https://emojipedia.org/black-flag/
|
|
983
|
-
*/
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
var isBlackFlag = function isBlackFlag(code) {
|
|
987
|
-
return code === 0x1f3f4;
|
|
988
|
-
};
|
|
989
|
-
/**
|
|
990
|
-
* Is `code` a Tag.
|
|
991
|
-
*
|
|
992
|
-
* https://emojipedia.org/emoji-tag-sequence/
|
|
993
|
-
*/
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
var isTag = function isTag(code) {
|
|
997
|
-
return code >= 0xe0000 && code <= 0xe007f;
|
|
998
|
-
};
|
|
999
|
-
/**
|
|
1000
|
-
* Is `code` a Cancel Tag.
|
|
1001
|
-
*
|
|
1002
|
-
* https://emojipedia.org/cancel-tag/
|
|
1003
|
-
*/
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
var isCancelTag = function isCancelTag(code) {
|
|
1007
|
-
return code === 0xe007f;
|
|
1008
|
-
};
|
|
1009
859
|
/**
|
|
1010
860
|
* Iterate on codepoints from right to left.
|
|
1011
861
|
*/
|
|
@@ -1050,6 +900,124 @@ var isLowSurrogate = function isLowSurrogate(charCode) {
|
|
|
1050
900
|
return charCode >= 0xdc00 && charCode <= 0xdfff;
|
|
1051
901
|
};
|
|
1052
902
|
|
|
903
|
+
var CodepointType;
|
|
904
|
+
|
|
905
|
+
(function (CodepointType) {
|
|
906
|
+
CodepointType[CodepointType["None"] = 0] = "None";
|
|
907
|
+
CodepointType[CodepointType["Extend"] = 1] = "Extend";
|
|
908
|
+
CodepointType[CodepointType["ZWJ"] = 2] = "ZWJ";
|
|
909
|
+
CodepointType[CodepointType["RI"] = 4] = "RI";
|
|
910
|
+
CodepointType[CodepointType["Prepend"] = 8] = "Prepend";
|
|
911
|
+
CodepointType[CodepointType["SpacingMark"] = 16] = "SpacingMark";
|
|
912
|
+
CodepointType[CodepointType["L"] = 32] = "L";
|
|
913
|
+
CodepointType[CodepointType["V"] = 64] = "V";
|
|
914
|
+
CodepointType[CodepointType["T"] = 128] = "T";
|
|
915
|
+
CodepointType[CodepointType["LV"] = 256] = "LV";
|
|
916
|
+
CodepointType[CodepointType["LVT"] = 512] = "LVT";
|
|
917
|
+
CodepointType[CodepointType["ExtPict"] = 1024] = "ExtPict";
|
|
918
|
+
CodepointType[CodepointType["Any"] = 2048] = "Any";
|
|
919
|
+
})(CodepointType || (CodepointType = {}));
|
|
920
|
+
|
|
921
|
+
var reExtend = /^(?:[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09BE\u09C1-\u09C4\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3E\u0B3F\u0B41-\u0B44\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE\u0BC0\u0BCD\u0BD7\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC2\u0CC6\u0CCC\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D3E\u0D41-\u0D44\u0D4D\u0D57\u0D62\u0D63\u0D81\u0DCA\u0DCF\u0DD2-\u0DD4\u0DD6\u0DDF\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B03\u1B34-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200C\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E\uFF9F]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF3E\uDF40\uDF57\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB0\uDCB3-\uDCB8\uDCBA\uDCBD\uDCBF\uDCC0\uDCC2\uDCC3\uDDAF\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD30\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65\uDD67-\uDD69\uDD6E-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uD83C[\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F\uDD00-\uDDEF])$/;
|
|
922
|
+
var rePrepend = /^(?:[\u0600-\u0605\u06DD\u070F\u0890\u0891\u08E2\u0D4E]|\uD804[\uDCBD\uDCCD\uDDC2\uDDC3]|\uD806[\uDD3F\uDD41\uDE3A\uDE84-\uDE89]|\uD807\uDD46)$/;
|
|
923
|
+
var reSpacingMark = /^(?:[\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BF\u09C0\u09C7\u09C8\u09CB\u09CC\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0\u0CC1\u0CC3\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0D02\u0D03\u0D3F\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D82\u0D83\u0DD0\u0DD1\u0DD8-\u0DDE\u0DF2\u0DF3\u0E33\u0EB3\u0F3E\u0F3F\u0F7F\u1031\u103B\u103C\u1056\u1057\u1084\u1715\u1734\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A6D-\u1A72\u1B04\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC]|\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB1\uDCB2\uDCB9\uDCBB\uDCBC\uDCBE\uDCC1\uDDB0\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD31-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD66\uDD6D])$/;
|
|
924
|
+
var reL = /^[\u1100-\u115F\uA960-\uA97C]$/;
|
|
925
|
+
var reV = /^[\u1160-\u11A7\uD7B0-\uD7C6]$/;
|
|
926
|
+
var reT = /^[\u11A8-\u11FF\uD7CB-\uD7FB]$/;
|
|
927
|
+
var reLV = /^[\uAC00\uAC1C\uAC38\uAC54\uAC70\uAC8C\uACA8\uACC4\uACE0\uACFC\uAD18\uAD34\uAD50\uAD6C\uAD88\uADA4\uADC0\uADDC\uADF8\uAE14\uAE30\uAE4C\uAE68\uAE84\uAEA0\uAEBC\uAED8\uAEF4\uAF10\uAF2C\uAF48\uAF64\uAF80\uAF9C\uAFB8\uAFD4\uAFF0\uB00C\uB028\uB044\uB060\uB07C\uB098\uB0B4\uB0D0\uB0EC\uB108\uB124\uB140\uB15C\uB178\uB194\uB1B0\uB1CC\uB1E8\uB204\uB220\uB23C\uB258\uB274\uB290\uB2AC\uB2C8\uB2E4\uB300\uB31C\uB338\uB354\uB370\uB38C\uB3A8\uB3C4\uB3E0\uB3FC\uB418\uB434\uB450\uB46C\uB488\uB4A4\uB4C0\uB4DC\uB4F8\uB514\uB530\uB54C\uB568\uB584\uB5A0\uB5BC\uB5D8\uB5F4\uB610\uB62C\uB648\uB664\uB680\uB69C\uB6B8\uB6D4\uB6F0\uB70C\uB728\uB744\uB760\uB77C\uB798\uB7B4\uB7D0\uB7EC\uB808\uB824\uB840\uB85C\uB878\uB894\uB8B0\uB8CC\uB8E8\uB904\uB920\uB93C\uB958\uB974\uB990\uB9AC\uB9C8\uB9E4\uBA00\uBA1C\uBA38\uBA54\uBA70\uBA8C\uBAA8\uBAC4\uBAE0\uBAFC\uBB18\uBB34\uBB50\uBB6C\uBB88\uBBA4\uBBC0\uBBDC\uBBF8\uBC14\uBC30\uBC4C\uBC68\uBC84\uBCA0\uBCBC\uBCD8\uBCF4\uBD10\uBD2C\uBD48\uBD64\uBD80\uBD9C\uBDB8\uBDD4\uBDF0\uBE0C\uBE28\uBE44\uBE60\uBE7C\uBE98\uBEB4\uBED0\uBEEC\uBF08\uBF24\uBF40\uBF5C\uBF78\uBF94\uBFB0\uBFCC\uBFE8\uC004\uC020\uC03C\uC058\uC074\uC090\uC0AC\uC0C8\uC0E4\uC100\uC11C\uC138\uC154\uC170\uC18C\uC1A8\uC1C4\uC1E0\uC1FC\uC218\uC234\uC250\uC26C\uC288\uC2A4\uC2C0\uC2DC\uC2F8\uC314\uC330\uC34C\uC368\uC384\uC3A0\uC3BC\uC3D8\uC3F4\uC410\uC42C\uC448\uC464\uC480\uC49C\uC4B8\uC4D4\uC4F0\uC50C\uC528\uC544\uC560\uC57C\uC598\uC5B4\uC5D0\uC5EC\uC608\uC624\uC640\uC65C\uC678\uC694\uC6B0\uC6CC\uC6E8\uC704\uC720\uC73C\uC758\uC774\uC790\uC7AC\uC7C8\uC7E4\uC800\uC81C\uC838\uC854\uC870\uC88C\uC8A8\uC8C4\uC8E0\uC8FC\uC918\uC934\uC950\uC96C\uC988\uC9A4\uC9C0\uC9DC\uC9F8\uCA14\uCA30\uCA4C\uCA68\uCA84\uCAA0\uCABC\uCAD8\uCAF4\uCB10\uCB2C\uCB48\uCB64\uCB80\uCB9C\uCBB8\uCBD4\uCBF0\uCC0C\uCC28\uCC44\uCC60\uCC7C\uCC98\uCCB4\uCCD0\uCCEC\uCD08\uCD24\uCD40\uCD5C\uCD78\uCD94\uCDB0\uCDCC\uCDE8\uCE04\uCE20\uCE3C\uCE58\uCE74\uCE90\uCEAC\uCEC8\uCEE4\uCF00\uCF1C\uCF38\uCF54\uCF70\uCF8C\uCFA8\uCFC4\uCFE0\uCFFC\uD018\uD034\uD050\uD06C\uD088\uD0A4\uD0C0\uD0DC\uD0F8\uD114\uD130\uD14C\uD168\uD184\uD1A0\uD1BC\uD1D8\uD1F4\uD210\uD22C\uD248\uD264\uD280\uD29C\uD2B8\uD2D4\uD2F0\uD30C\uD328\uD344\uD360\uD37C\uD398\uD3B4\uD3D0\uD3EC\uD408\uD424\uD440\uD45C\uD478\uD494\uD4B0\uD4CC\uD4E8\uD504\uD520\uD53C\uD558\uD574\uD590\uD5AC\uD5C8\uD5E4\uD600\uD61C\uD638\uD654\uD670\uD68C\uD6A8\uD6C4\uD6E0\uD6FC\uD718\uD734\uD750\uD76C\uD788]$/;
|
|
928
|
+
var reLVT = /^[\uAC01-\uAC1B\uAC1D-\uAC37\uAC39-\uAC53\uAC55-\uAC6F\uAC71-\uAC8B\uAC8D-\uACA7\uACA9-\uACC3\uACC5-\uACDF\uACE1-\uACFB\uACFD-\uAD17\uAD19-\uAD33\uAD35-\uAD4F\uAD51-\uAD6B\uAD6D-\uAD87\uAD89-\uADA3\uADA5-\uADBF\uADC1-\uADDB\uADDD-\uADF7\uADF9-\uAE13\uAE15-\uAE2F\uAE31-\uAE4B\uAE4D-\uAE67\uAE69-\uAE83\uAE85-\uAE9F\uAEA1-\uAEBB\uAEBD-\uAED7\uAED9-\uAEF3\uAEF5-\uAF0F\uAF11-\uAF2B\uAF2D-\uAF47\uAF49-\uAF63\uAF65-\uAF7F\uAF81-\uAF9B\uAF9D-\uAFB7\uAFB9-\uAFD3\uAFD5-\uAFEF\uAFF1-\uB00B\uB00D-\uB027\uB029-\uB043\uB045-\uB05F\uB061-\uB07B\uB07D-\uB097\uB099-\uB0B3\uB0B5-\uB0CF\uB0D1-\uB0EB\uB0ED-\uB107\uB109-\uB123\uB125-\uB13F\uB141-\uB15B\uB15D-\uB177\uB179-\uB193\uB195-\uB1AF\uB1B1-\uB1CB\uB1CD-\uB1E7\uB1E9-\uB203\uB205-\uB21F\uB221-\uB23B\uB23D-\uB257\uB259-\uB273\uB275-\uB28F\uB291-\uB2AB\uB2AD-\uB2C7\uB2C9-\uB2E3\uB2E5-\uB2FF\uB301-\uB31B\uB31D-\uB337\uB339-\uB353\uB355-\uB36F\uB371-\uB38B\uB38D-\uB3A7\uB3A9-\uB3C3\uB3C5-\uB3DF\uB3E1-\uB3FB\uB3FD-\uB417\uB419-\uB433\uB435-\uB44F\uB451-\uB46B\uB46D-\uB487\uB489-\uB4A3\uB4A5-\uB4BF\uB4C1-\uB4DB\uB4DD-\uB4F7\uB4F9-\uB513\uB515-\uB52F\uB531-\uB54B\uB54D-\uB567\uB569-\uB583\uB585-\uB59F\uB5A1-\uB5BB\uB5BD-\uB5D7\uB5D9-\uB5F3\uB5F5-\uB60F\uB611-\uB62B\uB62D-\uB647\uB649-\uB663\uB665-\uB67F\uB681-\uB69B\uB69D-\uB6B7\uB6B9-\uB6D3\uB6D5-\uB6EF\uB6F1-\uB70B\uB70D-\uB727\uB729-\uB743\uB745-\uB75F\uB761-\uB77B\uB77D-\uB797\uB799-\uB7B3\uB7B5-\uB7CF\uB7D1-\uB7EB\uB7ED-\uB807\uB809-\uB823\uB825-\uB83F\uB841-\uB85B\uB85D-\uB877\uB879-\uB893\uB895-\uB8AF\uB8B1-\uB8CB\uB8CD-\uB8E7\uB8E9-\uB903\uB905-\uB91F\uB921-\uB93B\uB93D-\uB957\uB959-\uB973\uB975-\uB98F\uB991-\uB9AB\uB9AD-\uB9C7\uB9C9-\uB9E3\uB9E5-\uB9FF\uBA01-\uBA1B\uBA1D-\uBA37\uBA39-\uBA53\uBA55-\uBA6F\uBA71-\uBA8B\uBA8D-\uBAA7\uBAA9-\uBAC3\uBAC5-\uBADF\uBAE1-\uBAFB\uBAFD-\uBB17\uBB19-\uBB33\uBB35-\uBB4F\uBB51-\uBB6B\uBB6D-\uBB87\uBB89-\uBBA3\uBBA5-\uBBBF\uBBC1-\uBBDB\uBBDD-\uBBF7\uBBF9-\uBC13\uBC15-\uBC2F\uBC31-\uBC4B\uBC4D-\uBC67\uBC69-\uBC83\uBC85-\uBC9F\uBCA1-\uBCBB\uBCBD-\uBCD7\uBCD9-\uBCF3\uBCF5-\uBD0F\uBD11-\uBD2B\uBD2D-\uBD47\uBD49-\uBD63\uBD65-\uBD7F\uBD81-\uBD9B\uBD9D-\uBDB7\uBDB9-\uBDD3\uBDD5-\uBDEF\uBDF1-\uBE0B\uBE0D-\uBE27\uBE29-\uBE43\uBE45-\uBE5F\uBE61-\uBE7B\uBE7D-\uBE97\uBE99-\uBEB3\uBEB5-\uBECF\uBED1-\uBEEB\uBEED-\uBF07\uBF09-\uBF23\uBF25-\uBF3F\uBF41-\uBF5B\uBF5D-\uBF77\uBF79-\uBF93\uBF95-\uBFAF\uBFB1-\uBFCB\uBFCD-\uBFE7\uBFE9-\uC003\uC005-\uC01F\uC021-\uC03B\uC03D-\uC057\uC059-\uC073\uC075-\uC08F\uC091-\uC0AB\uC0AD-\uC0C7\uC0C9-\uC0E3\uC0E5-\uC0FF\uC101-\uC11B\uC11D-\uC137\uC139-\uC153\uC155-\uC16F\uC171-\uC18B\uC18D-\uC1A7\uC1A9-\uC1C3\uC1C5-\uC1DF\uC1E1-\uC1FB\uC1FD-\uC217\uC219-\uC233\uC235-\uC24F\uC251-\uC26B\uC26D-\uC287\uC289-\uC2A3\uC2A5-\uC2BF\uC2C1-\uC2DB\uC2DD-\uC2F7\uC2F9-\uC313\uC315-\uC32F\uC331-\uC34B\uC34D-\uC367\uC369-\uC383\uC385-\uC39F\uC3A1-\uC3BB\uC3BD-\uC3D7\uC3D9-\uC3F3\uC3F5-\uC40F\uC411-\uC42B\uC42D-\uC447\uC449-\uC463\uC465-\uC47F\uC481-\uC49B\uC49D-\uC4B7\uC4B9-\uC4D3\uC4D5-\uC4EF\uC4F1-\uC50B\uC50D-\uC527\uC529-\uC543\uC545-\uC55F\uC561-\uC57B\uC57D-\uC597\uC599-\uC5B3\uC5B5-\uC5CF\uC5D1-\uC5EB\uC5ED-\uC607\uC609-\uC623\uC625-\uC63F\uC641-\uC65B\uC65D-\uC677\uC679-\uC693\uC695-\uC6AF\uC6B1-\uC6CB\uC6CD-\uC6E7\uC6E9-\uC703\uC705-\uC71F\uC721-\uC73B\uC73D-\uC757\uC759-\uC773\uC775-\uC78F\uC791-\uC7AB\uC7AD-\uC7C7\uC7C9-\uC7E3\uC7E5-\uC7FF\uC801-\uC81B\uC81D-\uC837\uC839-\uC853\uC855-\uC86F\uC871-\uC88B\uC88D-\uC8A7\uC8A9-\uC8C3\uC8C5-\uC8DF\uC8E1-\uC8FB\uC8FD-\uC917\uC919-\uC933\uC935-\uC94F\uC951-\uC96B\uC96D-\uC987\uC989-\uC9A3\uC9A5-\uC9BF\uC9C1-\uC9DB\uC9DD-\uC9F7\uC9F9-\uCA13\uCA15-\uCA2F\uCA31-\uCA4B\uCA4D-\uCA67\uCA69-\uCA83\uCA85-\uCA9F\uCAA1-\uCABB\uCABD-\uCAD7\uCAD9-\uCAF3\uCAF5-\uCB0F\uCB11-\uCB2B\uCB2D-\uCB47\uCB49-\uCB63\uCB65-\uCB7F\uCB81-\uCB9B\uCB9D-\uCBB7\uCBB9-\uCBD3\uCBD5-\uCBEF\uCBF1-\uCC0B\uCC0D-\uCC27\uCC29-\uCC43\uCC45-\uCC5F\uCC61-\uCC7B\uCC7D-\uCC97\uCC99-\uCCB3\uCCB5-\uCCCF\uCCD1-\uCCEB\uCCED-\uCD07\uCD09-\uCD23\uCD25-\uCD3F\uCD41-\uCD5B\uCD5D-\uCD77\uCD79-\uCD93\uCD95-\uCDAF\uCDB1-\uCDCB\uCDCD-\uCDE7\uCDE9-\uCE03\uCE05-\uCE1F\uCE21-\uCE3B\uCE3D-\uCE57\uCE59-\uCE73\uCE75-\uCE8F\uCE91-\uCEAB\uCEAD-\uCEC7\uCEC9-\uCEE3\uCEE5-\uCEFF\uCF01-\uCF1B\uCF1D-\uCF37\uCF39-\uCF53\uCF55-\uCF6F\uCF71-\uCF8B\uCF8D-\uCFA7\uCFA9-\uCFC3\uCFC5-\uCFDF\uCFE1-\uCFFB\uCFFD-\uD017\uD019-\uD033\uD035-\uD04F\uD051-\uD06B\uD06D-\uD087\uD089-\uD0A3\uD0A5-\uD0BF\uD0C1-\uD0DB\uD0DD-\uD0F7\uD0F9-\uD113\uD115-\uD12F\uD131-\uD14B\uD14D-\uD167\uD169-\uD183\uD185-\uD19F\uD1A1-\uD1BB\uD1BD-\uD1D7\uD1D9-\uD1F3\uD1F5-\uD20F\uD211-\uD22B\uD22D-\uD247\uD249-\uD263\uD265-\uD27F\uD281-\uD29B\uD29D-\uD2B7\uD2B9-\uD2D3\uD2D5-\uD2EF\uD2F1-\uD30B\uD30D-\uD327\uD329-\uD343\uD345-\uD35F\uD361-\uD37B\uD37D-\uD397\uD399-\uD3B3\uD3B5-\uD3CF\uD3D1-\uD3EB\uD3ED-\uD407\uD409-\uD423\uD425-\uD43F\uD441-\uD45B\uD45D-\uD477\uD479-\uD493\uD495-\uD4AF\uD4B1-\uD4CB\uD4CD-\uD4E7\uD4E9-\uD503\uD505-\uD51F\uD521-\uD53B\uD53D-\uD557\uD559-\uD573\uD575-\uD58F\uD591-\uD5AB\uD5AD-\uD5C7\uD5C9-\uD5E3\uD5E5-\uD5FF\uD601-\uD61B\uD61D-\uD637\uD639-\uD653\uD655-\uD66F\uD671-\uD68B\uD68D-\uD6A7\uD6A9-\uD6C3\uD6C5-\uD6DF\uD6E1-\uD6FB\uD6FD-\uD717\uD719-\uD733\uD735-\uD74F\uD751-\uD76B\uD76D-\uD787\uD789-\uD7A3]$/;
|
|
929
|
+
var reExtPict = /^(?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2605\u2607-\u2612\u2614-\u2685\u2690-\u2705\u2708-\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763-\u2767\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC00-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDAD-\uDDE5\uDE01-\uDE0F\uDE1A\uDE2F\uDE32-\uDE3A\uDE3C-\uDE3F\uDE49-\uDFFA]|\uD83D[\uDC00-\uDD3D\uDD46-\uDE4F\uDE80-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDCFF\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDEFF]|\uD83F[\uDC00-\uDFFD])$/;
|
|
930
|
+
|
|
931
|
+
var getCodepointType = function getCodepointType(_char4, code) {
|
|
932
|
+
var type = CodepointType.Any;
|
|
933
|
+
|
|
934
|
+
if (_char4.search(reExtend) !== -1) {
|
|
935
|
+
type |= CodepointType.Extend;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
if (code === 0x200d) {
|
|
939
|
+
type |= CodepointType.ZWJ;
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
if (code >= 0x1f1e6 && code <= 0x1f1ff) {
|
|
943
|
+
type |= CodepointType.RI;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
if (_char4.search(rePrepend) !== -1) {
|
|
947
|
+
type |= CodepointType.Prepend;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
if (_char4.search(reSpacingMark) !== -1) {
|
|
951
|
+
type |= CodepointType.SpacingMark;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
if (_char4.search(reL) !== -1) {
|
|
955
|
+
type |= CodepointType.L;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
if (_char4.search(reV) !== -1) {
|
|
959
|
+
type |= CodepointType.V;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
if (_char4.search(reT) !== -1) {
|
|
963
|
+
type |= CodepointType.T;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
if (_char4.search(reLV) !== -1) {
|
|
967
|
+
type |= CodepointType.LV;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
if (_char4.search(reLVT) !== -1) {
|
|
971
|
+
type |= CodepointType.LVT;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
if (_char4.search(reExtPict) !== -1) {
|
|
975
|
+
type |= CodepointType.ExtPict;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
return type;
|
|
979
|
+
};
|
|
980
|
+
|
|
981
|
+
function intersects(x, y) {
|
|
982
|
+
return (x & y) !== 0;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
var NonBoundaryPairs = [// GB6
|
|
986
|
+
[CodepointType.L, CodepointType.L | CodepointType.V | CodepointType.LV | CodepointType.LVT], // GB7
|
|
987
|
+
[CodepointType.LV | CodepointType.V, CodepointType.V | CodepointType.T], // GB8
|
|
988
|
+
[CodepointType.LVT | CodepointType.T, CodepointType.T], // GB9
|
|
989
|
+
[CodepointType.Any, CodepointType.Extend | CodepointType.ZWJ], // GB9a
|
|
990
|
+
[CodepointType.Any, CodepointType.SpacingMark], // GB9b
|
|
991
|
+
[CodepointType.Prepend, CodepointType.Any], // GB11
|
|
992
|
+
[CodepointType.ZWJ, CodepointType.ExtPict], // GB12 and GB13
|
|
993
|
+
[CodepointType.RI, CodepointType.RI]];
|
|
994
|
+
|
|
995
|
+
function isBoundaryPair(left, right) {
|
|
996
|
+
return NonBoundaryPairs.findIndex(function (r) {
|
|
997
|
+
return intersects(left, r[0]) && intersects(right, r[1]);
|
|
998
|
+
}) === -1;
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
var endingEmojiZWJ = /(?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2605\u2607-\u2612\u2614-\u2685\u2690-\u2705\u2708-\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763-\u2767\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC00-\uDCFF\uDD0D-\uDD0F\uDD2F\uDD6C-\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDAD-\uDDE5\uDE01-\uDE0F\uDE1A\uDE2F\uDE32-\uDE3A\uDE3C-\uDE3F\uDE49-\uDFFA]|\uD83D[\uDC00-\uDD3D\uDD46-\uDE4F\uDE80-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDCFF\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDEFF]|\uD83F[\uDC00-\uDFFD])(?:[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09BE\u09C1-\u09C4\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3E\u0B3F\u0B41-\u0B44\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE\u0BC0\u0BCD\u0BD7\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC2\u0CC6\u0CCC\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D3E\u0D41-\u0D44\u0D4D\u0D57\u0D62\u0D63\u0D81\u0DCA\u0DCF\u0DD2-\u0DD4\u0DD6\u0DDF\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B03\u1B34-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200C\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E\uFF9F]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF3E\uDF40\uDF57\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB0\uDCB3-\uDCB8\uDCBA\uDCBD\uDCBF\uDCC0\uDCC2\uDCC3\uDDAF\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD30\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65\uDD67-\uDD69\uDD6E-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uD83C[\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F\uDD00-\uDDEF])*\u200D$/;
|
|
1002
|
+
|
|
1003
|
+
var endsWithEmojiZWJ = function endsWithEmojiZWJ(str) {
|
|
1004
|
+
return str.search(endingEmojiZWJ) !== -1;
|
|
1005
|
+
};
|
|
1006
|
+
|
|
1007
|
+
var endingRIs = /(?:\uD83C[\uDDE6-\uDDFF])+$/g;
|
|
1008
|
+
|
|
1009
|
+
var endsWithOddNumberOfRIs = function endsWithOddNumberOfRIs(str) {
|
|
1010
|
+
var match = str.match(endingRIs);
|
|
1011
|
+
|
|
1012
|
+
if (match === null) {
|
|
1013
|
+
return false;
|
|
1014
|
+
} else {
|
|
1015
|
+
// A RI is represented by a surrogate pair.
|
|
1016
|
+
var numRIs = match[0].length / 2;
|
|
1017
|
+
return numRIs % 2 === 1;
|
|
1018
|
+
}
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1053
1021
|
/**
|
|
1054
1022
|
* Shared the function with isElementType utility
|
|
1055
1023
|
*/
|
|
@@ -4189,8 +4157,6 @@ var isDeepEqual = function isDeepEqual(node, another) {
|
|
|
4189
4157
|
for (var i = 0; i < a.length; i++) {
|
|
4190
4158
|
if (a[i] !== b[i]) return false;
|
|
4191
4159
|
}
|
|
4192
|
-
|
|
4193
|
-
return true;
|
|
4194
4160
|
} else if (a !== b) {
|
|
4195
4161
|
return false;
|
|
4196
4162
|
}
|