@cantoo/fontkit 2.0.7 → 2.0.9
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/dist/browser-module.d.ts +27 -16
- package/dist/browser-module.mjs +20 -0
- package/dist/browser-module.mjs.map +1 -1
- package/dist/browser.cjs +20 -0
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +27 -16
- package/dist/fontkit.umd.d.ts +27 -16
- package/dist/fontkit.umd.js +21 -0
- package/dist/fontkit.umd.js.map +2 -2
- package/dist/fontkit.umd.min.js +11 -0
- package/dist/fontkit.umd.min.js.map +7 -0
- package/dist/index.d.ts +27 -16
- package/dist/main.cjs +22 -0
- package/dist/main.cjs.map +1 -1
- package/dist/main.d.ts +27 -16
- package/dist/module.d.ts +27 -16
- package/dist/module.mjs +22 -0
- package/dist/module.mjs.map +1 -1
- package/dist/unicode-properties/index.cjs +270 -0
- package/dist/unicode-properties/index.cjs.map +7 -0
- package/dist/unicode-properties/index.d.ts +37 -0
- package/dist/unicode-properties/index.mjs +246 -0
- package/dist/unicode-properties/index.mjs.map +7 -0
- package/dist/unicode-properties/index.umd.js +640 -0
- package/dist/unicode-properties/index.umd.js.map +7 -0
- package/dist/unicode-trie/builder.cjs +821 -0
- package/dist/unicode-trie/builder.cjs.map +7 -0
- package/dist/unicode-trie/builder.d.ts +19 -0
- package/dist/unicode-trie/builder.mjs +799 -0
- package/dist/unicode-trie/builder.mjs.map +7 -0
- package/dist/unicode-trie/index.cjs +125 -0
- package/dist/unicode-trie/index.cjs.map +7 -0
- package/dist/unicode-trie/index.d.ts +19 -0
- package/dist/unicode-trie/index.mjs +103 -0
- package/dist/unicode-trie/index.mjs.map +7 -0
- package/dist/unicode-trie/index.umd.js +498 -0
- package/dist/unicode-trie/index.umd.js.map +7 -0
- package/package.json +14 -10
- package/src/base.js +33 -0
- package/src/index.js +2 -1
- package/src/node.js +7 -1
- package/src/packages/unicode-properties/dist/index.d.ts +37 -0
- package/src/packages/unicode-properties/dist/index.umd.js +640 -0
- package/src/packages/unicode-properties/dist/index.umd.js.map +7 -0
- package/src/packages/unicode-properties/index.d.ts +37 -0
- package/src/packages/unicode-properties/package.json +6 -1
- package/src/packages/unicode-trie/builder.d.ts +19 -0
- package/src/packages/unicode-trie/dist/builder.d.ts +19 -0
- package/src/packages/unicode-trie/dist/index.d.ts +19 -0
- package/src/packages/unicode-trie/dist/index.umd.js +498 -0
- package/src/packages/unicode-trie/dist/index.umd.js.map +7 -0
- package/src/packages/unicode-trie/index.d.ts +19 -0
- package/src/packages/unicode-trie/package.json +8 -1
- package/types/index.d.ts +27 -16
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
// ../unicode-trie/index.js
|
|
2
|
+
import { inflateSync } from "fflate";
|
|
3
|
+
|
|
4
|
+
// ../unicode-trie/swap.js
|
|
5
|
+
var isBigEndian = new Uint8Array(new Uint32Array([305419896]).buffer)[0] === 18;
|
|
6
|
+
var swap = (b, n, m) => {
|
|
7
|
+
let i = b[n];
|
|
8
|
+
b[n] = b[m];
|
|
9
|
+
b[m] = i;
|
|
10
|
+
};
|
|
11
|
+
var swap32 = (array) => {
|
|
12
|
+
const len = array.length;
|
|
13
|
+
for (let i = 0; i < len; i += 4) {
|
|
14
|
+
swap(array, i, i + 3);
|
|
15
|
+
swap(array, i + 1, i + 2);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var swap32LE = (array) => {
|
|
19
|
+
if (isBigEndian) {
|
|
20
|
+
swap32(array);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// ../unicode-trie/index.js
|
|
25
|
+
function isNodeBuffer(value) {
|
|
26
|
+
return typeof value === "object" && value !== null && "readUInt32BE" in value && "readUInt32LE" in value && "slice" in value && typeof value.readUInt32BE === "function" && typeof value.readUInt32LE === "function" && typeof value.slice === "function";
|
|
27
|
+
}
|
|
28
|
+
var SHIFT_1 = 6 + 5;
|
|
29
|
+
var SHIFT_2 = 5;
|
|
30
|
+
var SHIFT_1_2 = SHIFT_1 - SHIFT_2;
|
|
31
|
+
var OMITTED_BMP_INDEX_1_LENGTH = 65536 >> SHIFT_1;
|
|
32
|
+
var INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
|
|
33
|
+
var INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
|
|
34
|
+
var INDEX_SHIFT = 2;
|
|
35
|
+
var DATA_BLOCK_LENGTH = 1 << SHIFT_2;
|
|
36
|
+
var DATA_MASK = DATA_BLOCK_LENGTH - 1;
|
|
37
|
+
var LSCP_INDEX_2_OFFSET = 65536 >> SHIFT_2;
|
|
38
|
+
var LSCP_INDEX_2_LENGTH = 1024 >> SHIFT_2;
|
|
39
|
+
var INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
|
|
40
|
+
var UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
|
|
41
|
+
var UTF8_2B_INDEX_2_LENGTH = 2048 >> 6;
|
|
42
|
+
var INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
|
|
43
|
+
var DATA_GRANULARITY = 1 << INDEX_SHIFT;
|
|
44
|
+
var UnicodeTrie = class {
|
|
45
|
+
/**
|
|
46
|
+
* @param {Uint8Array | Buffer | UnicodeTrieInit} data
|
|
47
|
+
*/
|
|
48
|
+
constructor(data) {
|
|
49
|
+
if (isNodeBuffer(data) || data instanceof Uint8Array) {
|
|
50
|
+
let bytes;
|
|
51
|
+
let uncompressedLength;
|
|
52
|
+
if (isNodeBuffer(data)) {
|
|
53
|
+
this.highStart = data.readUInt32LE(0);
|
|
54
|
+
this.errorValue = data.readUInt32LE(4);
|
|
55
|
+
uncompressedLength = data.readUInt32LE(8);
|
|
56
|
+
bytes = new Uint8Array(data.buffer, data.byteOffset + 12, data.byteLength - 12);
|
|
57
|
+
} else {
|
|
58
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
59
|
+
this.highStart = view.getUint32(0, true);
|
|
60
|
+
this.errorValue = view.getUint32(4, true);
|
|
61
|
+
uncompressedLength = view.getUint32(8, true);
|
|
62
|
+
bytes = data.subarray(12);
|
|
63
|
+
}
|
|
64
|
+
bytes = inflateSync(bytes, { out: new Uint8Array(uncompressedLength) });
|
|
65
|
+
swap32LE(bytes);
|
|
66
|
+
this.data = new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);
|
|
67
|
+
} else {
|
|
68
|
+
this.data = data.data;
|
|
69
|
+
this.highStart = data.highStart;
|
|
70
|
+
this.errorValue = data.errorValue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @param {number} codePoint
|
|
75
|
+
* @returns {number}
|
|
76
|
+
*/
|
|
77
|
+
get(codePoint) {
|
|
78
|
+
let index;
|
|
79
|
+
if (codePoint < 0 || codePoint > 1114111) {
|
|
80
|
+
return this.errorValue;
|
|
81
|
+
}
|
|
82
|
+
if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) {
|
|
83
|
+
index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
|
|
84
|
+
return this.data[index];
|
|
85
|
+
}
|
|
86
|
+
if (codePoint <= 65535) {
|
|
87
|
+
index = (this.data[LSCP_INDEX_2_OFFSET + (codePoint - 55296 >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
|
|
88
|
+
return this.data[index];
|
|
89
|
+
}
|
|
90
|
+
if (codePoint < this.highStart) {
|
|
91
|
+
index = this.data[INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> SHIFT_1)];
|
|
92
|
+
index = this.data[index + (codePoint >> SHIFT_2 & INDEX_2_MASK)];
|
|
93
|
+
index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
|
|
94
|
+
return this.data[index];
|
|
95
|
+
}
|
|
96
|
+
return this.data[this.data.length - DATA_GRANULARITY];
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
var unicode_trie_default = UnicodeTrie;
|
|
100
|
+
|
|
101
|
+
// data.js
|
|
102
|
+
var data_default = { categories: ["Cc", "Zs", "Po", "Sc", "Ps", "Pe", "Sm", "Pd", "Nd", "Lu", "Sk", "Pc", "Ll", "So", "Lo", "Pi", "Cf", "No", "Pf", "Lt", "Lm", "Mn", "Me", "Mc", "Nl", "Zl", "Zp", "Cs", "Co"], combiningClasses: ["Not_Reordered", "Above", "Above_Right", "Below", "Attached_Above_Right", "Attached_Below", "Overlay", "Iota_Subscript", "Double_Below", "Double_Above", "Below_Right", "Above_Left", "CCC10", "CCC11", "CCC12", "CCC13", "CCC14", "CCC15", "CCC16", "CCC17", "CCC18", "CCC19", "CCC20", "CCC21", "CCC22", "CCC23", "CCC24", "CCC25", "CCC30", "CCC31", "CCC32", "CCC27", "CCC28", "CCC29", "CCC33", "CCC34", "CCC35", "CCC36", "Nukta", "Virama", "CCC84", "CCC91", "CCC103", "CCC107", "CCC118", "CCC122", "CCC129", "CCC130", "CCC132", "Attached_Above", "Below_Left", "Left", "Kana_Voicing", "CCC26", "Right"], scripts: ["Common", "Latin", "Bopomofo", "Inherited", "Greek", "Coptic", "Cyrillic", "Armenian", "Hebrew", "Arabic", "Syriac", "Thaana", "Nko", "Samaritan", "Mandaic", "Devanagari", "Bengali", "Gurmukhi", "Gujarati", "Oriya", "Tamil", "Telugu", "Kannada", "Malayalam", "Sinhala", "Thai", "Lao", "Tibetan", "Myanmar", "Georgian", "Hangul", "Ethiopic", "Cherokee", "Canadian_Aboriginal", "Ogham", "Runic", "Tagalog", "Hanunoo", "Buhid", "Tagbanwa", "Khmer", "Mongolian", "Limbu", "Tai_Le", "New_Tai_Lue", "Buginese", "Tai_Tham", "Balinese", "Sundanese", "Batak", "Lepcha", "Ol_Chiki", "Braille", "Glagolitic", "Tifinagh", "Han", "Hiragana", "Katakana", "Yi", "Lisu", "Vai", "Bamum", "Syloti_Nagri", "Phags_Pa", "Saurashtra", "Kayah_Li", "Rejang", "Javanese", "Cham", "Tai_Viet", "Meetei_Mayek", "null", "Linear_B", "Lycian", "Carian", "Old_Italic", "Gothic", "Old_Permic", "Ugaritic", "Old_Persian", "Deseret", "Shavian", "Osmanya", "Osage", "Elbasan", "Caucasian_Albanian", "Linear_A", "Cypriot", "Imperial_Aramaic", "Palmyrene", "Nabataean", "Hatran", "Phoenician", "Lydian", "Meroitic_Hieroglyphs", "Meroitic_Cursive", "Kharoshthi", "Old_South_Arabian", "Old_North_Arabian", "Manichaean", "Avestan", "Inscriptional_Parthian", "Inscriptional_Pahlavi", "Psalter_Pahlavi", "Old_Turkic", "Old_Hungarian", "Hanifi_Rohingya", "Old_Sogdian", "Sogdian", "Elymaic", "Brahmi", "Kaithi", "Sora_Sompeng", "Chakma", "Mahajani", "Sharada", "Khojki", "Multani", "Khudawadi", "Grantha", "Newa", "Tirhuta", "Siddham", "Modi", "Takri", "Ahom", "Dogra", "Warang_Citi", "Nandinagari", "Zanabazar_Square", "Soyombo", "Pau_Cin_Hau", "Bhaiksuki", "Marchen", "Masaram_Gondi", "Gunjala_Gondi", "Makasar", "Cuneiform", "Egyptian_Hieroglyphs", "Anatolian_Hieroglyphs", "Mro", "Bassa_Vah", "Pahawh_Hmong", "Medefaidrin", "Miao", "Tangut", "Nushu", "Duployan", "SignWriting", "Nyiakeng_Puachue_Hmong", "Wancho", "Mende_Kikakui", "Adlam"], eaw: ["N", "Na", "A", "W", "H", "F"] };
|
|
103
|
+
|
|
104
|
+
// data-trie.js
|
|
105
|
+
var data_trie_default = "AAARAAAAAADwfAEA7d0LvCRVfeDx6q5+z71zHwMy+JqeEWQ0IKPrg/U1jYryiWhYNZ8lsu70wKL3E1EmxgeJxumBbOyoqxiJ70iPxHXQgfiIhihKDxNdTCBhGAigyd6+M6IEiCCzCRLiTn7/qjrdp6rr1d3VXU1yz/18P6ce513VXdXV1XU35AzjJJyK5+EV+BX8V2zDm3AR3oWdeB8+jI/jCnweV+Pr+DbauBG34E50cA8exM9h5A2jhHmsRxWbcTKejRfiZTgLr8PZOAdvwAV4M34T78al+AA+ik/jSuzBl/E1fAv78Vc4iB/iMO7DETwKs2AYFSzi8dhKGzcRPx3PwvPxQrwMZ+F1eD3Ow6/jbbgYDTRxGT6Gz+J/4xr8Ka7DX+Am3Ia/w2Hch5/hEWSKhlHGHI7DBpyEk/FsvBAvwyvxWpyL8/EmXARp+7uI34vfc+Y/RPwxfBZX4kv4Kr7prL+B+EbcgjvRwT14AEfwqMYs9VvjWHDi4zGHjc78k5z4JJyK52Gr4yX4ZbwyIWfjHNQdb8Rb8U68F7+HD+Ej+CR24yp8BX+Ob2E/vu+UdzNux9/jbtyLh/AwfoF82TBmcSzWo4rN2AIZW3Ea0y/AS/FKvBbn4nz8Ot6G38IuNHEZLsdn8MfYi6/hG/gOvoubcBvugrz+dCueZf/A/M/wCDIV9i/M4lg8CSfiFDwHL8IZeBV+FW/ABXgL3oHfwf/E/8Ll+DSuxJfwNXwL+/GXuNXxAxzC3fgxfop/wr8gu8ZeXiYuYQHH4AmOjdr003AKnoMX4Qy8Cr/qlPHfiP8HLsTb8R78Lj6IP8Cn0MIeXINv4Nv4bgTVD+VmZ9ltxD/0We91mDT34SE8gqNOe5XijGHMYB7rUdWchFPxXDwfNZyJsx3noI4l7IDsbxcT73Rcok17vR+X4RNoYQ+uwl78Kb6OP8P12A/1HnAj07fgTizjJ3gA/4RfONP5WfYxLOB4xxMgebyewvJVq1bF91So94+027Jq1apVq1atWrXqseMZeC5eOEVOxxk4C2fjnAhvwAWQa4dvIX4Hfsfxu/ggLodcC/kk8W58AX+Cr+KbuAF/iZtxO+7EMn6CB/DP+AXya/lciwUcj414Gk7F87AVr8Ar8Vqci/PxZlyEd+HdjkvxAejX11atWrVq1Xh9lPfdT+GP5D3buU6fls/ThjRdvWrVqkD6+fLXnfnriPfhe571f63Nnwh5ff8ty/4vfgz5nlrcy/RD2nyUh0n7ZL4flumjTr78HN+bYQHHo4rN0PM9g/nn4sV4OV6N1+JcnI83I+33n3+dtz1xge/w8Bn8HZ64yDwux20w1vH9FxpowziGeTTwZTyILceyDG/HXtyPkx/Hd4Jo4SbMHMdnC3wQN6HBNfQ2DL6Xq6EhsSxz4kNOrNvE91bnOc7HlfLdnCfNYZaZ7ANq/qVMX4r9MOn3SyGfAVqZZO13ynyU+AVsX5mWba+neQ/z0qbrnHjVqlWrVk3ev6b8HmzweSgtL+S4n3b9aX/+S9tvsv/9Ni6BzL+fWPkgLsdn8MfYi6/hW7ge+508ur9i2UHcgWX8BA/gYTwKkzFfg0Vn7B9PXMUJ2IwtOA2ybV6CX8bZeB3O9dle57MsyhvxVrzTJ/97WbYLv4+P4JPY7aS7ivgr+HMt3z6mv48DuAsruAcP4ueyP3PuKulKxHM4Do/HJjwdz8LznTTiJUyLM51lZxO/zjkXrmMJF2npw7zLJ91Olr0PH/JZ9zGWfRYtfAF/gj/Dt7Af38cB3IkOfoT78SB+DoPz8hJmoco8luknYSOehmfiebIer9DSKb/Cstfg9c6684jfiLf6pBXvZPm7camz/gPEH8bHcQW+gKvxdWf9t4m/G1CWuJl1t3rW/4D5Q7g3IN9DLP9n/H8U+CxSwSKOxwachFPxTERts/9Mmhfj5Xg1Xotf0/JtZ/oCvAXvwLtxaYxyrbEJSfdR1n0aV07Y5z1tupr5r+Pb+G5Ivptj9nlQt1Nu2n4wpr4N4hBtSMI/DNkX9Z3dKH5G3Y8gw7UAVW6e6QoW8Tg8GU/FM7Q0SXou5b4YL/eU/2rmxevwa9imrX8T0xf9B/cbYy7/t8a0vZO0izbKPdhBvujc4/37pLsMlw/gDx8D/f8j2qhciT2Qa3uTql+/L9/rWtohcduJ/w/x3+B2Z/6HxIcd9/m0+YiTTjzKtMm1SW+aNSxbxHF4Ek7EKXgO5vAinIFX4TU4ASrPWifP6zGDNzh5LsBb8A68B0vYgYuxE2/G+/BhfHxEV+BzTnwVvoxrffo5rdq09caQ9t7Cutvx9wP26W7S3/sYGIeHaKOfR5y2Z7h+XsY8xt2W9dRRxWatricyvSWk7tNYV8OZOBvnoO6kf1OMNl9EmrdDvU4vZrqBJuT1fxnxH0J+j/Rp5zuFLzjlXkP8DdzFe/R1xH/hU5/83kW+g5D4VuIfONOHiO91ph8i/hdnWveos8zkO4s1WMB6SJulrU9mWqWdY1qWqfkTmT/FWab3TU0/h3Uvgur7GU7aVxG/Bqr9r9fq+O/O9BuJL3Sm9bLfzrLf1vI+FqR9P964XOJsh7TbMQnvp69B606Ygval6Q9CxmYSPjUF7wfeNn1uwDGRfSjtPozii/T3qxrv+m+yLMh3pmD7jSrt+0nS9D22X+ohZ5Qwr1nvma9iszO9xYlPU+szOaOWhYkc8iigiBLKqEArT8pQ7GUnGGdOhN0XqVP6czbOseITjPpE2PVLv6X+LWlv+ikJJf7UfreeaTvOGUvW8hLbh4/JjNgO4outcSsZDSxZ207ikrGFZ180c3DS1528Vv6sLLfzX3aQ6QM4YqedZ4uc6WtzwPJB0tGuwPWyfDPtVKoeapk3jTd90HJh19+fX4/tttixmh80VvmjyhmkHjU+cfLb/fNfH1ZnbxsE96E3fuH9DKp/2HiQ/kfHQet6+0B0Pn3euyxunqA0cdsdt31+acQOn/bIMp2s/4SW33/auy8MFie3n/i3M2pMHstxkKD9KmhM4tfn9/48iFHzj0b26UnW14rEpboY5Dgux3c7lmUlZ53Eir7cPa3yuUl5Or0Oif3b219OzdGrK7jOQSxV9ySvhrqHLGv4LBctR9zlYdo+vGmi2t9x4qA8apkRsFzPo4+FzBtXETv6pgcf6wbvGw1eByqW/aLBdu3N26FhLZd0Ni7jW2m8QfLKfmGvs9Mo9vperOpoEo9KQth6vT6vZgKiyvGr192eoDa6t09Q3CJuDREHt2mLpw7/trZxoxMPQ/Kmqz6SthYPR8ZhGuIlo837gag7rHnjy4602zfOeNi8abd79FhCh+lJUKHDO0+HY4O/eurkuNXhmmGvvUuO9faC7Xu4Q9XDu+z0q/zT6en9+JVnlQWZ3kW8G/uwgswXWY7TsR27sNuxDyvIfAn0Z6PE3GV8OvF2Z1rVJdOSNypkuC41KZF102YxQKhmGn3kbKSa2aLhOptFtreaXrIxXqF2fcmo7sY+xtfKK+VLvdJOmefzTYrk/C5u2nrnS7wa9nIsQIPpFtqoMV+X5c6xgnPTKvuQ73joy7fvyVQztSxM5JBHAUWUUEYF2jZQnDY19qY+htPFGZuQfdLev332XbVtMrJPQC2XtO7tpuobYPvpbXReO0zXaO8wJNR4LdWkjN177TgNjEeN8bBiv2lFn/em0+eDYmu72UGvP/39bTT1qcX7WGw+x6Z4IdPg9QMTOeRRQBEllFGB0aCO1LEPBmI/tWLeN2xL4PN+l1xfsoOVlmOpaFHuWNAWF+rvW+a3PCCdCi36MiwJbdo2doyvokK7+54Z/71tHGEc7yFxyh1LX4LOcWIw5BjsPab6Tat5ZYVzyQznPBtFSP6AtnV4v+q5FjtS4tS/b68zL21RvO30a7dmRcpQ87x3O+eg6nzUnXeQ9sl2ss7TMx3ep2EihzwKKKKEMiogD58VeQ8ZdlyMrKDe7LU2CdayECoEzQ8qKq9ar4egNt2w11nm9Mci/dN0y9D6rM8fcsqICnpevzFxtdFVd8bI1rIwkUMeBRRRQhkVaPn5LJhdv2xkm3fgKA7iCBbAuiUnjaRlH9rU62eVem12e6uk8eMN3uVB+aJE5fXWFTRtzcv2tZZfq7H7199+9/LuOMj29aQLC0HtDQmZKtsXJnLIo4AiSiijAm3b6HXIfPzrCjXS2+ztW6OMKN50cfPFKStsfVDabl/YvvayazWqfz3+/XbSa9tXL3uY0Gtjr14C787Wn4kc8iigiBLKqIA8fH6U12VkHf19VPXViev0S9jzHHNCqBA0P6iovN66QtvE9rWXSX9UvyTu6bW312d9vu55/foFVXb/8qB2uurO1Nm6MJFDHgUUUUIZFZBnSfIfrGebB3AEy7gDRxHZThUa1N1w2iWxH3d69/I4adW0d5lfuqB6/JbH4Q0Nto1N+m1P+6+3l+vzDW37+5WtlxEzZBpsb5jIIY8CiiihjAqWd2WbHayA8vnM6YvPmnI89gkt+tuiXT0yvyOUnS94flCj5ldl9Poky6Qfit4/exvo673zrYjXcyt7tdHadLXvOPSnVet7dcn2bbF9YSKHPAooooQyKohoxzzlNCmnSTlNynFNs57vMKm7Tb1t+m2bd5YFkxA2P6hB8gelVaHN+7W9TPqi96vHLqO3zp5X61kesX31fMFpvG2V+nrbt832hYkc8iigiBLKqMBVxjChQ502Pvs5be5QVhhvmjh5xoLtYLHm7fbbVJ9sdvt6673zvTL63+PcdV570Uq2+XAn29xKfJj4LphM30bsSdurW7Znh+0JEznkUUARJZRRwTJldbCCg5R5AEewjDtw1K6H705Dto0VTPoprGmWJ0EPSZWplz1Iujjt0MNhn9esGiML20qx1qlYT+PDP2QMzqRhIoc8CiiihDIq8GnLYN+/SqjS13Tx+c41rXnp1Ta/8ef7/+Ay+f5M8p9PXp2r/PlMlXGGiRzyKKCIEsqoQNJa/EKN+oSa1pfpgpaPIqpOf3yWck1rLr3axnj3lvdeC8FtsL9fqF1JXp1ThhO4gmd9SpS/HPIooIgSyqggsL66hc8YXfMjUPm18s7nc49w1dGVqdN+mMghjwKKKKGMCg7UzebPsLDdbD4T/wW/gY/gKzggMet7derxpRJzN7TJnd/dmM95FjUG/iREpRmVN9T3X23UD4PtXDevcWIPWa+zltMfNf0UB/udtU3UvG8bfMoPYI9H/PTjYLfBd39y73cB69z5+/dj+X2brre8PzQYv+nBZ1cLn3ld/JZh/157HfuIpS//jkyD1ydM5JBHAUWUUEYFpOU7UV9x2+pdr7dVTy+8ZfgJKsuvrjjUOOptDqibfc9p3wDjp5ch+fmcj5bJfcxTQIKKvUFf3jK593pC5LusFsdJfdlNjHua2inrTAEJfsv8lvvlGzb/qPWPu3/DlDvu7WTVyXlBF+/ZEbIds2kihzwKKKKEMipYXjGbR7HhkNncim3YiStwPZbRYf0huN5LRu8Xn8VjCAw53sumQbc9vM/5cUI1dxp2TBnuhczx+S6Bsmo8RaBmxZNQxWbX7lBn+bRw7t0Qi/Vcex2OQYx8waHB+kH55+OcRfwo+rszPbTImwyuxwurfjVO0aFN3mRwvRiDhg55B+XNZ8/z3j1E/Uae/KmizRautXWn/cj6MHqasHIcd7OfWNPsJ11cc3HN8726tPHE3vUWg2/iYSKHPAooooQyKggabfI3yd8kf5P8TfI3yd8kf5P8TfI3yR/8vW6Vdgm1j6vpap7jgLOuh2tyXdbvNDJV2g8TOeRRQBEllFFBSP28L08NrkmmUG9Y8M+jtsGE2njBVYHtHNcxP26o0a602PVz/bSLe3lc+pf3t19P683vOOMqo8Z7Ru2C/vfjWt597lnjdQruwLTu8pEruDnIXwFFlFBGBUadfiRBhbB1cUKD9GkaV3sCQqbBdoKJHPIooIgSyqjYadzv4Q22uzBS1qJvY8M+32Kfb/EasPX2/xb7uWiTLn3cD0DberE/CW3OE9zpw/O403k56xmnMCq0L9iTabMvwUQOeRRQRAllVBC4v46Yn/bKNgvSClynQvc3lDq5l92Pvp7f5EvoMF5u3B/ANpyY73IvglWntx2qLSr2cpbffV1o+d7t1WF7wUQOeRRQRAllVEBersUE4hpHHOxrHV6vVhwkRjmuUGD/tXDsLNC/VEjdqh16e7TlP74OfAborrfyZgzusoWJHPIooIgSyqggsO7qtPgev6ehv1X6ZpNpRc2rdWA8RFSoFvhcoalRV7o43wrFeVgoLR1jpoea1T8XfiVj3Ykt37LnrDM09g/+iiihjAo85XTbm6mTHyZyyKOAIkooowKjTvrJ4Ck5vvjOE3Ge8RIWJv0dlbdOgz6Eigj6cUs+Z9d5XlbkscuznH+PYOcLwL8ccZF83mXddVZ5ap5yu23zP2dN7zl3bn7Ph5J9J87z6ZJmP+vLLV6awfvdHjLfpJ79N+5xdr0u/M4FfddfBe57kWU83y40X1J4Dl29Tr0W+xzcWs5z57ptk+eA8Jwfe2wn9RxNxU7n/5w13ZkR/POpEJSvt3489U9L+73P8PPG4+9/VP+i0n4iQvL53e3y9lfyyPMSZZ3EyqD5+/P5j0v/dg/LH2/79fL7bYe47bdDaQC9UmValKzndtlkukfOZeT56hfjMuvIL89n759Xz2FX6d34F1+4pVufm/1seD2fmta+m7Tq4dnuruX29DkOPa08d1/aJt+7essJI/lUmXHz2GPaz96CMWTkKZxybHNCnufWF1jGv8vm+xuD728Mvr8hjd0+xe7fZp6awTp5/r16Pv5A+SUMcxx2B/mtaLh5bVqe/x8nT3yjhe7xWp0/e4/j+rm1Wsa1JBfvMj29OtarZb7n86MEdV+p/D8Ce1rFsqw3L+8rMq/IvHtZyZp3l2XvL3o+pXc/q/0/Gtx12s+Y7c3bz0b35u/VL+t77fJ+TlHtUnn0duv7taL3T1F9scuRcx/iv+W1cSfuwq28dg7hNqZ/hP+HXMZo3k58LPEdrHsYx5WN5vOQldfeZqPN3d9t7vJo51FAESWUUcHy04z2DPEstm0y2p2NRrtOvEIcO3+V/PDmF9uZPkSszumKTrrzcJjlGflfGL3xcwf5HxL9etu0t23V2LrvZXYvC5r2E7Xeb98ahbv90k89HsZw7fLbX4PZ7ettG+86fZnf+rDlQcu8+0NQef77TnAdYWUH9Snu+IT1LWx5nPLjjk3Y/KiSLD/umI06dqO2Kx1Rr1917qTi4d4bZhxR71P+easIrnuyhn//TKbuSW//SfUhet/x24f0ef/9axBjD32fXVBECWVUsMy51gzxLNZiDvNYwCLW4RgclXOyhMvzPRdKgXzOS3oMrPPCQdvi3UeS7uug+2hS9Q3bDj39KP3yb0//+8Cg6bxpR+1v3O2Q3Plz/3vjjCPofTKs31GfK4KPy+6ygtrufW+OMuw4+21jv23gng4/rkQZpr1Jlaf3I06+Ycc3rKyw/SXqfSYoTZy8Qe8nYft1VLl6u/3S6sv06bjbMcnxH+c+GDSOg7YnbAzC0vTzfr6IFcc95ss1K1OuayEPv2vFy1zripvOt59pbV87r9+5tBqryX2O7P1fZf84qTY1Ckup8hvn/j6OGk/y83+adfvtq6O/pgY9ziVbbhJjEv+zctD7sN/xczxUGPf2ildPq8B9a1NCQqvAcxVSIiH6fx6H/a9iPb1fvrB7puy8w/7fweRiwX7hy5OW7ya7nGV+oSXPzeg50OK8oDs/wed3hD/bw36WiP89pb3lbe5hTVNYaHMfbTvGPaaB+bk/fRLPfwgLUfnHvV79z8a0eO9p6cX997v0T0eR+3i80978aj7qnMuvfLn3I+69Meq+oqA2Sj2D3J+jjBbu55x1EiZZV1Q7pmF8kgqDX19zh2M4+5thP+qR9rWId2TuL7S7361Fx6qOqHSnadNWviz1mMghjwKKKKGMirTjwto1xoXcO3wh9xFfWLvKuOn871js8qS9XlZ7lv+x0D6KDT+lDKdf3X6q88aZIsumkAoXNug7ZrjH0VKkHxbpy2nGycTTyB7nFtOK/zHxLLbJpEhI6llk2usvO8P1IeSQR+zX46T7Pur7R9IGDaPukzfxbKq0ELz7SQFFlFBGBcuzA+w/A5JrnvKd6IaK0dyKbdiJK3A9JM3jaMNxWI/j8Xg8AU/Ek/BkbFhrNKvEG7EJT8EJst+nOb4JjdGJ9OOpOAmbsZW+Pp34l3AyTsEzcCq24Jl4FraRbuT6Ty6mx359pduGqPG5n8+E0yBumFQ9QeEs3vOS1xpTucNx93dpasQJddo/Xlyl8sVvbdEgTbr4HaPVDmWk8jIN/oMXTOSQRwFFlFBGBd08SYc21wXt320PGnO9S66J8HuJHn4fHvdaiqTlXHv4+oeNpU447WgxplMg2yq2TeSQRwFFlFBGBRkYrZNos2Df8xMd5Hdn4yLXl6LYaUf/XWxSv7ON83vsoO8TossP7/OOhPsX9D1H2PcfUe23g195kw72eKnvY9T4ubV5Pdl4fXen8ROe26TP+6VJHM94skg9QqaXXDzhIPdlHMARuT8Dd+Co/fs/SSvkN3N9+bqhQ73p4nlDmshQ4hk8Fo5tqVD1x3QPz4QpyfcAUf2i76X5jMF/54SJHPIooAh+PFsro4Lg7Sn/0zoJgf+TWf6fs6Lm1bo9mSrth4kc8iigiBLKqMCoMpbjxbMWvJZ6rGeeMuY10iaHZwDFxjOD7ol+XpIearQ3qWt7g14HVKFO23t4fgz9Ts2N/G8aqw1Cb5dqm77cmWfM64zjoOzQytTZv2EihzwKKKKEMiro23aqnOD/DcLnBN91LgP8P5D+/BIajFv66K8v/neJxX8+TuivJ05bus9pzTTYvjCRQx4FFFFCGRVo9bFNddHbMELYfsA9eF0yr/7XS+//1bToU6o281lDxYL3Wtc6td4vn56XeNyhVz//A4ZtJ9rMx8f5GfuPTaaFlKHK4XOjheVyHhAzRN1vMer6YepW+aPWR382So79Gcn7vIr+dPIElF6eiBD0/zImZLD9b9zUPq3v39593bVvZ9q8f8JEDnnwTTfPi+X9E2VUEDj8YececUKbPEkZZ9nDtqFTujNV95Q6qRrguwXutwhdz70Tfcu4T2Ms36dwr0liZXHviCueNL9xG/p7n1HLCT8+DBY65PHyDXzWNXZfY8excM967LQaVVfQcn190HSEamI4Fo8giZBcXwan7qUcvZzR+jLuMHib+J/Qmd71xyVjz0jc9/J5qfvugq8jRj5DNID6/seuR+7JE+c44t5D2Guft71uqlzRWy6hP61+v2FQPUJ+Qy1p9d9Tq/LWu+qI2t7pv9ZUsJ+9dwzt7lnvma9iszO9xYlPU+szxxi1LEzkkEcBRZRQRgVaeVKGYi97Nt9tTILdF6lT+nM2zrHiZxv1ibDrl35L/RLbYztv/VWhpueNLVzbj0N+NRI37TipX7Pcwjl3WvQQlSbJ9XqwXz9Ctq/sY0vdZRLmmWfresiyQe511J+JqX6f54Qy7RnEMHnSKlsvb9Syhx2vpPKPa7z7QuBvQeL+Zv0oNmS5zxHbsBNX4HosoyO/ayeugi/fmnU00EJb1mOFNBnijTgd27ELu7FP1uOQ/I6eeBNegvNwCT6HG2Q9PF2I/N3nwYbRPoAsCth2Cc+CxHacB1m2vMte3iGWdSvEsj5o3SFIXlkn5Sqmh8rvtYG8UqZOyq86bfPS2yNp6U9THMIR8C7A9ezBZMjH2LjzDvc7XHfolZNWGPfviPup59VLqPI6nDQ91JhP2yiBsZzk+1J//bQ/Rdl6uVnA8vZyc9t55eD/QxrU5sboli8pt6PSdCSNX2ixfiyexndaHn6hTdo02HVzLwfTafKG6Dz8P/ly28TySrl9FB3E2u+sUOG+tFRxjXGMqhXeY1NUS4kTMvw3rSy4K4L/tyX/AVX+u1aF/7dV4f9tVWplyF/wexPbKEn95dcnyhsajFWaokKLNGkaJLQqce6nDg9t6pwWabY3qfEad+hQhx99fVi6pOh1eNvnml4zJhLWzGeNNZz7ruHcdw3nuGs4x13DeewaPj+v4fPxGv73CWnHh//zsGYpW6UNyCGPApY30hYYNdKlJSJka7QbOeQdBSyfTtvRwai7q1GnHUnRy/PrT532Y3k77UcHRoO0Y5BtUM8u6kEHJvM5uBrUWMMVXtJPgl9oUX+bdWnqjJknvHtlTfNAh+3grM8ybSKHPAooooQyKlgmz1FsOLSmuRXbsBNXQJXbYb3BfBU11NFAC210sEKaDPFGnI7t2IXd2CfrcYg0WeJNeAnOwyX4HG6Q9ThMGpP4KXgpzseluBL7ZT1+SLvvw6NYQ/on4JfwArwS5+LN0mZjhjGa4bOfIkGf9gZZfqGz/mSJJb/GShMyPy4qSJtuctroDffvzRozHA9mOB7McC1khmPCDMeEGY4JMxwTZvjtykzEe9oM51RRQkKVtk5YtjrT3LaJflVpW41lE5atMc6nM84w6iwLx/W/yDQjYh+p9+8f2foMxwfaup22ogPSc598gDihQX3TwN0m7gsP0CLtOKgxbvH6Qw55LO9mrNHBCvhPUxwXEuITsm3qRw55LO+jfnSwAqNDviSEhQ7jrBswZDv0ATnksbxCH9DBoGX1h1nanrYxhuosv/2cEsO1n2toUyIkZKuzfM6Z5XPOLMee2WaHeAVGje2bqlP4rZsmImRqs1yvm+V63SzX62a5XjfL9bpZrtfNcr1ulut1s1ytmw28XpetZvjsl+GzX4bPfhnGJNMsooQyKljemOGzYKa5YVOmuRXbsBNX4Hoso8N6g7iKGupooIW2rMcByjqIW3EIVgPq9HnCsvXZpokc8ihgefssx9TZ5obz2BeID7DMSh8VGqRJxFv4XZJgm3epebXOlm3Q3l20Fx2Qn2OjR1BoUde4xAntWX7/MMu9gVbMcXDipO4Y/pHfszOOQfqO2+xTyCGPAooooYwKlvexzbDhhtnmVmzDTlyB67GMDutXkGnzugZl8rsQXtegTH4XwusalMnvQoJf1/G2BX3s0FfbteDcYOKkXkW1RW8TpJ03S1s5H7E0tGnbIEHyd8Na9ttRBYeMsZavotfy+/S1/D59Lb9PX8vv09fy+/S1/D59Lb9PX8vv09cGb8fqM/j9tUJd6ZI2eF0bsBw/3WuRcagyDjCRQx4FFFFCGRWQjzsjXaReqaP7m9PQUCN9Yv56LzGfSS2h27kb6vTbxm+nyZMuaYOi2hWGdD/l99595fB50oW0jE0vX/f1l6mznWEihzwKKKKEMirQynWXT8gaJtdATK6BmFwDMbkfxOR+EJP7QUzuBzG5H8TkuojJdRGT+0FM7gcxuR/E5H4Qk/tBTO4HYT06rF9BrO2mQoP2JGH4svhtchfH+y5tGduowfjbyzne+7LPHVuUGUSt90sXlTfKYPmD37/brE8P5wGMeY/M+2BbtO33OW/ItHk9wEQOeRRQRAllVBDY/w7l2zgOOu+BHdoWppfXf35QUXm9dQWlqbc5hjNW9jK7P3rf9D7a5fjPd9j/9T4Fj53/McO/H566ON4GcZUVsT4yzNH+1NHvLtofykn3APu7vuxvZN5bLq9rt4wxx/nQHOdDc5wPzXE+NMf50BznQ3OcD81xPjTH+dCc83qQPCo+VerhXCB1nIt0cY7jS63T0+rpmWb8qoxZr1zOdWTMwkOmyvjBRA55FFBECWVUEFhAjTqmB8/06eJ6h6bXXj2Nno5pxrDGGNYYu/HxttndvjrL0sU5WxfnYqH0dMSMnz3NuVdX5D7o2h/r7I8wkUMeBRRRQhkVBBZQzbPfDyjJ0KC/04PzObZLL1bTPh7gHJB9X/KFbZ8G2wcmcsijgCJKKKOCRMdUDy3aNym9OrlfuOtah75MLfcsk2OaZ/xajB9M5JBHAUWUUEYFy7vn+J5ojv/rxGuoh2cQ0q50cd7axblqJNIxDm32rbY6/mqhM3dmynjOQHoyHfYHmMghjwKKKKGMCpZX2B+w4dAc92TMcU/GHPdkzHFPxlzzeixj4NdSR/bx+QgqRKUbCed7XRwLdd361TI9LR7kNWaVwb6lyppgqFJnlXbFI2nHiToYj/56OT/0bSfHvzAythGhRrk1yvLHOZVFXybpp0FQm8M4fWFcaoxPj5Snz9vSCHXakraw0GB9lLjpRsf5ENsziN2OoPXkZT+wy+H6mEfMkGnMcz41z/nUPOdT85xPzXM+Nc/51DznU/OcT81zPmWl4Z7Kee6pnG+SpkmaJmmapGmSpkkavsOb5zu8+eaGS+abW7ENO3EFrscyOqx3NaBFW22c8ySgVy7nP0Ow83IuFZpOX9+bjhPatDGIvj4q7Wg4L/Lhbqc9r69zpb+F8ymJ2QctTrlR+1ubfQkmcsijgCJKKKOCwAI61ONHXxeWLjlcX/Ow6+WamTMOvXWyjJhxUu0LGp8O4wMTOeRRQBEllFFB1DgPHxZoX2IYBwtjY+F9SQSHuUuyzYt2ZZsbMIeHG9nmA9jK9Kk4zPSy4y7cAZPlR4lvw0EccByBlGc0svw+PNR6j6j00YYJjSznPIzbNAgIZnWhnUMeBRRRQhmViHVBy7OIKtcvjZqPm09Pl30KMYLW6/M6Vb4i9ai6dH798fZBrdP7otLcikM4dmNv+g4cxO1OLA5oabduWmhvQ9BYWBuwyuvPa5AQcz8ZW6hR57Sw29OIFBbqlDMtJhEm8f9xwkKDfqaFkGkscC69wPn2AufbC5xvL3C+vcD59gLn2wucby9wvr3Qf3xv8DoVI48/7UhCt7wDnPt6DdDONmWl6pmcwwahH/24BurC871d7DQxQ6bN/gATOeRRQBEllFGBpF3et8D9dAvNQ/gRfox7cC/GNpbj3majhs4C11BTxXXU9GQ6C80sTOSQRwFFlFBGBcsrC80Z4lmsxRzmsYBFrMMxnrIon3sRNb5hkW04LfraxmcPax2fPaZFWLDaq+N/gQ3oZJwF9b+pJx1OZrzTNMn2DTU+nJ9Mw/9cHzaMWpb3/1VHhbMY5zR5Q51l08IvJFXOoOX10vN7Ut676rdiUY4Z8vlHN+kg52LjkET9E3rmX4PjDupttonDtb79nW4al75t5xb2vGz7mYLO8wVDnrU9tmcaeupLZ9sPHoZ4FuZ4MGZdY+6zFjI8GzHu8xNniGexFnPgzaa5gEWswzEYoglJ7icD7zdJPTvSrxxZJnFEE+R3spMgv2cdh3G0R8K465+W8fPrjwRVrwreab95ffmg/VFjHjX2g2ybJLZPUHlB/Y7T96g0g/YxidfPINvRuz+Msz//Hl5P42hnnHFPivzvkEmMVVg9j+V+jrNfg9TT3W847+J3LPwfFHDOwO9Y+D8o4NyD37EY/I6Fp6pi2tMZDT5/povz5amRVNvi9HmQ8VHTfKflMUrwa3vQ8rhGDa2n8n1YgKj1cQ1aV1DacYQW14bS5mrPs+hrEK6bB3FCprXI7ycW+f3EIr+fWOT3E4v8fmKR308s8vuJRX4/scjvJxat7+t8xmH0z9FtykkV46TJtBkPmMghjwKKKKGMCgL6st7oUGbanJDtLPLd1yLffS3yPdoi36Mt8j3aIt+jLfI92iLfoy3yndjbuJcvQKywjuPuVODYn4b/xDj5Oci9/uv6vq/KGOs47q/juL+O4/46jvvrOO6v47i/juP+Oo776zjur/PZv9ZxLBGjh8fi/xk6TBrTie9GPuCakLcfdHfpIPEBHLHn16t8Uq+UN8jYjfB/kpbijLmMo4yhjJmUK+2+Xb/Glfb/LtTrU9N62wZpT1h/vGV7g9+6oPzDtD9OeX75B9k2cfMkNbbDbm+/cY6qZ5z1DxKq/K9iMXxwX/OeGev19DjX2Cd+DT/B+pMqY7i89rYbqf5MifdmZGEihzwKKKKEMiqSjvdt4Ro9+d+QSVBtSro87z6RVPky9vp0HMP3ZRxhMq/3mWKv/8OEuGMbJk75w4Zh6kwy2HUN/r4RPWajj/vw22u8ZSc9VkFlT7r+OO3ym+8520f6+0Ga+6I+XtPQhlH2nST6kNhxYZzHnDGXH3e844xb2OvRnSZuGGacgvOH92m0+ocXHJI8NxguDN/2wcYv7fpHrSduGLze8bz/9perh0H2tTj74rj6kHTZo+4fUa/HUV+ro77u7y/sGJu06h8kDJMn6fanGUZseyWZvqdxX74K4feYj9uSsSdVo4Z7Sp1UBIR/Aw==";
|
|
106
|
+
|
|
107
|
+
// index.js
|
|
108
|
+
function decodeBase64(base64) {
|
|
109
|
+
if (typeof Buffer !== "undefined") {
|
|
110
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
111
|
+
}
|
|
112
|
+
const binary = atob(base64);
|
|
113
|
+
const bytes = new Uint8Array(binary.length);
|
|
114
|
+
for (let i = 0; i < binary.length; i++) {
|
|
115
|
+
bytes[i] = binary.charCodeAt(i);
|
|
116
|
+
}
|
|
117
|
+
return bytes;
|
|
118
|
+
}
|
|
119
|
+
var trie = new unicode_trie_default(decodeBase64(data_trie_default));
|
|
120
|
+
var log2 = Math.log2 || ((n) => Math.log(n) / Math.LN2);
|
|
121
|
+
var bits = (n) => log2(n) + 1 | 0;
|
|
122
|
+
var CATEGORY_BITS = bits(data_default.categories.length - 1);
|
|
123
|
+
var COMBINING_BITS = bits(data_default.combiningClasses.length - 1);
|
|
124
|
+
var SCRIPT_BITS = bits(data_default.scripts.length - 1);
|
|
125
|
+
var EAW_BITS = bits(data_default.eaw.length - 1);
|
|
126
|
+
var NUMBER_BITS = 10;
|
|
127
|
+
var CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS;
|
|
128
|
+
var COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS;
|
|
129
|
+
var SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS;
|
|
130
|
+
var EAW_SHIFT = NUMBER_BITS;
|
|
131
|
+
var CATEGORY_MASK = (1 << CATEGORY_BITS) - 1;
|
|
132
|
+
var COMBINING_MASK = (1 << COMBINING_BITS) - 1;
|
|
133
|
+
var SCRIPT_MASK = (1 << SCRIPT_BITS) - 1;
|
|
134
|
+
var EAW_MASK = (1 << EAW_BITS) - 1;
|
|
135
|
+
var NUMBER_MASK = (1 << NUMBER_BITS) - 1;
|
|
136
|
+
function getCategory(codePoint) {
|
|
137
|
+
const val = trie.get(codePoint);
|
|
138
|
+
return data_default.categories[val >> CATEGORY_SHIFT & CATEGORY_MASK];
|
|
139
|
+
}
|
|
140
|
+
function getCombiningClass(codePoint) {
|
|
141
|
+
const val = trie.get(codePoint);
|
|
142
|
+
return data_default.combiningClasses[val >> COMBINING_SHIFT & COMBINING_MASK];
|
|
143
|
+
}
|
|
144
|
+
function getScript(codePoint) {
|
|
145
|
+
const val = trie.get(codePoint);
|
|
146
|
+
return data_default.scripts[val >> SCRIPT_SHIFT & SCRIPT_MASK];
|
|
147
|
+
}
|
|
148
|
+
function getEastAsianWidth(codePoint) {
|
|
149
|
+
const val = trie.get(codePoint);
|
|
150
|
+
return data_default.eaw[val >> EAW_SHIFT & EAW_MASK];
|
|
151
|
+
}
|
|
152
|
+
function getNumericValue(codePoint) {
|
|
153
|
+
let val = trie.get(codePoint);
|
|
154
|
+
let num = val & NUMBER_MASK;
|
|
155
|
+
if (num === 0) {
|
|
156
|
+
return null;
|
|
157
|
+
} else if (num <= 50) {
|
|
158
|
+
return num - 1;
|
|
159
|
+
} else if (num < 480) {
|
|
160
|
+
const numerator = (num >> 4) - 12;
|
|
161
|
+
const denominator = (num & 15) + 1;
|
|
162
|
+
return numerator / denominator;
|
|
163
|
+
} else if (num < 768) {
|
|
164
|
+
val = (num >> 5) - 14;
|
|
165
|
+
let exp = (num & 31) + 2;
|
|
166
|
+
while (exp > 0) {
|
|
167
|
+
val *= 10;
|
|
168
|
+
exp--;
|
|
169
|
+
}
|
|
170
|
+
return val;
|
|
171
|
+
} else {
|
|
172
|
+
val = (num >> 2) - 191;
|
|
173
|
+
let exp = (num & 3) + 1;
|
|
174
|
+
while (exp > 0) {
|
|
175
|
+
val *= 60;
|
|
176
|
+
exp--;
|
|
177
|
+
}
|
|
178
|
+
return val;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function isAlphabetic(codePoint) {
|
|
182
|
+
const category = getCategory(codePoint);
|
|
183
|
+
return category === "Lu" || category === "Ll" || category === "Lt" || category === "Lm" || category === "Lo" || category === "Nl";
|
|
184
|
+
}
|
|
185
|
+
function isDigit(codePoint) {
|
|
186
|
+
return getCategory(codePoint) === "Nd";
|
|
187
|
+
}
|
|
188
|
+
function isPunctuation(codePoint) {
|
|
189
|
+
const category = getCategory(codePoint);
|
|
190
|
+
return category === "Pc" || category === "Pd" || category === "Pe" || category === "Pf" || category === "Pi" || category === "Po" || category === "Ps";
|
|
191
|
+
}
|
|
192
|
+
function isLowerCase(codePoint) {
|
|
193
|
+
return getCategory(codePoint) === "Ll";
|
|
194
|
+
}
|
|
195
|
+
function isUpperCase(codePoint) {
|
|
196
|
+
return getCategory(codePoint) === "Lu";
|
|
197
|
+
}
|
|
198
|
+
function isTitleCase(codePoint) {
|
|
199
|
+
return getCategory(codePoint) === "Lt";
|
|
200
|
+
}
|
|
201
|
+
function isWhiteSpace(codePoint) {
|
|
202
|
+
const category = getCategory(codePoint);
|
|
203
|
+
return category === "Zs" || category === "Zl" || category === "Zp";
|
|
204
|
+
}
|
|
205
|
+
function isBaseForm(codePoint) {
|
|
206
|
+
const category = getCategory(codePoint);
|
|
207
|
+
return category === "Nd" || category === "No" || category === "Nl" || category === "Lu" || category === "Ll" || category === "Lt" || category === "Lm" || category === "Lo" || category === "Me" || category === "Mc";
|
|
208
|
+
}
|
|
209
|
+
function isMark(codePoint) {
|
|
210
|
+
const category = getCategory(codePoint);
|
|
211
|
+
return category === "Mn" || category === "Me" || category === "Mc";
|
|
212
|
+
}
|
|
213
|
+
var index_default = {
|
|
214
|
+
getCategory,
|
|
215
|
+
getCombiningClass,
|
|
216
|
+
getScript,
|
|
217
|
+
getEastAsianWidth,
|
|
218
|
+
getNumericValue,
|
|
219
|
+
isAlphabetic,
|
|
220
|
+
isDigit,
|
|
221
|
+
isPunctuation,
|
|
222
|
+
isLowerCase,
|
|
223
|
+
isUpperCase,
|
|
224
|
+
isTitleCase,
|
|
225
|
+
isWhiteSpace,
|
|
226
|
+
isBaseForm,
|
|
227
|
+
isMark
|
|
228
|
+
};
|
|
229
|
+
export {
|
|
230
|
+
index_default as default,
|
|
231
|
+
getCategory,
|
|
232
|
+
getCombiningClass,
|
|
233
|
+
getEastAsianWidth,
|
|
234
|
+
getNumericValue,
|
|
235
|
+
getScript,
|
|
236
|
+
isAlphabetic,
|
|
237
|
+
isBaseForm,
|
|
238
|
+
isDigit,
|
|
239
|
+
isLowerCase,
|
|
240
|
+
isMark,
|
|
241
|
+
isPunctuation,
|
|
242
|
+
isTitleCase,
|
|
243
|
+
isUpperCase,
|
|
244
|
+
isWhiteSpace
|
|
245
|
+
};
|
|
246
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../unicode-trie/index.js", "../../unicode-trie/swap.js", "../data.js", "../data-trie.js", "../index.js"],
|
|
4
|
+
"sourcesContent": ["import { inflateSync } from 'fflate';\nimport { swap32LE } from './swap.js';\n\n/**\n * Pre-parsed trie payload (e.g. from UnicodeTrieBuilder.freeze).\n * @typedef {object} UnicodeTrieInit\n * @property {Int32Array | Uint32Array} data\n * @property {number} highStart\n * @property {number} errorValue\n */\n\n/**\n * Duck-type Node Buffer (has LE/BE readers + slice), matching prior runtime checks.\n * @param {unknown} value\n * @returns {value is Buffer}\n */\nfunction isNodeBuffer(value) {\n return (\n typeof value === 'object'\n && value !== null\n && 'readUInt32BE' in value\n && 'readUInt32LE' in value\n && 'slice' in value\n && typeof value.readUInt32BE === 'function'\n && typeof value.readUInt32LE === 'function'\n && typeof value.slice === 'function'\n );\n}\n\n// Shift size for getting the index-1 table offset.\nconst SHIFT_1 = 6 + 5;\n\n// Shift size for getting the index-2 table offset.\nconst SHIFT_2 = 5;\n\n// Difference between the two shift sizes,\n// for getting an index-1 offset from an index-2 offset. 6=11-5\nconst SHIFT_1_2 = SHIFT_1 - SHIFT_2;\n\n// Number of index-1 entries for the BMP. 32=0x20\n// This part of the index-1 table is omitted from the serialized form.\nconst OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;\n\n// Number of entries in an index-2 block. 64=0x40\nconst INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;\n\n// Mask for getting the lower bits for the in-index-2-block offset. */\nconst INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;\n\n// Shift size for shifting left the index array values.\n// Increases possible data size with 16-bit index values at the cost\n// of compactability.\n// This requires data blocks to be aligned by DATA_GRANULARITY.\nconst INDEX_SHIFT = 2;\n\n// Number of entries in a data block. 32=0x20\nconst DATA_BLOCK_LENGTH = 1 << SHIFT_2;\n\n// Mask for getting the lower bits for the in-data-block offset.\nconst DATA_MASK = DATA_BLOCK_LENGTH - 1;\n\n// The part of the index-2 table for U+D800..U+DBFF stores values for\n// lead surrogate code _units_ not code _points_.\n// Values for lead surrogate code _points_ are indexed with this portion of the table.\n// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)\nconst LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;\nconst LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;\n\n// Count the lengths of both BMP pieces. 2080=0x820\nconst INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;\n\n// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.\nconst UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;\nconst UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8\n\n// The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n// Variable length, for code points up to highStart, where the last single-value range starts.\n// Maximum length 512=0x200=0x100000>>SHIFT_1.\n// (For 0x100000 supplementary code points U+10000..U+10ffff.)\n//\n// The part of the index-2 table for supplementary code points starts\n// after this index-1 table.\n//\n// Both the index-1 table and the following part of the index-2 table\n// are omitted completely if there is only BMP data.\nconst INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;\n\n// The alignment size of a data block. Also the granularity for compaction.\nconst DATA_GRANULARITY = 1 << INDEX_SHIFT;\n\nclass UnicodeTrie {\n /**\n * @param {Uint8Array | Buffer | UnicodeTrieInit} data\n */\n constructor(data) {\n if (isNodeBuffer(data) || data instanceof Uint8Array) {\n // read binary format\n /** @type {Uint8Array} */\n let bytes;\n let uncompressedLength;\n if (isNodeBuffer(data)) {\n this.highStart = data.readUInt32LE(0);\n this.errorValue = data.readUInt32LE(4);\n uncompressedLength = data.readUInt32LE(8);\n // View past the 12-byte header (avoids Buffer.slice \u2192 Uint8Array assignability issues).\n bytes = new Uint8Array(data.buffer, data.byteOffset + 12, data.byteLength - 12);\n } else {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n this.highStart = view.getUint32(0, true);\n this.errorValue = view.getUint32(4, true);\n uncompressedLength = view.getUint32(8, true);\n bytes = data.subarray(12);\n }\n\n // inflate the actual trie data (raw deflate, matching builder)\n bytes = inflateSync(bytes, { out: new Uint8Array(uncompressedLength) });\n\n // swap bytes from little-endian\n swap32LE(bytes);\n\n /**\n * Compacted index + data table.\n * @type {Uint32Array | Int32Array}\n */\n this.data = new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength >> 2);\n } else {\n // pre-parsed data\n /**\n * Compacted index + data table.\n * @type {Uint32Array | Int32Array}\n */\n this.data = data.data;\n /**\n * First code point of the final single-value range.\n * @type {number}\n */\n this.highStart = data.highStart;\n /**\n * Value returned for out-of-range code points.\n * @type {number}\n */\n this.errorValue = data.errorValue;\n }\n }\n\n /**\n * @param {number} codePoint\n * @returns {number}\n */\n get(codePoint) {\n let index;\n if ((codePoint < 0) || (codePoint > 0x10ffff)) {\n return this.errorValue;\n }\n\n if ((codePoint < 0xd800) || ((codePoint > 0xdbff) && (codePoint <= 0xffff))) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the index.\n // data is stored in the index array itself.\n index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];\n index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];\n index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n return this.data[this.data.length - DATA_GRANULARITY];\n }\n}\n\nexport default UnicodeTrie;\n", "const isBigEndian = (new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12);\n\n/**\n * @param {Uint8Array} b\n * @param {number} n\n * @param {number} m\n */\nconst swap = (b, n, m) => {\n let i = b[n];\n b[n] = b[m];\n b[m] = i;\n};\n\n/**\n * @param {Uint8Array} array\n */\nconst swap32 = (array) => {\n const len = array.length;\n for (let i = 0; i < len; i += 4) {\n swap(array, i, i + 3);\n swap(array, i + 1, i + 2);\n }\n};\n\n/**\n * Swap byte order of each 32-bit word in-place when running on a big-endian host,\n * so the trie data is little-endian as expected by the runtime.\n * @param {Uint8Array} array\n */\nexport const swap32LE = (array) => {\n if (isBigEndian) {\n swap32(array);\n }\n};\n", "/**\n * Lookup tables packed into the unicode-properties trie.\n * @typedef {object} UnicodePropertiesTables\n * @property {string[]} categories\n * @property {string[]} combiningClasses\n * @property {string[]} scripts\n * @property {string[]} eaw\n */\n\n/**\n * @type {UnicodePropertiesTables}\n */\nexport default { categories: ['Cc', 'Zs', 'Po', 'Sc', 'Ps', 'Pe', 'Sm', 'Pd', 'Nd', 'Lu', 'Sk', 'Pc', 'Ll', 'So', 'Lo', 'Pi', 'Cf', 'No', 'Pf', 'Lt', 'Lm', 'Mn', 'Me', 'Mc', 'Nl', 'Zl', 'Zp', 'Cs', 'Co'], combiningClasses: ['Not_Reordered', 'Above', 'Above_Right', 'Below', 'Attached_Above_Right', 'Attached_Below', 'Overlay', 'Iota_Subscript', 'Double_Below', 'Double_Above', 'Below_Right', 'Above_Left', 'CCC10', 'CCC11', 'CCC12', 'CCC13', 'CCC14', 'CCC15', 'CCC16', 'CCC17', 'CCC18', 'CCC19', 'CCC20', 'CCC21', 'CCC22', 'CCC23', 'CCC24', 'CCC25', 'CCC30', 'CCC31', 'CCC32', 'CCC27', 'CCC28', 'CCC29', 'CCC33', 'CCC34', 'CCC35', 'CCC36', 'Nukta', 'Virama', 'CCC84', 'CCC91', 'CCC103', 'CCC107', 'CCC118', 'CCC122', 'CCC129', 'CCC130', 'CCC132', 'Attached_Above', 'Below_Left', 'Left', 'Kana_Voicing', 'CCC26', 'Right'], scripts: ['Common', 'Latin', 'Bopomofo', 'Inherited', 'Greek', 'Coptic', 'Cyrillic', 'Armenian', 'Hebrew', 'Arabic', 'Syriac', 'Thaana', 'Nko', 'Samaritan', 'Mandaic', 'Devanagari', 'Bengali', 'Gurmukhi', 'Gujarati', 'Oriya', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhala', 'Thai', 'Lao', 'Tibetan', 'Myanmar', 'Georgian', 'Hangul', 'Ethiopic', 'Cherokee', 'Canadian_Aboriginal', 'Ogham', 'Runic', 'Tagalog', 'Hanunoo', 'Buhid', 'Tagbanwa', 'Khmer', 'Mongolian', 'Limbu', 'Tai_Le', 'New_Tai_Lue', 'Buginese', 'Tai_Tham', 'Balinese', 'Sundanese', 'Batak', 'Lepcha', 'Ol_Chiki', 'Braille', 'Glagolitic', 'Tifinagh', 'Han', 'Hiragana', 'Katakana', 'Yi', 'Lisu', 'Vai', 'Bamum', 'Syloti_Nagri', 'Phags_Pa', 'Saurashtra', 'Kayah_Li', 'Rejang', 'Javanese', 'Cham', 'Tai_Viet', 'Meetei_Mayek', 'null', 'Linear_B', 'Lycian', 'Carian', 'Old_Italic', 'Gothic', 'Old_Permic', 'Ugaritic', 'Old_Persian', 'Deseret', 'Shavian', 'Osmanya', 'Osage', 'Elbasan', 'Caucasian_Albanian', 'Linear_A', 'Cypriot', 'Imperial_Aramaic', 'Palmyrene', 'Nabataean', 'Hatran', 'Phoenician', 'Lydian', 'Meroitic_Hieroglyphs', 'Meroitic_Cursive', 'Kharoshthi', 'Old_South_Arabian', 'Old_North_Arabian', 'Manichaean', 'Avestan', 'Inscriptional_Parthian', 'Inscriptional_Pahlavi', 'Psalter_Pahlavi', 'Old_Turkic', 'Old_Hungarian', 'Hanifi_Rohingya', 'Old_Sogdian', 'Sogdian', 'Elymaic', 'Brahmi', 'Kaithi', 'Sora_Sompeng', 'Chakma', 'Mahajani', 'Sharada', 'Khojki', 'Multani', 'Khudawadi', 'Grantha', 'Newa', 'Tirhuta', 'Siddham', 'Modi', 'Takri', 'Ahom', 'Dogra', 'Warang_Citi', 'Nandinagari', 'Zanabazar_Square', 'Soyombo', 'Pau_Cin_Hau', 'Bhaiksuki', 'Marchen', 'Masaram_Gondi', 'Gunjala_Gondi', 'Makasar', 'Cuneiform', 'Egyptian_Hieroglyphs', 'Anatolian_Hieroglyphs', 'Mro', 'Bassa_Vah', 'Pahawh_Hmong', 'Medefaidrin', 'Miao', 'Tangut', 'Nushu', 'Duployan', 'SignWriting', 'Nyiakeng_Puachue_Hmong', 'Wancho', 'Mende_Kikakui', 'Adlam'], eaw: ['N', 'Na', 'A', 'W', 'H', 'F'] };\n", "/** @type {string} */\nexport default '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';\n", "import UnicodeTrie from '../unicode-trie/index.js';\nimport data from './data.js';\nimport trieBase64 from './data-trie.js';\n\n/**\n * @param {string} base64\n * @returns {Uint8Array}\n */\nfunction decodeBase64(base64) {\n if (typeof Buffer !== 'undefined') {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n }\n\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nconst trie = new UnicodeTrie(decodeBase64(trieBase64));\n\n/** @type {(n: number) => number} */\nconst log2 = Math.log2 || (n => Math.log(n) / Math.LN2);\n/**\n * @param {number} n\n * @returns {number}\n */\nconst bits = n => ((log2(n) + 1) | 0);\n\n// compute the number of bits stored for each field\nconst CATEGORY_BITS = bits(data.categories.length - 1);\nconst COMBINING_BITS = bits(data.combiningClasses.length - 1);\nconst SCRIPT_BITS = bits(data.scripts.length - 1);\nconst EAW_BITS = bits(data.eaw.length - 1);\nconst NUMBER_BITS = 10;\n\n// compute shift and mask values for each field\nconst CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\nconst COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\nconst SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS;\nconst EAW_SHIFT = NUMBER_BITS;\nconst CATEGORY_MASK = (1 << CATEGORY_BITS) - 1;\nconst COMBINING_MASK = (1 << COMBINING_BITS) - 1;\nconst SCRIPT_MASK = (1 << SCRIPT_BITS) - 1;\nconst EAW_MASK = (1 << EAW_BITS) - 1;\nconst NUMBER_MASK = (1 << NUMBER_BITS) - 1;\n\n/**\n * @param {number} codePoint\n * @returns {string}\n */\nexport function getCategory(codePoint) {\n const val = trie.get(codePoint);\n return data.categories[(val >> CATEGORY_SHIFT) & CATEGORY_MASK];\n}\n\n/**\n * @param {number} codePoint\n * @returns {string}\n */\nexport function getCombiningClass(codePoint) {\n const val = trie.get(codePoint);\n return data.combiningClasses[(val >> COMBINING_SHIFT) & COMBINING_MASK];\n}\n\n/**\n * @param {number} codePoint\n * @returns {string}\n */\nexport function getScript(codePoint) {\n const val = trie.get(codePoint);\n return data.scripts[(val >> SCRIPT_SHIFT) & SCRIPT_MASK];\n}\n\n/**\n * @param {number} codePoint\n * @returns {string}\n */\nexport function getEastAsianWidth(codePoint) {\n const val = trie.get(codePoint);\n return data.eaw[(val >> EAW_SHIFT) & EAW_MASK];\n}\n\n/**\n * @param {number} codePoint\n * @returns {number | null}\n */\nexport function getNumericValue(codePoint) {\n let val = trie.get(codePoint);\n let num = val & NUMBER_MASK;\n\n if (num === 0) {\n return null;\n } else if (num <= 50) {\n return num - 1;\n } else if (num < 0x1e0) {\n const numerator = (num >> 4) - 12;\n const denominator = (num & 0xf) + 1;\n return numerator / denominator;\n } else if (num < 0x300) {\n val = (num >> 5) - 14;\n let exp = (num & 0x1f) + 2;\n\n while (exp > 0) {\n val *= 10;\n exp--;\n }\n return val;\n } else {\n val = (num >> 2) - 0xbf;\n let exp = (num & 3) + 1;\n while (exp > 0) {\n val *= 60;\n exp--;\n }\n return val;\n }\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isAlphabetic(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Lu'\n || category === 'Ll'\n || category === 'Lt'\n || category === 'Lm'\n || category === 'Lo'\n || category === 'Nl'\n );\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isDigit(codePoint) {\n return getCategory(codePoint) === 'Nd';\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isPunctuation(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Pc'\n || category === 'Pd'\n || category === 'Pe'\n || category === 'Pf'\n || category === 'Pi'\n || category === 'Po'\n || category === 'Ps'\n );\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isLowerCase(codePoint) {\n return getCategory(codePoint) === 'Ll';\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isUpperCase(codePoint) {\n return getCategory(codePoint) === 'Lu';\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isTitleCase(codePoint) {\n return getCategory(codePoint) === 'Lt';\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isWhiteSpace(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Zs'\n || category === 'Zl'\n || category === 'Zp'\n );\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isBaseForm(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Nd'\n || category === 'No'\n || category === 'Nl'\n || category === 'Lu'\n || category === 'Ll'\n || category === 'Lt'\n || category === 'Lm'\n || category === 'Lo'\n || category === 'Me'\n || category === 'Mc'\n );\n}\n\n/**\n * @param {number} codePoint\n * @returns {boolean}\n */\nexport function isMark(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Mn'\n || category === 'Me'\n || category === 'Mc'\n );\n}\n\n// Backwards compatibility.\nexport default {\n getCategory,\n getCombiningClass,\n getScript,\n getEastAsianWidth,\n getNumericValue,\n isAlphabetic,\n isDigit,\n isPunctuation,\n isLowerCase,\n isUpperCase,\n isTitleCase,\n isWhiteSpace,\n isBaseForm,\n isMark\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|