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/slate.js
CHANGED
|
@@ -1484,140 +1484,79 @@
|
|
|
1484
1484
|
|
|
1485
1485
|
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; }
|
|
1486
1486
|
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1487
|
+
// Character (grapheme cluster) boundaries are determined according to
|
|
1488
|
+
// the default grapheme cluster boundary specification, extended grapheme clusters variant[1].
|
|
1489
|
+
//
|
|
1490
|
+
// References:
|
|
1491
|
+
//
|
|
1492
|
+
// [1] https://www.unicode.org/reports/tr29/#Default_Grapheme_Cluster_Table
|
|
1493
|
+
// [2] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt
|
|
1494
|
+
// [3] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.html
|
|
1495
|
+
// [4] https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
|
|
1496
|
+
|
|
1493
1497
|
/**
|
|
1494
1498
|
* Get the distance to the end of the first character in a string of text.
|
|
1495
1499
|
*/
|
|
1496
|
-
|
|
1497
|
-
var CodepointType;
|
|
1498
|
-
|
|
1499
|
-
(function (CodepointType) {
|
|
1500
|
-
// ZWJ sequences consist of multiple emojis separated by ZWJ character. They
|
|
1501
|
-
// are used to combine multiple emojis into one emoji.
|
|
1502
|
-
// https://en.wikipedia.org/wiki/Zero-width_joiner
|
|
1503
|
-
CodepointType[CodepointType["ZeroWidthJoiner"] = 0] = "ZeroWidthJoiner"; // Kecap sequences consit of a digit, an asterisk or a number sign followed by
|
|
1504
|
-
// the Combining Enclosing Keycap character. They are used to create emoji
|
|
1505
|
-
// with a keycap appearance. https://emojipedia.org/emoji-keycap-sequence
|
|
1506
|
-
|
|
1507
|
-
CodepointType[CodepointType["Keycap"] = 1] = "Keycap"; // Modifiers are used in ZWJ sequences to apply a skin tone to an emoji.
|
|
1508
|
-
// https://en.wikipedia.org/wiki/Emoticons_(Unicode_block)#Emoji_modifiers
|
|
1509
|
-
|
|
1510
|
-
CodepointType[CodepointType["Modifier"] = 2] = "Modifier"; // Variation selectors are used to specify if a character should be displayed
|
|
1511
|
-
// as text or as an emoji.
|
|
1512
|
-
|
|
1513
|
-
CodepointType[CodepointType["VariationSelector"] = 3] = "VariationSelector"; // Flag sequences consist of a pair of regional indicators.
|
|
1514
|
-
// https://en.wikipedia.org/wiki/Regional_indicator_symbol
|
|
1515
|
-
|
|
1516
|
-
CodepointType[CodepointType["RegionalIndicator"] = 4] = "RegionalIndicator"; // Tag sequences consist of a Black Flag emoji followed by a series of Tag
|
|
1517
|
-
// codepoints, then the Cancel Tag codepoint.
|
|
1518
|
-
// https://en.wikipedia.org/wiki/Tags_(Unicode_block)
|
|
1519
|
-
|
|
1520
|
-
CodepointType[CodepointType["Tag"] = 5] = "Tag";
|
|
1521
|
-
CodepointType[CodepointType["Character"] = 6] = "Character";
|
|
1522
|
-
})(CodepointType || (CodepointType = {}));
|
|
1523
|
-
|
|
1524
1500
|
var getCharacterDistance = function getCharacterDistance(str) {
|
|
1525
1501
|
var isRTL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1526
|
-
var codepoints = isRTL ? codepointsIteratorRTL(str) : str;
|
|
1527
1502
|
var isLTR = !isRTL;
|
|
1503
|
+
var codepoints = isRTL ? codepointsIteratorRTL(str) : str;
|
|
1504
|
+
var left = CodepointType.None;
|
|
1505
|
+
var right = CodepointType.None;
|
|
1506
|
+
var distance = 0; // Evaluation of these conditions are deferred.
|
|
1528
1507
|
|
|
1529
|
-
var
|
|
1530
|
-
_ref2 = _slicedToArray(_ref, 4),
|
|
1531
|
-
isKeycapStart = _ref2[0],
|
|
1532
|
-
isKeycapEnd = _ref2[1],
|
|
1533
|
-
isTagStart = _ref2[2],
|
|
1534
|
-
isTagEnd = _ref2[3];
|
|
1508
|
+
var gb11 = null; // Is GB11 applicable?
|
|
1535
1509
|
|
|
1536
|
-
var
|
|
1537
|
-
var previousType = null;
|
|
1510
|
+
var gb12Or13 = null; // Is GB12 or GB13 applicable?
|
|
1538
1511
|
|
|
1539
1512
|
var _iterator = _createForOfIteratorHelper$6(codepoints),
|
|
1540
1513
|
_step;
|
|
1541
1514
|
|
|
1542
1515
|
try {
|
|
1543
1516
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1544
|
-
var
|
|
1545
|
-
var code = codepoint.codePointAt(0);
|
|
1546
|
-
if (!code) break;
|
|
1517
|
+
var _char = _step.value;
|
|
1547
1518
|
|
|
1548
|
-
|
|
1549
|
-
break;
|
|
1550
|
-
}
|
|
1519
|
+
var code = _char.codePointAt(0);
|
|
1551
1520
|
|
|
1552
|
-
if (
|
|
1553
|
-
|
|
1554
|
-
previousType = CodepointType.ZeroWidthJoiner;
|
|
1555
|
-
continue;
|
|
1556
|
-
}
|
|
1521
|
+
if (!code) break;
|
|
1522
|
+
var type = getCodepointType(_char, code);
|
|
1557
1523
|
|
|
1558
|
-
|
|
1559
|
-
if (previousType === CodepointType.Keycap) break;
|
|
1560
|
-
distance += codepoint.length;
|
|
1561
|
-
previousType = CodepointType.Keycap;
|
|
1562
|
-
continue;
|
|
1563
|
-
}
|
|
1524
|
+
var _ref = isLTR ? [right, type] : [type, left];
|
|
1564
1525
|
|
|
1565
|
-
|
|
1566
|
-
distance += codepoint.length;
|
|
1567
|
-
break;
|
|
1568
|
-
}
|
|
1526
|
+
var _ref2 = _slicedToArray(_ref, 2);
|
|
1569
1527
|
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
distance += codepoint.length;
|
|
1573
|
-
previousType = CodepointType.VariationSelector;
|
|
1574
|
-
continue;
|
|
1575
|
-
}
|
|
1528
|
+
left = _ref2[0];
|
|
1529
|
+
right = _ref2[1];
|
|
1576
1530
|
|
|
1577
|
-
if (
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1531
|
+
if (intersects(left, CodepointType.ZWJ) && intersects(right, CodepointType.ExtPict)) {
|
|
1532
|
+
if (isLTR) {
|
|
1533
|
+
gb11 = endsWithEmojiZWJ(str.substring(0, distance));
|
|
1534
|
+
} else {
|
|
1535
|
+
gb11 = endsWithEmojiZWJ(str.substring(0, str.length - distance));
|
|
1536
|
+
}
|
|
1582
1537
|
|
|
1583
|
-
|
|
1584
|
-
if (previousType === CodepointType.Tag) break;
|
|
1585
|
-
distance += codepoint.length;
|
|
1586
|
-
previousType = CodepointType.Tag;
|
|
1587
|
-
continue;
|
|
1538
|
+
if (!gb11) break;
|
|
1588
1539
|
}
|
|
1589
1540
|
|
|
1590
|
-
if (
|
|
1591
|
-
if (
|
|
1592
|
-
|
|
1593
|
-
|
|
1541
|
+
if (intersects(left, CodepointType.RI) && intersects(right, CodepointType.RI)) {
|
|
1542
|
+
if (gb12Or13 !== null) {
|
|
1543
|
+
gb12Or13 = !gb12Or13;
|
|
1544
|
+
} else {
|
|
1545
|
+
if (isLTR) {
|
|
1546
|
+
gb12Or13 = true;
|
|
1547
|
+
} else {
|
|
1548
|
+
gb12Or13 = endsWithOddNumberOfRIs(str.substring(0, str.length - distance));
|
|
1549
|
+
}
|
|
1594
1550
|
}
|
|
1595
1551
|
|
|
1596
|
-
if (
|
|
1597
|
-
|
|
1598
|
-
continue;
|
|
1599
|
-
}
|
|
1552
|
+
if (!gb12Or13) break;
|
|
1553
|
+
}
|
|
1600
1554
|
|
|
1555
|
+
if (left !== CodepointType.None && right !== CodepointType.None && isBoundaryPair(left, right)) {
|
|
1601
1556
|
break;
|
|
1602
1557
|
}
|
|
1603
1558
|
|
|
1604
|
-
|
|
1605
|
-
if (previousType && previousType !== CodepointType.RegionalIndicator) {
|
|
1606
|
-
break;
|
|
1607
|
-
}
|
|
1608
|
-
|
|
1609
|
-
distance += codepoint.length;
|
|
1610
|
-
if (previousType === CodepointType.RegionalIndicator) break;
|
|
1611
|
-
previousType = CodepointType.RegionalIndicator;
|
|
1612
|
-
continue;
|
|
1613
|
-
} // If previous and curent codepoints are regular characters. it means we are
|
|
1614
|
-
// not in a sequence.
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
if (previousType === CodepointType.Character) break;
|
|
1618
|
-
distance += codepoint.length;
|
|
1619
|
-
previousType = CodepointType.Character;
|
|
1620
|
-
continue;
|
|
1559
|
+
distance += _char.length;
|
|
1621
1560
|
}
|
|
1622
1561
|
} catch (err) {
|
|
1623
1562
|
_iterator.e(err);
|
|
@@ -1627,6 +1566,9 @@
|
|
|
1627
1566
|
|
|
1628
1567
|
return distance || 1;
|
|
1629
1568
|
};
|
|
1569
|
+
var SPACE = /\s/;
|
|
1570
|
+
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]/;
|
|
1571
|
+
var CHAMELEON = /['\u2018\u2019]/;
|
|
1630
1572
|
/**
|
|
1631
1573
|
* Get the distance to the end of the first word in a string of text.
|
|
1632
1574
|
*/
|
|
@@ -1641,10 +1583,10 @@
|
|
|
1641
1583
|
|
|
1642
1584
|
var _splitByCharacterDist = splitByCharacterDistance(text, charDist, isRTL),
|
|
1643
1585
|
_splitByCharacterDist2 = _slicedToArray(_splitByCharacterDist, 2),
|
|
1644
|
-
|
|
1586
|
+
_char2 = _splitByCharacterDist2[0],
|
|
1645
1587
|
remaining = _splitByCharacterDist2[1];
|
|
1646
1588
|
|
|
1647
|
-
if (isWordCharacter(
|
|
1589
|
+
if (isWordCharacter(_char2, remaining, isRTL)) {
|
|
1648
1590
|
started = true;
|
|
1649
1591
|
dist += charDist;
|
|
1650
1592
|
} else if (!started) {
|
|
@@ -1676,16 +1618,16 @@
|
|
|
1676
1618
|
* because sometimes you must read subsequent characters to truly determine it.
|
|
1677
1619
|
*/
|
|
1678
1620
|
|
|
1679
|
-
var isWordCharacter = function isWordCharacter(
|
|
1621
|
+
var isWordCharacter = function isWordCharacter(_char3, remaining) {
|
|
1680
1622
|
var isRTL = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1681
1623
|
|
|
1682
|
-
if (SPACE.test(
|
|
1624
|
+
if (SPACE.test(_char3)) {
|
|
1683
1625
|
return false;
|
|
1684
1626
|
} // Chameleons count as word characters as long as they're in a word, so
|
|
1685
1627
|
// recurse to see if the next one is a word character or not.
|
|
1686
1628
|
|
|
1687
1629
|
|
|
1688
|
-
if (CHAMELEON.test(
|
|
1630
|
+
if (CHAMELEON.test(_char3)) {
|
|
1689
1631
|
var charDist = getCharacterDistance(remaining, isRTL);
|
|
1690
1632
|
|
|
1691
1633
|
var _splitByCharacterDist3 = splitByCharacterDistance(remaining, charDist, isRTL),
|
|
@@ -1698,104 +1640,12 @@
|
|
|
1698
1640
|
}
|
|
1699
1641
|
}
|
|
1700
1642
|
|
|
1701
|
-
if (PUNCTUATION.test(
|
|
1643
|
+
if (PUNCTUATION.test(_char3)) {
|
|
1702
1644
|
return false;
|
|
1703
1645
|
}
|
|
1704
1646
|
|
|
1705
1647
|
return true;
|
|
1706
1648
|
};
|
|
1707
|
-
/**
|
|
1708
|
-
* Does `code` form Modifier with next one.
|
|
1709
|
-
*
|
|
1710
|
-
* https://emojipedia.org/modifiers/
|
|
1711
|
-
*/
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
var isModifier = function isModifier(code) {
|
|
1715
|
-
return code >= 0x1f3fb && code <= 0x1f3ff;
|
|
1716
|
-
};
|
|
1717
|
-
/**
|
|
1718
|
-
* Is `code` a Variation Selector.
|
|
1719
|
-
*
|
|
1720
|
-
* https://codepoints.net/variation_selectors
|
|
1721
|
-
*/
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
var isVariationSelector = function isVariationSelector(code) {
|
|
1725
|
-
return code <= 0xfe0f && code >= 0xfe00;
|
|
1726
|
-
};
|
|
1727
|
-
/**
|
|
1728
|
-
* Is `code` a code point used in keycap sequence.
|
|
1729
|
-
*
|
|
1730
|
-
* https://emojipedia.org/emoji-keycap-sequence/
|
|
1731
|
-
*/
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
var isKeycap = function isKeycap(code) {
|
|
1735
|
-
return code >= 0x30 && code <= 0x39 || // digits
|
|
1736
|
-
code === 0x23 || // number sign
|
|
1737
|
-
code === 0x2a;
|
|
1738
|
-
};
|
|
1739
|
-
/**
|
|
1740
|
-
* Is `code` a Combining Enclosing Keycap.
|
|
1741
|
-
*
|
|
1742
|
-
* https://emojipedia.org/combining-enclosing-keycap/
|
|
1743
|
-
*/
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
var isCombiningEnclosingKeycap = function isCombiningEnclosingKeycap(code) {
|
|
1747
|
-
return code === 0x20e3;
|
|
1748
|
-
};
|
|
1749
|
-
/**
|
|
1750
|
-
* Is `code` a Regional Indicator.
|
|
1751
|
-
*
|
|
1752
|
-
* https://en.wikipedia.org/wiki/Regional_indicator_symbol
|
|
1753
|
-
*/
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
var isRegionalIndicator = function isRegionalIndicator(code) {
|
|
1757
|
-
return code >= 0x1f1e6 && code <= 0x1f1ff;
|
|
1758
|
-
};
|
|
1759
|
-
/**
|
|
1760
|
-
* Is `code` a Zero Width Joiner.
|
|
1761
|
-
*
|
|
1762
|
-
* https://emojipedia.org/zero-width-joiner/
|
|
1763
|
-
*/
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
var isZWJ = function isZWJ(code) {
|
|
1767
|
-
return code === 0x200d;
|
|
1768
|
-
};
|
|
1769
|
-
/**
|
|
1770
|
-
* Is `code` a Black Flag.
|
|
1771
|
-
*
|
|
1772
|
-
* https://emojipedia.org/black-flag/
|
|
1773
|
-
*/
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
var isBlackFlag = function isBlackFlag(code) {
|
|
1777
|
-
return code === 0x1f3f4;
|
|
1778
|
-
};
|
|
1779
|
-
/**
|
|
1780
|
-
* Is `code` a Tag.
|
|
1781
|
-
*
|
|
1782
|
-
* https://emojipedia.org/emoji-tag-sequence/
|
|
1783
|
-
*/
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
var isTag = function isTag(code) {
|
|
1787
|
-
return code >= 0xe0000 && code <= 0xe007f;
|
|
1788
|
-
};
|
|
1789
|
-
/**
|
|
1790
|
-
* Is `code` a Cancel Tag.
|
|
1791
|
-
*
|
|
1792
|
-
* https://emojipedia.org/cancel-tag/
|
|
1793
|
-
*/
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
var isCancelTag = function isCancelTag(code) {
|
|
1797
|
-
return code === 0xe007f;
|
|
1798
|
-
};
|
|
1799
1649
|
/**
|
|
1800
1650
|
* Iterate on codepoints from right to left.
|
|
1801
1651
|
*/
|
|
@@ -1873,6 +1723,124 @@
|
|
|
1873
1723
|
return charCode >= 0xdc00 && charCode <= 0xdfff;
|
|
1874
1724
|
};
|
|
1875
1725
|
|
|
1726
|
+
var CodepointType;
|
|
1727
|
+
|
|
1728
|
+
(function (CodepointType) {
|
|
1729
|
+
CodepointType[CodepointType["None"] = 0] = "None";
|
|
1730
|
+
CodepointType[CodepointType["Extend"] = 1] = "Extend";
|
|
1731
|
+
CodepointType[CodepointType["ZWJ"] = 2] = "ZWJ";
|
|
1732
|
+
CodepointType[CodepointType["RI"] = 4] = "RI";
|
|
1733
|
+
CodepointType[CodepointType["Prepend"] = 8] = "Prepend";
|
|
1734
|
+
CodepointType[CodepointType["SpacingMark"] = 16] = "SpacingMark";
|
|
1735
|
+
CodepointType[CodepointType["L"] = 32] = "L";
|
|
1736
|
+
CodepointType[CodepointType["V"] = 64] = "V";
|
|
1737
|
+
CodepointType[CodepointType["T"] = 128] = "T";
|
|
1738
|
+
CodepointType[CodepointType["LV"] = 256] = "LV";
|
|
1739
|
+
CodepointType[CodepointType["LVT"] = 512] = "LVT";
|
|
1740
|
+
CodepointType[CodepointType["ExtPict"] = 1024] = "ExtPict";
|
|
1741
|
+
CodepointType[CodepointType["Any"] = 2048] = "Any";
|
|
1742
|
+
})(CodepointType || (CodepointType = {}));
|
|
1743
|
+
|
|
1744
|
+
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])$/;
|
|
1745
|
+
var rePrepend = /^(?:[\u0600-\u0605\u06DD\u070F\u0890\u0891\u08E2\u0D4E]|\uD804[\uDCBD\uDCCD\uDDC2\uDDC3]|\uD806[\uDD3F\uDD41\uDE3A\uDE84-\uDE89]|\uD807\uDD46)$/;
|
|
1746
|
+
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])$/;
|
|
1747
|
+
var reL = /^[\u1100-\u115F\uA960-\uA97C]$/;
|
|
1748
|
+
var reV = /^[\u1160-\u11A7\uD7B0-\uD7C6]$/;
|
|
1749
|
+
var reT = /^[\u11A8-\u11FF\uD7CB-\uD7FB]$/;
|
|
1750
|
+
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]$/;
|
|
1751
|
+
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]$/;
|
|
1752
|
+
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])$/;
|
|
1753
|
+
|
|
1754
|
+
var getCodepointType = function getCodepointType(_char4, code) {
|
|
1755
|
+
var type = CodepointType.Any;
|
|
1756
|
+
|
|
1757
|
+
if (_char4.search(reExtend) !== -1) {
|
|
1758
|
+
type |= CodepointType.Extend;
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
if (code === 0x200d) {
|
|
1762
|
+
type |= CodepointType.ZWJ;
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
if (code >= 0x1f1e6 && code <= 0x1f1ff) {
|
|
1766
|
+
type |= CodepointType.RI;
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
if (_char4.search(rePrepend) !== -1) {
|
|
1770
|
+
type |= CodepointType.Prepend;
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1773
|
+
if (_char4.search(reSpacingMark) !== -1) {
|
|
1774
|
+
type |= CodepointType.SpacingMark;
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
if (_char4.search(reL) !== -1) {
|
|
1778
|
+
type |= CodepointType.L;
|
|
1779
|
+
}
|
|
1780
|
+
|
|
1781
|
+
if (_char4.search(reV) !== -1) {
|
|
1782
|
+
type |= CodepointType.V;
|
|
1783
|
+
}
|
|
1784
|
+
|
|
1785
|
+
if (_char4.search(reT) !== -1) {
|
|
1786
|
+
type |= CodepointType.T;
|
|
1787
|
+
}
|
|
1788
|
+
|
|
1789
|
+
if (_char4.search(reLV) !== -1) {
|
|
1790
|
+
type |= CodepointType.LV;
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
if (_char4.search(reLVT) !== -1) {
|
|
1794
|
+
type |= CodepointType.LVT;
|
|
1795
|
+
}
|
|
1796
|
+
|
|
1797
|
+
if (_char4.search(reExtPict) !== -1) {
|
|
1798
|
+
type |= CodepointType.ExtPict;
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
return type;
|
|
1802
|
+
};
|
|
1803
|
+
|
|
1804
|
+
function intersects(x, y) {
|
|
1805
|
+
return (x & y) !== 0;
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
var NonBoundaryPairs = [// GB6
|
|
1809
|
+
[CodepointType.L, CodepointType.L | CodepointType.V | CodepointType.LV | CodepointType.LVT], // GB7
|
|
1810
|
+
[CodepointType.LV | CodepointType.V, CodepointType.V | CodepointType.T], // GB8
|
|
1811
|
+
[CodepointType.LVT | CodepointType.T, CodepointType.T], // GB9
|
|
1812
|
+
[CodepointType.Any, CodepointType.Extend | CodepointType.ZWJ], // GB9a
|
|
1813
|
+
[CodepointType.Any, CodepointType.SpacingMark], // GB9b
|
|
1814
|
+
[CodepointType.Prepend, CodepointType.Any], // GB11
|
|
1815
|
+
[CodepointType.ZWJ, CodepointType.ExtPict], // GB12 and GB13
|
|
1816
|
+
[CodepointType.RI, CodepointType.RI]];
|
|
1817
|
+
|
|
1818
|
+
function isBoundaryPair(left, right) {
|
|
1819
|
+
return NonBoundaryPairs.findIndex(function (r) {
|
|
1820
|
+
return intersects(left, r[0]) && intersects(right, r[1]);
|
|
1821
|
+
}) === -1;
|
|
1822
|
+
}
|
|
1823
|
+
|
|
1824
|
+
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$/;
|
|
1825
|
+
|
|
1826
|
+
var endsWithEmojiZWJ = function endsWithEmojiZWJ(str) {
|
|
1827
|
+
return str.search(endingEmojiZWJ) !== -1;
|
|
1828
|
+
};
|
|
1829
|
+
|
|
1830
|
+
var endingRIs = /(?:\uD83C[\uDDE6-\uDDFF])+$/g;
|
|
1831
|
+
|
|
1832
|
+
var endsWithOddNumberOfRIs = function endsWithOddNumberOfRIs(str) {
|
|
1833
|
+
var match = str.match(endingRIs);
|
|
1834
|
+
|
|
1835
|
+
if (match === null) {
|
|
1836
|
+
return false;
|
|
1837
|
+
} else {
|
|
1838
|
+
// A RI is represented by a surrogate pair.
|
|
1839
|
+
var numRIs = match[0].length / 2;
|
|
1840
|
+
return numRIs % 2 === 1;
|
|
1841
|
+
}
|
|
1842
|
+
};
|
|
1843
|
+
|
|
1876
1844
|
/**
|
|
1877
1845
|
* Shared the function with isElementType utility
|
|
1878
1846
|
*/
|
|
@@ -5516,8 +5484,6 @@
|
|
|
5516
5484
|
for (var i = 0; i < a.length; i++) {
|
|
5517
5485
|
if (a[i] !== b[i]) return false;
|
|
5518
5486
|
}
|
|
5519
|
-
|
|
5520
|
-
return true;
|
|
5521
5487
|
} else if (a !== b) {
|
|
5522
5488
|
return false;
|
|
5523
5489
|
}
|