ref: 46fa16a5b71dac736cccd372bf82d33aff913f70
parent: 972b52f65248e3fb498069676c4f4707f4eb9457
parent: f91ae82c02cc2f453580ea019e3cda8cddf1380f
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Dec 28 11:29:15 EST 2013
Merge branch 'master' of git+ssh://git.eigenstate.org/git/ori/libregex
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@
MYRSRC= \
compile.myr \
interp.myr \
+ ranges.myr \
types.myr \
include config.mk
--- a/compile.myr
+++ b/compile.myr
@@ -1,6 +1,7 @@
use std
use "types.use"
+use "ranges.use"
pkg regex =
const compile : (re : byte[:] -> std.error(regex#, status))
@@ -426,14 +427,14 @@
astfree(ret)
-> `Fail (`Unbalanced)
;;
+ | '\\':
+ getc(re) /* consume the slash */
+ if re.pat.len == 0
+ -> `Fail (`Earlystop)
+ ;;
+ ret = escaped(re)
| c:
getc(re)
- if c == '\\'
- if re.pat.len == 0
- -> `Fail (`Earlystop)
- ;;
- c = getc(re)
- ;;
ret = mk(`Chr c)
;;
dump(re, ret, 0)
@@ -440,11 +441,61 @@
-> `Some ret
}
+const escaped = {re+ var ret
+
+ match getc(re)
+ /* character classes */
+ | 'd': ret = ranges(re, _ranges.tabasciidigit[:])
+ | 'x': ret = ranges(re, _ranges.tabasciixdigit[:])
+ | 's': ret = ranges(re, _ranges.tabasciispace[:])
+ | 'w': ret = ranges(re, _ranges.tabasciiword[:])
+ | 'h': ret = ranges(re, _ranges.tabasciiblank[:])
+
+ /* escaped metachars */
+ | '^': ret = mk(`Chr '^')
+ | '$': ret = mk(`Chr '$')
+ | '.': ret = mk(`Chr '.')
+ | '+': ret = mk(`Chr '+')
+ | '?': ret = mk(`Chr '?')
+
+ /* FIXME: implement this later.
+ | 'W': ret = negranges(re, _ranges.asciiword[:])
+ | 'S': ret = negranges(re, _ranges.asciispace[:])
+ | 'D': ret = negranges(re, _ranges.asciidigit[:])[:])
+ | 'X': ret = negranges(re, _ranges.xdigit[:])[:])
+ | 'H': ret = negranges(re, _ranges.asciihspace[:])
+ | 'p': unicodeclass(re)
+ | 'P': negate(unicodeclass(re))
+ */
+ ;;
+ -> ret
+}
+
+const ranges = {re, rng+ var ret
+ var lhs
+ var rhs
+
+ if rng.len == 1
+ ret = mk(`Class (rng[0][0], rng[0][1]))
+ else
+ lhs = ranges(re, rng[0:rng.len/2])
+ rhs = ranges(re, rng[rng.len/2:rng.len])
+ ret = mk(`Alt (lhs, rhs))
+ ;;
+ -> ret
+}
+
const chrclass = {revar r
var t
+ /* we know we saw '[' on entry */
matchc(re, '[')
+ if matchc(re, '^')
+ std.die("negation of character classes not yet supported")+ ;;
t = rangematch(re)
while peekc(re) != ']'
r = rangematch(re)
--- a/doc/myr-regex.3
+++ b/doc/myr-regex.3
@@ -46,6 +46,90 @@
within the string, instead of attempting to find a match spanning the whole
string.
+.SH REGEX SYNTAX
+.PP
+The grammar used by libregex is below:
+
+.EX
+ regex : altexpr
+ altexpr : catexpr ('|' altexpr)++ catexpr : repexpr (catexpr)+
+ repexpr : baseexpr[*+?]
+ baseexpr : literal
+ | charclass
+ | charrange
+ | '.'
+ | '^'
+ | '$'
+ | '(' regex ')'+ charclass : see below
+ charrange : '[' (literal('-' literal)?)+']'+.EE
+
+The following metacharacters have the meanings listed below:
+.TP
+.
+Matches a single unicode character
+.TP
+^
+Matches the beginning of a line. Does not consume any characters.
+.TP
+$
+Matches the end of a line. Does not consume any characters.
+.TP
+*
+Matches any number of repetitions of the preceding regex fragment.
+.TP
++
+Matches one or more repetitions of the preceding regex fragment.
+.TP
+?
+Matches zero or one of the preceding regex fragment.
+
+.PP
+In order to match a literal metacharacter, it needs to be preceded by
+a '\\' character.
+
+The following character classes are supported:
+.TP
+\\d
+ASCII digits
+.TP
+\\D
+Negation of ASCII digits
+.TP
+\\x
+ASCII Hex digits
+.TP
+\\X
+Negation of ASCII Hex digits
+.TP
+\\s
+ASCII spaces
+.TP
+\\S
+Negation of ASCII spaces
+.TP
+\\w
+ASCII word characters
+.TP
+\\W
+Negation of ASCII word characters
+.TP
+\\h
+ASCII whitespace characters
+.TP
+\\H
+Negation of ASCII whitespace characters
+.TP
+\\pX
+Characters with unicode property 'X'
+.TP
+\\PX
+.PP
+Negation of characters with unicode property 'X'. The only properties that
+are currently supported are 'Z' (space), 'L' (letter).
+
.SH EXAMPLE
.EX
use std
--- a/interp.myr
+++ b/interp.myr
@@ -15,6 +15,7 @@
run(re)
match re.matched
| `std.Some thr:
+ trace(re, thr, "mstart: %z, mend: %z, str.len: %z\n", thr.mstart[0], thr.mend[0], str.len)
if thr.mend[0] != str.len
-> `std.None
else
@@ -41,7 +42,8 @@
}
const run = {re- var i, consumed
+ var i, ip
+ var consumed
var thr
re.matched = `std.None
@@ -58,10 +60,11 @@
thr = re.runq
re.runq = thr.next
- trace(re, thr, "\nrunning tid=%z, ip=%z, c=%c\n", thr.tid, thr.ip, re.str[re.strp] castto(char))
- consumed = step(re, thr)
+ trace(re, thr, "\nrunning tid=%z, ip=%z, s[%z]=%c\n", thr.tid, thr.ip, re.strp, std.decode(re.str[re.strp:]))
+ ip = thr.ip
+ consumed = step(re, thr, -1)
while !consumed
- consumed = step(re, thr)
+ consumed = step(re, thr, ip)
;;
if thr.dead
@@ -71,11 +74,10 @@
re.expired = thr
;;
;;
+ trace(re, thr, "SWITCH\n")
re.runq = re.expired
re.expired = Zthr
- if re.nthr > 0
- re.strp++
- ;;
+ re.strp++
;;
}
@@ -83,7 +85,7 @@
Steps forward one instruction. Returns true if a byte of input was
consumed, false otherwise.
*/
-const step = {re, thr+const step = {re, thr, curipvar str
var mstart
var mend
@@ -142,7 +144,7 @@
trace(re, thr, "\t%z:\tFork (%z, %z)\n", thr.ip, lip, rip)
mstart = std.sldup(thr.mstart)
mend = std.sldup(thr.mend)
- fork(re, thr, rip, mstart, mend)
+ fork(re, thr, rip, curip, mstart, mend)
thr.ip = lip
-> false
| `Ijmp ip:
@@ -157,9 +159,12 @@
-> true
}
-const fork = {re, thr, ip, mstart, mend+const fork = {re, thr, ip, curip, mstart, mendvar thr
+ if ip == curip /* loop detection */
+ ->
+ ;;
thr = mkthread(re, ip)
thr.next = re.runq
thr.mstart = mstart
@@ -174,7 +179,7 @@
}
const finish = {re, thr- trace(re, thr, "finish %z\n", tid)
+ trace(re, thr, "finish %z\n", thr.tid)
match re.matched
| `std.Some t: thrfree(re, t)
| `std.None:
@@ -184,7 +189,7 @@
re.nthr--
}
-var tid = 0
+var nexttid = 0
const mkthread = {re, ipvar thr : rethread#
@@ -194,7 +199,7 @@
thr.next = Zthr
thr.ip = ip
- thr.tid = tid++
+ thr.tid = nexttid++
thr.dead = false
thr.matched = false
--- /dev/null
+++ b/ranges.myr
@@ -1,0 +1,2508 @@
+/*
+ This set of unicode tables was automatically generated
+ by the following command:
+ ./mkchartab -p _ranges -a UnicodeData.txt
+ editing it manually is probably a waste of time.
+*/
+
+pkg _ranges =
+ const tabasciialpha
+ const tabasciiupper
+ const tabasciilower
+ const tabasciiword
+ const tabasciidigit
+ const tabasciixdigit
+ const tabasciispace
+ const tabasciiblank
+ const tabalpha
+ const tabupper
+ const tablower
+ const tabtitle
+ const tabword
+ const tabdigit
+ const tabxdigit
+ const tabspace
+ const tabblank
+;;
+const tabasciialpha = [
+ ['\u{41}','\u{5a}'],+ ['\u{61}','\u{7a}'],+]
+
+const tabasciiupper = [
+ ['\u{41}','\u{5a}'],+]
+
+const tabasciilower = [
+ ['\u{61}','\u{7a}'],+]
+
+const tabasciiword = [
+ ['\u{30}','\u{39}'],+ ['\u{41}','\u{5a}'],+ ['\u{5f}','\u{5f}'],+ ['\u{61}','\u{7a}'],+]
+
+const tabasciidigit = [
+ ['\u{30}','\u{39}'],+]
+
+const tabasciixdigit = [
+ ['\u{30}','\u{39}'],+ ['\u{41}','\u{46}'],+ ['\u{61}','\u{66}'],+]
+
+const tabasciispace = [
+ ['\u{9}','\u{d}'],+ ['\u{20}','\u{20}'],+]
+
+const tabasciiblank = [
+ ['\u{9}','\u{9}'],+ ['\u{20}','\u{20}'],+]
+
+const tabalpha = [
+ ['\u{41}','\u{5a}'],+ ['\u{c0}','\u{d6}'],+ ['\u{d8}','\u{de}'],+ ['\u{100}','\u{100}'],+ ['\u{102}','\u{102}'],+ ['\u{104}','\u{104}'],+ ['\u{106}','\u{106}'],+ ['\u{108}','\u{108}'],+ ['\u{10a}','\u{10a}'],+ ['\u{10c}','\u{10c}'],+ ['\u{10e}','\u{10e}'],+ ['\u{110}','\u{110}'],+ ['\u{112}','\u{112}'],+ ['\u{114}','\u{114}'],+ ['\u{116}','\u{116}'],+ ['\u{118}','\u{118}'],+ ['\u{11a}','\u{11a}'],+ ['\u{11c}','\u{11c}'],+ ['\u{11e}','\u{11e}'],+ ['\u{120}','\u{120}'],+ ['\u{122}','\u{122}'],+ ['\u{124}','\u{124}'],+ ['\u{126}','\u{126}'],+ ['\u{128}','\u{128}'],+ ['\u{12a}','\u{12a}'],+ ['\u{12c}','\u{12c}'],+ ['\u{12e}','\u{12e}'],+ ['\u{130}','\u{130}'],+ ['\u{132}','\u{132}'],+ ['\u{134}','\u{134}'],+ ['\u{136}','\u{136}'],+ ['\u{139}','\u{139}'],+ ['\u{13b}','\u{13b}'],+ ['\u{13d}','\u{13d}'],+ ['\u{13f}','\u{13f}'],+ ['\u{141}','\u{141}'],+ ['\u{143}','\u{143}'],+ ['\u{145}','\u{145}'],+ ['\u{147}','\u{147}'],+ ['\u{14a}','\u{14a}'],+ ['\u{14c}','\u{14c}'],+ ['\u{14e}','\u{14e}'],+ ['\u{150}','\u{150}'],+ ['\u{152}','\u{152}'],+ ['\u{154}','\u{154}'],+ ['\u{156}','\u{156}'],+ ['\u{158}','\u{158}'],+ ['\u{15a}','\u{15a}'],+ ['\u{15c}','\u{15c}'],+ ['\u{15e}','\u{15e}'],+ ['\u{160}','\u{160}'],+ ['\u{162}','\u{162}'],+ ['\u{164}','\u{164}'],+ ['\u{166}','\u{166}'],+ ['\u{168}','\u{168}'],+ ['\u{16a}','\u{16a}'],+ ['\u{16c}','\u{16c}'],+ ['\u{16e}','\u{16e}'],+ ['\u{170}','\u{170}'],+ ['\u{172}','\u{172}'],+ ['\u{174}','\u{174}'],+ ['\u{176}','\u{176}'],+ ['\u{178}','\u{179}'],+ ['\u{17b}','\u{17b}'],+ ['\u{17d}','\u{17d}'],+ ['\u{181}','\u{182}'],+ ['\u{184}','\u{184}'],+ ['\u{186}','\u{187}'],+ ['\u{189}','\u{18b}'],+ ['\u{18e}','\u{191}'],+ ['\u{193}','\u{194}'],+ ['\u{196}','\u{198}'],+ ['\u{19c}','\u{19d}'],+ ['\u{19f}','\u{1a0}'],+ ['\u{1a2}','\u{1a2}'],+ ['\u{1a4}','\u{1a4}'],+ ['\u{1a6}','\u{1a7}'],+ ['\u{1a9}','\u{1a9}'],+ ['\u{1ac}','\u{1ac}'],+ ['\u{1ae}','\u{1af}'],+ ['\u{1b1}','\u{1b3}'],+ ['\u{1b5}','\u{1b5}'],+ ['\u{1b7}','\u{1b8}'],+ ['\u{1bc}','\u{1bc}'],+ ['\u{1c4}','\u{1c4}'],+ ['\u{1c7}','\u{1c7}'],+ ['\u{1ca}','\u{1ca}'],+ ['\u{1cd}','\u{1cd}'],+ ['\u{1cf}','\u{1cf}'],+ ['\u{1d1}','\u{1d1}'],+ ['\u{1d3}','\u{1d3}'],+ ['\u{1d5}','\u{1d5}'],+ ['\u{1d7}','\u{1d7}'],+ ['\u{1d9}','\u{1d9}'],+ ['\u{1db}','\u{1db}'],+ ['\u{1de}','\u{1de}'],+ ['\u{1e0}','\u{1e0}'],+ ['\u{1e2}','\u{1e2}'],+ ['\u{1e4}','\u{1e4}'],+ ['\u{1e6}','\u{1e6}'],+ ['\u{1e8}','\u{1e8}'],+ ['\u{1ea}','\u{1ea}'],+ ['\u{1ec}','\u{1ec}'],+ ['\u{1ee}','\u{1ee}'],+ ['\u{1f1}','\u{1f1}'],+ ['\u{1f4}','\u{1f4}'],+ ['\u{1f6}','\u{1f8}'],+ ['\u{1fa}','\u{1fa}'],+ ['\u{1fc}','\u{1fc}'],+ ['\u{1fe}','\u{1fe}'],+ ['\u{200}','\u{200}'],+ ['\u{202}','\u{202}'],+ ['\u{204}','\u{204}'],+ ['\u{206}','\u{206}'],+ ['\u{208}','\u{208}'],+ ['\u{20a}','\u{20a}'],+ ['\u{20c}','\u{20c}'],+ ['\u{20e}','\u{20e}'],+ ['\u{210}','\u{210}'],+ ['\u{212}','\u{212}'],+ ['\u{214}','\u{214}'],+ ['\u{216}','\u{216}'],+ ['\u{218}','\u{218}'],+ ['\u{21a}','\u{21a}'],+ ['\u{21c}','\u{21c}'],+ ['\u{21e}','\u{21e}'],+ ['\u{220}','\u{220}'],+ ['\u{222}','\u{222}'],+ ['\u{224}','\u{224}'],+ ['\u{226}','\u{226}'],+ ['\u{228}','\u{228}'],+ ['\u{22a}','\u{22a}'],+ ['\u{22c}','\u{22c}'],+ ['\u{22e}','\u{22e}'],+ ['\u{230}','\u{230}'],+ ['\u{232}','\u{232}'],+ ['\u{23a}','\u{23b}'],+ ['\u{23d}','\u{23e}'],+ ['\u{241}','\u{241}'],+ ['\u{243}','\u{246}'],+ ['\u{248}','\u{248}'],+ ['\u{24a}','\u{24a}'],+ ['\u{24c}','\u{24c}'],+ ['\u{24e}','\u{24e}'],+ ['\u{370}','\u{370}'],+ ['\u{372}','\u{372}'],+ ['\u{376}','\u{376}'],+ ['\u{386}','\u{386}'],+ ['\u{388}','\u{38a}'],+ ['\u{38c}','\u{38c}'],+ ['\u{38e}','\u{38f}'],+ ['\u{391}','\u{3a1}'],+ ['\u{3a3}','\u{3ab}'],+ ['\u{3cf}','\u{3cf}'],+ ['\u{3d2}','\u{3d4}'],+ ['\u{3d8}','\u{3d8}'],+ ['\u{3da}','\u{3da}'],+ ['\u{3dc}','\u{3dc}'],+ ['\u{3de}','\u{3de}'],+ ['\u{3e0}','\u{3e0}'],+ ['\u{3e2}','\u{3e2}'],+ ['\u{3e4}','\u{3e4}'],+ ['\u{3e6}','\u{3e6}'],+ ['\u{3e8}','\u{3e8}'],+ ['\u{3ea}','\u{3ea}'],+ ['\u{3ec}','\u{3ec}'],+ ['\u{3ee}','\u{3ee}'],+ ['\u{3f4}','\u{3f4}'],+ ['\u{3f7}','\u{3f7}'],+ ['\u{3f9}','\u{3fa}'],+ ['\u{3fd}','\u{42f}'],+ ['\u{460}','\u{460}'],+ ['\u{462}','\u{462}'],+ ['\u{464}','\u{464}'],+ ['\u{466}','\u{466}'],+ ['\u{468}','\u{468}'],+ ['\u{46a}','\u{46a}'],+ ['\u{46c}','\u{46c}'],+ ['\u{46e}','\u{46e}'],+ ['\u{470}','\u{470}'],+ ['\u{472}','\u{472}'],+ ['\u{474}','\u{474}'],+ ['\u{476}','\u{476}'],+ ['\u{478}','\u{478}'],+ ['\u{47a}','\u{47a}'],+ ['\u{47c}','\u{47c}'],+ ['\u{47e}','\u{47e}'],+ ['\u{480}','\u{480}'],+ ['\u{48a}','\u{48a}'],+ ['\u{48c}','\u{48c}'],+ ['\u{48e}','\u{48e}'],+ ['\u{490}','\u{490}'],+ ['\u{492}','\u{492}'],+ ['\u{494}','\u{494}'],+ ['\u{496}','\u{496}'],+ ['\u{498}','\u{498}'],+ ['\u{49a}','\u{49a}'],+ ['\u{49c}','\u{49c}'],+ ['\u{49e}','\u{49e}'],+ ['\u{4a0}','\u{4a0}'],+ ['\u{4a2}','\u{4a2}'],+ ['\u{4a4}','\u{4a4}'],+ ['\u{4a6}','\u{4a6}'],+ ['\u{4a8}','\u{4a8}'],+ ['\u{4aa}','\u{4aa}'],+ ['\u{4ac}','\u{4ac}'],+ ['\u{4ae}','\u{4ae}'],+ ['\u{4b0}','\u{4b0}'],+ ['\u{4b2}','\u{4b2}'],+ ['\u{4b4}','\u{4b4}'],+ ['\u{4b6}','\u{4b6}'],+ ['\u{4b8}','\u{4b8}'],+ ['\u{4ba}','\u{4ba}'],+ ['\u{4bc}','\u{4bc}'],+ ['\u{4be}','\u{4be}'],+ ['\u{4c0}','\u{4c1}'],+ ['\u{4c3}','\u{4c3}'],+ ['\u{4c5}','\u{4c5}'],+ ['\u{4c7}','\u{4c7}'],+ ['\u{4c9}','\u{4c9}'],+ ['\u{4cb}','\u{4cb}'],+ ['\u{4cd}','\u{4cd}'],+ ['\u{4d0}','\u{4d0}'],+ ['\u{4d2}','\u{4d2}'],+ ['\u{4d4}','\u{4d4}'],+ ['\u{4d6}','\u{4d6}'],+ ['\u{4d8}','\u{4d8}'],+ ['\u{4da}','\u{4da}'],+ ['\u{4dc}','\u{4dc}'],+ ['\u{4de}','\u{4de}'],+ ['\u{4e0}','\u{4e0}'],+ ['\u{4e2}','\u{4e2}'],+ ['\u{4e4}','\u{4e4}'],+ ['\u{4e6}','\u{4e6}'],+ ['\u{4e8}','\u{4e8}'],+ ['\u{4ea}','\u{4ea}'],+ ['\u{4ec}','\u{4ec}'],+ ['\u{4ee}','\u{4ee}'],+ ['\u{4f0}','\u{4f0}'],+ ['\u{4f2}','\u{4f2}'],+ ['\u{4f4}','\u{4f4}'],+ ['\u{4f6}','\u{4f6}'],+ ['\u{4f8}','\u{4f8}'],+ ['\u{4fa}','\u{4fa}'],+ ['\u{4fc}','\u{4fc}'],+ ['\u{4fe}','\u{4fe}'],+ ['\u{500}','\u{500}'],+ ['\u{502}','\u{502}'],+ ['\u{504}','\u{504}'],+ ['\u{506}','\u{506}'],+ ['\u{508}','\u{508}'],+ ['\u{50a}','\u{50a}'],+ ['\u{50c}','\u{50c}'],+ ['\u{50e}','\u{50e}'],+ ['\u{510}','\u{510}'],+ ['\u{512}','\u{512}'],+ ['\u{514}','\u{514}'],+ ['\u{516}','\u{516}'],+ ['\u{518}','\u{518}'],+ ['\u{51a}','\u{51a}'],+ ['\u{51c}','\u{51c}'],+ ['\u{51e}','\u{51e}'],+ ['\u{520}','\u{520}'],+ ['\u{522}','\u{522}'],+ ['\u{524}','\u{524}'],+ ['\u{526}','\u{526}'],+ ['\u{531}','\u{556}'],+ ['\u{10a0}','\u{10c5}'],+ ['\u{10c7}','\u{10c7}'],+ ['\u{10cd}','\u{10cd}'],+ ['\u{1e00}','\u{1e00}'],+ ['\u{1e02}','\u{1e02}'],+ ['\u{1e04}','\u{1e04}'],+ ['\u{1e06}','\u{1e06}'],+ ['\u{1e08}','\u{1e08}'],+ ['\u{1e0a}','\u{1e0a}'],+ ['\u{1e0c}','\u{1e0c}'],+ ['\u{1e0e}','\u{1e0e}'],+ ['\u{1e10}','\u{1e10}'],+ ['\u{1e12}','\u{1e12}'],+ ['\u{1e14}','\u{1e14}'],+ ['\u{1e16}','\u{1e16}'],+ ['\u{1e18}','\u{1e18}'],+ ['\u{1e1a}','\u{1e1a}'],+ ['\u{1e1c}','\u{1e1c}'],+ ['\u{1e1e}','\u{1e1e}'],+ ['\u{1e20}','\u{1e20}'],+ ['\u{1e22}','\u{1e22}'],+ ['\u{1e24}','\u{1e24}'],+ ['\u{1e26}','\u{1e26}'],+ ['\u{1e28}','\u{1e28}'],+ ['\u{1e2a}','\u{1e2a}'],+ ['\u{1e2c}','\u{1e2c}'],+ ['\u{1e2e}','\u{1e2e}'],+ ['\u{1e30}','\u{1e30}'],+ ['\u{1e32}','\u{1e32}'],+ ['\u{1e34}','\u{1e34}'],+ ['\u{1e36}','\u{1e36}'],+ ['\u{1e38}','\u{1e38}'],+ ['\u{1e3a}','\u{1e3a}'],+ ['\u{1e3c}','\u{1e3c}'],+ ['\u{1e3e}','\u{1e3e}'],+ ['\u{1e40}','\u{1e40}'],+ ['\u{1e42}','\u{1e42}'],+ ['\u{1e44}','\u{1e44}'],+ ['\u{1e46}','\u{1e46}'],+ ['\u{1e48}','\u{1e48}'],+ ['\u{1e4a}','\u{1e4a}'],+ ['\u{1e4c}','\u{1e4c}'],+ ['\u{1e4e}','\u{1e4e}'],+ ['\u{1e50}','\u{1e50}'],+ ['\u{1e52}','\u{1e52}'],+ ['\u{1e54}','\u{1e54}'],+ ['\u{1e56}','\u{1e56}'],+ ['\u{1e58}','\u{1e58}'],+ ['\u{1e5a}','\u{1e5a}'],+ ['\u{1e5c}','\u{1e5c}'],+ ['\u{1e5e}','\u{1e5e}'],+ ['\u{1e60}','\u{1e60}'],+ ['\u{1e62}','\u{1e62}'],+ ['\u{1e64}','\u{1e64}'],+ ['\u{1e66}','\u{1e66}'],+ ['\u{1e68}','\u{1e68}'],+ ['\u{1e6a}','\u{1e6a}'],+ ['\u{1e6c}','\u{1e6c}'],+ ['\u{1e6e}','\u{1e6e}'],+ ['\u{1e70}','\u{1e70}'],+ ['\u{1e72}','\u{1e72}'],+ ['\u{1e74}','\u{1e74}'],+ ['\u{1e76}','\u{1e76}'],+ ['\u{1e78}','\u{1e78}'],+ ['\u{1e7a}','\u{1e7a}'],+ ['\u{1e7c}','\u{1e7c}'],+ ['\u{1e7e}','\u{1e7e}'],+ ['\u{1e80}','\u{1e80}'],+ ['\u{1e82}','\u{1e82}'],+ ['\u{1e84}','\u{1e84}'],+ ['\u{1e86}','\u{1e86}'],+ ['\u{1e88}','\u{1e88}'],+ ['\u{1e8a}','\u{1e8a}'],+ ['\u{1e8c}','\u{1e8c}'],+ ['\u{1e8e}','\u{1e8e}'],+ ['\u{1e90}','\u{1e90}'],+ ['\u{1e92}','\u{1e92}'],+ ['\u{1e94}','\u{1e94}'],+ ['\u{1e9e}','\u{1e9e}'],+ ['\u{1ea0}','\u{1ea0}'],+ ['\u{1ea2}','\u{1ea2}'],+ ['\u{1ea4}','\u{1ea4}'],+ ['\u{1ea6}','\u{1ea6}'],+ ['\u{1ea8}','\u{1ea8}'],+ ['\u{1eaa}','\u{1eaa}'],+ ['\u{1eac}','\u{1eac}'],+ ['\u{1eae}','\u{1eae}'],+ ['\u{1eb0}','\u{1eb0}'],+ ['\u{1eb2}','\u{1eb2}'],+ ['\u{1eb4}','\u{1eb4}'],+ ['\u{1eb6}','\u{1eb6}'],+ ['\u{1eb8}','\u{1eb8}'],+ ['\u{1eba}','\u{1eba}'],+ ['\u{1ebc}','\u{1ebc}'],+ ['\u{1ebe}','\u{1ebe}'],+ ['\u{1ec0}','\u{1ec0}'],+ ['\u{1ec2}','\u{1ec2}'],+ ['\u{1ec4}','\u{1ec4}'],+ ['\u{1ec6}','\u{1ec6}'],+ ['\u{1ec8}','\u{1ec8}'],+ ['\u{1eca}','\u{1eca}'],+ ['\u{1ecc}','\u{1ecc}'],+ ['\u{1ece}','\u{1ece}'],+ ['\u{1ed0}','\u{1ed0}'],+ ['\u{1ed2}','\u{1ed2}'],+ ['\u{1ed4}','\u{1ed4}'],+ ['\u{1ed6}','\u{1ed6}'],+ ['\u{1ed8}','\u{1ed8}'],+ ['\u{1eda}','\u{1eda}'],+ ['\u{1edc}','\u{1edc}'],+ ['\u{1ede}','\u{1ede}'],+ ['\u{1ee0}','\u{1ee0}'],+ ['\u{1ee2}','\u{1ee2}'],+ ['\u{1ee4}','\u{1ee4}'],+ ['\u{1ee6}','\u{1ee6}'],+ ['\u{1ee8}','\u{1ee8}'],+ ['\u{1eea}','\u{1eea}'],+ ['\u{1eec}','\u{1eec}'],+ ['\u{1eee}','\u{1eee}'],+ ['\u{1ef0}','\u{1ef0}'],+ ['\u{1ef2}','\u{1ef2}'],+ ['\u{1ef4}','\u{1ef4}'],+ ['\u{1ef6}','\u{1ef6}'],+ ['\u{1ef8}','\u{1ef8}'],+ ['\u{1efa}','\u{1efa}'],+ ['\u{1efc}','\u{1efc}'],+ ['\u{1efe}','\u{1efe}'],+ ['\u{1f08}','\u{1f0f}'],+ ['\u{1f18}','\u{1f1d}'],+ ['\u{1f28}','\u{1f2f}'],+ ['\u{1f38}','\u{1f3f}'],+ ['\u{1f48}','\u{1f4d}'],+ ['\u{1f59}','\u{1f59}'],+ ['\u{1f5b}','\u{1f5b}'],+ ['\u{1f5d}','\u{1f5d}'],+ ['\u{1f5f}','\u{1f5f}'],+ ['\u{1f68}','\u{1f6f}'],+ ['\u{1fb8}','\u{1fbb}'],+ ['\u{1fc8}','\u{1fcb}'],+ ['\u{1fd8}','\u{1fdb}'],+ ['\u{1fe8}','\u{1fec}'],+ ['\u{1ff8}','\u{1ffb}'],+ ['\u{2102}','\u{2102}'],+ ['\u{2107}','\u{2107}'],+ ['\u{210b}','\u{210d}'],+ ['\u{2110}','\u{2112}'],+ ['\u{2115}','\u{2115}'],+ ['\u{2119}','\u{211d}'],+ ['\u{2124}','\u{2124}'],+ ['\u{2126}','\u{2126}'],+ ['\u{2128}','\u{2128}'],+ ['\u{212a}','\u{212d}'],+ ['\u{2130}','\u{2133}'],+ ['\u{213e}','\u{213f}'],+ ['\u{2145}','\u{2145}'],+ ['\u{2183}','\u{2183}'],+ ['\u{2c00}','\u{2c2e}'],+ ['\u{2c60}','\u{2c60}'],+ ['\u{2c62}','\u{2c64}'],+ ['\u{2c67}','\u{2c67}'],+ ['\u{2c69}','\u{2c69}'],+ ['\u{2c6b}','\u{2c6b}'],+ ['\u{2c6d}','\u{2c70}'],+ ['\u{2c72}','\u{2c72}'],+ ['\u{2c75}','\u{2c75}'],+ ['\u{2c7e}','\u{2c80}'],+ ['\u{2c82}','\u{2c82}'],+ ['\u{2c84}','\u{2c84}'],+ ['\u{2c86}','\u{2c86}'],+ ['\u{2c88}','\u{2c88}'],+ ['\u{2c8a}','\u{2c8a}'],+ ['\u{2c8c}','\u{2c8c}'],+ ['\u{2c8e}','\u{2c8e}'],+ ['\u{2c90}','\u{2c90}'],+ ['\u{2c92}','\u{2c92}'],+ ['\u{2c94}','\u{2c94}'],+ ['\u{2c96}','\u{2c96}'],+ ['\u{2c98}','\u{2c98}'],+ ['\u{2c9a}','\u{2c9a}'],+ ['\u{2c9c}','\u{2c9c}'],+ ['\u{2c9e}','\u{2c9e}'],+ ['\u{2ca0}','\u{2ca0}'],+ ['\u{2ca2}','\u{2ca2}'],+ ['\u{2ca4}','\u{2ca4}'],+ ['\u{2ca6}','\u{2ca6}'],+ ['\u{2ca8}','\u{2ca8}'],+ ['\u{2caa}','\u{2caa}'],+ ['\u{2cac}','\u{2cac}'],+ ['\u{2cae}','\u{2cae}'],+ ['\u{2cb0}','\u{2cb0}'],+ ['\u{2cb2}','\u{2cb2}'],+ ['\u{2cb4}','\u{2cb4}'],+ ['\u{2cb6}','\u{2cb6}'],+ ['\u{2cb8}','\u{2cb8}'],+ ['\u{2cba}','\u{2cba}'],+ ['\u{2cbc}','\u{2cbc}'],+ ['\u{2cbe}','\u{2cbe}'],+ ['\u{2cc0}','\u{2cc0}'],+ ['\u{2cc2}','\u{2cc2}'],+ ['\u{2cc4}','\u{2cc4}'],+ ['\u{2cc6}','\u{2cc6}'],+ ['\u{2cc8}','\u{2cc8}'],+ ['\u{2cca}','\u{2cca}'],+ ['\u{2ccc}','\u{2ccc}'],+ ['\u{2cce}','\u{2cce}'],+ ['\u{2cd0}','\u{2cd0}'],+ ['\u{2cd2}','\u{2cd2}'],+ ['\u{2cd4}','\u{2cd4}'],+ ['\u{2cd6}','\u{2cd6}'],+ ['\u{2cd8}','\u{2cd8}'],+ ['\u{2cda}','\u{2cda}'],+ ['\u{2cdc}','\u{2cdc}'],+ ['\u{2cde}','\u{2cde}'],+ ['\u{2ce0}','\u{2ce0}'],+ ['\u{2ce2}','\u{2ce2}'],+ ['\u{2ceb}','\u{2ceb}'],+ ['\u{2ced}','\u{2ced}'],+ ['\u{2cf2}','\u{2cf2}'],+ ['\u{a640}','\u{a640}'],+ ['\u{a642}','\u{a642}'],+ ['\u{a644}','\u{a644}'],+ ['\u{a646}','\u{a646}'],+ ['\u{a648}','\u{a648}'],+ ['\u{a64a}','\u{a64a}'],+ ['\u{a64c}','\u{a64c}'],+ ['\u{a64e}','\u{a64e}'],+ ['\u{a650}','\u{a650}'],+ ['\u{a652}','\u{a652}'],+ ['\u{a654}','\u{a654}'],+ ['\u{a656}','\u{a656}'],+ ['\u{a658}','\u{a658}'],+ ['\u{a65a}','\u{a65a}'],+ ['\u{a65c}','\u{a65c}'],+ ['\u{a65e}','\u{a65e}'],+ ['\u{a660}','\u{a660}'],+ ['\u{a662}','\u{a662}'],+ ['\u{a664}','\u{a664}'],+ ['\u{a666}','\u{a666}'],+ ['\u{a668}','\u{a668}'],+ ['\u{a66a}','\u{a66a}'],+ ['\u{a66c}','\u{a66c}'],+ ['\u{a680}','\u{a680}'],+ ['\u{a682}','\u{a682}'],+ ['\u{a684}','\u{a684}'],+ ['\u{a686}','\u{a686}'],+ ['\u{a688}','\u{a688}'],+ ['\u{a68a}','\u{a68a}'],+ ['\u{a68c}','\u{a68c}'],+ ['\u{a68e}','\u{a68e}'],+ ['\u{a690}','\u{a690}'],+ ['\u{a692}','\u{a692}'],+ ['\u{a694}','\u{a694}'],+ ['\u{a696}','\u{a696}'],+ ['\u{a722}','\u{a722}'],+ ['\u{a724}','\u{a724}'],+ ['\u{a726}','\u{a726}'],+ ['\u{a728}','\u{a728}'],+ ['\u{a72a}','\u{a72a}'],+ ['\u{a72c}','\u{a72c}'],+ ['\u{a72e}','\u{a72e}'],+ ['\u{a732}','\u{a732}'],+ ['\u{a734}','\u{a734}'],+ ['\u{a736}','\u{a736}'],+ ['\u{a738}','\u{a738}'],+ ['\u{a73a}','\u{a73a}'],+ ['\u{a73c}','\u{a73c}'],+ ['\u{a73e}','\u{a73e}'],+ ['\u{a740}','\u{a740}'],+ ['\u{a742}','\u{a742}'],+ ['\u{a744}','\u{a744}'],+ ['\u{a746}','\u{a746}'],+ ['\u{a748}','\u{a748}'],+ ['\u{a74a}','\u{a74a}'],+ ['\u{a74c}','\u{a74c}'],+ ['\u{a74e}','\u{a74e}'],+ ['\u{a750}','\u{a750}'],+ ['\u{a752}','\u{a752}'],+ ['\u{a754}','\u{a754}'],+ ['\u{a756}','\u{a756}'],+ ['\u{a758}','\u{a758}'],+ ['\u{a75a}','\u{a75a}'],+ ['\u{a75c}','\u{a75c}'],+ ['\u{a75e}','\u{a75e}'],+ ['\u{a760}','\u{a760}'],+ ['\u{a762}','\u{a762}'],+ ['\u{a764}','\u{a764}'],+ ['\u{a766}','\u{a766}'],+ ['\u{a768}','\u{a768}'],+ ['\u{a76a}','\u{a76a}'],+ ['\u{a76c}','\u{a76c}'],+ ['\u{a76e}','\u{a76e}'],+ ['\u{a779}','\u{a779}'],+ ['\u{a77b}','\u{a77b}'],+ ['\u{a77d}','\u{a77e}'],+ ['\u{a780}','\u{a780}'],+ ['\u{a782}','\u{a782}'],+ ['\u{a784}','\u{a784}'],+ ['\u{a786}','\u{a786}'],+ ['\u{a78b}','\u{a78b}'],+ ['\u{a78d}','\u{a78d}'],+ ['\u{a790}','\u{a790}'],+ ['\u{a792}','\u{a792}'],+ ['\u{a7a0}','\u{a7a0}'],+ ['\u{a7a2}','\u{a7a2}'],+ ['\u{a7a4}','\u{a7a4}'],+ ['\u{a7a6}','\u{a7a6}'],+ ['\u{a7a8}','\u{a7a8}'],+ ['\u{a7aa}','\u{a7aa}'],+ ['\u{ff21}','\u{ff3a}'],+ ['\u{10400}','\u{10427}'],+ ['\u{1d400}','\u{1d419}'],+ ['\u{1d434}','\u{1d44d}'],+ ['\u{1d468}','\u{1d481}'],+ ['\u{1d49c}','\u{1d49c}'],+ ['\u{1d49e}','\u{1d49f}'],+ ['\u{1d4a2}','\u{1d4a2}'],+ ['\u{1d4a5}','\u{1d4a6}'],+ ['\u{1d4a9}','\u{1d4ac}'],+ ['\u{1d4ae}','\u{1d4b5}'],+ ['\u{1d4d0}','\u{1d4e9}'],+ ['\u{1d504}','\u{1d505}'],+ ['\u{1d507}','\u{1d50a}'],+ ['\u{1d50d}','\u{1d514}'],+ ['\u{1d516}','\u{1d51c}'],+ ['\u{1d538}','\u{1d539}'],+ ['\u{1d53b}','\u{1d53e}'],+ ['\u{1d540}','\u{1d544}'],+ ['\u{1d546}','\u{1d546}'],+ ['\u{1d54a}','\u{1d550}'],+ ['\u{1d56c}','\u{1d585}'],+ ['\u{1d5a0}','\u{1d5b9}'],+ ['\u{1d5d4}','\u{1d5ed}'],+ ['\u{1d608}','\u{1d621}'],+ ['\u{1d63c}','\u{1d655}'],+ ['\u{1d670}','\u{1d689}'],+ ['\u{1d6a8}','\u{1d6c0}'],+ ['\u{1d6e2}','\u{1d6fa}'],+ ['\u{1d71c}','\u{1d734}'],+ ['\u{1d756}','\u{1d76e}'],+ ['\u{1d790}','\u{1d7a8}'],+ ['\u{1d7ca}','\u{1d7ca}'],+]
+
+const tabupper = [
+ ['\u{41}','\u{5a}'],+ ['\u{c0}','\u{d6}'],+ ['\u{d8}','\u{de}'],+ ['\u{100}','\u{100}'],+ ['\u{102}','\u{102}'],+ ['\u{104}','\u{104}'],+ ['\u{106}','\u{106}'],+ ['\u{108}','\u{108}'],+ ['\u{10a}','\u{10a}'],+ ['\u{10c}','\u{10c}'],+ ['\u{10e}','\u{10e}'],+ ['\u{110}','\u{110}'],+ ['\u{112}','\u{112}'],+ ['\u{114}','\u{114}'],+ ['\u{116}','\u{116}'],+ ['\u{118}','\u{118}'],+ ['\u{11a}','\u{11a}'],+ ['\u{11c}','\u{11c}'],+ ['\u{11e}','\u{11e}'],+ ['\u{120}','\u{120}'],+ ['\u{122}','\u{122}'],+ ['\u{124}','\u{124}'],+ ['\u{126}','\u{126}'],+ ['\u{128}','\u{128}'],+ ['\u{12a}','\u{12a}'],+ ['\u{12c}','\u{12c}'],+ ['\u{12e}','\u{12e}'],+ ['\u{130}','\u{130}'],+ ['\u{132}','\u{132}'],+ ['\u{134}','\u{134}'],+ ['\u{136}','\u{136}'],+ ['\u{139}','\u{139}'],+ ['\u{13b}','\u{13b}'],+ ['\u{13d}','\u{13d}'],+ ['\u{13f}','\u{13f}'],+ ['\u{141}','\u{141}'],+ ['\u{143}','\u{143}'],+ ['\u{145}','\u{145}'],+ ['\u{147}','\u{147}'],+ ['\u{14a}','\u{14a}'],+ ['\u{14c}','\u{14c}'],+ ['\u{14e}','\u{14e}'],+ ['\u{150}','\u{150}'],+ ['\u{152}','\u{152}'],+ ['\u{154}','\u{154}'],+ ['\u{156}','\u{156}'],+ ['\u{158}','\u{158}'],+ ['\u{15a}','\u{15a}'],+ ['\u{15c}','\u{15c}'],+ ['\u{15e}','\u{15e}'],+ ['\u{160}','\u{160}'],+ ['\u{162}','\u{162}'],+ ['\u{164}','\u{164}'],+ ['\u{166}','\u{166}'],+ ['\u{168}','\u{168}'],+ ['\u{16a}','\u{16a}'],+ ['\u{16c}','\u{16c}'],+ ['\u{16e}','\u{16e}'],+ ['\u{170}','\u{170}'],+ ['\u{172}','\u{172}'],+ ['\u{174}','\u{174}'],+ ['\u{176}','\u{176}'],+ ['\u{178}','\u{179}'],+ ['\u{17b}','\u{17b}'],+ ['\u{17d}','\u{17d}'],+ ['\u{181}','\u{182}'],+ ['\u{184}','\u{184}'],+ ['\u{186}','\u{187}'],+ ['\u{189}','\u{18b}'],+ ['\u{18e}','\u{191}'],+ ['\u{193}','\u{194}'],+ ['\u{196}','\u{198}'],+ ['\u{19c}','\u{19d}'],+ ['\u{19f}','\u{1a0}'],+ ['\u{1a2}','\u{1a2}'],+ ['\u{1a4}','\u{1a4}'],+ ['\u{1a6}','\u{1a7}'],+ ['\u{1a9}','\u{1a9}'],+ ['\u{1ac}','\u{1ac}'],+ ['\u{1ae}','\u{1af}'],+ ['\u{1b1}','\u{1b3}'],+ ['\u{1b5}','\u{1b5}'],+ ['\u{1b7}','\u{1b8}'],+ ['\u{1bc}','\u{1bc}'],+ ['\u{1c4}','\u{1c4}'],+ ['\u{1c7}','\u{1c7}'],+ ['\u{1ca}','\u{1ca}'],+ ['\u{1cd}','\u{1cd}'],+ ['\u{1cf}','\u{1cf}'],+ ['\u{1d1}','\u{1d1}'],+ ['\u{1d3}','\u{1d3}'],+ ['\u{1d5}','\u{1d5}'],+ ['\u{1d7}','\u{1d7}'],+ ['\u{1d9}','\u{1d9}'],+ ['\u{1db}','\u{1db}'],+ ['\u{1de}','\u{1de}'],+ ['\u{1e0}','\u{1e0}'],+ ['\u{1e2}','\u{1e2}'],+ ['\u{1e4}','\u{1e4}'],+ ['\u{1e6}','\u{1e6}'],+ ['\u{1e8}','\u{1e8}'],+ ['\u{1ea}','\u{1ea}'],+ ['\u{1ec}','\u{1ec}'],+ ['\u{1ee}','\u{1ee}'],+ ['\u{1f1}','\u{1f1}'],+ ['\u{1f4}','\u{1f4}'],+ ['\u{1f6}','\u{1f8}'],+ ['\u{1fa}','\u{1fa}'],+ ['\u{1fc}','\u{1fc}'],+ ['\u{1fe}','\u{1fe}'],+ ['\u{200}','\u{200}'],+ ['\u{202}','\u{202}'],+ ['\u{204}','\u{204}'],+ ['\u{206}','\u{206}'],+ ['\u{208}','\u{208}'],+ ['\u{20a}','\u{20a}'],+ ['\u{20c}','\u{20c}'],+ ['\u{20e}','\u{20e}'],+ ['\u{210}','\u{210}'],+ ['\u{212}','\u{212}'],+ ['\u{214}','\u{214}'],+ ['\u{216}','\u{216}'],+ ['\u{218}','\u{218}'],+ ['\u{21a}','\u{21a}'],+ ['\u{21c}','\u{21c}'],+ ['\u{21e}','\u{21e}'],+ ['\u{220}','\u{220}'],+ ['\u{222}','\u{222}'],+ ['\u{224}','\u{224}'],+ ['\u{226}','\u{226}'],+ ['\u{228}','\u{228}'],+ ['\u{22a}','\u{22a}'],+ ['\u{22c}','\u{22c}'],+ ['\u{22e}','\u{22e}'],+ ['\u{230}','\u{230}'],+ ['\u{232}','\u{232}'],+ ['\u{23a}','\u{23b}'],+ ['\u{23d}','\u{23e}'],+ ['\u{241}','\u{241}'],+ ['\u{243}','\u{246}'],+ ['\u{248}','\u{248}'],+ ['\u{24a}','\u{24a}'],+ ['\u{24c}','\u{24c}'],+ ['\u{24e}','\u{24e}'],+ ['\u{370}','\u{370}'],+ ['\u{372}','\u{372}'],+ ['\u{376}','\u{376}'],+ ['\u{386}','\u{386}'],+ ['\u{388}','\u{38a}'],+ ['\u{38c}','\u{38c}'],+ ['\u{38e}','\u{38f}'],+ ['\u{391}','\u{3a1}'],+ ['\u{3a3}','\u{3ab}'],+ ['\u{3cf}','\u{3cf}'],+ ['\u{3d2}','\u{3d4}'],+ ['\u{3d8}','\u{3d8}'],+ ['\u{3da}','\u{3da}'],+ ['\u{3dc}','\u{3dc}'],+ ['\u{3de}','\u{3de}'],+ ['\u{3e0}','\u{3e0}'],+ ['\u{3e2}','\u{3e2}'],+ ['\u{3e4}','\u{3e4}'],+ ['\u{3e6}','\u{3e6}'],+ ['\u{3e8}','\u{3e8}'],+ ['\u{3ea}','\u{3ea}'],+ ['\u{3ec}','\u{3ec}'],+ ['\u{3ee}','\u{3ee}'],+ ['\u{3f4}','\u{3f4}'],+ ['\u{3f7}','\u{3f7}'],+ ['\u{3f9}','\u{3fa}'],+ ['\u{3fd}','\u{42f}'],+ ['\u{460}','\u{460}'],+ ['\u{462}','\u{462}'],+ ['\u{464}','\u{464}'],+ ['\u{466}','\u{466}'],+ ['\u{468}','\u{468}'],+ ['\u{46a}','\u{46a}'],+ ['\u{46c}','\u{46c}'],+ ['\u{46e}','\u{46e}'],+ ['\u{470}','\u{470}'],+ ['\u{472}','\u{472}'],+ ['\u{474}','\u{474}'],+ ['\u{476}','\u{476}'],+ ['\u{478}','\u{478}'],+ ['\u{47a}','\u{47a}'],+ ['\u{47c}','\u{47c}'],+ ['\u{47e}','\u{47e}'],+ ['\u{480}','\u{480}'],+ ['\u{48a}','\u{48a}'],+ ['\u{48c}','\u{48c}'],+ ['\u{48e}','\u{48e}'],+ ['\u{490}','\u{490}'],+ ['\u{492}','\u{492}'],+ ['\u{494}','\u{494}'],+ ['\u{496}','\u{496}'],+ ['\u{498}','\u{498}'],+ ['\u{49a}','\u{49a}'],+ ['\u{49c}','\u{49c}'],+ ['\u{49e}','\u{49e}'],+ ['\u{4a0}','\u{4a0}'],+ ['\u{4a2}','\u{4a2}'],+ ['\u{4a4}','\u{4a4}'],+ ['\u{4a6}','\u{4a6}'],+ ['\u{4a8}','\u{4a8}'],+ ['\u{4aa}','\u{4aa}'],+ ['\u{4ac}','\u{4ac}'],+ ['\u{4ae}','\u{4ae}'],+ ['\u{4b0}','\u{4b0}'],+ ['\u{4b2}','\u{4b2}'],+ ['\u{4b4}','\u{4b4}'],+ ['\u{4b6}','\u{4b6}'],+ ['\u{4b8}','\u{4b8}'],+ ['\u{4ba}','\u{4ba}'],+ ['\u{4bc}','\u{4bc}'],+ ['\u{4be}','\u{4be}'],+ ['\u{4c0}','\u{4c1}'],+ ['\u{4c3}','\u{4c3}'],+ ['\u{4c5}','\u{4c5}'],+ ['\u{4c7}','\u{4c7}'],+ ['\u{4c9}','\u{4c9}'],+ ['\u{4cb}','\u{4cb}'],+ ['\u{4cd}','\u{4cd}'],+ ['\u{4d0}','\u{4d0}'],+ ['\u{4d2}','\u{4d2}'],+ ['\u{4d4}','\u{4d4}'],+ ['\u{4d6}','\u{4d6}'],+ ['\u{4d8}','\u{4d8}'],+ ['\u{4da}','\u{4da}'],+ ['\u{4dc}','\u{4dc}'],+ ['\u{4de}','\u{4de}'],+ ['\u{4e0}','\u{4e0}'],+ ['\u{4e2}','\u{4e2}'],+ ['\u{4e4}','\u{4e4}'],+ ['\u{4e6}','\u{4e6}'],+ ['\u{4e8}','\u{4e8}'],+ ['\u{4ea}','\u{4ea}'],+ ['\u{4ec}','\u{4ec}'],+ ['\u{4ee}','\u{4ee}'],+ ['\u{4f0}','\u{4f0}'],+ ['\u{4f2}','\u{4f2}'],+ ['\u{4f4}','\u{4f4}'],+ ['\u{4f6}','\u{4f6}'],+ ['\u{4f8}','\u{4f8}'],+ ['\u{4fa}','\u{4fa}'],+ ['\u{4fc}','\u{4fc}'],+ ['\u{4fe}','\u{4fe}'],+ ['\u{500}','\u{500}'],+ ['\u{502}','\u{502}'],+ ['\u{504}','\u{504}'],+ ['\u{506}','\u{506}'],+ ['\u{508}','\u{508}'],+ ['\u{50a}','\u{50a}'],+ ['\u{50c}','\u{50c}'],+ ['\u{50e}','\u{50e}'],+ ['\u{510}','\u{510}'],+ ['\u{512}','\u{512}'],+ ['\u{514}','\u{514}'],+ ['\u{516}','\u{516}'],+ ['\u{518}','\u{518}'],+ ['\u{51a}','\u{51a}'],+ ['\u{51c}','\u{51c}'],+ ['\u{51e}','\u{51e}'],+ ['\u{520}','\u{520}'],+ ['\u{522}','\u{522}'],+ ['\u{524}','\u{524}'],+ ['\u{526}','\u{526}'],+ ['\u{531}','\u{556}'],+ ['\u{10a0}','\u{10c5}'],+ ['\u{10c7}','\u{10c7}'],+ ['\u{10cd}','\u{10cd}'],+ ['\u{1e00}','\u{1e00}'],+ ['\u{1e02}','\u{1e02}'],+ ['\u{1e04}','\u{1e04}'],+ ['\u{1e06}','\u{1e06}'],+ ['\u{1e08}','\u{1e08}'],+ ['\u{1e0a}','\u{1e0a}'],+ ['\u{1e0c}','\u{1e0c}'],+ ['\u{1e0e}','\u{1e0e}'],+ ['\u{1e10}','\u{1e10}'],+ ['\u{1e12}','\u{1e12}'],+ ['\u{1e14}','\u{1e14}'],+ ['\u{1e16}','\u{1e16}'],+ ['\u{1e18}','\u{1e18}'],+ ['\u{1e1a}','\u{1e1a}'],+ ['\u{1e1c}','\u{1e1c}'],+ ['\u{1e1e}','\u{1e1e}'],+ ['\u{1e20}','\u{1e20}'],+ ['\u{1e22}','\u{1e22}'],+ ['\u{1e24}','\u{1e24}'],+ ['\u{1e26}','\u{1e26}'],+ ['\u{1e28}','\u{1e28}'],+ ['\u{1e2a}','\u{1e2a}'],+ ['\u{1e2c}','\u{1e2c}'],+ ['\u{1e2e}','\u{1e2e}'],+ ['\u{1e30}','\u{1e30}'],+ ['\u{1e32}','\u{1e32}'],+ ['\u{1e34}','\u{1e34}'],+ ['\u{1e36}','\u{1e36}'],+ ['\u{1e38}','\u{1e38}'],+ ['\u{1e3a}','\u{1e3a}'],+ ['\u{1e3c}','\u{1e3c}'],+ ['\u{1e3e}','\u{1e3e}'],+ ['\u{1e40}','\u{1e40}'],+ ['\u{1e42}','\u{1e42}'],+ ['\u{1e44}','\u{1e44}'],+ ['\u{1e46}','\u{1e46}'],+ ['\u{1e48}','\u{1e48}'],+ ['\u{1e4a}','\u{1e4a}'],+ ['\u{1e4c}','\u{1e4c}'],+ ['\u{1e4e}','\u{1e4e}'],+ ['\u{1e50}','\u{1e50}'],+ ['\u{1e52}','\u{1e52}'],+ ['\u{1e54}','\u{1e54}'],+ ['\u{1e56}','\u{1e56}'],+ ['\u{1e58}','\u{1e58}'],+ ['\u{1e5a}','\u{1e5a}'],+ ['\u{1e5c}','\u{1e5c}'],+ ['\u{1e5e}','\u{1e5e}'],+ ['\u{1e60}','\u{1e60}'],+ ['\u{1e62}','\u{1e62}'],+ ['\u{1e64}','\u{1e64}'],+ ['\u{1e66}','\u{1e66}'],+ ['\u{1e68}','\u{1e68}'],+ ['\u{1e6a}','\u{1e6a}'],+ ['\u{1e6c}','\u{1e6c}'],+ ['\u{1e6e}','\u{1e6e}'],+ ['\u{1e70}','\u{1e70}'],+ ['\u{1e72}','\u{1e72}'],+ ['\u{1e74}','\u{1e74}'],+ ['\u{1e76}','\u{1e76}'],+ ['\u{1e78}','\u{1e78}'],+ ['\u{1e7a}','\u{1e7a}'],+ ['\u{1e7c}','\u{1e7c}'],+ ['\u{1e7e}','\u{1e7e}'],+ ['\u{1e80}','\u{1e80}'],+ ['\u{1e82}','\u{1e82}'],+ ['\u{1e84}','\u{1e84}'],+ ['\u{1e86}','\u{1e86}'],+ ['\u{1e88}','\u{1e88}'],+ ['\u{1e8a}','\u{1e8a}'],+ ['\u{1e8c}','\u{1e8c}'],+ ['\u{1e8e}','\u{1e8e}'],+ ['\u{1e90}','\u{1e90}'],+ ['\u{1e92}','\u{1e92}'],+ ['\u{1e94}','\u{1e94}'],+ ['\u{1e9e}','\u{1e9e}'],+ ['\u{1ea0}','\u{1ea0}'],+ ['\u{1ea2}','\u{1ea2}'],+ ['\u{1ea4}','\u{1ea4}'],+ ['\u{1ea6}','\u{1ea6}'],+ ['\u{1ea8}','\u{1ea8}'],+ ['\u{1eaa}','\u{1eaa}'],+ ['\u{1eac}','\u{1eac}'],+ ['\u{1eae}','\u{1eae}'],+ ['\u{1eb0}','\u{1eb0}'],+ ['\u{1eb2}','\u{1eb2}'],+ ['\u{1eb4}','\u{1eb4}'],+ ['\u{1eb6}','\u{1eb6}'],+ ['\u{1eb8}','\u{1eb8}'],+ ['\u{1eba}','\u{1eba}'],+ ['\u{1ebc}','\u{1ebc}'],+ ['\u{1ebe}','\u{1ebe}'],+ ['\u{1ec0}','\u{1ec0}'],+ ['\u{1ec2}','\u{1ec2}'],+ ['\u{1ec4}','\u{1ec4}'],+ ['\u{1ec6}','\u{1ec6}'],+ ['\u{1ec8}','\u{1ec8}'],+ ['\u{1eca}','\u{1eca}'],+ ['\u{1ecc}','\u{1ecc}'],+ ['\u{1ece}','\u{1ece}'],+ ['\u{1ed0}','\u{1ed0}'],+ ['\u{1ed2}','\u{1ed2}'],+ ['\u{1ed4}','\u{1ed4}'],+ ['\u{1ed6}','\u{1ed6}'],+ ['\u{1ed8}','\u{1ed8}'],+ ['\u{1eda}','\u{1eda}'],+ ['\u{1edc}','\u{1edc}'],+ ['\u{1ede}','\u{1ede}'],+ ['\u{1ee0}','\u{1ee0}'],+ ['\u{1ee2}','\u{1ee2}'],+ ['\u{1ee4}','\u{1ee4}'],+ ['\u{1ee6}','\u{1ee6}'],+ ['\u{1ee8}','\u{1ee8}'],+ ['\u{1eea}','\u{1eea}'],+ ['\u{1eec}','\u{1eec}'],+ ['\u{1eee}','\u{1eee}'],+ ['\u{1ef0}','\u{1ef0}'],+ ['\u{1ef2}','\u{1ef2}'],+ ['\u{1ef4}','\u{1ef4}'],+ ['\u{1ef6}','\u{1ef6}'],+ ['\u{1ef8}','\u{1ef8}'],+ ['\u{1efa}','\u{1efa}'],+ ['\u{1efc}','\u{1efc}'],+ ['\u{1efe}','\u{1efe}'],+ ['\u{1f08}','\u{1f0f}'],+ ['\u{1f18}','\u{1f1d}'],+ ['\u{1f28}','\u{1f2f}'],+ ['\u{1f38}','\u{1f3f}'],+ ['\u{1f48}','\u{1f4d}'],+ ['\u{1f59}','\u{1f59}'],+ ['\u{1f5b}','\u{1f5b}'],+ ['\u{1f5d}','\u{1f5d}'],+ ['\u{1f5f}','\u{1f5f}'],+ ['\u{1f68}','\u{1f6f}'],+ ['\u{1fb8}','\u{1fbb}'],+ ['\u{1fc8}','\u{1fcb}'],+ ['\u{1fd8}','\u{1fdb}'],+ ['\u{1fe8}','\u{1fec}'],+ ['\u{1ff8}','\u{1ffb}'],+ ['\u{2102}','\u{2102}'],+ ['\u{2107}','\u{2107}'],+ ['\u{210b}','\u{210d}'],+ ['\u{2110}','\u{2112}'],+ ['\u{2115}','\u{2115}'],+ ['\u{2119}','\u{211d}'],+ ['\u{2124}','\u{2124}'],+ ['\u{2126}','\u{2126}'],+ ['\u{2128}','\u{2128}'],+ ['\u{212a}','\u{212d}'],+ ['\u{2130}','\u{2133}'],+ ['\u{213e}','\u{213f}'],+ ['\u{2145}','\u{2145}'],+ ['\u{2183}','\u{2183}'],+ ['\u{2c00}','\u{2c2e}'],+ ['\u{2c60}','\u{2c60}'],+ ['\u{2c62}','\u{2c64}'],+ ['\u{2c67}','\u{2c67}'],+ ['\u{2c69}','\u{2c69}'],+ ['\u{2c6b}','\u{2c6b}'],+ ['\u{2c6d}','\u{2c70}'],+ ['\u{2c72}','\u{2c72}'],+ ['\u{2c75}','\u{2c75}'],+ ['\u{2c7e}','\u{2c80}'],+ ['\u{2c82}','\u{2c82}'],+ ['\u{2c84}','\u{2c84}'],+ ['\u{2c86}','\u{2c86}'],+ ['\u{2c88}','\u{2c88}'],+ ['\u{2c8a}','\u{2c8a}'],+ ['\u{2c8c}','\u{2c8c}'],+ ['\u{2c8e}','\u{2c8e}'],+ ['\u{2c90}','\u{2c90}'],+ ['\u{2c92}','\u{2c92}'],+ ['\u{2c94}','\u{2c94}'],+ ['\u{2c96}','\u{2c96}'],+ ['\u{2c98}','\u{2c98}'],+ ['\u{2c9a}','\u{2c9a}'],+ ['\u{2c9c}','\u{2c9c}'],+ ['\u{2c9e}','\u{2c9e}'],+ ['\u{2ca0}','\u{2ca0}'],+ ['\u{2ca2}','\u{2ca2}'],+ ['\u{2ca4}','\u{2ca4}'],+ ['\u{2ca6}','\u{2ca6}'],+ ['\u{2ca8}','\u{2ca8}'],+ ['\u{2caa}','\u{2caa}'],+ ['\u{2cac}','\u{2cac}'],+ ['\u{2cae}','\u{2cae}'],+ ['\u{2cb0}','\u{2cb0}'],+ ['\u{2cb2}','\u{2cb2}'],+ ['\u{2cb4}','\u{2cb4}'],+ ['\u{2cb6}','\u{2cb6}'],+ ['\u{2cb8}','\u{2cb8}'],+ ['\u{2cba}','\u{2cba}'],+ ['\u{2cbc}','\u{2cbc}'],+ ['\u{2cbe}','\u{2cbe}'],+ ['\u{2cc0}','\u{2cc0}'],+ ['\u{2cc2}','\u{2cc2}'],+ ['\u{2cc4}','\u{2cc4}'],+ ['\u{2cc6}','\u{2cc6}'],+ ['\u{2cc8}','\u{2cc8}'],+ ['\u{2cca}','\u{2cca}'],+ ['\u{2ccc}','\u{2ccc}'],+ ['\u{2cce}','\u{2cce}'],+ ['\u{2cd0}','\u{2cd0}'],+ ['\u{2cd2}','\u{2cd2}'],+ ['\u{2cd4}','\u{2cd4}'],+ ['\u{2cd6}','\u{2cd6}'],+ ['\u{2cd8}','\u{2cd8}'],+ ['\u{2cda}','\u{2cda}'],+ ['\u{2cdc}','\u{2cdc}'],+ ['\u{2cde}','\u{2cde}'],+ ['\u{2ce0}','\u{2ce0}'],+ ['\u{2ce2}','\u{2ce2}'],+ ['\u{2ceb}','\u{2ceb}'],+ ['\u{2ced}','\u{2ced}'],+ ['\u{2cf2}','\u{2cf2}'],+ ['\u{a640}','\u{a640}'],+ ['\u{a642}','\u{a642}'],+ ['\u{a644}','\u{a644}'],+ ['\u{a646}','\u{a646}'],+ ['\u{a648}','\u{a648}'],+ ['\u{a64a}','\u{a64a}'],+ ['\u{a64c}','\u{a64c}'],+ ['\u{a64e}','\u{a64e}'],+ ['\u{a650}','\u{a650}'],+ ['\u{a652}','\u{a652}'],+ ['\u{a654}','\u{a654}'],+ ['\u{a656}','\u{a656}'],+ ['\u{a658}','\u{a658}'],+ ['\u{a65a}','\u{a65a}'],+ ['\u{a65c}','\u{a65c}'],+ ['\u{a65e}','\u{a65e}'],+ ['\u{a660}','\u{a660}'],+ ['\u{a662}','\u{a662}'],+ ['\u{a664}','\u{a664}'],+ ['\u{a666}','\u{a666}'],+ ['\u{a668}','\u{a668}'],+ ['\u{a66a}','\u{a66a}'],+ ['\u{a66c}','\u{a66c}'],+ ['\u{a680}','\u{a680}'],+ ['\u{a682}','\u{a682}'],+ ['\u{a684}','\u{a684}'],+ ['\u{a686}','\u{a686}'],+ ['\u{a688}','\u{a688}'],+ ['\u{a68a}','\u{a68a}'],+ ['\u{a68c}','\u{a68c}'],+ ['\u{a68e}','\u{a68e}'],+ ['\u{a690}','\u{a690}'],+ ['\u{a692}','\u{a692}'],+ ['\u{a694}','\u{a694}'],+ ['\u{a696}','\u{a696}'],+ ['\u{a722}','\u{a722}'],+ ['\u{a724}','\u{a724}'],+ ['\u{a726}','\u{a726}'],+ ['\u{a728}','\u{a728}'],+ ['\u{a72a}','\u{a72a}'],+ ['\u{a72c}','\u{a72c}'],+ ['\u{a72e}','\u{a72e}'],+ ['\u{a732}','\u{a732}'],+ ['\u{a734}','\u{a734}'],+ ['\u{a736}','\u{a736}'],+ ['\u{a738}','\u{a738}'],+ ['\u{a73a}','\u{a73a}'],+ ['\u{a73c}','\u{a73c}'],+ ['\u{a73e}','\u{a73e}'],+ ['\u{a740}','\u{a740}'],+ ['\u{a742}','\u{a742}'],+ ['\u{a744}','\u{a744}'],+ ['\u{a746}','\u{a746}'],+ ['\u{a748}','\u{a748}'],+ ['\u{a74a}','\u{a74a}'],+ ['\u{a74c}','\u{a74c}'],+ ['\u{a74e}','\u{a74e}'],+ ['\u{a750}','\u{a750}'],+ ['\u{a752}','\u{a752}'],+ ['\u{a754}','\u{a754}'],+ ['\u{a756}','\u{a756}'],+ ['\u{a758}','\u{a758}'],+ ['\u{a75a}','\u{a75a}'],+ ['\u{a75c}','\u{a75c}'],+ ['\u{a75e}','\u{a75e}'],+ ['\u{a760}','\u{a760}'],+ ['\u{a762}','\u{a762}'],+ ['\u{a764}','\u{a764}'],+ ['\u{a766}','\u{a766}'],+ ['\u{a768}','\u{a768}'],+ ['\u{a76a}','\u{a76a}'],+ ['\u{a76c}','\u{a76c}'],+ ['\u{a76e}','\u{a76e}'],+ ['\u{a779}','\u{a779}'],+ ['\u{a77b}','\u{a77b}'],+ ['\u{a77d}','\u{a77e}'],+ ['\u{a780}','\u{a780}'],+ ['\u{a782}','\u{a782}'],+ ['\u{a784}','\u{a784}'],+ ['\u{a786}','\u{a786}'],+ ['\u{a78b}','\u{a78b}'],+ ['\u{a78d}','\u{a78d}'],+ ['\u{a790}','\u{a790}'],+ ['\u{a792}','\u{a792}'],+ ['\u{a7a0}','\u{a7a0}'],+ ['\u{a7a2}','\u{a7a2}'],+ ['\u{a7a4}','\u{a7a4}'],+ ['\u{a7a6}','\u{a7a6}'],+ ['\u{a7a8}','\u{a7a8}'],+ ['\u{a7aa}','\u{a7aa}'],+ ['\u{ff21}','\u{ff3a}'],+ ['\u{10400}','\u{10427}'],+ ['\u{1d400}','\u{1d419}'],+ ['\u{1d434}','\u{1d44d}'],+ ['\u{1d468}','\u{1d481}'],+ ['\u{1d49c}','\u{1d49c}'],+ ['\u{1d49e}','\u{1d49f}'],+ ['\u{1d4a2}','\u{1d4a2}'],+ ['\u{1d4a5}','\u{1d4a6}'],+ ['\u{1d4a9}','\u{1d4ac}'],+ ['\u{1d4ae}','\u{1d4b5}'],+ ['\u{1d4d0}','\u{1d4e9}'],+ ['\u{1d504}','\u{1d505}'],+ ['\u{1d507}','\u{1d50a}'],+ ['\u{1d50d}','\u{1d514}'],+ ['\u{1d516}','\u{1d51c}'],+ ['\u{1d538}','\u{1d539}'],+ ['\u{1d53b}','\u{1d53e}'],+ ['\u{1d540}','\u{1d544}'],+ ['\u{1d546}','\u{1d546}'],+ ['\u{1d54a}','\u{1d550}'],+ ['\u{1d56c}','\u{1d585}'],+ ['\u{1d5a0}','\u{1d5b9}'],+ ['\u{1d5d4}','\u{1d5ed}'],+ ['\u{1d608}','\u{1d621}'],+ ['\u{1d63c}','\u{1d655}'],+ ['\u{1d670}','\u{1d689}'],+ ['\u{1d6a8}','\u{1d6c0}'],+ ['\u{1d6e2}','\u{1d6fa}'],+ ['\u{1d71c}','\u{1d734}'],+ ['\u{1d756}','\u{1d76e}'],+ ['\u{1d790}','\u{1d7a8}'],+ ['\u{1d7ca}','\u{1d7ca}'],+]
+
+const tablower = [
+ ['\u{61}','\u{7a}'],+ ['\u{b5}','\u{b5}'],+ ['\u{df}','\u{f6}'],+ ['\u{f8}','\u{ff}'],+ ['\u{101}','\u{101}'],+ ['\u{103}','\u{103}'],+ ['\u{105}','\u{105}'],+ ['\u{107}','\u{107}'],+ ['\u{109}','\u{109}'],+ ['\u{10b}','\u{10b}'],+ ['\u{10d}','\u{10d}'],+ ['\u{10f}','\u{10f}'],+ ['\u{111}','\u{111}'],+ ['\u{113}','\u{113}'],+ ['\u{115}','\u{115}'],+ ['\u{117}','\u{117}'],+ ['\u{119}','\u{119}'],+ ['\u{11b}','\u{11b}'],+ ['\u{11d}','\u{11d}'],+ ['\u{11f}','\u{11f}'],+ ['\u{121}','\u{121}'],+ ['\u{123}','\u{123}'],+ ['\u{125}','\u{125}'],+ ['\u{127}','\u{127}'],+ ['\u{129}','\u{129}'],+ ['\u{12b}','\u{12b}'],+ ['\u{12d}','\u{12d}'],+ ['\u{12f}','\u{12f}'],+ ['\u{131}','\u{131}'],+ ['\u{133}','\u{133}'],+ ['\u{135}','\u{135}'],+ ['\u{137}','\u{138}'],+ ['\u{13a}','\u{13a}'],+ ['\u{13c}','\u{13c}'],+ ['\u{13e}','\u{13e}'],+ ['\u{140}','\u{140}'],+ ['\u{142}','\u{142}'],+ ['\u{144}','\u{144}'],+ ['\u{146}','\u{146}'],+ ['\u{148}','\u{149}'],+ ['\u{14b}','\u{14b}'],+ ['\u{14d}','\u{14d}'],+ ['\u{14f}','\u{14f}'],+ ['\u{151}','\u{151}'],+ ['\u{153}','\u{153}'],+ ['\u{155}','\u{155}'],+ ['\u{157}','\u{157}'],+ ['\u{159}','\u{159}'],+ ['\u{15b}','\u{15b}'],+ ['\u{15d}','\u{15d}'],+ ['\u{15f}','\u{15f}'],+ ['\u{161}','\u{161}'],+ ['\u{163}','\u{163}'],+ ['\u{165}','\u{165}'],+ ['\u{167}','\u{167}'],+ ['\u{169}','\u{169}'],+ ['\u{16b}','\u{16b}'],+ ['\u{16d}','\u{16d}'],+ ['\u{16f}','\u{16f}'],+ ['\u{171}','\u{171}'],+ ['\u{173}','\u{173}'],+ ['\u{175}','\u{175}'],+ ['\u{177}','\u{177}'],+ ['\u{17a}','\u{17a}'],+ ['\u{17c}','\u{17c}'],+ ['\u{17e}','\u{180}'],+ ['\u{183}','\u{183}'],+ ['\u{185}','\u{185}'],+ ['\u{188}','\u{188}'],+ ['\u{18c}','\u{18d}'],+ ['\u{192}','\u{192}'],+ ['\u{195}','\u{195}'],+ ['\u{199}','\u{19b}'],+ ['\u{19e}','\u{19e}'],+ ['\u{1a1}','\u{1a1}'],+ ['\u{1a3}','\u{1a3}'],+ ['\u{1a5}','\u{1a5}'],+ ['\u{1a8}','\u{1a8}'],+ ['\u{1aa}','\u{1ab}'],+ ['\u{1ad}','\u{1ad}'],+ ['\u{1b0}','\u{1b0}'],+ ['\u{1b4}','\u{1b4}'],+ ['\u{1b6}','\u{1b6}'],+ ['\u{1b9}','\u{1ba}'],+ ['\u{1bd}','\u{1bf}'],+ ['\u{1c6}','\u{1c6}'],+ ['\u{1c9}','\u{1c9}'],+ ['\u{1cc}','\u{1cc}'],+ ['\u{1ce}','\u{1ce}'],+ ['\u{1d0}','\u{1d0}'],+ ['\u{1d2}','\u{1d2}'],+ ['\u{1d4}','\u{1d4}'],+ ['\u{1d6}','\u{1d6}'],+ ['\u{1d8}','\u{1d8}'],+ ['\u{1da}','\u{1da}'],+ ['\u{1dc}','\u{1dd}'],+ ['\u{1df}','\u{1df}'],+ ['\u{1e1}','\u{1e1}'],+ ['\u{1e3}','\u{1e3}'],+ ['\u{1e5}','\u{1e5}'],+ ['\u{1e7}','\u{1e7}'],+ ['\u{1e9}','\u{1e9}'],+ ['\u{1eb}','\u{1eb}'],+ ['\u{1ed}','\u{1ed}'],+ ['\u{1ef}','\u{1f0}'],+ ['\u{1f3}','\u{1f3}'],+ ['\u{1f5}','\u{1f5}'],+ ['\u{1f9}','\u{1f9}'],+ ['\u{1fb}','\u{1fb}'],+ ['\u{1fd}','\u{1fd}'],+ ['\u{1ff}','\u{1ff}'],+ ['\u{201}','\u{201}'],+ ['\u{203}','\u{203}'],+ ['\u{205}','\u{205}'],+ ['\u{207}','\u{207}'],+ ['\u{209}','\u{209}'],+ ['\u{20b}','\u{20b}'],+ ['\u{20d}','\u{20d}'],+ ['\u{20f}','\u{20f}'],+ ['\u{211}','\u{211}'],+ ['\u{213}','\u{213}'],+ ['\u{215}','\u{215}'],+ ['\u{217}','\u{217}'],+ ['\u{219}','\u{219}'],+ ['\u{21b}','\u{21b}'],+ ['\u{21d}','\u{21d}'],+ ['\u{21f}','\u{21f}'],+ ['\u{221}','\u{221}'],+ ['\u{223}','\u{223}'],+ ['\u{225}','\u{225}'],+ ['\u{227}','\u{227}'],+ ['\u{229}','\u{229}'],+ ['\u{22b}','\u{22b}'],+ ['\u{22d}','\u{22d}'],+ ['\u{22f}','\u{22f}'],+ ['\u{231}','\u{231}'],+ ['\u{233}','\u{239}'],+ ['\u{23c}','\u{23c}'],+ ['\u{23f}','\u{240}'],+ ['\u{242}','\u{242}'],+ ['\u{247}','\u{247}'],+ ['\u{249}','\u{249}'],+ ['\u{24b}','\u{24b}'],+ ['\u{24d}','\u{24d}'],+ ['\u{24f}','\u{293}'],+ ['\u{295}','\u{2af}'],+ ['\u{371}','\u{371}'],+ ['\u{373}','\u{373}'],+ ['\u{377}','\u{377}'],+ ['\u{37b}','\u{37d}'],+ ['\u{390}','\u{390}'],+ ['\u{3ac}','\u{3ce}'],+ ['\u{3d0}','\u{3d1}'],+ ['\u{3d5}','\u{3d7}'],+ ['\u{3d9}','\u{3d9}'],+ ['\u{3db}','\u{3db}'],+ ['\u{3dd}','\u{3dd}'],+ ['\u{3df}','\u{3df}'],+ ['\u{3e1}','\u{3e1}'],+ ['\u{3e3}','\u{3e3}'],+ ['\u{3e5}','\u{3e5}'],+ ['\u{3e7}','\u{3e7}'],+ ['\u{3e9}','\u{3e9}'],+ ['\u{3eb}','\u{3eb}'],+ ['\u{3ed}','\u{3ed}'],+ ['\u{3ef}','\u{3f3}'],+ ['\u{3f5}','\u{3f5}'],+ ['\u{3f8}','\u{3f8}'],+ ['\u{3fb}','\u{3fc}'],+ ['\u{430}','\u{45f}'],+ ['\u{461}','\u{461}'],+ ['\u{463}','\u{463}'],+ ['\u{465}','\u{465}'],+ ['\u{467}','\u{467}'],+ ['\u{469}','\u{469}'],+ ['\u{46b}','\u{46b}'],+ ['\u{46d}','\u{46d}'],+ ['\u{46f}','\u{46f}'],+ ['\u{471}','\u{471}'],+ ['\u{473}','\u{473}'],+ ['\u{475}','\u{475}'],+ ['\u{477}','\u{477}'],+ ['\u{479}','\u{479}'],+ ['\u{47b}','\u{47b}'],+ ['\u{47d}','\u{47d}'],+ ['\u{47f}','\u{47f}'],+ ['\u{481}','\u{481}'],+ ['\u{48b}','\u{48b}'],+ ['\u{48d}','\u{48d}'],+ ['\u{48f}','\u{48f}'],+ ['\u{491}','\u{491}'],+ ['\u{493}','\u{493}'],+ ['\u{495}','\u{495}'],+ ['\u{497}','\u{497}'],+ ['\u{499}','\u{499}'],+ ['\u{49b}','\u{49b}'],+ ['\u{49d}','\u{49d}'],+ ['\u{49f}','\u{49f}'],+ ['\u{4a1}','\u{4a1}'],+ ['\u{4a3}','\u{4a3}'],+ ['\u{4a5}','\u{4a5}'],+ ['\u{4a7}','\u{4a7}'],+ ['\u{4a9}','\u{4a9}'],+ ['\u{4ab}','\u{4ab}'],+ ['\u{4ad}','\u{4ad}'],+ ['\u{4af}','\u{4af}'],+ ['\u{4b1}','\u{4b1}'],+ ['\u{4b3}','\u{4b3}'],+ ['\u{4b5}','\u{4b5}'],+ ['\u{4b7}','\u{4b7}'],+ ['\u{4b9}','\u{4b9}'],+ ['\u{4bb}','\u{4bb}'],+ ['\u{4bd}','\u{4bd}'],+ ['\u{4bf}','\u{4bf}'],+ ['\u{4c2}','\u{4c2}'],+ ['\u{4c4}','\u{4c4}'],+ ['\u{4c6}','\u{4c6}'],+ ['\u{4c8}','\u{4c8}'],+ ['\u{4ca}','\u{4ca}'],+ ['\u{4cc}','\u{4cc}'],+ ['\u{4ce}','\u{4cf}'],+ ['\u{4d1}','\u{4d1}'],+ ['\u{4d3}','\u{4d3}'],+ ['\u{4d5}','\u{4d5}'],+ ['\u{4d7}','\u{4d7}'],+ ['\u{4d9}','\u{4d9}'],+ ['\u{4db}','\u{4db}'],+ ['\u{4dd}','\u{4dd}'],+ ['\u{4df}','\u{4df}'],+ ['\u{4e1}','\u{4e1}'],+ ['\u{4e3}','\u{4e3}'],+ ['\u{4e5}','\u{4e5}'],+ ['\u{4e7}','\u{4e7}'],+ ['\u{4e9}','\u{4e9}'],+ ['\u{4eb}','\u{4eb}'],+ ['\u{4ed}','\u{4ed}'],+ ['\u{4ef}','\u{4ef}'],+ ['\u{4f1}','\u{4f1}'],+ ['\u{4f3}','\u{4f3}'],+ ['\u{4f5}','\u{4f5}'],+ ['\u{4f7}','\u{4f7}'],+ ['\u{4f9}','\u{4f9}'],+ ['\u{4fb}','\u{4fb}'],+ ['\u{4fd}','\u{4fd}'],+ ['\u{4ff}','\u{4ff}'],+ ['\u{501}','\u{501}'],+ ['\u{503}','\u{503}'],+ ['\u{505}','\u{505}'],+ ['\u{507}','\u{507}'],+ ['\u{509}','\u{509}'],+ ['\u{50b}','\u{50b}'],+ ['\u{50d}','\u{50d}'],+ ['\u{50f}','\u{50f}'],+ ['\u{511}','\u{511}'],+ ['\u{513}','\u{513}'],+ ['\u{515}','\u{515}'],+ ['\u{517}','\u{517}'],+ ['\u{519}','\u{519}'],+ ['\u{51b}','\u{51b}'],+ ['\u{51d}','\u{51d}'],+ ['\u{51f}','\u{51f}'],+ ['\u{521}','\u{521}'],+ ['\u{523}','\u{523}'],+ ['\u{525}','\u{525}'],+ ['\u{527}','\u{527}'],+ ['\u{561}','\u{587}'],+ ['\u{1d00}','\u{1d2b}'],+ ['\u{1d6b}','\u{1d77}'],+ ['\u{1d79}','\u{1d9a}'],+ ['\u{1e01}','\u{1e01}'],+ ['\u{1e03}','\u{1e03}'],+ ['\u{1e05}','\u{1e05}'],+ ['\u{1e07}','\u{1e07}'],+ ['\u{1e09}','\u{1e09}'],+ ['\u{1e0b}','\u{1e0b}'],+ ['\u{1e0d}','\u{1e0d}'],+ ['\u{1e0f}','\u{1e0f}'],+ ['\u{1e11}','\u{1e11}'],+ ['\u{1e13}','\u{1e13}'],+ ['\u{1e15}','\u{1e15}'],+ ['\u{1e17}','\u{1e17}'],+ ['\u{1e19}','\u{1e19}'],+ ['\u{1e1b}','\u{1e1b}'],+ ['\u{1e1d}','\u{1e1d}'],+ ['\u{1e1f}','\u{1e1f}'],+ ['\u{1e21}','\u{1e21}'],+ ['\u{1e23}','\u{1e23}'],+ ['\u{1e25}','\u{1e25}'],+ ['\u{1e27}','\u{1e27}'],+ ['\u{1e29}','\u{1e29}'],+ ['\u{1e2b}','\u{1e2b}'],+ ['\u{1e2d}','\u{1e2d}'],+ ['\u{1e2f}','\u{1e2f}'],+ ['\u{1e31}','\u{1e31}'],+ ['\u{1e33}','\u{1e33}'],+ ['\u{1e35}','\u{1e35}'],+ ['\u{1e37}','\u{1e37}'],+ ['\u{1e39}','\u{1e39}'],+ ['\u{1e3b}','\u{1e3b}'],+ ['\u{1e3d}','\u{1e3d}'],+ ['\u{1e3f}','\u{1e3f}'],+ ['\u{1e41}','\u{1e41}'],+ ['\u{1e43}','\u{1e43}'],+ ['\u{1e45}','\u{1e45}'],+ ['\u{1e47}','\u{1e47}'],+ ['\u{1e49}','\u{1e49}'],+ ['\u{1e4b}','\u{1e4b}'],+ ['\u{1e4d}','\u{1e4d}'],+ ['\u{1e4f}','\u{1e4f}'],+ ['\u{1e51}','\u{1e51}'],+ ['\u{1e53}','\u{1e53}'],+ ['\u{1e55}','\u{1e55}'],+ ['\u{1e57}','\u{1e57}'],+ ['\u{1e59}','\u{1e59}'],+ ['\u{1e5b}','\u{1e5b}'],+ ['\u{1e5d}','\u{1e5d}'],+ ['\u{1e5f}','\u{1e5f}'],+ ['\u{1e61}','\u{1e61}'],+ ['\u{1e63}','\u{1e63}'],+ ['\u{1e65}','\u{1e65}'],+ ['\u{1e67}','\u{1e67}'],+ ['\u{1e69}','\u{1e69}'],+ ['\u{1e6b}','\u{1e6b}'],+ ['\u{1e6d}','\u{1e6d}'],+ ['\u{1e6f}','\u{1e6f}'],+ ['\u{1e71}','\u{1e71}'],+ ['\u{1e73}','\u{1e73}'],+ ['\u{1e75}','\u{1e75}'],+ ['\u{1e77}','\u{1e77}'],+ ['\u{1e79}','\u{1e79}'],+ ['\u{1e7b}','\u{1e7b}'],+ ['\u{1e7d}','\u{1e7d}'],+ ['\u{1e7f}','\u{1e7f}'],+ ['\u{1e81}','\u{1e81}'],+ ['\u{1e83}','\u{1e83}'],+ ['\u{1e85}','\u{1e85}'],+ ['\u{1e87}','\u{1e87}'],+ ['\u{1e89}','\u{1e89}'],+ ['\u{1e8b}','\u{1e8b}'],+ ['\u{1e8d}','\u{1e8d}'],+ ['\u{1e8f}','\u{1e8f}'],+ ['\u{1e91}','\u{1e91}'],+ ['\u{1e93}','\u{1e93}'],+ ['\u{1e95}','\u{1e9d}'],+ ['\u{1e9f}','\u{1e9f}'],+ ['\u{1ea1}','\u{1ea1}'],+ ['\u{1ea3}','\u{1ea3}'],+ ['\u{1ea5}','\u{1ea5}'],+ ['\u{1ea7}','\u{1ea7}'],+ ['\u{1ea9}','\u{1ea9}'],+ ['\u{1eab}','\u{1eab}'],+ ['\u{1ead}','\u{1ead}'],+ ['\u{1eaf}','\u{1eaf}'],+ ['\u{1eb1}','\u{1eb1}'],+ ['\u{1eb3}','\u{1eb3}'],+ ['\u{1eb5}','\u{1eb5}'],+ ['\u{1eb7}','\u{1eb7}'],+ ['\u{1eb9}','\u{1eb9}'],+ ['\u{1ebb}','\u{1ebb}'],+ ['\u{1ebd}','\u{1ebd}'],+ ['\u{1ebf}','\u{1ebf}'],+ ['\u{1ec1}','\u{1ec1}'],+ ['\u{1ec3}','\u{1ec3}'],+ ['\u{1ec5}','\u{1ec5}'],+ ['\u{1ec7}','\u{1ec7}'],+ ['\u{1ec9}','\u{1ec9}'],+ ['\u{1ecb}','\u{1ecb}'],+ ['\u{1ecd}','\u{1ecd}'],+ ['\u{1ecf}','\u{1ecf}'],+ ['\u{1ed1}','\u{1ed1}'],+ ['\u{1ed3}','\u{1ed3}'],+ ['\u{1ed5}','\u{1ed5}'],+ ['\u{1ed7}','\u{1ed7}'],+ ['\u{1ed9}','\u{1ed9}'],+ ['\u{1edb}','\u{1edb}'],+ ['\u{1edd}','\u{1edd}'],+ ['\u{1edf}','\u{1edf}'],+ ['\u{1ee1}','\u{1ee1}'],+ ['\u{1ee3}','\u{1ee3}'],+ ['\u{1ee5}','\u{1ee5}'],+ ['\u{1ee7}','\u{1ee7}'],+ ['\u{1ee9}','\u{1ee9}'],+ ['\u{1eeb}','\u{1eeb}'],+ ['\u{1eed}','\u{1eed}'],+ ['\u{1eef}','\u{1eef}'],+ ['\u{1ef1}','\u{1ef1}'],+ ['\u{1ef3}','\u{1ef3}'],+ ['\u{1ef5}','\u{1ef5}'],+ ['\u{1ef7}','\u{1ef7}'],+ ['\u{1ef9}','\u{1ef9}'],+ ['\u{1efb}','\u{1efb}'],+ ['\u{1efd}','\u{1efd}'],+ ['\u{1eff}','\u{1f07}'],+ ['\u{1f10}','\u{1f15}'],+ ['\u{1f20}','\u{1f27}'],+ ['\u{1f30}','\u{1f37}'],+ ['\u{1f40}','\u{1f45}'],+ ['\u{1f50}','\u{1f57}'],+ ['\u{1f60}','\u{1f67}'],+ ['\u{1f70}','\u{1f7d}'],+ ['\u{1f80}','\u{1f87}'],+ ['\u{1f90}','\u{1f97}'],+ ['\u{1fa0}','\u{1fa7}'],+ ['\u{1fb0}','\u{1fb4}'],+ ['\u{1fb6}','\u{1fb7}'],+ ['\u{1fbe}','\u{1fbe}'],+ ['\u{1fc2}','\u{1fc4}'],+ ['\u{1fc6}','\u{1fc7}'],+ ['\u{1fd0}','\u{1fd3}'],+ ['\u{1fd6}','\u{1fd7}'],+ ['\u{1fe0}','\u{1fe7}'],+ ['\u{1ff2}','\u{1ff4}'],+ ['\u{1ff6}','\u{1ff7}'],+ ['\u{210a}','\u{210a}'],+ ['\u{210e}','\u{210f}'],+ ['\u{2113}','\u{2113}'],+ ['\u{212f}','\u{212f}'],+ ['\u{2134}','\u{2134}'],+ ['\u{2139}','\u{2139}'],+ ['\u{213c}','\u{213d}'],+ ['\u{2146}','\u{2149}'],+ ['\u{214e}','\u{214e}'],+ ['\u{2184}','\u{2184}'],+ ['\u{2c30}','\u{2c5e}'],+ ['\u{2c61}','\u{2c61}'],+ ['\u{2c65}','\u{2c66}'],+ ['\u{2c68}','\u{2c68}'],+ ['\u{2c6a}','\u{2c6a}'],+ ['\u{2c6c}','\u{2c6c}'],+ ['\u{2c71}','\u{2c71}'],+ ['\u{2c73}','\u{2c74}'],+ ['\u{2c76}','\u{2c7b}'],+ ['\u{2c81}','\u{2c81}'],+ ['\u{2c83}','\u{2c83}'],+ ['\u{2c85}','\u{2c85}'],+ ['\u{2c87}','\u{2c87}'],+ ['\u{2c89}','\u{2c89}'],+ ['\u{2c8b}','\u{2c8b}'],+ ['\u{2c8d}','\u{2c8d}'],+ ['\u{2c8f}','\u{2c8f}'],+ ['\u{2c91}','\u{2c91}'],+ ['\u{2c93}','\u{2c93}'],+ ['\u{2c95}','\u{2c95}'],+ ['\u{2c97}','\u{2c97}'],+ ['\u{2c99}','\u{2c99}'],+ ['\u{2c9b}','\u{2c9b}'],+ ['\u{2c9d}','\u{2c9d}'],+ ['\u{2c9f}','\u{2c9f}'],+ ['\u{2ca1}','\u{2ca1}'],+ ['\u{2ca3}','\u{2ca3}'],+ ['\u{2ca5}','\u{2ca5}'],+ ['\u{2ca7}','\u{2ca7}'],+ ['\u{2ca9}','\u{2ca9}'],+ ['\u{2cab}','\u{2cab}'],+ ['\u{2cad}','\u{2cad}'],+ ['\u{2caf}','\u{2caf}'],+ ['\u{2cb1}','\u{2cb1}'],+ ['\u{2cb3}','\u{2cb3}'],+ ['\u{2cb5}','\u{2cb5}'],+ ['\u{2cb7}','\u{2cb7}'],+ ['\u{2cb9}','\u{2cb9}'],+ ['\u{2cbb}','\u{2cbb}'],+ ['\u{2cbd}','\u{2cbd}'],+ ['\u{2cbf}','\u{2cbf}'],+ ['\u{2cc1}','\u{2cc1}'],+ ['\u{2cc3}','\u{2cc3}'],+ ['\u{2cc5}','\u{2cc5}'],+ ['\u{2cc7}','\u{2cc7}'],+ ['\u{2cc9}','\u{2cc9}'],+ ['\u{2ccb}','\u{2ccb}'],+ ['\u{2ccd}','\u{2ccd}'],+ ['\u{2ccf}','\u{2ccf}'],+ ['\u{2cd1}','\u{2cd1}'],+ ['\u{2cd3}','\u{2cd3}'],+ ['\u{2cd5}','\u{2cd5}'],+ ['\u{2cd7}','\u{2cd7}'],+ ['\u{2cd9}','\u{2cd9}'],+ ['\u{2cdb}','\u{2cdb}'],+ ['\u{2cdd}','\u{2cdd}'],+ ['\u{2cdf}','\u{2cdf}'],+ ['\u{2ce1}','\u{2ce1}'],+ ['\u{2ce3}','\u{2ce4}'],+ ['\u{2cec}','\u{2cec}'],+ ['\u{2cee}','\u{2cee}'],+ ['\u{2cf3}','\u{2cf3}'],+ ['\u{2d00}','\u{2d25}'],+ ['\u{2d27}','\u{2d27}'],+ ['\u{2d2d}','\u{2d2d}'],+ ['\u{a641}','\u{a641}'],+ ['\u{a643}','\u{a643}'],+ ['\u{a645}','\u{a645}'],+ ['\u{a647}','\u{a647}'],+ ['\u{a649}','\u{a649}'],+ ['\u{a64b}','\u{a64b}'],+ ['\u{a64d}','\u{a64d}'],+ ['\u{a64f}','\u{a64f}'],+ ['\u{a651}','\u{a651}'],+ ['\u{a653}','\u{a653}'],+ ['\u{a655}','\u{a655}'],+ ['\u{a657}','\u{a657}'],+ ['\u{a659}','\u{a659}'],+ ['\u{a65b}','\u{a65b}'],+ ['\u{a65d}','\u{a65d}'],+ ['\u{a65f}','\u{a65f}'],+ ['\u{a661}','\u{a661}'],+ ['\u{a663}','\u{a663}'],+ ['\u{a665}','\u{a665}'],+ ['\u{a667}','\u{a667}'],+ ['\u{a669}','\u{a669}'],+ ['\u{a66b}','\u{a66b}'],+ ['\u{a66d}','\u{a66d}'],+ ['\u{a681}','\u{a681}'],+ ['\u{a683}','\u{a683}'],+ ['\u{a685}','\u{a685}'],+ ['\u{a687}','\u{a687}'],+ ['\u{a689}','\u{a689}'],+ ['\u{a68b}','\u{a68b}'],+ ['\u{a68d}','\u{a68d}'],+ ['\u{a68f}','\u{a68f}'],+ ['\u{a691}','\u{a691}'],+ ['\u{a693}','\u{a693}'],+ ['\u{a695}','\u{a695}'],+ ['\u{a697}','\u{a697}'],+ ['\u{a723}','\u{a723}'],+ ['\u{a725}','\u{a725}'],+ ['\u{a727}','\u{a727}'],+ ['\u{a729}','\u{a729}'],+ ['\u{a72b}','\u{a72b}'],+ ['\u{a72d}','\u{a72d}'],+ ['\u{a72f}','\u{a731}'],+ ['\u{a733}','\u{a733}'],+ ['\u{a735}','\u{a735}'],+ ['\u{a737}','\u{a737}'],+ ['\u{a739}','\u{a739}'],+ ['\u{a73b}','\u{a73b}'],+ ['\u{a73d}','\u{a73d}'],+ ['\u{a73f}','\u{a73f}'],+ ['\u{a741}','\u{a741}'],+ ['\u{a743}','\u{a743}'],+ ['\u{a745}','\u{a745}'],+ ['\u{a747}','\u{a747}'],+ ['\u{a749}','\u{a749}'],+ ['\u{a74b}','\u{a74b}'],+ ['\u{a74d}','\u{a74d}'],+ ['\u{a74f}','\u{a74f}'],+ ['\u{a751}','\u{a751}'],+ ['\u{a753}','\u{a753}'],+ ['\u{a755}','\u{a755}'],+ ['\u{a757}','\u{a757}'],+ ['\u{a759}','\u{a759}'],+ ['\u{a75b}','\u{a75b}'],+ ['\u{a75d}','\u{a75d}'],+ ['\u{a75f}','\u{a75f}'],+ ['\u{a761}','\u{a761}'],+ ['\u{a763}','\u{a763}'],+ ['\u{a765}','\u{a765}'],+ ['\u{a767}','\u{a767}'],+ ['\u{a769}','\u{a769}'],+ ['\u{a76b}','\u{a76b}'],+ ['\u{a76d}','\u{a76d}'],+ ['\u{a76f}','\u{a76f}'],+ ['\u{a771}','\u{a778}'],+ ['\u{a77a}','\u{a77a}'],+ ['\u{a77c}','\u{a77c}'],+ ['\u{a77f}','\u{a77f}'],+ ['\u{a781}','\u{a781}'],+ ['\u{a783}','\u{a783}'],+ ['\u{a785}','\u{a785}'],+ ['\u{a787}','\u{a787}'],+ ['\u{a78c}','\u{a78c}'],+ ['\u{a78e}','\u{a78e}'],+ ['\u{a791}','\u{a791}'],+ ['\u{a793}','\u{a793}'],+ ['\u{a7a1}','\u{a7a1}'],+ ['\u{a7a3}','\u{a7a3}'],+ ['\u{a7a5}','\u{a7a5}'],+ ['\u{a7a7}','\u{a7a7}'],+ ['\u{a7a9}','\u{a7a9}'],+ ['\u{a7fa}','\u{a7fa}'],+ ['\u{fb00}','\u{fb06}'],+ ['\u{fb13}','\u{fb17}'],+ ['\u{ff41}','\u{ff5a}'],+ ['\u{10428}','\u{1044f}'],+ ['\u{1d41a}','\u{1d433}'],+ ['\u{1d44e}','\u{1d454}'],+ ['\u{1d456}','\u{1d467}'],+ ['\u{1d482}','\u{1d49b}'],+ ['\u{1d4b6}','\u{1d4b9}'],+ ['\u{1d4bb}','\u{1d4bb}'],+ ['\u{1d4bd}','\u{1d4c3}'],+ ['\u{1d4c5}','\u{1d4cf}'],+ ['\u{1d4ea}','\u{1d503}'],+ ['\u{1d51e}','\u{1d537}'],+ ['\u{1d552}','\u{1d56b}'],+ ['\u{1d586}','\u{1d59f}'],+ ['\u{1d5ba}','\u{1d5d3}'],+ ['\u{1d5ee}','\u{1d607}'],+ ['\u{1d622}','\u{1d63b}'],+ ['\u{1d656}','\u{1d66f}'],+ ['\u{1d68a}','\u{1d6a5}'],+ ['\u{1d6c2}','\u{1d6da}'],+ ['\u{1d6dc}','\u{1d6e1}'],+ ['\u{1d6fc}','\u{1d714}'],+ ['\u{1d716}','\u{1d71b}'],+ ['\u{1d736}','\u{1d74e}'],+ ['\u{1d750}','\u{1d755}'],+ ['\u{1d770}','\u{1d788}'],+ ['\u{1d78a}','\u{1d78f}'],+ ['\u{1d7aa}','\u{1d7c2}'],+ ['\u{1d7c4}','\u{1d7c9}'],+ ['\u{1d7cb}','\u{1d7cb}'],+]
+
+const tabtitle = [
+ ['\u{1c5}','\u{1c5}'],+ ['\u{1c8}','\u{1c8}'],+ ['\u{1cb}','\u{1cb}'],+ ['\u{1f2}','\u{1f2}'],+ ['\u{1f88}','\u{1f8f}'],+ ['\u{1f98}','\u{1f9f}'],+ ['\u{1fa8}','\u{1faf}'],+ ['\u{1fbc}','\u{1fbc}'],+ ['\u{1fcc}','\u{1fcc}'],+ ['\u{1ffc}','\u{1ffc}'],+]
+
+const tabword = [
+ ['\u{30}','\u{39}'],+ ['\u{41}','\u{5a}'],+ ['\u{5f}','\u{5f}'],+ ['\u{61}','\u{7a}'],+ ['\u{aa}','\u{aa}'],+ ['\u{b5}','\u{b5}'],+ ['\u{ba}','\u{ba}'],+ ['\u{c0}','\u{d6}'],+ ['\u{d8}','\u{f6}'],+ ['\u{f8}','\u{2c1}'],+ ['\u{2c6}','\u{2d1}'],+ ['\u{2e0}','\u{2e4}'],+ ['\u{2ec}','\u{2ec}'],+ ['\u{2ee}','\u{2ee}'],+ ['\u{370}','\u{374}'],+ ['\u{376}','\u{377}'],+ ['\u{37a}','\u{37d}'],+ ['\u{386}','\u{386}'],+ ['\u{388}','\u{38a}'],+ ['\u{38c}','\u{38c}'],+ ['\u{38e}','\u{3a1}'],+ ['\u{3a3}','\u{3f5}'],+ ['\u{3f7}','\u{481}'],+ ['\u{48a}','\u{527}'],+ ['\u{531}','\u{556}'],+ ['\u{559}','\u{559}'],+ ['\u{561}','\u{587}'],+ ['\u{5d0}','\u{5ea}'],+ ['\u{5f0}','\u{5f2}'],+ ['\u{620}','\u{64a}'],+ ['\u{660}','\u{669}'],+ ['\u{66e}','\u{66f}'],+ ['\u{671}','\u{6d3}'],+ ['\u{6d5}','\u{6d5}'],+ ['\u{6e5}','\u{6e6}'],+ ['\u{6ee}','\u{6fc}'],+ ['\u{6ff}','\u{6ff}'],+ ['\u{710}','\u{710}'],+ ['\u{712}','\u{72f}'],+ ['\u{74d}','\u{7a5}'],+ ['\u{7b1}','\u{7b1}'],+ ['\u{7c0}','\u{7ea}'],+ ['\u{7f4}','\u{7f5}'],+ ['\u{7fa}','\u{7fa}'],+ ['\u{800}','\u{815}'],+ ['\u{81a}','\u{81a}'],+ ['\u{824}','\u{824}'],+ ['\u{828}','\u{828}'],+ ['\u{840}','\u{858}'],+ ['\u{8a0}','\u{8a0}'],+ ['\u{8a2}','\u{8ac}'],+ ['\u{904}','\u{939}'],+ ['\u{93d}','\u{93d}'],+ ['\u{950}','\u{950}'],+ ['\u{958}','\u{961}'],+ ['\u{966}','\u{96f}'],+ ['\u{971}','\u{977}'],+ ['\u{979}','\u{97f}'],+ ['\u{985}','\u{98c}'],+ ['\u{98f}','\u{990}'],+ ['\u{993}','\u{9a8}'],+ ['\u{9aa}','\u{9b0}'],+ ['\u{9b2}','\u{9b2}'],+ ['\u{9b6}','\u{9b9}'],+ ['\u{9bd}','\u{9bd}'],+ ['\u{9ce}','\u{9ce}'],+ ['\u{9dc}','\u{9dd}'],+ ['\u{9df}','\u{9e1}'],+ ['\u{9e6}','\u{9f1}'],+ ['\u{a05}','\u{a0a}'],+ ['\u{a0f}','\u{a10}'],+ ['\u{a13}','\u{a28}'],+ ['\u{a2a}','\u{a30}'],+ ['\u{a32}','\u{a33}'],+ ['\u{a35}','\u{a36}'],+ ['\u{a38}','\u{a39}'],+ ['\u{a59}','\u{a5c}'],+ ['\u{a5e}','\u{a5e}'],+ ['\u{a66}','\u{a6f}'],+ ['\u{a72}','\u{a74}'],+ ['\u{a85}','\u{a8d}'],+ ['\u{a8f}','\u{a91}'],+ ['\u{a93}','\u{aa8}'],+ ['\u{aaa}','\u{ab0}'],+ ['\u{ab2}','\u{ab3}'],+ ['\u{ab5}','\u{ab9}'],+ ['\u{abd}','\u{abd}'],+ ['\u{ad0}','\u{ad0}'],+ ['\u{ae0}','\u{ae1}'],+ ['\u{ae6}','\u{aef}'],+ ['\u{b05}','\u{b0c}'],+ ['\u{b0f}','\u{b10}'],+ ['\u{b13}','\u{b28}'],+ ['\u{b2a}','\u{b30}'],+ ['\u{b32}','\u{b33}'],+ ['\u{b35}','\u{b39}'],+ ['\u{b3d}','\u{b3d}'],+ ['\u{b5c}','\u{b5d}'],+ ['\u{b5f}','\u{b61}'],+ ['\u{b66}','\u{b6f}'],+ ['\u{b71}','\u{b71}'],+ ['\u{b83}','\u{b83}'],+ ['\u{b85}','\u{b8a}'],+ ['\u{b8e}','\u{b90}'],+ ['\u{b92}','\u{b95}'],+ ['\u{b99}','\u{b9a}'],+ ['\u{b9c}','\u{b9c}'],+ ['\u{b9e}','\u{b9f}'],+ ['\u{ba3}','\u{ba4}'],+ ['\u{ba8}','\u{baa}'],+ ['\u{bae}','\u{bb9}'],+ ['\u{bd0}','\u{bd0}'],+ ['\u{be6}','\u{bef}'],+ ['\u{c05}','\u{c0c}'],+ ['\u{c0e}','\u{c10}'],+ ['\u{c12}','\u{c28}'],+ ['\u{c2a}','\u{c33}'],+ ['\u{c35}','\u{c39}'],+ ['\u{c3d}','\u{c3d}'],+ ['\u{c58}','\u{c59}'],+ ['\u{c60}','\u{c61}'],+ ['\u{c66}','\u{c6f}'],+ ['\u{c85}','\u{c8c}'],+ ['\u{c8e}','\u{c90}'],+ ['\u{c92}','\u{ca8}'],+ ['\u{caa}','\u{cb3}'],+ ['\u{cb5}','\u{cb9}'],+ ['\u{cbd}','\u{cbd}'],+ ['\u{cde}','\u{cde}'],+ ['\u{ce0}','\u{ce1}'],+ ['\u{ce6}','\u{cef}'],+ ['\u{cf1}','\u{cf2}'],+ ['\u{d05}','\u{d0c}'],+ ['\u{d0e}','\u{d10}'],+ ['\u{d12}','\u{d3a}'],+ ['\u{d3d}','\u{d3d}'],+ ['\u{d4e}','\u{d4e}'],+ ['\u{d60}','\u{d61}'],+ ['\u{d66}','\u{d6f}'],+ ['\u{d7a}','\u{d7f}'],+ ['\u{d85}','\u{d96}'],+ ['\u{d9a}','\u{db1}'],+ ['\u{db3}','\u{dbb}'],+ ['\u{dbd}','\u{dbd}'],+ ['\u{dc0}','\u{dc6}'],+ ['\u{e01}','\u{e30}'],+ ['\u{e32}','\u{e33}'],+ ['\u{e40}','\u{e46}'],+ ['\u{e50}','\u{e59}'],+ ['\u{e81}','\u{e82}'],+ ['\u{e84}','\u{e84}'],+ ['\u{e87}','\u{e88}'],+ ['\u{e8a}','\u{e8a}'],+ ['\u{e8d}','\u{e8d}'],+ ['\u{e94}','\u{e97}'],+ ['\u{e99}','\u{e9f}'],+ ['\u{ea1}','\u{ea3}'],+ ['\u{ea5}','\u{ea5}'],+ ['\u{ea7}','\u{ea7}'],+ ['\u{eaa}','\u{eab}'],+ ['\u{ead}','\u{eb0}'],+ ['\u{eb2}','\u{eb3}'],+ ['\u{ebd}','\u{ebd}'],+ ['\u{ec0}','\u{ec4}'],+ ['\u{ec6}','\u{ec6}'],+ ['\u{ed0}','\u{ed9}'],+ ['\u{edc}','\u{edf}'],+ ['\u{f00}','\u{f00}'],+ ['\u{f20}','\u{f29}'],+ ['\u{f40}','\u{f47}'],+ ['\u{f49}','\u{f6c}'],+ ['\u{f88}','\u{f8c}'],+ ['\u{1000}','\u{102a}'],+ ['\u{103f}','\u{1049}'],+ ['\u{1050}','\u{1055}'],+ ['\u{105a}','\u{105d}'],+ ['\u{1061}','\u{1061}'],+ ['\u{1065}','\u{1066}'],+ ['\u{106e}','\u{1070}'],+ ['\u{1075}','\u{1081}'],+ ['\u{108e}','\u{108e}'],+ ['\u{1090}','\u{1099}'],+ ['\u{10a0}','\u{10c5}'],+ ['\u{10c7}','\u{10c7}'],+ ['\u{10cd}','\u{10cd}'],+ ['\u{10d0}','\u{10fa}'],+ ['\u{10fc}','\u{1248}'],+ ['\u{124a}','\u{124d}'],+ ['\u{1250}','\u{1256}'],+ ['\u{1258}','\u{1258}'],+ ['\u{125a}','\u{125d}'],+ ['\u{1260}','\u{1288}'],+ ['\u{128a}','\u{128d}'],+ ['\u{1290}','\u{12b0}'],+ ['\u{12b2}','\u{12b5}'],+ ['\u{12b8}','\u{12be}'],+ ['\u{12c0}','\u{12c0}'],+ ['\u{12c2}','\u{12c5}'],+ ['\u{12c8}','\u{12d6}'],+ ['\u{12d8}','\u{1310}'],+ ['\u{1312}','\u{1315}'],+ ['\u{1318}','\u{135a}'],+ ['\u{1380}','\u{138f}'],+ ['\u{13a0}','\u{13f4}'],+ ['\u{1401}','\u{166c}'],+ ['\u{166f}','\u{167f}'],+ ['\u{1681}','\u{169a}'],+ ['\u{16a0}','\u{16ea}'],+ ['\u{1700}','\u{170c}'],+ ['\u{170e}','\u{1711}'],+ ['\u{1720}','\u{1731}'],+ ['\u{1740}','\u{1751}'],+ ['\u{1760}','\u{176c}'],+ ['\u{176e}','\u{1770}'],+ ['\u{1780}','\u{17b3}'],+ ['\u{17d7}','\u{17d7}'],+ ['\u{17dc}','\u{17dc}'],+ ['\u{17e0}','\u{17e9}'],+ ['\u{1810}','\u{1819}'],+ ['\u{1820}','\u{1877}'],+ ['\u{1880}','\u{18a8}'],+ ['\u{18aa}','\u{18aa}'],+ ['\u{18b0}','\u{18f5}'],+ ['\u{1900}','\u{191c}'],+ ['\u{1946}','\u{196d}'],+ ['\u{1970}','\u{1974}'],+ ['\u{1980}','\u{19ab}'],+ ['\u{19c1}','\u{19c7}'],+ ['\u{19d0}','\u{19d9}'],+ ['\u{1a00}','\u{1a16}'],+ ['\u{1a20}','\u{1a54}'],+ ['\u{1a80}','\u{1a89}'],+ ['\u{1a90}','\u{1a99}'],+ ['\u{1aa7}','\u{1aa7}'],+ ['\u{1b05}','\u{1b33}'],+ ['\u{1b45}','\u{1b4b}'],+ ['\u{1b50}','\u{1b59}'],+ ['\u{1b83}','\u{1ba0}'],+ ['\u{1bae}','\u{1be5}'],+ ['\u{1c00}','\u{1c23}'],+ ['\u{1c40}','\u{1c49}'],+ ['\u{1c4d}','\u{1c7d}'],+ ['\u{1ce9}','\u{1cec}'],+ ['\u{1cee}','\u{1cf1}'],+ ['\u{1cf5}','\u{1cf6}'],+ ['\u{1d00}','\u{1dbf}'],+ ['\u{1e00}','\u{1f15}'],+ ['\u{1f18}','\u{1f1d}'],+ ['\u{1f20}','\u{1f45}'],+ ['\u{1f48}','\u{1f4d}'],+ ['\u{1f50}','\u{1f57}'],+ ['\u{1f59}','\u{1f59}'],+ ['\u{1f5b}','\u{1f5b}'],+ ['\u{1f5d}','\u{1f5d}'],+ ['\u{1f5f}','\u{1f7d}'],+ ['\u{1f80}','\u{1fb4}'],+ ['\u{1fb6}','\u{1fbc}'],+ ['\u{1fbe}','\u{1fbe}'],+ ['\u{1fc2}','\u{1fc4}'],+ ['\u{1fc6}','\u{1fcc}'],+ ['\u{1fd0}','\u{1fd3}'],+ ['\u{1fd6}','\u{1fdb}'],+ ['\u{1fe0}','\u{1fec}'],+ ['\u{1ff2}','\u{1ff4}'],+ ['\u{1ff6}','\u{1ffc}'],+ ['\u{2071}','\u{2071}'],+ ['\u{207f}','\u{207f}'],+ ['\u{2090}','\u{209c}'],+ ['\u{2102}','\u{2102}'],+ ['\u{2107}','\u{2107}'],+ ['\u{210a}','\u{2113}'],+ ['\u{2115}','\u{2115}'],+ ['\u{2119}','\u{211d}'],+ ['\u{2124}','\u{2124}'],+ ['\u{2126}','\u{2126}'],+ ['\u{2128}','\u{2128}'],+ ['\u{212a}','\u{212d}'],+ ['\u{212f}','\u{2139}'],+ ['\u{213c}','\u{213f}'],+ ['\u{2145}','\u{2149}'],+ ['\u{214e}','\u{214e}'],+ ['\u{2183}','\u{2184}'],+ ['\u{2c00}','\u{2c2e}'],+ ['\u{2c30}','\u{2c5e}'],+ ['\u{2c60}','\u{2ce4}'],+ ['\u{2ceb}','\u{2cee}'],+ ['\u{2cf2}','\u{2cf3}'],+ ['\u{2d00}','\u{2d25}'],+ ['\u{2d27}','\u{2d27}'],+ ['\u{2d2d}','\u{2d2d}'],+ ['\u{2d30}','\u{2d67}'],+ ['\u{2d6f}','\u{2d6f}'],+ ['\u{2d80}','\u{2d96}'],+ ['\u{2da0}','\u{2da6}'],+ ['\u{2da8}','\u{2dae}'],+ ['\u{2db0}','\u{2db6}'],+ ['\u{2db8}','\u{2dbe}'],+ ['\u{2dc0}','\u{2dc6}'],+ ['\u{2dc8}','\u{2dce}'],+ ['\u{2dd0}','\u{2dd6}'],+ ['\u{2dd8}','\u{2dde}'],+ ['\u{2e2f}','\u{2e2f}'],+ ['\u{3005}','\u{3006}'],+ ['\u{3031}','\u{3035}'],+ ['\u{303b}','\u{303c}'],+ ['\u{3041}','\u{3096}'],+ ['\u{309d}','\u{309f}'],+ ['\u{30a1}','\u{30fa}'],+ ['\u{30fc}','\u{30ff}'],+ ['\u{3105}','\u{312d}'],+ ['\u{3131}','\u{318e}'],+ ['\u{31a0}','\u{31ba}'],+ ['\u{31f0}','\u{31ff}'],+ ['\u{3400}','\u{4db5}'],+ ['\u{4e00}','\u{9fcc}'],+ ['\u{a000}','\u{a48c}'],+ ['\u{a4d0}','\u{a4fd}'],+ ['\u{a500}','\u{a60c}'],+ ['\u{a610}','\u{a62b}'],+ ['\u{a640}','\u{a66e}'],+ ['\u{a67f}','\u{a697}'],+ ['\u{a6a0}','\u{a6e5}'],+ ['\u{a717}','\u{a71f}'],+ ['\u{a722}','\u{a788}'],+ ['\u{a78b}','\u{a78e}'],+ ['\u{a790}','\u{a793}'],+ ['\u{a7a0}','\u{a7aa}'],+ ['\u{a7f8}','\u{a801}'],+ ['\u{a803}','\u{a805}'],+ ['\u{a807}','\u{a80a}'],+ ['\u{a80c}','\u{a822}'],+ ['\u{a840}','\u{a873}'],+ ['\u{a882}','\u{a8b3}'],+ ['\u{a8d0}','\u{a8d9}'],+ ['\u{a8f2}','\u{a8f7}'],+ ['\u{a8fb}','\u{a8fb}'],+ ['\u{a900}','\u{a925}'],+ ['\u{a930}','\u{a946}'],+ ['\u{a960}','\u{a97c}'],+ ['\u{a984}','\u{a9b2}'],+ ['\u{a9cf}','\u{a9d9}'],+ ['\u{aa00}','\u{aa28}'],+ ['\u{aa40}','\u{aa42}'],+ ['\u{aa44}','\u{aa4b}'],+ ['\u{aa50}','\u{aa59}'],+ ['\u{aa60}','\u{aa76}'],+ ['\u{aa7a}','\u{aa7a}'],+ ['\u{aa80}','\u{aaaf}'],+ ['\u{aab1}','\u{aab1}'],+ ['\u{aab5}','\u{aab6}'],+ ['\u{aab9}','\u{aabd}'],+ ['\u{aac0}','\u{aac0}'],+ ['\u{aac2}','\u{aac2}'],+ ['\u{aadb}','\u{aadd}'],+ ['\u{aae0}','\u{aaea}'],+ ['\u{aaf2}','\u{aaf4}'],+ ['\u{ab01}','\u{ab06}'],+ ['\u{ab09}','\u{ab0e}'],+ ['\u{ab11}','\u{ab16}'],+ ['\u{ab20}','\u{ab26}'],+ ['\u{ab28}','\u{ab2e}'],+ ['\u{abc0}','\u{abe2}'],+ ['\u{abf0}','\u{abf9}'],+ ['\u{ac00}','\u{d7a3}'],+ ['\u{d7b0}','\u{d7c6}'],+ ['\u{d7cb}','\u{d7fb}'],+ ['\u{f900}','\u{fa6d}'],+ ['\u{fa70}','\u{fad9}'],+ ['\u{fb00}','\u{fb06}'],+ ['\u{fb13}','\u{fb17}'],+ ['\u{fb1d}','\u{fb1d}'],+ ['\u{fb1f}','\u{fb28}'],+ ['\u{fb2a}','\u{fb36}'],+ ['\u{fb38}','\u{fb3c}'],+ ['\u{fb3e}','\u{fb3e}'],+ ['\u{fb40}','\u{fb41}'],+ ['\u{fb43}','\u{fb44}'],+ ['\u{fb46}','\u{fbb1}'],+ ['\u{fbd3}','\u{fd3d}'],+ ['\u{fd50}','\u{fd8f}'],+ ['\u{fd92}','\u{fdc7}'],+ ['\u{fdf0}','\u{fdfb}'],+ ['\u{fe70}','\u{fe74}'],+ ['\u{fe76}','\u{fefc}'],+ ['\u{ff10}','\u{ff19}'],+ ['\u{ff21}','\u{ff3a}'],+ ['\u{ff41}','\u{ff5a}'],+ ['\u{ff66}','\u{ffbe}'],+ ['\u{ffc2}','\u{ffc7}'],+ ['\u{ffca}','\u{ffcf}'],+ ['\u{ffd2}','\u{ffd7}'],+ ['\u{ffda}','\u{ffdc}'],+ ['\u{10000}','\u{1000b}'],+ ['\u{1000d}','\u{10026}'],+ ['\u{10028}','\u{1003a}'],+ ['\u{1003c}','\u{1003d}'],+ ['\u{1003f}','\u{1004d}'],+ ['\u{10050}','\u{1005d}'],+ ['\u{10080}','\u{100fa}'],+ ['\u{10280}','\u{1029c}'],+ ['\u{102a0}','\u{102d0}'],+ ['\u{10300}','\u{1031e}'],+ ['\u{10330}','\u{10340}'],+ ['\u{10342}','\u{10349}'],+ ['\u{10380}','\u{1039d}'],+ ['\u{103a0}','\u{103c3}'],+ ['\u{103c8}','\u{103cf}'],+ ['\u{10400}','\u{1049d}'],+ ['\u{104a0}','\u{104a9}'],+ ['\u{10800}','\u{10805}'],+ ['\u{10808}','\u{10808}'],+ ['\u{1080a}','\u{10835}'],+ ['\u{10837}','\u{10838}'],+ ['\u{1083c}','\u{1083c}'],+ ['\u{1083f}','\u{10855}'],+ ['\u{10900}','\u{10915}'],+ ['\u{10920}','\u{10939}'],+ ['\u{10980}','\u{109b7}'],+ ['\u{109be}','\u{109bf}'],+ ['\u{10a00}','\u{10a00}'],+ ['\u{10a10}','\u{10a13}'],+ ['\u{10a15}','\u{10a17}'],+ ['\u{10a19}','\u{10a33}'],+ ['\u{10a60}','\u{10a7c}'],+ ['\u{10b00}','\u{10b35}'],+ ['\u{10b40}','\u{10b55}'],+ ['\u{10b60}','\u{10b72}'],+ ['\u{10c00}','\u{10c48}'],+ ['\u{11003}','\u{11037}'],+ ['\u{11066}','\u{1106f}'],+ ['\u{11083}','\u{110af}'],+ ['\u{110d0}','\u{110e8}'],+ ['\u{110f0}','\u{110f9}'],+ ['\u{11103}','\u{11126}'],+ ['\u{11136}','\u{1113f}'],+ ['\u{11183}','\u{111b2}'],+ ['\u{111c1}','\u{111c4}'],+ ['\u{111d0}','\u{111d9}'],+ ['\u{11680}','\u{116aa}'],+ ['\u{116c0}','\u{116c9}'],+ ['\u{12000}','\u{1236e}'],+ ['\u{13000}','\u{1342e}'],+ ['\u{16800}','\u{16a38}'],+ ['\u{16f00}','\u{16f44}'],+ ['\u{16f50}','\u{16f50}'],+ ['\u{16f93}','\u{16f9f}'],+ ['\u{1b000}','\u{1b001}'],+ ['\u{1d400}','\u{1d454}'],+ ['\u{1d456}','\u{1d49c}'],+ ['\u{1d49e}','\u{1d49f}'],+ ['\u{1d4a2}','\u{1d4a2}'],+ ['\u{1d4a5}','\u{1d4a6}'],+ ['\u{1d4a9}','\u{1d4ac}'],+ ['\u{1d4ae}','\u{1d4b9}'],+ ['\u{1d4bb}','\u{1d4bb}'],+ ['\u{1d4bd}','\u{1d4c3}'],+ ['\u{1d4c5}','\u{1d505}'],+ ['\u{1d507}','\u{1d50a}'],+ ['\u{1d50d}','\u{1d514}'],+ ['\u{1d516}','\u{1d51c}'],+ ['\u{1d51e}','\u{1d539}'],+ ['\u{1d53b}','\u{1d53e}'],+ ['\u{1d540}','\u{1d544}'],+ ['\u{1d546}','\u{1d546}'],+ ['\u{1d54a}','\u{1d550}'],+ ['\u{1d552}','\u{1d6a5}'],+ ['\u{1d6a8}','\u{1d6c0}'],+ ['\u{1d6c2}','\u{1d6da}'],+ ['\u{1d6dc}','\u{1d6fa}'],+ ['\u{1d6fc}','\u{1d714}'],+ ['\u{1d716}','\u{1d734}'],+ ['\u{1d736}','\u{1d74e}'],+ ['\u{1d750}','\u{1d76e}'],+ ['\u{1d770}','\u{1d788}'],+ ['\u{1d78a}','\u{1d7a8}'],+ ['\u{1d7aa}','\u{1d7c2}'],+ ['\u{1d7c4}','\u{1d7cb}'],+ ['\u{1d7ce}','\u{1d7ff}'],+ ['\u{1ee00}','\u{1ee03}'],+ ['\u{1ee05}','\u{1ee1f}'],+ ['\u{1ee21}','\u{1ee22}'],+ ['\u{1ee24}','\u{1ee24}'],+ ['\u{1ee27}','\u{1ee27}'],+ ['\u{1ee29}','\u{1ee32}'],+ ['\u{1ee34}','\u{1ee37}'],+ ['\u{1ee39}','\u{1ee39}'],+ ['\u{1ee3b}','\u{1ee3b}'],+ ['\u{1ee42}','\u{1ee42}'],+ ['\u{1ee47}','\u{1ee47}'],+ ['\u{1ee49}','\u{1ee49}'],+ ['\u{1ee4b}','\u{1ee4b}'],+ ['\u{1ee4d}','\u{1ee4f}'],+ ['\u{1ee51}','\u{1ee52}'],+ ['\u{1ee54}','\u{1ee54}'],+ ['\u{1ee57}','\u{1ee57}'],+ ['\u{1ee59}','\u{1ee59}'],+ ['\u{1ee5b}','\u{1ee5b}'],+ ['\u{1ee5d}','\u{1ee5d}'],+ ['\u{1ee5f}','\u{1ee5f}'],+ ['\u{1ee61}','\u{1ee62}'],+ ['\u{1ee64}','\u{1ee64}'],+ ['\u{1ee67}','\u{1ee6a}'],+ ['\u{1ee6c}','\u{1ee72}'],+ ['\u{1ee74}','\u{1ee77}'],+ ['\u{1ee79}','\u{1ee7c}'],+ ['\u{1ee7e}','\u{1ee7e}'],+ ['\u{1ee80}','\u{1ee89}'],+ ['\u{1ee8b}','\u{1ee9b}'],+ ['\u{1eea1}','\u{1eea3}'],+ ['\u{1eea5}','\u{1eea9}'],+ ['\u{1eeab}','\u{1eebb}'],+ ['\u{20000}','\u{2a6d6}'],+ ['\u{2a700}','\u{2b734}'],+ ['\u{2b740}','\u{2b81d}'],+ ['\u{2f800}','\u{2fa1d}'],+]
+
+const tabdigit = [
+ ['\u{30}','\u{39}'],+ ['\u{660}','\u{669}'],+ ['\u{6f0}','\u{6f9}'],+ ['\u{7c0}','\u{7c9}'],+ ['\u{966}','\u{96f}'],+ ['\u{9e6}','\u{9ef}'],+ ['\u{a66}','\u{a6f}'],+ ['\u{ae6}','\u{aef}'],+ ['\u{b66}','\u{b6f}'],+ ['\u{be6}','\u{bef}'],+ ['\u{c66}','\u{c6f}'],+ ['\u{ce6}','\u{cef}'],+ ['\u{d66}','\u{d6f}'],+ ['\u{e50}','\u{e59}'],+ ['\u{ed0}','\u{ed9}'],+ ['\u{f20}','\u{f29}'],+ ['\u{1040}','\u{1049}'],+ ['\u{1090}','\u{1099}'],+ ['\u{17e0}','\u{17e9}'],+ ['\u{1810}','\u{1819}'],+ ['\u{1946}','\u{194f}'],+ ['\u{19d0}','\u{19d9}'],+ ['\u{1a80}','\u{1a89}'],+ ['\u{1a90}','\u{1a99}'],+ ['\u{1b50}','\u{1b59}'],+ ['\u{1bb0}','\u{1bb9}'],+ ['\u{1c40}','\u{1c49}'],+ ['\u{1c50}','\u{1c59}'],+ ['\u{a620}','\u{a629}'],+ ['\u{a8d0}','\u{a8d9}'],+ ['\u{a900}','\u{a909}'],+ ['\u{a9d0}','\u{a9d9}'],+ ['\u{aa50}','\u{aa59}'],+ ['\u{abf0}','\u{abf9}'],+ ['\u{ff10}','\u{ff19}'],+ ['\u{104a0}','\u{104a9}'],+ ['\u{11066}','\u{1106f}'],+ ['\u{110f0}','\u{110f9}'],+ ['\u{11136}','\u{1113f}'],+ ['\u{111d0}','\u{111d9}'],+ ['\u{116c0}','\u{116c9}'],+ ['\u{1d7ce}','\u{1d7ff}'],+]
+
+const tabxdigit = [
+ ['\u{30}','\u{39}'],+ ['\u{41}','\u{46}'],+ ['\u{61}','\u{66}'],+]
+
+const tabspace = [
+ ['\u{9}','\u{d}'],+ ['\u{20}','\u{20}'],+ ['\u{85}','\u{85}'],+ ['\u{a0}','\u{a0}'],+ ['\u{1680}','\u{1680}'],+ ['\u{2000}','\u{200a}'],+ ['\u{2028}','\u{2029}'],+ ['\u{202f}','\u{202f}'],+ ['\u{205f}','\u{205f}'],+ ['\u{3000}','\u{3000}'],+]
+
+const tabblank = [
+ ['\u{9}','\u{9}'],+ ['\u{20}','\u{20}'],+ ['\u{a0}','\u{a0}'],+ ['\u{1680}','\u{1680}'],+ ['\u{2000}','\u{200a}'],+ ['\u{202f}','\u{202f}'],+ ['\u{205f}','\u{205f}'],+ ['\u{3000}','\u{3000}'],+]
+
--- a/test/data/regex-basic-expected
+++ b/test/data/regex-basic-expected
@@ -1,2 +1,5 @@
Matched. 1 matches
match 0: Abc
+Matched. 2 matches
+match 0: a
+match 1: a
--- a/test/regex-basic.myr
+++ b/test/regex-basic.myr
@@ -4,4 +4,5 @@
const main = { testmatch(".*bc", "Abc")+ testmatch("(a*)*", "a")}
--- a/test/testmatch.myr
+++ b/test/testmatch.myr
@@ -3,11 +3,20 @@
pkg =
const testmatch : (pat : byte[:], text : byte[:] -> void)
+ const dbgmatch : (pat : byte[:], text : byte[:] -> void)
;;
const testmatch = {pat, text+ run(regex.compile(pat), text)
+}
+
+const dbgmatch = {pat, text+ run(regex.dbgcompile(pat), text)
+}
+
+const run = {regex, textvar i
- match regex.compile(pat)
+ match regex
| `std.Success re:
match regex.exec(re, text)
| `std.Some m:
--- a/test/tests
+++ b/test/tests
@@ -21,6 +21,7 @@
# What we compare with. This should be self-
# evident.
B regex-basic C
+B regex-class C
B regex-capture C
B regex-failmatch C
B regex-unicode C
--
⑨