proskomma-cross
Version:
A Scripture Runtime Engine
894 lines • 1.25 MB
JavaScript
/*!
* XRegExp 5.1.1
* <xregexp.com>
* Steven Levithan (c) 2007-present MIT License
*/
const ze = "xregexp", rr = {
astral: !1,
namespacing: !0
}, pn = {};
let Xr = {}, Tr = {};
const Lo = [], _r = "default", Ja = "class", H2 = {
// Any native multicharacter token in default scope, or any single character
default: /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,
// Any native multicharacter token in character class scope, or any single character
class: /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/
}, W2 = /\$(?:\{([^\}]+)\}|<([^>]+)>|(\d\d?|[\s\S]?))/g, K2 = /()??/.exec("")[1] === void 0, X2 = /x/.flags !== void 0;
function gu(t) {
let e = !0;
try {
if (new RegExp("", t), t === "y") {
const n = (() => "gy")();
".a".replace(new RegExp("a", n), ".") === ".." && (e = !1);
}
} catch {
e = !1;
}
return e;
}
const z2 = gu("d"), Si = gu("s"), q1 = gu("u"), Fi = gu("y"), M1 = {
d: z2,
g: !0,
i: !0,
m: !0,
s: Si,
u: q1,
y: Fi
}, Y2 = Si ? /[^dgimsuy]+/g : /[^dgimuy]+/g;
function L1(t, e, n, r, u) {
if (t[ze] = {
captureNames: e
}, u)
return t;
if (t.__proto__)
t.__proto__ = R.prototype;
else
for (const s in R.prototype)
t[s] = R.prototype[s];
return t[ze].source = n, t[ze].flags = r && r.split("").sort().join(""), t;
}
function fu(t) {
return t.replace(/([\s\S])(?=[\s\S]*\1)/g, "");
}
function lr(t, e) {
if (!R.isRegExp(t))
throw new TypeError("Type RegExp expected");
const n = t[ze] || {};
let r = Z2(t), u = "", s = "", o = null, i = null;
return e = e || {}, e.removeG && (s += "g"), e.removeY && (s += "y"), s && (r = r.replace(new RegExp(`[${s}]+`, "g"), "")), e.addG && (u += "g"), e.addY && (u += "y"), u && (r = fu(r + u)), e.isInternalOnly || (n.source !== void 0 && (o = n.source), n.flags != null && (i = u ? fu(n.flags + u) : n.flags)), t = L1(
new RegExp(e.source || t.source, r),
Q2(t) ? n.captureNames.slice(0) : null,
o,
i,
e.isInternalOnly
), t;
}
function j1(t) {
return parseInt(t, 16);
}
function G1(t, e, n) {
const r = t.index + t[0].length, u = t.input[t.index - 1], s = t.input[r];
return (
// No need to separate tokens if at the beginning or end of a group, before or after a
// group, or before or after a `|`
/^[()|]$/.test(u) || /^[()|]$/.test(s) || // No need to separate tokens if at the beginning or end of the pattern
t.index === 0 || r === t.input.length || // No need to separate tokens if at the beginning of a noncapturing group or lookaround.
// Looks only at the last 4 chars (at most) for perf when constructing long regexes.
/\(\?(?:[:=!]|<[=!])$/.test(t.input.substring(t.index - 4, t.index)) || // Avoid separating tokens when the following token is a quantifier
ed(t.input, r, n) ? "" : "(?:)"
);
}
function Z2(t) {
return X2 ? t.flags : (
// Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation
// with an empty string) allows this to continue working predictably when
// `XRegExp.proptotype.toString` is overridden
/\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(t))[1]
);
}
function Q2(t) {
return !!(t[ze] && t[ze].captureNames);
}
function yi(t) {
return parseInt(t, 10).toString(16);
}
function ed(t, e, n) {
const r = "\\(\\?#[^)]*\\)", u = "#[^#\\n]*", s = "[?*+]|{\\d+(?:,\\d*)?}";
return (n.includes("x") ? (
// Ignore any leading whitespace, line comments, and inline comments
new RegExp(`^(?:\\s|${u}|${r})*(?:${s})`)
) : (
// Ignore any leading inline comments
new RegExp(`^(?:${r})*(?:${s})`)
)).test(t.slice(e));
}
function ls(t, e) {
return Object.prototype.toString.call(t) === `[object ${e}]`;
}
function Lr(t) {
if (t == null)
throw new TypeError("Cannot convert null or undefined to object");
return t;
}
function gi(t) {
for (; t.length < 4; )
t = `0${t}`;
return t;
}
function td(t, e) {
if (fu(e) !== e)
throw new SyntaxError(`Invalid duplicate regex flag ${e}`);
t = t.replace(/^\(\?([\w$]+)\)/, (n, r) => {
if (/[dgy]/.test(r))
throw new SyntaxError(`Cannot use flags dgy in mode modifier ${n}`);
return e = fu(e + r), "";
});
for (const n of e)
if (!M1[n])
throw new SyntaxError(`Unknown regex flag ${n}`);
return {
pattern: t,
flags: e
};
}
function U1(t) {
const e = {};
return ls(t, "String") ? (R.forEach(t, /[^\s,]+/, (n) => {
e[n] = !0;
}), e) : t;
}
function Ha(t) {
if (!/^[\w$]$/.test(t))
throw new Error("Flag must be a single character A-Za-z0-9_$");
M1[t] = !0;
}
function nd(t, e, n, r, u) {
let s = Lo.length;
const o = t[n];
let i = null, a, c;
for (; s--; )
if (c = Lo[s], !(c.leadChar && c.leadChar !== o || c.scope !== r && c.scope !== "all" || c.flag && !e.includes(c.flag)) && (a = R.exec(t, c.regex, n, "sticky"), a)) {
i = {
matchLength: a[0].length,
output: c.handler.call(u, a, r, e),
reparse: c.reparse
};
break;
}
return i;
}
function V1(t) {
rr.astral = t;
}
function J1(t) {
rr.namespacing = t;
}
function R(t, e) {
if (R.isRegExp(t)) {
if (e !== void 0)
throw new TypeError("Cannot supply flags when copying a RegExp");
return lr(t);
}
if (t = t === void 0 ? "" : String(t), e = e === void 0 ? "" : String(e), R.isInstalled("astral") && !e.includes("A") && (e += "A"), Tr[t] || (Tr[t] = {}), !Tr[t][e]) {
const r = {
hasNamedCapture: !1,
captureNames: []
};
let u = _r, s = "", o = 0, i;
const a = td(t, e);
let c = a.pattern;
const l = a.flags;
for (; o < c.length; ) {
do
i = nd(c, l, o, u, r), i && i.reparse && (c = c.slice(0, o) + i.output + c.slice(o + i.matchLength));
while (i && i.reparse);
if (i)
s += i.output, o += i.matchLength || 1;
else {
const [d] = R.exec(c, H2[u], o, "sticky");
s += d, o += d.length, d === "[" && u === _r ? u = Ja : d === "]" && u === Ja && (u = _r);
}
}
Tr[t][e] = {
// Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty
// groups are sometimes inserted during regex transpilation in order to keep tokens
// separated. However, more than one empty group in a row is never needed.
pattern: s.replace(/(?:\(\?:\))+/g, "(?:)"),
// Strip all but native flags
flags: l.replace(Y2, ""),
// `context.captureNames` has an item for each capturing group, even if unnamed
captures: r.hasNamedCapture ? r.captureNames : null
};
}
const n = Tr[t][e];
return L1(
new RegExp(n.pattern, n.flags),
n.captures,
t,
e
);
}
R.prototype = new RegExp();
R.version = "5.1.1";
R._clipDuplicates = fu;
R._hasNativeFlag = gu;
R._dec = j1;
R._hex = yi;
R._pad4 = gi;
R.addToken = (t, e, n) => {
n = n || {};
let { optionalFlags: r } = n;
if (n.flag && Ha(n.flag), r) {
r = r.split("");
for (const u of r)
Ha(u);
}
Lo.push({
regex: lr(t, {
addG: !0,
addY: Fi,
isInternalOnly: !0
}),
handler: e,
scope: n.scope || _r,
flag: n.flag,
reparse: n.reparse,
leadChar: n.leadChar
}), R.cache.flush("patterns");
};
R.cache = (t, e) => (Xr[t] || (Xr[t] = {}), Xr[t][e] || (Xr[t][e] = R(t, e)));
R.cache.flush = (t) => {
t === "patterns" ? Tr = {} : Xr = {};
};
R.escape = (t) => String(Lr(t)).replace(/[\\\[\]{}()*+?.^$|]/g, "\\$&").replace(/[\s#\-,]/g, (e) => `\\u${gi(yi(e.charCodeAt(0)))}`);
R.exec = (t, e, n, r) => {
let u = "g", s = !1, o = !1, i;
s = Fi && !!(r || e.sticky && r !== !1), s ? u += "y" : r && (o = !0, u += "FakeY"), e[ze] = e[ze] || {};
const a = e[ze][u] || (e[ze][u] = lr(e, {
addG: !0,
addY: s,
source: o ? `${e.source}|()` : void 0,
removeY: r === !1,
isInternalOnly: !0
}));
return n = n || 0, a.lastIndex = n, i = pn.exec.call(a, t), o && i && i.pop() === "" && (i = null), e.global && (e.lastIndex = i ? a.lastIndex : 0), i;
};
R.forEach = (t, e, n) => {
let r = 0, u = -1, s;
for (; s = R.exec(t, e, r); )
n(s, ++u, t, e), r = s.index + (s[0].length || 1);
};
R.globalize = (t) => lr(t, { addG: !0 });
R.install = (t) => {
t = U1(t), !rr.astral && t.astral && V1(!0), !rr.namespacing && t.namespacing && J1(!0);
};
R.isInstalled = (t) => !!rr[t];
R.isRegExp = (t) => Object.prototype.toString.call(t) === "[object RegExp]";
R.match = (t, e, n) => {
const r = e.global && n !== "one" || n === "all", u = (r ? "g" : "") + (e.sticky ? "y" : "") || "noGY";
e[ze] = e[ze] || {};
const s = e[ze][u] || (e[ze][u] = lr(e, {
addG: !!r,
removeG: n === "one",
isInternalOnly: !0
})), o = String(Lr(t)).match(s);
return e.global && (e.lastIndex = n === "one" && o ? (
// Can't use `r2.lastIndex` since `r2` is nonglobal in this case
o.index + o[0].length
) : 0), r ? o || [] : o && o[0];
};
R.matchChain = (t, e) => function n(r, u) {
const s = e[u].regex ? e[u] : { regex: e[u] }, o = [];
function i(a) {
if (s.backref) {
const c = `Backreference to undefined group: ${s.backref}`, l = isNaN(s.backref);
if (l && R.isInstalled("namespacing")) {
if (!(a.groups && s.backref in a.groups))
throw new ReferenceError(c);
} else if (!a.hasOwnProperty(s.backref))
throw new ReferenceError(c);
const d = l && R.isInstalled("namespacing") ? a.groups[s.backref] : a[s.backref];
o.push(d || "");
} else
o.push(a[0]);
}
for (const a of r)
R.forEach(a, s.regex, i);
return u === e.length - 1 || !o.length ? o : n(o, u + 1);
}([t], 0);
R.replace = (t, e, n, r) => {
const u = R.isRegExp(e), s = e.global && r !== "one" || r === "all", o = (s ? "g" : "") + (e.sticky ? "y" : "") || "noGY";
let i = e;
u ? (e[ze] = e[ze] || {}, i = e[ze][o] || (e[ze][o] = lr(e, {
addG: !!s,
removeG: r === "one",
isInternalOnly: !0
}))) : s && (i = new RegExp(R.escape(String(e)), "g"));
const a = pn.replace.call(Lr(t), i, n);
return u && e.global && (e.lastIndex = 0), a;
};
R.replaceEach = (t, e) => {
for (const n of e)
t = R.replace(t, n[0], n[1], n[2]);
return t;
};
R.split = (t, e, n) => pn.split.call(Lr(t), e, n);
R.test = (t, e, n, r) => !!R.exec(t, e, n, r);
R.uninstall = (t) => {
t = U1(t), rr.astral && t.astral && V1(!1), rr.namespacing && t.namespacing && J1(!1);
};
R.union = (t, e, n) => {
n = n || {};
const r = n.conjunction || "or";
let u = 0, s, o;
function i(d, p, f) {
const m = o[u - s];
if (p) {
if (++u, m)
return `(?<${m}>`;
} else if (f)
return `\\${+f + s}`;
return d;
}
if (!(ls(t, "Array") && t.length))
throw new TypeError("Must provide a nonempty array of patterns to merge");
const a = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g, c = [];
for (const d of t)
R.isRegExp(d) ? (s = u, o = d[ze] && d[ze].captureNames || [], c.push(R(d.source).source.replace(a, i))) : c.push(R.escape(d));
const l = r === "none" ? "" : "|";
return R(c.join(l), e);
};
pn.exec = function(t) {
const e = this.lastIndex, n = RegExp.prototype.exec.apply(this, arguments);
if (n) {
if (!K2 && n.length > 1 && n.includes("")) {
const r = lr(this, {
removeG: !0,
isInternalOnly: !0
});
String(t).slice(n.index).replace(r, (...u) => {
const s = u.length;
for (let o = 1; o < s - 2; ++o)
u[o] === void 0 && (n[o] = void 0);
});
}
if (this[ze] && this[ze].captureNames) {
let r = n;
R.isInstalled("namespacing") && (n.groups = /* @__PURE__ */ Object.create(null), r = n.groups);
for (let u = 1; u < n.length; ++u) {
const s = this[ze].captureNames[u - 1];
s && (r[s] = n[u]);
}
} else
!n.groups && R.isInstalled("namespacing") && (n.groups = void 0);
this.global && !n[0].length && this.lastIndex > n.index && (this.lastIndex = n.index);
}
return this.global || (this.lastIndex = e), n;
};
pn.test = function(t) {
return !!pn.exec.call(this, t);
};
pn.match = function(t) {
if (!R.isRegExp(t))
t = new RegExp(t);
else if (t.global) {
const e = String.prototype.match.apply(this, arguments);
return t.lastIndex = 0, e;
}
return pn.exec.call(t, Lr(this));
};
pn.replace = function(t, e) {
const n = R.isRegExp(t);
let r, u, s;
return n ? (t[ze] && ({ captureNames: u } = t[ze]), r = t.lastIndex) : t += "", ls(e, "Function") ? s = String(this).replace(t, (...o) => {
if (u) {
let i;
R.isInstalled("namespacing") ? (i = /* @__PURE__ */ Object.create(null), o.push(i)) : (o[0] = new String(o[0]), [i] = o);
for (let a = 0; a < u.length; ++a)
u[a] && (i[u[a]] = o[a + 1]);
}
return e(...o);
}) : s = String(Lr(this)).replace(t, (...o) => {
return String(e).replace(W2, i);
function i(a, c, l, d) {
c = c || l;
const p = ls(o[o.length - 1], "Object") ? 4 : 3, f = o.length - p;
if (c) {
if (/^\d+$/.test(c)) {
const C = +c;
if (C <= f)
return o[C] || "";
}
const m = u ? u.indexOf(c) : -1;
if (m < 0)
throw new SyntaxError(`Backreference to undefined group ${a}`);
return o[m + 1] || "";
}
if (d === "" || d === " ")
throw new SyntaxError(`Invalid token ${a}`);
if (d === "&" || +d == 0)
return o[0];
if (d === "$")
return "$";
if (d === "`")
return o[o.length - 1].slice(0, o[o.length - 2]);
if (d === "'")
return o[o.length - 1].slice(o[o.length - 2] + o[0].length);
if (d = +d, !isNaN(d)) {
if (d > f)
throw new SyntaxError(`Backreference to undefined group ${a}`);
return o[d] || "";
}
throw new SyntaxError(`Invalid token ${a}`);
}
}), n && (t.global ? t.lastIndex = 0 : t.lastIndex = r), s;
};
pn.split = function(t, e) {
if (!R.isRegExp(t))
return String.prototype.split.apply(this, arguments);
const n = String(this), r = [], u = t.lastIndex;
let s = 0, o;
return e = (e === void 0 ? -1 : e) >>> 0, R.forEach(n, t, (i) => {
i.index + i[0].length > s && (r.push(n.slice(s, i.index)), i.length > 1 && i.index < n.length && Array.prototype.push.apply(r, i.slice(1)), o = i[0].length, s = i.index + o);
}), s === n.length ? (!t.test("") || o) && r.push("") : r.push(n.slice(s)), t.lastIndex = u, r.length > e ? r.slice(0, e) : r;
};
R.addToken(
/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,
(t, e) => {
if (t[1] === "B" && e === _r)
return t[0];
throw new SyntaxError(`Invalid escape ${t[0]}`);
},
{
scope: "all",
leadChar: "\\"
}
);
R.addToken(
/\\u{([\dA-Fa-f]+)}/,
(t, e, n) => {
const r = j1(t[1]);
if (r > 1114111)
throw new SyntaxError(`Invalid Unicode code point ${t[0]}`);
if (r <= 65535)
return `\\u${gi(yi(r))}`;
if (q1 && n.includes("u"))
return t[0];
throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u");
},
{
scope: "all",
leadChar: "\\"
}
);
R.addToken(
/\(\?#[^)]*\)/,
G1,
{ leadChar: "(" }
);
R.addToken(
/\s+|#[^\n]*\n?/,
G1,
{ flag: "x" }
);
Si || R.addToken(
/\./,
() => "[\\s\\S]",
{
flag: "s",
leadChar: "."
}
);
R.addToken(
/\\k<([^>]+)>/,
function(t) {
const e = isNaN(t[1]) ? this.captureNames.indexOf(t[1]) + 1 : +t[1], n = t.index + t[0].length;
if (!e || e > this.captureNames.length)
throw new SyntaxError(`Backreference to undefined group ${t[0]}`);
return `\\${e}${n === t.input.length || isNaN(t.input[n]) ? "" : "(?:)"}`;
},
{ leadChar: "\\" }
);
R.addToken(
/\\(\d+)/,
function(t, e) {
if (!(e === _r && /^[1-9]/.test(t[1]) && +t[1] <= this.captureNames.length) && t[1] !== "0")
throw new SyntaxError(`Cannot use octal escape or backreference to undefined group ${t[0]}`);
return t[0];
},
{
scope: "all",
leadChar: "\\"
}
);
R.addToken(
/\(\?P?<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>/u,
function(t) {
if (!R.isInstalled("namespacing") && (t[1] === "length" || t[1] === "__proto__"))
throw new SyntaxError(`Cannot use reserved word as capture name ${t[0]}`);
if (this.captureNames.includes(t[1]))
throw new SyntaxError(`Cannot use same name for multiple groups ${t[0]}`);
return this.captureNames.push(t[1]), this.hasNamedCapture = !0, "(";
},
{ leadChar: "(" }
);
R.addToken(
/\((?!\?)/,
function(t, e, n) {
return n.includes("n") ? "(?:" : (this.captureNames.push(null), "(");
},
{
optionalFlags: "n",
leadChar: "("
}
);
/*!
* XRegExp.build 5.1.1
* <xregexp.com>
* Steven Levithan (c) 2012-present MIT License
*/
const rd = (t) => {
const e = "xregexp", n = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g, r = t.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, n], "g", {
conjunction: "or"
});
function u(c) {
const l = /^(?:\(\?:\))*\^/, d = /\$(?:\(\?:\))*$/;
return l.test(c) && d.test(c) && // Ensure that the trailing `$` isn't escaped
d.test(c.replace(/\\[\s\S]/g, "")) ? c.replace(l, "").replace(d, "") : c;
}
function s(c, l) {
const d = l ? "x" : "";
return t.isRegExp(c) ? c[e] && c[e].captureNames ? (
// Don't recompile, to preserve capture names
c
) : (
// Recompile as XRegExp
t(c.source, d)
) : (
// Compile string as XRegExp
t(c, d)
);
}
function o(c) {
return c instanceof RegExp ? c : t.escape(c);
}
function i(c, l, d) {
return c[`subpattern${d}`] = l, c;
}
function a(c, l, d) {
const p = l < d.length - 1;
return c + (p ? `{{subpattern${l}}}` : "");
}
t.tag = (c) => (l, ...d) => {
const p = d.map(o).reduce(i, {}), f = l.raw.map(a).join("");
return t.build(f, p, c);
}, t.build = (c, l, d) => {
d = d || "";
const p = d.includes("x"), f = /^\(\?([\w$]+)\)/.exec(c);
f && (d = t._clipDuplicates(d + f[1]));
const m = {};
for (const L in l)
if (l.hasOwnProperty(L)) {
const V = s(l[L], p);
m[L] = {
// Deanchoring allows embedding independently useful anchored regexes. If you
// really need to keep your anchors, double them (i.e., `^^...$$`).
pattern: u(V.source),
names: V[e].captureNames || []
};
}
const C = s(c, p);
let T = 0, S, b = 0;
const P = [0], O = C[e].captureNames || [], M = C.source.replace(r, (L, V, Q, x, se) => {
const de = V || Q;
let re, fe, ge;
if (de) {
if (!m.hasOwnProperty(de))
throw new ReferenceError(`Undefined property ${L}`);
V ? (re = O[b], P[++b] = ++T, fe = `(?<${re || de}>`) : fe = "(?:", S = T;
const je = m[de].pattern.replace(n, (Ye, he, st) => {
if (he) {
if (re = m[de].names[T - S], ++T, re)
return `(?<${re}>`;
} else if (st)
return ge = +st - 1, m[de].names[ge] ? (
// Need to preserve the backreference name in case using flag `n`
`\\k<${m[de].names[ge]}>`
) : `\\${+st + S}`;
return Ye;
});
return `${fe}${je})`;
}
if (x) {
if (re = O[b], P[++b] = ++T, re)
return `(?<${re}>`;
} else if (se)
return ge = +se - 1, O[ge] ? (
// Need to preserve the backreference name in case using flag `n`
`\\k<${O[ge]}>`
) : `\\${P[+se]}`;
return L;
});
return t(M, d);
};
};
/*!
* XRegExp.matchRecursive 5.1.1
* <xregexp.com>
* Steven Levithan (c) 2009-present MIT License
*/
const ud = (t) => {
function e(n, r, u, s) {
return {
name: n,
value: r,
start: u,
end: s
};
}
t.matchRecursive = (n, r, u, s, o) => {
s = s || "", o = o || {};
const i = s.includes("g"), a = s.includes("y"), c = s.replace(/y/g, "");
r = t(r, c), u = t(u, c);
let l, { escapeChar: d } = o;
if (d) {
if (d.length > 1)
throw new Error("Cannot use more than one escape character");
d = t.escape(d), l = new RegExp(
`(?:${d}[\\S\\s]|(?:(?!${// Using `XRegExp.union` safely rewrites backreferences in `left` and `right`.
// Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax
// transformation resulting from those flags was already applied to `left` and
// `right` when they were passed through the XRegExp constructor above.
t.union([r, u], "", { conjunction: "or" }).source})[^${d}])+)+`,
// Flags `dgy` not needed here
s.replace(t._hasNativeFlag("s") ? /[^imsu]/g : /[^imu]/g, "")
);
}
let p = 0, f = 0, m = 0, C = 0, T, S, b, P;
const O = o.valueNames, M = [];
for (; ; ) {
if (d && (m += (t.exec(n, l, m, "sticky") || [""])[0].length), b = t.exec(n, r, m), P = t.exec(n, u, m), b && P && (b.index <= P.index ? P = null : b = null), b || P)
f = (b || P).index, m = f + (b || P)[0].length;
else if (!p)
break;
if (a && !p && f > C)
break;
if (b)
p || (T = f, S = m), p += 1;
else if (P && p) {
if (p -= 1, !p && (O ? (O[0] && T > C && M.push(e(O[0], n.slice(C, T), C, T)), O[1] && M.push(e(O[1], n.slice(T, S), T, S)), O[2] && M.push(e(O[2], n.slice(S, f), S, f)), O[3] && M.push(e(O[3], n.slice(f, m), f, m))) : M.push(n.slice(S, f)), C = m, !i))
break;
} else {
const L = o.unbalanced || "error";
if (L === "skip" || L === "skip-lazy")
if (P)
P = null;
else {
if (L === "skip") {
const V = t.exec(n, r, T, "sticky")[0].length;
m = T + (V || 1);
} else
m = T + 1;
p = 0;
}
else if (L === "error") {
const V = P ? "right" : "left", Q = P ? f : T;
throw new Error(`Unbalanced ${V} delimiter found in string at position ${Q}`);
} else
throw new Error(`Unsupported value for unbalanced: ${L}`);
}
f === m && (m += 1);
}
return i && M.length > 0 && !a && O && O[0] && n.length > C && M.push(e(O[0], n.slice(C), C, n.length)), M;
};
};
/*!
* XRegExp Unicode Base 5.1.1
* <xregexp.com>
* Steven Levithan (c) 2008-present MIT License
*/
const sd = (t) => {
const e = {}, n = {}, r = t._dec, u = t._hex, s = t._pad4;
function o(p) {
return p.replace(/[- _]+/g, "").toLowerCase();
}
function i(p) {
const f = /^\\[xu](.+)/.exec(p);
return f ? r(f[1]) : p.charCodeAt(p[0] === "\\" ? 1 : 0);
}
function a(p) {
let f = "", m = -1;
return t.forEach(
p,
/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,
(C) => {
const T = i(C[1]);
T > m + 1 && (f += `\\u${s(u(m + 1))}`, T > m + 2 && (f += `-\\u${s(u(T - 1))}`)), m = i(C[2] || C[1]);
}
), m < 65535 && (f += `\\u${s(u(m + 1))}`, m < 65534 && (f += "-\\uFFFF")), f;
}
function c(p) {
const f = "b!";
return e[p][f] || (e[p][f] = a(e[p].bmp));
}
function l(p, f) {
const m = e[p];
let C = "";
return m.bmp && !m.isBmpLast && (C = `[${m.bmp}]${m.astral ? "|" : ""}`), m.astral && (C += m.astral), m.isBmpLast && m.bmp && (C += `${m.astral ? "|" : ""}[${m.bmp}]`), f ? `(?:(?!${C})(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-]))` : `(?:${C})`;
}
function d(p, f) {
const m = f ? "a!" : "a=";
return e[p][m] || (e[p][m] = l(p, f));
}
t.addToken(
// Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}`
/\\([pP])(?:{(\^?)(?:(\w+)=)?([^}]*)}|([A-Za-z]))/,
(p, f, m) => {
const C = "Invalid double negation ", T = "Unknown Unicode token ", S = "Unicode token missing data ", b = "Astral mode required for Unicode token ", P = "Astral mode does not support Unicode tokens within character classes", [
O,
M,
L,
V,
Q,
x
] = p;
let se = M === "P" || !!L;
const de = m.includes("A");
let re = o(x || Q), fe = e[re];
if (M === "P" && L)
throw new SyntaxError(C + O);
if (!e.hasOwnProperty(re))
throw new SyntaxError(T + O);
if (V && !(n[V] && n[V][re]))
throw new SyntaxError(T + O);
if (fe.inverseOf) {
if (re = o(fe.inverseOf), !e.hasOwnProperty(re))
throw new ReferenceError(`${S + O} -> ${fe.inverseOf}`);
fe = e[re], se = !se;
}
if (!(fe.bmp || de))
throw new SyntaxError(b + O);
if (de) {
if (f === "class")
throw new SyntaxError(P);
return d(re, se);
}
return f === "class" ? se ? c(re) : fe.bmp : `${(se ? "[^" : "[") + fe.bmp}]`;
},
{
scope: "all",
optionalFlags: "A",
leadChar: "\\"
}
), t.addUnicodeData = (p, f) => {
const m = "Unicode token requires name", C = "Unicode token has no character data ";
f && (n[f] = {});
for (const T of p) {
if (!T.name)
throw new Error(m);
if (!(T.inverseOf || T.bmp || T.astral))
throw new Error(C + T.name);
const S = o(T.name);
if (e[S] = T, f && (n[f][S] = !0), T.alias) {
const b = o(T.alias);
e[b] = T, f && (n[f][b] = !0);
}
}
t.cache.flush("patterns");
}, t._getUnicodeProperty = (p) => {
const f = o(p);
return e[f];
};
};
var tr = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
function H1(t) {
return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
}
function od(t) {
if (t.__esModule)
return t;
var e = t.default;
if (typeof e == "function") {
var n = function r() {
if (this instanceof r) {
var u = [null];
u.push.apply(u, arguments);
var s = Function.bind.apply(e, u);
return new s();
}
return e.apply(this, arguments);
};
n.prototype = e.prototype;
} else
n = {};
return Object.defineProperty(n, "__esModule", { value: !0 }), Object.keys(t).forEach(function(r) {
var u = Object.getOwnPropertyDescriptor(t, r);
Object.defineProperty(n, r, u.get ? u : {
enumerable: !0,
get: function() {
return t[r];
}
});
}), n;
}
var id = [
{
name: "C",
alias: "Other",
isBmpLast: !0,
bmp: "\0-------------------------------------ೳ---------໎------------------------------------------------------------------------------------------",
astral: "\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDF6F\uDF8A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC76-\uDC7E\uDCBD\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEBA-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF47-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF3-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDF4F\uDFC4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDEB-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD839[\uDC00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDC\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFEF\uDFF1-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7D-\uDE7F\uDE87-\uDE8F\uDEAD-\uDEAF\uDEBB-\uDEBF\uDEC6-\uDECF\uDEDA-\uDEDF\uDEE8-\uDEEF\uDEF7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF39-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]"
},
{
name: "Cc",
alias: "Control",
bmp: "\0--"
},
{
name: "Cf",
alias: "Format",
bmp: "-----\uFEFF-",
astral: "\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]"
},
{
name: "Cn",
alias: "Unassigned",
bmp: "-----------------------------------ೳ---------໎--------------------------------------------------------------------------------------",
astral: "\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDF6F\uDF8A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC76-\uDC7E\uDCC3-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEBA-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF47-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF3-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDF4F\uDFC4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDEB-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD839[\uDC00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDC\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFEF\uDFF1-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7D-\uDE7F\uDE87-\uDE8F\uDEAD-\uDEAF\uDEBB-\uDEBF\uDEC6-\uDECF\uDEDA-\uDEDF\uDEE8-\uDEEF\uDEF7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF39-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]"
},
{
name: "Co",
alias: "Private_Use",
bmp: "-",
astral: "[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]"
},
{
name: "Cs",
alias: "Surrogate",
bmp: "\uD800-\uDFFF"
},
{
name: "L",
alias: "Letter",
bmp: "A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",
astral: "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]"
},
{
name: "LC",
alias: "Cased_Letter",
bmp: "A-Za-zµÀ-ÖØ-öø-ƺƼ-ƿDŽ-ʓʕ-ʯͰ-ͳͶͷͻ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՠ-ֈႠ-ჅჇჍა-ჺჽ-ჿᎠ-Ᏽᏸ-ᏽᲀ-ᲈᲐ-ᲺᲽ-Ჿᴀ-ᴫᵫ-ᵷᵹ-ᶚḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℴℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-ⱻⱾ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭꙀ-ꙭꚀ-ꚛꜢ-ꝯꝱ-ꞇꞋ-ꞎꞐ-ꟊꟐꟑꟓꟕ-ꟙꟵꟶꟺꬰ-ꭚꭠ-ꭨꭰ-ꮿff-stﬓ-ﬗA-Za-z",
astral: "\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD00-\uDD43]"
},
{
name: "Ll",
alias: "Lowercase_Letter",
bmp: "a-zµß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌƍƒƕƙ-ƛƞơƣƥƨƪƫƭưƴƶƹƺƽ-ƿdžljnjǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿɀɂɇɉɋɍɏ-ʓʕ-ʯͱͳͷͻ-ͽΐά-ώϐϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯՠ-ֈა-ჺჽ-ჿᏸ-ᏽᲀ-ᲈᴀ-ᴫᵫ-ᵷᵹ-ᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷιῂ-ῄῆῇῐ-ΐῖῗῠ-ῧῲ-ῴῶῷℊℎℏℓℯℴℹℼℽⅆ-ⅉⅎↄⰰ-ⱟⱡⱥⱦⱨⱪⱬⱱⱳⱴⱶ-ⱻⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝱ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓ-ꞕꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩꞯꞵꞷꞹꞻꞽꞿꟁꟃꟈꟊꟑꟓꟕꟗꟙꟶꟺꬰ-ꭚꭠ-ꭨꭰ-ꮿff-stﬓ-ﬗa-z",
astral: "\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD22-\uDD43]"
},
{
name: "Lm",
alias: "Modifier_Letter",
bmp: "ʰ-ˁˆ-ˑˠ-ˤˬˮʹͺՙـۥۦߴߵߺࠚࠤࠨࣉॱๆໆჼៗᡃᪧᱸ-ᱽᴬ-ᵪᵸᶛ-ᶿⁱⁿₐ-ₜⱼⱽⵯⸯ々〱-〵〻ゝゞー-ヾꀕꓸ-ꓽꘌꙿꚜꚝꜗ-ꜟꝰꞈꟲ-ꟴꟸꟹꧏꧦꩰꫝꫳꫴꭜ-ꭟꭩー゙゚",
astral: "\uD801[\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD838[\uDD37-\uDD3D]|𞥋"
},
{
name: "Lo",
alias: "Other_Letter",
bmp: "ªºƻǀ-ǃʔא-תׯ-ײؠ-ؿف-يٮٯٱ-ۓەۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪࠀ-ࠕࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣈऄ-हऽॐक़-ॡॲ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๅກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎᄀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៜᠠ-ᡂᡄ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱷᳩ-ᳬᳮ-ᳳᳵᳶᳺℵ-ℸⴰ-ⵧⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ〆〼ぁ-ゖゟァ-ヺヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꀔꀖ-ꒌꓐ-ꓷꔀ-ꘋꘐ-ꘟꘪꘫꙮꚠ-ꛥꞏꟷꟻ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧠ-ꧤꧧ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩯꩱ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛꫜꫠ-ꫪꫲꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎יִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼヲ-ッア-ンᅠ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",
astral: "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|𝼊|\uD838[\uDD00-\uDD2C\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]"
},
{
name: "Lt",
alias: "Titlecase_Letter",
bmp: "DžLjNjDzᾈ-ᾏᾘ-ᾟᾨ-ᾯᾼῌῼ"
},
{
name: "Lu",
alias: "Uppercase_Letter",
bmp: "A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉ-ƋƎ-ƑƓƔƖ-ƘƜƝƟƠƢƤƦƧƩƬƮƯƱ-ƳƵƷƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃ-ɆɈɊɌɎͰͲͶͿΆΈ-ΊΌΎΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԨԪԬԮԱ-ՖႠ-ჅჇჍᎠ-ᏵᲐ-ᲺᲽ-ᲿḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾℿⅅↃⰀ-ⰯⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꚘꚚꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒꞖꞘꞚꞜꞞꞠꞢꞤꞦꞨꞪ-ꞮꞰ-ꞴꞶꞸꞺꞼꞾꟀꟂꟄ-ꟇꟉꟐꟖꟘꟵA-Z",
astral: "\uD801[\uDC00-\uDC27\uDCB0-\uDCD3\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]"
},
{
name: "M",
alias: "Mark",
bmp: "̀-ͯ҃-҉֑-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫