Implement lower, upper case conversion for char

This commit is contained in:
Piotr Zolnierek
2014-02-26 13:49:56 +01:00
parent 4a00211916
commit 04170b0a41
3 changed files with 1162 additions and 30 deletions
+74 -29
View File
@@ -19,7 +19,7 @@
# programs". It is not meant to be a complete implementation of unicode.
# For that we recommend you use a proper binding to libicu.
import fileinput, re, os, sys
import fileinput, re, os, sys, operator
def fetch(f):
@@ -35,6 +35,8 @@ def fetch(f):
def load_unicode_data(f):
fetch(f)
gencats = {}
upperlower = {}
lowerupper = {}
combines = []
canon_decomp = {}
compat_decomp = {}
@@ -44,6 +46,7 @@ def load_unicode_data(f):
c_hi = 0
com_lo = 0
com_hi = 0
for line in fileinput.input(f):
fields = line.split(";")
if len(fields) != 15:
@@ -52,7 +55,17 @@ def load_unicode_data(f):
decomp, deci, digit, num, mirror,
old, iso, upcase, lowcase, titlecase ] = fields
code = int(code, 16)
code_org = code
code = int(code, 16)
# generate char to char direct common and simple conversions
# uppercase to lowercase
if gencat == "Lu" and lowcase != "" and code_org != lowcase:
upperlower[code] = int(lowcase, 16)
# lowercase to uppercase
if gencat == "Ll" and upcase != "" and code_org != upcase:
lowerupper[code] = int(upcase, 16)
if decomp != "":
if decomp.startswith('<'):
@@ -96,7 +109,7 @@ def load_unicode_data(f):
com_lo = code
com_hi = code
return (canon_decomp, compat_decomp, gencats, combines)
return (canon_decomp, compat_decomp, gencats, combines, lowerupper, upperlower)
def load_properties(f, interestingprops):
fetch(f)
@@ -164,11 +177,12 @@ def emit_property_module(f, mod, tbl):
keys = tbl.keys()
keys.sort()
emit_bsearch_range_table(f);
for cat in keys:
if cat not in ["Nd", "Nl", "No", "Cc",
"XID_Start", "XID_Continue", "Alphabetic",
"Lowercase", "Uppercase", "White_Space"]:
continue
"XID_Start", "XID_Continue", "Alphabetic",
"Lowercase", "Uppercase", "White_Space"]:
continue
f.write(" static %s_table : &'static [(char,char)] = &[\n" % cat)
ix = 0
for pair in tbl[cat]:
@@ -183,30 +197,58 @@ def emit_property_module(f, mod, tbl):
f.write("}\n")
def emit_property_module_old(f, mod, tbl):
f.write("mod %s {\n" % mod)
keys = tbl.keys()
keys.sort()
for cat in keys:
f.write(" fn %s(c: char) -> bool {\n" % cat)
f.write(" ret alt c {\n")
prefix = ' '
for pair in tbl[cat]:
if pair[0] == pair[1]:
f.write(" %c %s\n" %
(prefix, escape_char(pair[0])))
else:
f.write(" %c %s to %s\n" %
(prefix,
escape_char(pair[0]),
escape_char(pair[1])))
prefix = '|'
f.write(" { true }\n")
f.write(" _ { false }\n")
f.write(" };\n")
f.write(" }\n\n")
def emit_conversions_module(f, lowerupper, upperlower):
f.write("pub mod conversions {\n")
f.write("""
use cmp::{Equal, Less, Greater};
use vec::ImmutableVector;
use tuple::Tuple2;
use option::{ Option, Some, None };
pub fn to_lower(c: char) -> char {
match bsearch_case_table(c, LuLl_table) {
None => c,
Some(index) => LuLl_table[index].val1()
}
}
pub fn to_upper(c: char) -> char {
match bsearch_case_table(c, LlLu_table) {
None => c,
Some(index) => LlLu_table[index].val1()
}
}
fn bsearch_case_table(c: char, table: &'static [(char, char)]) -> Option<uint> {
table.bsearch(|&(key, _)| {
if c == key { Equal }
else if key < c { Less }
else { Greater }
})
}
""");
emit_caseconversions(f, lowerupper, upperlower)
f.write("}\n")
def emit_caseconversions(f, lowerupper, upperlower):
f.write(" static LuLl_table : &'static [(char, char)] = &[\n")
sorted_by_lu = sorted(upperlower.iteritems(), key=operator.itemgetter(0))
ix = 0
for key, value in sorted_by_lu:
f.write(ch_prefix(ix))
f.write("(%s, %s)" % (escape_char(key), escape_char(value)))
ix += 1
f.write("\n ];\n\n")
f.write(" static LlLu_table : &'static [(char, char)] = &[\n")
sorted_by_ll = sorted(lowerupper.iteritems(), key=operator.itemgetter(0))
ix = 0
for key, value in sorted_by_ll:
f.write(ch_prefix(ix))
f.write("(%s, %s)" % (escape_char(key), escape_char(value)))
ix += 1
f.write("\n ];\n\n")
def format_table_content(f, content, indent):
line = " "*indent
first = True
@@ -362,7 +404,8 @@ for i in [r]:
os.remove(i);
rf = open(r, "w")
(canon_decomp, compat_decomp, gencats, combines) = load_unicode_data("UnicodeData.txt")
(canon_decomp, compat_decomp, gencats,
combines, lowerupper, upperlower) = load_unicode_data("UnicodeData.txt")
# Preamble
rf.write('''// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
@@ -388,7 +431,9 @@ emit_decomp_module(rf, canon_decomp, compat_decomp, combines)
derived = load_properties("DerivedCoreProperties.txt",
["XID_Start", "XID_Continue", "Alphabetic", "Lowercase", "Uppercase"])
emit_property_module(rf, "derived_property", derived)
props = load_properties("PropList.txt", ["White_Space"])
emit_property_module(rf, "property", props)
emit_conversions_module(rf, lowerupper, upperlower)
+66 -1
View File
@@ -28,7 +28,7 @@
use option::{None, Option, Some};
use iter::{Iterator, range_step};
use str::StrSlice;
use unicode::{derived_property, property, general_category, decompose};
use unicode::{derived_property, property, general_category, decompose, conversions};
#[cfg(test)] use str::OwnedStr;
@@ -225,6 +225,32 @@ pub fn to_digit(c: char, radix: uint) -> Option<uint> {
else { None }
}
/// Convert a char to its uppercase equivalent
///
/// The case-folding performed is the common or simple mapping:
/// it only maps a codepoint to its equivalent if it is also a single codepoint
///
/// # Return value
///
/// Returns the char itself if no conversion if possible
#[inline]
pub fn to_uppercase(c: char) -> char {
conversions::to_upper(c)
}
/// Convert a char to its lowercase equivalent
///
/// The case-folding performed is the common or simple mapping:
/// it only maps a codepoint to its equivalent if it is also a single codepoint
///
/// # Return value
///
/// Returns the char itself if no conversion if possible
#[inline]
pub fn to_lowercase(c: char) -> char {
conversions::to_lower(c)
}
///
/// Converts a number to the character representing it
///
@@ -385,6 +411,8 @@ pub trait Char {
fn is_digit(&self) -> bool;
fn is_digit_radix(&self, radix: uint) -> bool;
fn to_digit(&self, radix: uint) -> Option<uint>;
fn to_lowercase(&self) -> char;
fn to_uppercase(&self) -> char;
fn from_digit(num: uint, radix: uint) -> Option<char>;
fn escape_unicode(&self, f: |char|);
fn escape_default(&self, f: |char|);
@@ -421,6 +449,10 @@ fn is_digit_radix(&self, radix: uint) -> bool { is_digit_radix(*self, radix) }
fn to_digit(&self, radix: uint) -> Option<uint> { to_digit(*self, radix) }
fn to_lowercase(&self) -> char { to_lowercase(*self) }
fn to_uppercase(&self) -> char { to_uppercase(*self) }
fn from_digit(num: uint, radix: uint) -> Option<char> { from_digit(num, radix) }
fn escape_unicode(&self, f: |char|) { escape_unicode(*self, f) }
@@ -516,6 +548,39 @@ fn test_to_digit() {
assert_eq!('$'.to_digit(36u), None);
}
#[test]
fn test_to_lowercase() {
assert_eq!('A'.to_lowercase(), 'a');
assert_eq!('Ö'.to_lowercase(), 'ö');
assert_eq!('ß'.to_lowercase(), 'ß');
assert_eq!('Ü'.to_lowercase(), 'ü');
assert_eq!('💩'.to_lowercase(), '💩');
assert_eq!('Σ'.to_lowercase(), 'σ');
assert_eq!('Τ'.to_lowercase(), 'τ');
assert_eq!('Ι'.to_lowercase(), 'ι');
assert_eq!('Γ'.to_lowercase(), 'γ');
assert_eq!('Μ'.to_lowercase(), 'μ');
assert_eq!('Α'.to_lowercase(), 'α');
assert_eq!('Σ'.to_lowercase(), 'σ');
}
#[test]
fn test_to_uppercase() {
assert_eq!('a'.to_uppercase(), 'A');
assert_eq!('ö'.to_uppercase(), 'Ö');
assert_eq!('ß'.to_uppercase(), 'ß'); // not ẞ: Latin capital letter sharp s
assert_eq!('ü'.to_uppercase(), 'Ü');
assert_eq!('💩'.to_uppercase(), '💩');
assert_eq!('σ'.to_uppercase(), 'Σ');
assert_eq!('τ'.to_uppercase(), 'Τ');
assert_eq!('ι'.to_uppercase(), 'Ι');
assert_eq!('γ'.to_uppercase(), 'Γ');
assert_eq!('μ'.to_uppercase(), 'Μ');
assert_eq!('α'.to_uppercase(), 'Α');
assert_eq!('ς'.to_uppercase(), 'Σ');
}
#[test]
fn test_is_control() {
assert!('\u0000'.is_control());
+1022
View File
@@ -4179,3 +4179,1025 @@ pub fn White_Space(c: char) -> bool {
}
}
pub mod conversions {
use cmp::{Equal, Less, Greater};
use vec::ImmutableVector;
use tuple::Tuple2;
use option::{ Option, Some, None };
pub fn to_lower(c: char) -> char {
match bsearch_case_table(c, LuLl_table) {
None => c,
Some(index) => LuLl_table[index].val1()
}
}
pub fn to_upper(c: char) -> char {
match bsearch_case_table(c, LlLu_table) {
None => c,
Some(index) => LlLu_table[index].val1()
}
}
fn bsearch_case_table(c: char, table: &'static [(char, char)]) -> Option<uint> {
table.bsearch(|&(key, _)| {
if c == key { Equal }
else if key < c { Less }
else { Greater }
})
}
static LuLl_table : &'static [(char, char)] = &[
('\x41', '\x61'), ('\x42', '\x62'),
('\x43', '\x63'), ('\x44', '\x64'),
('\x45', '\x65'), ('\x46', '\x66'),
('\x47', '\x67'), ('\x48', '\x68'),
('\x49', '\x69'), ('\x4a', '\x6a'),
('\x4b', '\x6b'), ('\x4c', '\x6c'),
('\x4d', '\x6d'), ('\x4e', '\x6e'),
('\x4f', '\x6f'), ('\x50', '\x70'),
('\x51', '\x71'), ('\x52', '\x72'),
('\x53', '\x73'), ('\x54', '\x74'),
('\x55', '\x75'), ('\x56', '\x76'),
('\x57', '\x77'), ('\x58', '\x78'),
('\x59', '\x79'), ('\x5a', '\x7a'),
('\xc0', '\xe0'), ('\xc1', '\xe1'),
('\xc2', '\xe2'), ('\xc3', '\xe3'),
('\xc4', '\xe4'), ('\xc5', '\xe5'),
('\xc6', '\xe6'), ('\xc7', '\xe7'),
('\xc8', '\xe8'), ('\xc9', '\xe9'),
('\xca', '\xea'), ('\xcb', '\xeb'),
('\xcc', '\xec'), ('\xcd', '\xed'),
('\xce', '\xee'), ('\xcf', '\xef'),
('\xd0', '\xf0'), ('\xd1', '\xf1'),
('\xd2', '\xf2'), ('\xd3', '\xf3'),
('\xd4', '\xf4'), ('\xd5', '\xf5'),
('\xd6', '\xf6'), ('\xd8', '\xf8'),
('\xd9', '\xf9'), ('\xda', '\xfa'),
('\xdb', '\xfb'), ('\xdc', '\xfc'),
('\xdd', '\xfd'), ('\xde', '\xfe'),
('\u0100', '\u0101'), ('\u0102', '\u0103'),
('\u0104', '\u0105'), ('\u0106', '\u0107'),
('\u0108', '\u0109'), ('\u010a', '\u010b'),
('\u010c', '\u010d'), ('\u010e', '\u010f'),
('\u0110', '\u0111'), ('\u0112', '\u0113'),
('\u0114', '\u0115'), ('\u0116', '\u0117'),
('\u0118', '\u0119'), ('\u011a', '\u011b'),
('\u011c', '\u011d'), ('\u011e', '\u011f'),
('\u0120', '\u0121'), ('\u0122', '\u0123'),
('\u0124', '\u0125'), ('\u0126', '\u0127'),
('\u0128', '\u0129'), ('\u012a', '\u012b'),
('\u012c', '\u012d'), ('\u012e', '\u012f'),
('\u0130', '\x69'), ('\u0132', '\u0133'),
('\u0134', '\u0135'), ('\u0136', '\u0137'),
('\u0139', '\u013a'), ('\u013b', '\u013c'),
('\u013d', '\u013e'), ('\u013f', '\u0140'),
('\u0141', '\u0142'), ('\u0143', '\u0144'),
('\u0145', '\u0146'), ('\u0147', '\u0148'),
('\u014a', '\u014b'), ('\u014c', '\u014d'),
('\u014e', '\u014f'), ('\u0150', '\u0151'),
('\u0152', '\u0153'), ('\u0154', '\u0155'),
('\u0156', '\u0157'), ('\u0158', '\u0159'),
('\u015a', '\u015b'), ('\u015c', '\u015d'),
('\u015e', '\u015f'), ('\u0160', '\u0161'),
('\u0162', '\u0163'), ('\u0164', '\u0165'),
('\u0166', '\u0167'), ('\u0168', '\u0169'),
('\u016a', '\u016b'), ('\u016c', '\u016d'),
('\u016e', '\u016f'), ('\u0170', '\u0171'),
('\u0172', '\u0173'), ('\u0174', '\u0175'),
('\u0176', '\u0177'), ('\u0178', '\xff'),
('\u0179', '\u017a'), ('\u017b', '\u017c'),
('\u017d', '\u017e'), ('\u0181', '\u0253'),
('\u0182', '\u0183'), ('\u0184', '\u0185'),
('\u0186', '\u0254'), ('\u0187', '\u0188'),
('\u0189', '\u0256'), ('\u018a', '\u0257'),
('\u018b', '\u018c'), ('\u018e', '\u01dd'),
('\u018f', '\u0259'), ('\u0190', '\u025b'),
('\u0191', '\u0192'), ('\u0193', '\u0260'),
('\u0194', '\u0263'), ('\u0196', '\u0269'),
('\u0197', '\u0268'), ('\u0198', '\u0199'),
('\u019c', '\u026f'), ('\u019d', '\u0272'),
('\u019f', '\u0275'), ('\u01a0', '\u01a1'),
('\u01a2', '\u01a3'), ('\u01a4', '\u01a5'),
('\u01a6', '\u0280'), ('\u01a7', '\u01a8'),
('\u01a9', '\u0283'), ('\u01ac', '\u01ad'),
('\u01ae', '\u0288'), ('\u01af', '\u01b0'),
('\u01b1', '\u028a'), ('\u01b2', '\u028b'),
('\u01b3', '\u01b4'), ('\u01b5', '\u01b6'),
('\u01b7', '\u0292'), ('\u01b8', '\u01b9'),
('\u01bc', '\u01bd'), ('\u01c4', '\u01c6'),
('\u01c7', '\u01c9'), ('\u01ca', '\u01cc'),
('\u01cd', '\u01ce'), ('\u01cf', '\u01d0'),
('\u01d1', '\u01d2'), ('\u01d3', '\u01d4'),
('\u01d5', '\u01d6'), ('\u01d7', '\u01d8'),
('\u01d9', '\u01da'), ('\u01db', '\u01dc'),
('\u01de', '\u01df'), ('\u01e0', '\u01e1'),
('\u01e2', '\u01e3'), ('\u01e4', '\u01e5'),
('\u01e6', '\u01e7'), ('\u01e8', '\u01e9'),
('\u01ea', '\u01eb'), ('\u01ec', '\u01ed'),
('\u01ee', '\u01ef'), ('\u01f1', '\u01f3'),
('\u01f4', '\u01f5'), ('\u01f6', '\u0195'),
('\u01f7', '\u01bf'), ('\u01f8', '\u01f9'),
('\u01fa', '\u01fb'), ('\u01fc', '\u01fd'),
('\u01fe', '\u01ff'), ('\u0200', '\u0201'),
('\u0202', '\u0203'), ('\u0204', '\u0205'),
('\u0206', '\u0207'), ('\u0208', '\u0209'),
('\u020a', '\u020b'), ('\u020c', '\u020d'),
('\u020e', '\u020f'), ('\u0210', '\u0211'),
('\u0212', '\u0213'), ('\u0214', '\u0215'),
('\u0216', '\u0217'), ('\u0218', '\u0219'),
('\u021a', '\u021b'), ('\u021c', '\u021d'),
('\u021e', '\u021f'), ('\u0220', '\u019e'),
('\u0222', '\u0223'), ('\u0224', '\u0225'),
('\u0226', '\u0227'), ('\u0228', '\u0229'),
('\u022a', '\u022b'), ('\u022c', '\u022d'),
('\u022e', '\u022f'), ('\u0230', '\u0231'),
('\u0232', '\u0233'), ('\u023a', '\u2c65'),
('\u023b', '\u023c'), ('\u023d', '\u019a'),
('\u023e', '\u2c66'), ('\u0241', '\u0242'),
('\u0243', '\u0180'), ('\u0244', '\u0289'),
('\u0245', '\u028c'), ('\u0246', '\u0247'),
('\u0248', '\u0249'), ('\u024a', '\u024b'),
('\u024c', '\u024d'), ('\u024e', '\u024f'),
('\u0370', '\u0371'), ('\u0372', '\u0373'),
('\u0376', '\u0377'), ('\u0386', '\u03ac'),
('\u0388', '\u03ad'), ('\u0389', '\u03ae'),
('\u038a', '\u03af'), ('\u038c', '\u03cc'),
('\u038e', '\u03cd'), ('\u038f', '\u03ce'),
('\u0391', '\u03b1'), ('\u0392', '\u03b2'),
('\u0393', '\u03b3'), ('\u0394', '\u03b4'),
('\u0395', '\u03b5'), ('\u0396', '\u03b6'),
('\u0397', '\u03b7'), ('\u0398', '\u03b8'),
('\u0399', '\u03b9'), ('\u039a', '\u03ba'),
('\u039b', '\u03bb'), ('\u039c', '\u03bc'),
('\u039d', '\u03bd'), ('\u039e', '\u03be'),
('\u039f', '\u03bf'), ('\u03a0', '\u03c0'),
('\u03a1', '\u03c1'), ('\u03a3', '\u03c3'),
('\u03a4', '\u03c4'), ('\u03a5', '\u03c5'),
('\u03a6', '\u03c6'), ('\u03a7', '\u03c7'),
('\u03a8', '\u03c8'), ('\u03a9', '\u03c9'),
('\u03aa', '\u03ca'), ('\u03ab', '\u03cb'),
('\u03cf', '\u03d7'), ('\u03d8', '\u03d9'),
('\u03da', '\u03db'), ('\u03dc', '\u03dd'),
('\u03de', '\u03df'), ('\u03e0', '\u03e1'),
('\u03e2', '\u03e3'), ('\u03e4', '\u03e5'),
('\u03e6', '\u03e7'), ('\u03e8', '\u03e9'),
('\u03ea', '\u03eb'), ('\u03ec', '\u03ed'),
('\u03ee', '\u03ef'), ('\u03f4', '\u03b8'),
('\u03f7', '\u03f8'), ('\u03f9', '\u03f2'),
('\u03fa', '\u03fb'), ('\u03fd', '\u037b'),
('\u03fe', '\u037c'), ('\u03ff', '\u037d'),
('\u0400', '\u0450'), ('\u0401', '\u0451'),
('\u0402', '\u0452'), ('\u0403', '\u0453'),
('\u0404', '\u0454'), ('\u0405', '\u0455'),
('\u0406', '\u0456'), ('\u0407', '\u0457'),
('\u0408', '\u0458'), ('\u0409', '\u0459'),
('\u040a', '\u045a'), ('\u040b', '\u045b'),
('\u040c', '\u045c'), ('\u040d', '\u045d'),
('\u040e', '\u045e'), ('\u040f', '\u045f'),
('\u0410', '\u0430'), ('\u0411', '\u0431'),
('\u0412', '\u0432'), ('\u0413', '\u0433'),
('\u0414', '\u0434'), ('\u0415', '\u0435'),
('\u0416', '\u0436'), ('\u0417', '\u0437'),
('\u0418', '\u0438'), ('\u0419', '\u0439'),
('\u041a', '\u043a'), ('\u041b', '\u043b'),
('\u041c', '\u043c'), ('\u041d', '\u043d'),
('\u041e', '\u043e'), ('\u041f', '\u043f'),
('\u0420', '\u0440'), ('\u0421', '\u0441'),
('\u0422', '\u0442'), ('\u0423', '\u0443'),
('\u0424', '\u0444'), ('\u0425', '\u0445'),
('\u0426', '\u0446'), ('\u0427', '\u0447'),
('\u0428', '\u0448'), ('\u0429', '\u0449'),
('\u042a', '\u044a'), ('\u042b', '\u044b'),
('\u042c', '\u044c'), ('\u042d', '\u044d'),
('\u042e', '\u044e'), ('\u042f', '\u044f'),
('\u0460', '\u0461'), ('\u0462', '\u0463'),
('\u0464', '\u0465'), ('\u0466', '\u0467'),
('\u0468', '\u0469'), ('\u046a', '\u046b'),
('\u046c', '\u046d'), ('\u046e', '\u046f'),
('\u0470', '\u0471'), ('\u0472', '\u0473'),
('\u0474', '\u0475'), ('\u0476', '\u0477'),
('\u0478', '\u0479'), ('\u047a', '\u047b'),
('\u047c', '\u047d'), ('\u047e', '\u047f'),
('\u0480', '\u0481'), ('\u048a', '\u048b'),
('\u048c', '\u048d'), ('\u048e', '\u048f'),
('\u0490', '\u0491'), ('\u0492', '\u0493'),
('\u0494', '\u0495'), ('\u0496', '\u0497'),
('\u0498', '\u0499'), ('\u049a', '\u049b'),
('\u049c', '\u049d'), ('\u049e', '\u049f'),
('\u04a0', '\u04a1'), ('\u04a2', '\u04a3'),
('\u04a4', '\u04a5'), ('\u04a6', '\u04a7'),
('\u04a8', '\u04a9'), ('\u04aa', '\u04ab'),
('\u04ac', '\u04ad'), ('\u04ae', '\u04af'),
('\u04b0', '\u04b1'), ('\u04b2', '\u04b3'),
('\u04b4', '\u04b5'), ('\u04b6', '\u04b7'),
('\u04b8', '\u04b9'), ('\u04ba', '\u04bb'),
('\u04bc', '\u04bd'), ('\u04be', '\u04bf'),
('\u04c0', '\u04cf'), ('\u04c1', '\u04c2'),
('\u04c3', '\u04c4'), ('\u04c5', '\u04c6'),
('\u04c7', '\u04c8'), ('\u04c9', '\u04ca'),
('\u04cb', '\u04cc'), ('\u04cd', '\u04ce'),
('\u04d0', '\u04d1'), ('\u04d2', '\u04d3'),
('\u04d4', '\u04d5'), ('\u04d6', '\u04d7'),
('\u04d8', '\u04d9'), ('\u04da', '\u04db'),
('\u04dc', '\u04dd'), ('\u04de', '\u04df'),
('\u04e0', '\u04e1'), ('\u04e2', '\u04e3'),
('\u04e4', '\u04e5'), ('\u04e6', '\u04e7'),
('\u04e8', '\u04e9'), ('\u04ea', '\u04eb'),
('\u04ec', '\u04ed'), ('\u04ee', '\u04ef'),
('\u04f0', '\u04f1'), ('\u04f2', '\u04f3'),
('\u04f4', '\u04f5'), ('\u04f6', '\u04f7'),
('\u04f8', '\u04f9'), ('\u04fa', '\u04fb'),
('\u04fc', '\u04fd'), ('\u04fe', '\u04ff'),
('\u0500', '\u0501'), ('\u0502', '\u0503'),
('\u0504', '\u0505'), ('\u0506', '\u0507'),
('\u0508', '\u0509'), ('\u050a', '\u050b'),
('\u050c', '\u050d'), ('\u050e', '\u050f'),
('\u0510', '\u0511'), ('\u0512', '\u0513'),
('\u0514', '\u0515'), ('\u0516', '\u0517'),
('\u0518', '\u0519'), ('\u051a', '\u051b'),
('\u051c', '\u051d'), ('\u051e', '\u051f'),
('\u0520', '\u0521'), ('\u0522', '\u0523'),
('\u0524', '\u0525'), ('\u0526', '\u0527'),
('\u0531', '\u0561'), ('\u0532', '\u0562'),
('\u0533', '\u0563'), ('\u0534', '\u0564'),
('\u0535', '\u0565'), ('\u0536', '\u0566'),
('\u0537', '\u0567'), ('\u0538', '\u0568'),
('\u0539', '\u0569'), ('\u053a', '\u056a'),
('\u053b', '\u056b'), ('\u053c', '\u056c'),
('\u053d', '\u056d'), ('\u053e', '\u056e'),
('\u053f', '\u056f'), ('\u0540', '\u0570'),
('\u0541', '\u0571'), ('\u0542', '\u0572'),
('\u0543', '\u0573'), ('\u0544', '\u0574'),
('\u0545', '\u0575'), ('\u0546', '\u0576'),
('\u0547', '\u0577'), ('\u0548', '\u0578'),
('\u0549', '\u0579'), ('\u054a', '\u057a'),
('\u054b', '\u057b'), ('\u054c', '\u057c'),
('\u054d', '\u057d'), ('\u054e', '\u057e'),
('\u054f', '\u057f'), ('\u0550', '\u0580'),
('\u0551', '\u0581'), ('\u0552', '\u0582'),
('\u0553', '\u0583'), ('\u0554', '\u0584'),
('\u0555', '\u0585'), ('\u0556', '\u0586'),
('\u10a0', '\u2d00'), ('\u10a1', '\u2d01'),
('\u10a2', '\u2d02'), ('\u10a3', '\u2d03'),
('\u10a4', '\u2d04'), ('\u10a5', '\u2d05'),
('\u10a6', '\u2d06'), ('\u10a7', '\u2d07'),
('\u10a8', '\u2d08'), ('\u10a9', '\u2d09'),
('\u10aa', '\u2d0a'), ('\u10ab', '\u2d0b'),
('\u10ac', '\u2d0c'), ('\u10ad', '\u2d0d'),
('\u10ae', '\u2d0e'), ('\u10af', '\u2d0f'),
('\u10b0', '\u2d10'), ('\u10b1', '\u2d11'),
('\u10b2', '\u2d12'), ('\u10b3', '\u2d13'),
('\u10b4', '\u2d14'), ('\u10b5', '\u2d15'),
('\u10b6', '\u2d16'), ('\u10b7', '\u2d17'),
('\u10b8', '\u2d18'), ('\u10b9', '\u2d19'),
('\u10ba', '\u2d1a'), ('\u10bb', '\u2d1b'),
('\u10bc', '\u2d1c'), ('\u10bd', '\u2d1d'),
('\u10be', '\u2d1e'), ('\u10bf', '\u2d1f'),
('\u10c0', '\u2d20'), ('\u10c1', '\u2d21'),
('\u10c2', '\u2d22'), ('\u10c3', '\u2d23'),
('\u10c4', '\u2d24'), ('\u10c5', '\u2d25'),
('\u10c7', '\u2d27'), ('\u10cd', '\u2d2d'),
('\u1e00', '\u1e01'), ('\u1e02', '\u1e03'),
('\u1e04', '\u1e05'), ('\u1e06', '\u1e07'),
('\u1e08', '\u1e09'), ('\u1e0a', '\u1e0b'),
('\u1e0c', '\u1e0d'), ('\u1e0e', '\u1e0f'),
('\u1e10', '\u1e11'), ('\u1e12', '\u1e13'),
('\u1e14', '\u1e15'), ('\u1e16', '\u1e17'),
('\u1e18', '\u1e19'), ('\u1e1a', '\u1e1b'),
('\u1e1c', '\u1e1d'), ('\u1e1e', '\u1e1f'),
('\u1e20', '\u1e21'), ('\u1e22', '\u1e23'),
('\u1e24', '\u1e25'), ('\u1e26', '\u1e27'),
('\u1e28', '\u1e29'), ('\u1e2a', '\u1e2b'),
('\u1e2c', '\u1e2d'), ('\u1e2e', '\u1e2f'),
('\u1e30', '\u1e31'), ('\u1e32', '\u1e33'),
('\u1e34', '\u1e35'), ('\u1e36', '\u1e37'),
('\u1e38', '\u1e39'), ('\u1e3a', '\u1e3b'),
('\u1e3c', '\u1e3d'), ('\u1e3e', '\u1e3f'),
('\u1e40', '\u1e41'), ('\u1e42', '\u1e43'),
('\u1e44', '\u1e45'), ('\u1e46', '\u1e47'),
('\u1e48', '\u1e49'), ('\u1e4a', '\u1e4b'),
('\u1e4c', '\u1e4d'), ('\u1e4e', '\u1e4f'),
('\u1e50', '\u1e51'), ('\u1e52', '\u1e53'),
('\u1e54', '\u1e55'), ('\u1e56', '\u1e57'),
('\u1e58', '\u1e59'), ('\u1e5a', '\u1e5b'),
('\u1e5c', '\u1e5d'), ('\u1e5e', '\u1e5f'),
('\u1e60', '\u1e61'), ('\u1e62', '\u1e63'),
('\u1e64', '\u1e65'), ('\u1e66', '\u1e67'),
('\u1e68', '\u1e69'), ('\u1e6a', '\u1e6b'),
('\u1e6c', '\u1e6d'), ('\u1e6e', '\u1e6f'),
('\u1e70', '\u1e71'), ('\u1e72', '\u1e73'),
('\u1e74', '\u1e75'), ('\u1e76', '\u1e77'),
('\u1e78', '\u1e79'), ('\u1e7a', '\u1e7b'),
('\u1e7c', '\u1e7d'), ('\u1e7e', '\u1e7f'),
('\u1e80', '\u1e81'), ('\u1e82', '\u1e83'),
('\u1e84', '\u1e85'), ('\u1e86', '\u1e87'),
('\u1e88', '\u1e89'), ('\u1e8a', '\u1e8b'),
('\u1e8c', '\u1e8d'), ('\u1e8e', '\u1e8f'),
('\u1e90', '\u1e91'), ('\u1e92', '\u1e93'),
('\u1e94', '\u1e95'), ('\u1e9e', '\xdf'),
('\u1ea0', '\u1ea1'), ('\u1ea2', '\u1ea3'),
('\u1ea4', '\u1ea5'), ('\u1ea6', '\u1ea7'),
('\u1ea8', '\u1ea9'), ('\u1eaa', '\u1eab'),
('\u1eac', '\u1ead'), ('\u1eae', '\u1eaf'),
('\u1eb0', '\u1eb1'), ('\u1eb2', '\u1eb3'),
('\u1eb4', '\u1eb5'), ('\u1eb6', '\u1eb7'),
('\u1eb8', '\u1eb9'), ('\u1eba', '\u1ebb'),
('\u1ebc', '\u1ebd'), ('\u1ebe', '\u1ebf'),
('\u1ec0', '\u1ec1'), ('\u1ec2', '\u1ec3'),
('\u1ec4', '\u1ec5'), ('\u1ec6', '\u1ec7'),
('\u1ec8', '\u1ec9'), ('\u1eca', '\u1ecb'),
('\u1ecc', '\u1ecd'), ('\u1ece', '\u1ecf'),
('\u1ed0', '\u1ed1'), ('\u1ed2', '\u1ed3'),
('\u1ed4', '\u1ed5'), ('\u1ed6', '\u1ed7'),
('\u1ed8', '\u1ed9'), ('\u1eda', '\u1edb'),
('\u1edc', '\u1edd'), ('\u1ede', '\u1edf'),
('\u1ee0', '\u1ee1'), ('\u1ee2', '\u1ee3'),
('\u1ee4', '\u1ee5'), ('\u1ee6', '\u1ee7'),
('\u1ee8', '\u1ee9'), ('\u1eea', '\u1eeb'),
('\u1eec', '\u1eed'), ('\u1eee', '\u1eef'),
('\u1ef0', '\u1ef1'), ('\u1ef2', '\u1ef3'),
('\u1ef4', '\u1ef5'), ('\u1ef6', '\u1ef7'),
('\u1ef8', '\u1ef9'), ('\u1efa', '\u1efb'),
('\u1efc', '\u1efd'), ('\u1efe', '\u1eff'),
('\u1f08', '\u1f00'), ('\u1f09', '\u1f01'),
('\u1f0a', '\u1f02'), ('\u1f0b', '\u1f03'),
('\u1f0c', '\u1f04'), ('\u1f0d', '\u1f05'),
('\u1f0e', '\u1f06'), ('\u1f0f', '\u1f07'),
('\u1f18', '\u1f10'), ('\u1f19', '\u1f11'),
('\u1f1a', '\u1f12'), ('\u1f1b', '\u1f13'),
('\u1f1c', '\u1f14'), ('\u1f1d', '\u1f15'),
('\u1f28', '\u1f20'), ('\u1f29', '\u1f21'),
('\u1f2a', '\u1f22'), ('\u1f2b', '\u1f23'),
('\u1f2c', '\u1f24'), ('\u1f2d', '\u1f25'),
('\u1f2e', '\u1f26'), ('\u1f2f', '\u1f27'),
('\u1f38', '\u1f30'), ('\u1f39', '\u1f31'),
('\u1f3a', '\u1f32'), ('\u1f3b', '\u1f33'),
('\u1f3c', '\u1f34'), ('\u1f3d', '\u1f35'),
('\u1f3e', '\u1f36'), ('\u1f3f', '\u1f37'),
('\u1f48', '\u1f40'), ('\u1f49', '\u1f41'),
('\u1f4a', '\u1f42'), ('\u1f4b', '\u1f43'),
('\u1f4c', '\u1f44'), ('\u1f4d', '\u1f45'),
('\u1f59', '\u1f51'), ('\u1f5b', '\u1f53'),
('\u1f5d', '\u1f55'), ('\u1f5f', '\u1f57'),
('\u1f68', '\u1f60'), ('\u1f69', '\u1f61'),
('\u1f6a', '\u1f62'), ('\u1f6b', '\u1f63'),
('\u1f6c', '\u1f64'), ('\u1f6d', '\u1f65'),
('\u1f6e', '\u1f66'), ('\u1f6f', '\u1f67'),
('\u1fb8', '\u1fb0'), ('\u1fb9', '\u1fb1'),
('\u1fba', '\u1f70'), ('\u1fbb', '\u1f71'),
('\u1fc8', '\u1f72'), ('\u1fc9', '\u1f73'),
('\u1fca', '\u1f74'), ('\u1fcb', '\u1f75'),
('\u1fd8', '\u1fd0'), ('\u1fd9', '\u1fd1'),
('\u1fda', '\u1f76'), ('\u1fdb', '\u1f77'),
('\u1fe8', '\u1fe0'), ('\u1fe9', '\u1fe1'),
('\u1fea', '\u1f7a'), ('\u1feb', '\u1f7b'),
('\u1fec', '\u1fe5'), ('\u1ff8', '\u1f78'),
('\u1ff9', '\u1f79'), ('\u1ffa', '\u1f7c'),
('\u1ffb', '\u1f7d'), ('\u2126', '\u03c9'),
('\u212a', '\x6b'), ('\u212b', '\xe5'),
('\u2132', '\u214e'), ('\u2183', '\u2184'),
('\u2c00', '\u2c30'), ('\u2c01', '\u2c31'),
('\u2c02', '\u2c32'), ('\u2c03', '\u2c33'),
('\u2c04', '\u2c34'), ('\u2c05', '\u2c35'),
('\u2c06', '\u2c36'), ('\u2c07', '\u2c37'),
('\u2c08', '\u2c38'), ('\u2c09', '\u2c39'),
('\u2c0a', '\u2c3a'), ('\u2c0b', '\u2c3b'),
('\u2c0c', '\u2c3c'), ('\u2c0d', '\u2c3d'),
('\u2c0e', '\u2c3e'), ('\u2c0f', '\u2c3f'),
('\u2c10', '\u2c40'), ('\u2c11', '\u2c41'),
('\u2c12', '\u2c42'), ('\u2c13', '\u2c43'),
('\u2c14', '\u2c44'), ('\u2c15', '\u2c45'),
('\u2c16', '\u2c46'), ('\u2c17', '\u2c47'),
('\u2c18', '\u2c48'), ('\u2c19', '\u2c49'),
('\u2c1a', '\u2c4a'), ('\u2c1b', '\u2c4b'),
('\u2c1c', '\u2c4c'), ('\u2c1d', '\u2c4d'),
('\u2c1e', '\u2c4e'), ('\u2c1f', '\u2c4f'),
('\u2c20', '\u2c50'), ('\u2c21', '\u2c51'),
('\u2c22', '\u2c52'), ('\u2c23', '\u2c53'),
('\u2c24', '\u2c54'), ('\u2c25', '\u2c55'),
('\u2c26', '\u2c56'), ('\u2c27', '\u2c57'),
('\u2c28', '\u2c58'), ('\u2c29', '\u2c59'),
('\u2c2a', '\u2c5a'), ('\u2c2b', '\u2c5b'),
('\u2c2c', '\u2c5c'), ('\u2c2d', '\u2c5d'),
('\u2c2e', '\u2c5e'), ('\u2c60', '\u2c61'),
('\u2c62', '\u026b'), ('\u2c63', '\u1d7d'),
('\u2c64', '\u027d'), ('\u2c67', '\u2c68'),
('\u2c69', '\u2c6a'), ('\u2c6b', '\u2c6c'),
('\u2c6d', '\u0251'), ('\u2c6e', '\u0271'),
('\u2c6f', '\u0250'), ('\u2c70', '\u0252'),
('\u2c72', '\u2c73'), ('\u2c75', '\u2c76'),
('\u2c7e', '\u023f'), ('\u2c7f', '\u0240'),
('\u2c80', '\u2c81'), ('\u2c82', '\u2c83'),
('\u2c84', '\u2c85'), ('\u2c86', '\u2c87'),
('\u2c88', '\u2c89'), ('\u2c8a', '\u2c8b'),
('\u2c8c', '\u2c8d'), ('\u2c8e', '\u2c8f'),
('\u2c90', '\u2c91'), ('\u2c92', '\u2c93'),
('\u2c94', '\u2c95'), ('\u2c96', '\u2c97'),
('\u2c98', '\u2c99'), ('\u2c9a', '\u2c9b'),
('\u2c9c', '\u2c9d'), ('\u2c9e', '\u2c9f'),
('\u2ca0', '\u2ca1'), ('\u2ca2', '\u2ca3'),
('\u2ca4', '\u2ca5'), ('\u2ca6', '\u2ca7'),
('\u2ca8', '\u2ca9'), ('\u2caa', '\u2cab'),
('\u2cac', '\u2cad'), ('\u2cae', '\u2caf'),
('\u2cb0', '\u2cb1'), ('\u2cb2', '\u2cb3'),
('\u2cb4', '\u2cb5'), ('\u2cb6', '\u2cb7'),
('\u2cb8', '\u2cb9'), ('\u2cba', '\u2cbb'),
('\u2cbc', '\u2cbd'), ('\u2cbe', '\u2cbf'),
('\u2cc0', '\u2cc1'), ('\u2cc2', '\u2cc3'),
('\u2cc4', '\u2cc5'), ('\u2cc6', '\u2cc7'),
('\u2cc8', '\u2cc9'), ('\u2cca', '\u2ccb'),
('\u2ccc', '\u2ccd'), ('\u2cce', '\u2ccf'),
('\u2cd0', '\u2cd1'), ('\u2cd2', '\u2cd3'),
('\u2cd4', '\u2cd5'), ('\u2cd6', '\u2cd7'),
('\u2cd8', '\u2cd9'), ('\u2cda', '\u2cdb'),
('\u2cdc', '\u2cdd'), ('\u2cde', '\u2cdf'),
('\u2ce0', '\u2ce1'), ('\u2ce2', '\u2ce3'),
('\u2ceb', '\u2cec'), ('\u2ced', '\u2cee'),
('\u2cf2', '\u2cf3'), ('\ua640', '\ua641'),
('\ua642', '\ua643'), ('\ua644', '\ua645'),
('\ua646', '\ua647'), ('\ua648', '\ua649'),
('\ua64a', '\ua64b'), ('\ua64c', '\ua64d'),
('\ua64e', '\ua64f'), ('\ua650', '\ua651'),
('\ua652', '\ua653'), ('\ua654', '\ua655'),
('\ua656', '\ua657'), ('\ua658', '\ua659'),
('\ua65a', '\ua65b'), ('\ua65c', '\ua65d'),
('\ua65e', '\ua65f'), ('\ua660', '\ua661'),
('\ua662', '\ua663'), ('\ua664', '\ua665'),
('\ua666', '\ua667'), ('\ua668', '\ua669'),
('\ua66a', '\ua66b'), ('\ua66c', '\ua66d'),
('\ua680', '\ua681'), ('\ua682', '\ua683'),
('\ua684', '\ua685'), ('\ua686', '\ua687'),
('\ua688', '\ua689'), ('\ua68a', '\ua68b'),
('\ua68c', '\ua68d'), ('\ua68e', '\ua68f'),
('\ua690', '\ua691'), ('\ua692', '\ua693'),
('\ua694', '\ua695'), ('\ua696', '\ua697'),
('\ua722', '\ua723'), ('\ua724', '\ua725'),
('\ua726', '\ua727'), ('\ua728', '\ua729'),
('\ua72a', '\ua72b'), ('\ua72c', '\ua72d'),
('\ua72e', '\ua72f'), ('\ua732', '\ua733'),
('\ua734', '\ua735'), ('\ua736', '\ua737'),
('\ua738', '\ua739'), ('\ua73a', '\ua73b'),
('\ua73c', '\ua73d'), ('\ua73e', '\ua73f'),
('\ua740', '\ua741'), ('\ua742', '\ua743'),
('\ua744', '\ua745'), ('\ua746', '\ua747'),
('\ua748', '\ua749'), ('\ua74a', '\ua74b'),
('\ua74c', '\ua74d'), ('\ua74e', '\ua74f'),
('\ua750', '\ua751'), ('\ua752', '\ua753'),
('\ua754', '\ua755'), ('\ua756', '\ua757'),
('\ua758', '\ua759'), ('\ua75a', '\ua75b'),
('\ua75c', '\ua75d'), ('\ua75e', '\ua75f'),
('\ua760', '\ua761'), ('\ua762', '\ua763'),
('\ua764', '\ua765'), ('\ua766', '\ua767'),
('\ua768', '\ua769'), ('\ua76a', '\ua76b'),
('\ua76c', '\ua76d'), ('\ua76e', '\ua76f'),
('\ua779', '\ua77a'), ('\ua77b', '\ua77c'),
('\ua77d', '\u1d79'), ('\ua77e', '\ua77f'),
('\ua780', '\ua781'), ('\ua782', '\ua783'),
('\ua784', '\ua785'), ('\ua786', '\ua787'),
('\ua78b', '\ua78c'), ('\ua78d', '\u0265'),
('\ua790', '\ua791'), ('\ua792', '\ua793'),
('\ua7a0', '\ua7a1'), ('\ua7a2', '\ua7a3'),
('\ua7a4', '\ua7a5'), ('\ua7a6', '\ua7a7'),
('\ua7a8', '\ua7a9'), ('\ua7aa', '\u0266'),
('\uff21', '\uff41'), ('\uff22', '\uff42'),
('\uff23', '\uff43'), ('\uff24', '\uff44'),
('\uff25', '\uff45'), ('\uff26', '\uff46'),
('\uff27', '\uff47'), ('\uff28', '\uff48'),
('\uff29', '\uff49'), ('\uff2a', '\uff4a'),
('\uff2b', '\uff4b'), ('\uff2c', '\uff4c'),
('\uff2d', '\uff4d'), ('\uff2e', '\uff4e'),
('\uff2f', '\uff4f'), ('\uff30', '\uff50'),
('\uff31', '\uff51'), ('\uff32', '\uff52'),
('\uff33', '\uff53'), ('\uff34', '\uff54'),
('\uff35', '\uff55'), ('\uff36', '\uff56'),
('\uff37', '\uff57'), ('\uff38', '\uff58'),
('\uff39', '\uff59'), ('\uff3a', '\uff5a'),
('\U00010400', '\U00010428'), ('\U00010401', '\U00010429'),
('\U00010402', '\U0001042a'), ('\U00010403', '\U0001042b'),
('\U00010404', '\U0001042c'), ('\U00010405', '\U0001042d'),
('\U00010406', '\U0001042e'), ('\U00010407', '\U0001042f'),
('\U00010408', '\U00010430'), ('\U00010409', '\U00010431'),
('\U0001040a', '\U00010432'), ('\U0001040b', '\U00010433'),
('\U0001040c', '\U00010434'), ('\U0001040d', '\U00010435'),
('\U0001040e', '\U00010436'), ('\U0001040f', '\U00010437'),
('\U00010410', '\U00010438'), ('\U00010411', '\U00010439'),
('\U00010412', '\U0001043a'), ('\U00010413', '\U0001043b'),
('\U00010414', '\U0001043c'), ('\U00010415', '\U0001043d'),
('\U00010416', '\U0001043e'), ('\U00010417', '\U0001043f'),
('\U00010418', '\U00010440'), ('\U00010419', '\U00010441'),
('\U0001041a', '\U00010442'), ('\U0001041b', '\U00010443'),
('\U0001041c', '\U00010444'), ('\U0001041d', '\U00010445'),
('\U0001041e', '\U00010446'), ('\U0001041f', '\U00010447'),
('\U00010420', '\U00010448'), ('\U00010421', '\U00010449'),
('\U00010422', '\U0001044a'), ('\U00010423', '\U0001044b'),
('\U00010424', '\U0001044c'), ('\U00010425', '\U0001044d'),
('\U00010426', '\U0001044e'), ('\U00010427', '\U0001044f')
];
static LlLu_table : &'static [(char, char)] = &[
('\x61', '\x41'), ('\x62', '\x42'),
('\x63', '\x43'), ('\x64', '\x44'),
('\x65', '\x45'), ('\x66', '\x46'),
('\x67', '\x47'), ('\x68', '\x48'),
('\x69', '\x49'), ('\x6a', '\x4a'),
('\x6b', '\x4b'), ('\x6c', '\x4c'),
('\x6d', '\x4d'), ('\x6e', '\x4e'),
('\x6f', '\x4f'), ('\x70', '\x50'),
('\x71', '\x51'), ('\x72', '\x52'),
('\x73', '\x53'), ('\x74', '\x54'),
('\x75', '\x55'), ('\x76', '\x56'),
('\x77', '\x57'), ('\x78', '\x58'),
('\x79', '\x59'), ('\x7a', '\x5a'),
('\xb5', '\u039c'), ('\xe0', '\xc0'),
('\xe1', '\xc1'), ('\xe2', '\xc2'),
('\xe3', '\xc3'), ('\xe4', '\xc4'),
('\xe5', '\xc5'), ('\xe6', '\xc6'),
('\xe7', '\xc7'), ('\xe8', '\xc8'),
('\xe9', '\xc9'), ('\xea', '\xca'),
('\xeb', '\xcb'), ('\xec', '\xcc'),
('\xed', '\xcd'), ('\xee', '\xce'),
('\xef', '\xcf'), ('\xf0', '\xd0'),
('\xf1', '\xd1'), ('\xf2', '\xd2'),
('\xf3', '\xd3'), ('\xf4', '\xd4'),
('\xf5', '\xd5'), ('\xf6', '\xd6'),
('\xf8', '\xd8'), ('\xf9', '\xd9'),
('\xfa', '\xda'), ('\xfb', '\xdb'),
('\xfc', '\xdc'), ('\xfd', '\xdd'),
('\xfe', '\xde'), ('\xff', '\u0178'),
('\u0101', '\u0100'), ('\u0103', '\u0102'),
('\u0105', '\u0104'), ('\u0107', '\u0106'),
('\u0109', '\u0108'), ('\u010b', '\u010a'),
('\u010d', '\u010c'), ('\u010f', '\u010e'),
('\u0111', '\u0110'), ('\u0113', '\u0112'),
('\u0115', '\u0114'), ('\u0117', '\u0116'),
('\u0119', '\u0118'), ('\u011b', '\u011a'),
('\u011d', '\u011c'), ('\u011f', '\u011e'),
('\u0121', '\u0120'), ('\u0123', '\u0122'),
('\u0125', '\u0124'), ('\u0127', '\u0126'),
('\u0129', '\u0128'), ('\u012b', '\u012a'),
('\u012d', '\u012c'), ('\u012f', '\u012e'),
('\u0131', '\x49'), ('\u0133', '\u0132'),
('\u0135', '\u0134'), ('\u0137', '\u0136'),
('\u013a', '\u0139'), ('\u013c', '\u013b'),
('\u013e', '\u013d'), ('\u0140', '\u013f'),
('\u0142', '\u0141'), ('\u0144', '\u0143'),
('\u0146', '\u0145'), ('\u0148', '\u0147'),
('\u014b', '\u014a'), ('\u014d', '\u014c'),
('\u014f', '\u014e'), ('\u0151', '\u0150'),
('\u0153', '\u0152'), ('\u0155', '\u0154'),
('\u0157', '\u0156'), ('\u0159', '\u0158'),
('\u015b', '\u015a'), ('\u015d', '\u015c'),
('\u015f', '\u015e'), ('\u0161', '\u0160'),
('\u0163', '\u0162'), ('\u0165', '\u0164'),
('\u0167', '\u0166'), ('\u0169', '\u0168'),
('\u016b', '\u016a'), ('\u016d', '\u016c'),
('\u016f', '\u016e'), ('\u0171', '\u0170'),
('\u0173', '\u0172'), ('\u0175', '\u0174'),
('\u0177', '\u0176'), ('\u017a', '\u0179'),
('\u017c', '\u017b'), ('\u017e', '\u017d'),
('\u017f', '\x53'), ('\u0180', '\u0243'),
('\u0183', '\u0182'), ('\u0185', '\u0184'),
('\u0188', '\u0187'), ('\u018c', '\u018b'),
('\u0192', '\u0191'), ('\u0195', '\u01f6'),
('\u0199', '\u0198'), ('\u019a', '\u023d'),
('\u019e', '\u0220'), ('\u01a1', '\u01a0'),
('\u01a3', '\u01a2'), ('\u01a5', '\u01a4'),
('\u01a8', '\u01a7'), ('\u01ad', '\u01ac'),
('\u01b0', '\u01af'), ('\u01b4', '\u01b3'),
('\u01b6', '\u01b5'), ('\u01b9', '\u01b8'),
('\u01bd', '\u01bc'), ('\u01bf', '\u01f7'),
('\u01c6', '\u01c4'), ('\u01c9', '\u01c7'),
('\u01cc', '\u01ca'), ('\u01ce', '\u01cd'),
('\u01d0', '\u01cf'), ('\u01d2', '\u01d1'),
('\u01d4', '\u01d3'), ('\u01d6', '\u01d5'),
('\u01d8', '\u01d7'), ('\u01da', '\u01d9'),
('\u01dc', '\u01db'), ('\u01dd', '\u018e'),
('\u01df', '\u01de'), ('\u01e1', '\u01e0'),
('\u01e3', '\u01e2'), ('\u01e5', '\u01e4'),
('\u01e7', '\u01e6'), ('\u01e9', '\u01e8'),
('\u01eb', '\u01ea'), ('\u01ed', '\u01ec'),
('\u01ef', '\u01ee'), ('\u01f3', '\u01f1'),
('\u01f5', '\u01f4'), ('\u01f9', '\u01f8'),
('\u01fb', '\u01fa'), ('\u01fd', '\u01fc'),
('\u01ff', '\u01fe'), ('\u0201', '\u0200'),
('\u0203', '\u0202'), ('\u0205', '\u0204'),
('\u0207', '\u0206'), ('\u0209', '\u0208'),
('\u020b', '\u020a'), ('\u020d', '\u020c'),
('\u020f', '\u020e'), ('\u0211', '\u0210'),
('\u0213', '\u0212'), ('\u0215', '\u0214'),
('\u0217', '\u0216'), ('\u0219', '\u0218'),
('\u021b', '\u021a'), ('\u021d', '\u021c'),
('\u021f', '\u021e'), ('\u0223', '\u0222'),
('\u0225', '\u0224'), ('\u0227', '\u0226'),
('\u0229', '\u0228'), ('\u022b', '\u022a'),
('\u022d', '\u022c'), ('\u022f', '\u022e'),
('\u0231', '\u0230'), ('\u0233', '\u0232'),
('\u023c', '\u023b'), ('\u023f', '\u2c7e'),
('\u0240', '\u2c7f'), ('\u0242', '\u0241'),
('\u0247', '\u0246'), ('\u0249', '\u0248'),
('\u024b', '\u024a'), ('\u024d', '\u024c'),
('\u024f', '\u024e'), ('\u0250', '\u2c6f'),
('\u0251', '\u2c6d'), ('\u0252', '\u2c70'),
('\u0253', '\u0181'), ('\u0254', '\u0186'),
('\u0256', '\u0189'), ('\u0257', '\u018a'),
('\u0259', '\u018f'), ('\u025b', '\u0190'),
('\u0260', '\u0193'), ('\u0263', '\u0194'),
('\u0265', '\ua78d'), ('\u0266', '\ua7aa'),
('\u0268', '\u0197'), ('\u0269', '\u0196'),
('\u026b', '\u2c62'), ('\u026f', '\u019c'),
('\u0271', '\u2c6e'), ('\u0272', '\u019d'),
('\u0275', '\u019f'), ('\u027d', '\u2c64'),
('\u0280', '\u01a6'), ('\u0283', '\u01a9'),
('\u0288', '\u01ae'), ('\u0289', '\u0244'),
('\u028a', '\u01b1'), ('\u028b', '\u01b2'),
('\u028c', '\u0245'), ('\u0292', '\u01b7'),
('\u0371', '\u0370'), ('\u0373', '\u0372'),
('\u0377', '\u0376'), ('\u037b', '\u03fd'),
('\u037c', '\u03fe'), ('\u037d', '\u03ff'),
('\u03ac', '\u0386'), ('\u03ad', '\u0388'),
('\u03ae', '\u0389'), ('\u03af', '\u038a'),
('\u03b1', '\u0391'), ('\u03b2', '\u0392'),
('\u03b3', '\u0393'), ('\u03b4', '\u0394'),
('\u03b5', '\u0395'), ('\u03b6', '\u0396'),
('\u03b7', '\u0397'), ('\u03b8', '\u0398'),
('\u03b9', '\u0399'), ('\u03ba', '\u039a'),
('\u03bb', '\u039b'), ('\u03bc', '\u039c'),
('\u03bd', '\u039d'), ('\u03be', '\u039e'),
('\u03bf', '\u039f'), ('\u03c0', '\u03a0'),
('\u03c1', '\u03a1'), ('\u03c2', '\u03a3'),
('\u03c3', '\u03a3'), ('\u03c4', '\u03a4'),
('\u03c5', '\u03a5'), ('\u03c6', '\u03a6'),
('\u03c7', '\u03a7'), ('\u03c8', '\u03a8'),
('\u03c9', '\u03a9'), ('\u03ca', '\u03aa'),
('\u03cb', '\u03ab'), ('\u03cc', '\u038c'),
('\u03cd', '\u038e'), ('\u03ce', '\u038f'),
('\u03d0', '\u0392'), ('\u03d1', '\u0398'),
('\u03d5', '\u03a6'), ('\u03d6', '\u03a0'),
('\u03d7', '\u03cf'), ('\u03d9', '\u03d8'),
('\u03db', '\u03da'), ('\u03dd', '\u03dc'),
('\u03df', '\u03de'), ('\u03e1', '\u03e0'),
('\u03e3', '\u03e2'), ('\u03e5', '\u03e4'),
('\u03e7', '\u03e6'), ('\u03e9', '\u03e8'),
('\u03eb', '\u03ea'), ('\u03ed', '\u03ec'),
('\u03ef', '\u03ee'), ('\u03f0', '\u039a'),
('\u03f1', '\u03a1'), ('\u03f2', '\u03f9'),
('\u03f5', '\u0395'), ('\u03f8', '\u03f7'),
('\u03fb', '\u03fa'), ('\u0430', '\u0410'),
('\u0431', '\u0411'), ('\u0432', '\u0412'),
('\u0433', '\u0413'), ('\u0434', '\u0414'),
('\u0435', '\u0415'), ('\u0436', '\u0416'),
('\u0437', '\u0417'), ('\u0438', '\u0418'),
('\u0439', '\u0419'), ('\u043a', '\u041a'),
('\u043b', '\u041b'), ('\u043c', '\u041c'),
('\u043d', '\u041d'), ('\u043e', '\u041e'),
('\u043f', '\u041f'), ('\u0440', '\u0420'),
('\u0441', '\u0421'), ('\u0442', '\u0422'),
('\u0443', '\u0423'), ('\u0444', '\u0424'),
('\u0445', '\u0425'), ('\u0446', '\u0426'),
('\u0447', '\u0427'), ('\u0448', '\u0428'),
('\u0449', '\u0429'), ('\u044a', '\u042a'),
('\u044b', '\u042b'), ('\u044c', '\u042c'),
('\u044d', '\u042d'), ('\u044e', '\u042e'),
('\u044f', '\u042f'), ('\u0450', '\u0400'),
('\u0451', '\u0401'), ('\u0452', '\u0402'),
('\u0453', '\u0403'), ('\u0454', '\u0404'),
('\u0455', '\u0405'), ('\u0456', '\u0406'),
('\u0457', '\u0407'), ('\u0458', '\u0408'),
('\u0459', '\u0409'), ('\u045a', '\u040a'),
('\u045b', '\u040b'), ('\u045c', '\u040c'),
('\u045d', '\u040d'), ('\u045e', '\u040e'),
('\u045f', '\u040f'), ('\u0461', '\u0460'),
('\u0463', '\u0462'), ('\u0465', '\u0464'),
('\u0467', '\u0466'), ('\u0469', '\u0468'),
('\u046b', '\u046a'), ('\u046d', '\u046c'),
('\u046f', '\u046e'), ('\u0471', '\u0470'),
('\u0473', '\u0472'), ('\u0475', '\u0474'),
('\u0477', '\u0476'), ('\u0479', '\u0478'),
('\u047b', '\u047a'), ('\u047d', '\u047c'),
('\u047f', '\u047e'), ('\u0481', '\u0480'),
('\u048b', '\u048a'), ('\u048d', '\u048c'),
('\u048f', '\u048e'), ('\u0491', '\u0490'),
('\u0493', '\u0492'), ('\u0495', '\u0494'),
('\u0497', '\u0496'), ('\u0499', '\u0498'),
('\u049b', '\u049a'), ('\u049d', '\u049c'),
('\u049f', '\u049e'), ('\u04a1', '\u04a0'),
('\u04a3', '\u04a2'), ('\u04a5', '\u04a4'),
('\u04a7', '\u04a6'), ('\u04a9', '\u04a8'),
('\u04ab', '\u04aa'), ('\u04ad', '\u04ac'),
('\u04af', '\u04ae'), ('\u04b1', '\u04b0'),
('\u04b3', '\u04b2'), ('\u04b5', '\u04b4'),
('\u04b7', '\u04b6'), ('\u04b9', '\u04b8'),
('\u04bb', '\u04ba'), ('\u04bd', '\u04bc'),
('\u04bf', '\u04be'), ('\u04c2', '\u04c1'),
('\u04c4', '\u04c3'), ('\u04c6', '\u04c5'),
('\u04c8', '\u04c7'), ('\u04ca', '\u04c9'),
('\u04cc', '\u04cb'), ('\u04ce', '\u04cd'),
('\u04cf', '\u04c0'), ('\u04d1', '\u04d0'),
('\u04d3', '\u04d2'), ('\u04d5', '\u04d4'),
('\u04d7', '\u04d6'), ('\u04d9', '\u04d8'),
('\u04db', '\u04da'), ('\u04dd', '\u04dc'),
('\u04df', '\u04de'), ('\u04e1', '\u04e0'),
('\u04e3', '\u04e2'), ('\u04e5', '\u04e4'),
('\u04e7', '\u04e6'), ('\u04e9', '\u04e8'),
('\u04eb', '\u04ea'), ('\u04ed', '\u04ec'),
('\u04ef', '\u04ee'), ('\u04f1', '\u04f0'),
('\u04f3', '\u04f2'), ('\u04f5', '\u04f4'),
('\u04f7', '\u04f6'), ('\u04f9', '\u04f8'),
('\u04fb', '\u04fa'), ('\u04fd', '\u04fc'),
('\u04ff', '\u04fe'), ('\u0501', '\u0500'),
('\u0503', '\u0502'), ('\u0505', '\u0504'),
('\u0507', '\u0506'), ('\u0509', '\u0508'),
('\u050b', '\u050a'), ('\u050d', '\u050c'),
('\u050f', '\u050e'), ('\u0511', '\u0510'),
('\u0513', '\u0512'), ('\u0515', '\u0514'),
('\u0517', '\u0516'), ('\u0519', '\u0518'),
('\u051b', '\u051a'), ('\u051d', '\u051c'),
('\u051f', '\u051e'), ('\u0521', '\u0520'),
('\u0523', '\u0522'), ('\u0525', '\u0524'),
('\u0527', '\u0526'), ('\u0561', '\u0531'),
('\u0562', '\u0532'), ('\u0563', '\u0533'),
('\u0564', '\u0534'), ('\u0565', '\u0535'),
('\u0566', '\u0536'), ('\u0567', '\u0537'),
('\u0568', '\u0538'), ('\u0569', '\u0539'),
('\u056a', '\u053a'), ('\u056b', '\u053b'),
('\u056c', '\u053c'), ('\u056d', '\u053d'),
('\u056e', '\u053e'), ('\u056f', '\u053f'),
('\u0570', '\u0540'), ('\u0571', '\u0541'),
('\u0572', '\u0542'), ('\u0573', '\u0543'),
('\u0574', '\u0544'), ('\u0575', '\u0545'),
('\u0576', '\u0546'), ('\u0577', '\u0547'),
('\u0578', '\u0548'), ('\u0579', '\u0549'),
('\u057a', '\u054a'), ('\u057b', '\u054b'),
('\u057c', '\u054c'), ('\u057d', '\u054d'),
('\u057e', '\u054e'), ('\u057f', '\u054f'),
('\u0580', '\u0550'), ('\u0581', '\u0551'),
('\u0582', '\u0552'), ('\u0583', '\u0553'),
('\u0584', '\u0554'), ('\u0585', '\u0555'),
('\u0586', '\u0556'), ('\u1d79', '\ua77d'),
('\u1d7d', '\u2c63'), ('\u1e01', '\u1e00'),
('\u1e03', '\u1e02'), ('\u1e05', '\u1e04'),
('\u1e07', '\u1e06'), ('\u1e09', '\u1e08'),
('\u1e0b', '\u1e0a'), ('\u1e0d', '\u1e0c'),
('\u1e0f', '\u1e0e'), ('\u1e11', '\u1e10'),
('\u1e13', '\u1e12'), ('\u1e15', '\u1e14'),
('\u1e17', '\u1e16'), ('\u1e19', '\u1e18'),
('\u1e1b', '\u1e1a'), ('\u1e1d', '\u1e1c'),
('\u1e1f', '\u1e1e'), ('\u1e21', '\u1e20'),
('\u1e23', '\u1e22'), ('\u1e25', '\u1e24'),
('\u1e27', '\u1e26'), ('\u1e29', '\u1e28'),
('\u1e2b', '\u1e2a'), ('\u1e2d', '\u1e2c'),
('\u1e2f', '\u1e2e'), ('\u1e31', '\u1e30'),
('\u1e33', '\u1e32'), ('\u1e35', '\u1e34'),
('\u1e37', '\u1e36'), ('\u1e39', '\u1e38'),
('\u1e3b', '\u1e3a'), ('\u1e3d', '\u1e3c'),
('\u1e3f', '\u1e3e'), ('\u1e41', '\u1e40'),
('\u1e43', '\u1e42'), ('\u1e45', '\u1e44'),
('\u1e47', '\u1e46'), ('\u1e49', '\u1e48'),
('\u1e4b', '\u1e4a'), ('\u1e4d', '\u1e4c'),
('\u1e4f', '\u1e4e'), ('\u1e51', '\u1e50'),
('\u1e53', '\u1e52'), ('\u1e55', '\u1e54'),
('\u1e57', '\u1e56'), ('\u1e59', '\u1e58'),
('\u1e5b', '\u1e5a'), ('\u1e5d', '\u1e5c'),
('\u1e5f', '\u1e5e'), ('\u1e61', '\u1e60'),
('\u1e63', '\u1e62'), ('\u1e65', '\u1e64'),
('\u1e67', '\u1e66'), ('\u1e69', '\u1e68'),
('\u1e6b', '\u1e6a'), ('\u1e6d', '\u1e6c'),
('\u1e6f', '\u1e6e'), ('\u1e71', '\u1e70'),
('\u1e73', '\u1e72'), ('\u1e75', '\u1e74'),
('\u1e77', '\u1e76'), ('\u1e79', '\u1e78'),
('\u1e7b', '\u1e7a'), ('\u1e7d', '\u1e7c'),
('\u1e7f', '\u1e7e'), ('\u1e81', '\u1e80'),
('\u1e83', '\u1e82'), ('\u1e85', '\u1e84'),
('\u1e87', '\u1e86'), ('\u1e89', '\u1e88'),
('\u1e8b', '\u1e8a'), ('\u1e8d', '\u1e8c'),
('\u1e8f', '\u1e8e'), ('\u1e91', '\u1e90'),
('\u1e93', '\u1e92'), ('\u1e95', '\u1e94'),
('\u1e9b', '\u1e60'), ('\u1ea1', '\u1ea0'),
('\u1ea3', '\u1ea2'), ('\u1ea5', '\u1ea4'),
('\u1ea7', '\u1ea6'), ('\u1ea9', '\u1ea8'),
('\u1eab', '\u1eaa'), ('\u1ead', '\u1eac'),
('\u1eaf', '\u1eae'), ('\u1eb1', '\u1eb0'),
('\u1eb3', '\u1eb2'), ('\u1eb5', '\u1eb4'),
('\u1eb7', '\u1eb6'), ('\u1eb9', '\u1eb8'),
('\u1ebb', '\u1eba'), ('\u1ebd', '\u1ebc'),
('\u1ebf', '\u1ebe'), ('\u1ec1', '\u1ec0'),
('\u1ec3', '\u1ec2'), ('\u1ec5', '\u1ec4'),
('\u1ec7', '\u1ec6'), ('\u1ec9', '\u1ec8'),
('\u1ecb', '\u1eca'), ('\u1ecd', '\u1ecc'),
('\u1ecf', '\u1ece'), ('\u1ed1', '\u1ed0'),
('\u1ed3', '\u1ed2'), ('\u1ed5', '\u1ed4'),
('\u1ed7', '\u1ed6'), ('\u1ed9', '\u1ed8'),
('\u1edb', '\u1eda'), ('\u1edd', '\u1edc'),
('\u1edf', '\u1ede'), ('\u1ee1', '\u1ee0'),
('\u1ee3', '\u1ee2'), ('\u1ee5', '\u1ee4'),
('\u1ee7', '\u1ee6'), ('\u1ee9', '\u1ee8'),
('\u1eeb', '\u1eea'), ('\u1eed', '\u1eec'),
('\u1eef', '\u1eee'), ('\u1ef1', '\u1ef0'),
('\u1ef3', '\u1ef2'), ('\u1ef5', '\u1ef4'),
('\u1ef7', '\u1ef6'), ('\u1ef9', '\u1ef8'),
('\u1efb', '\u1efa'), ('\u1efd', '\u1efc'),
('\u1eff', '\u1efe'), ('\u1f00', '\u1f08'),
('\u1f01', '\u1f09'), ('\u1f02', '\u1f0a'),
('\u1f03', '\u1f0b'), ('\u1f04', '\u1f0c'),
('\u1f05', '\u1f0d'), ('\u1f06', '\u1f0e'),
('\u1f07', '\u1f0f'), ('\u1f10', '\u1f18'),
('\u1f11', '\u1f19'), ('\u1f12', '\u1f1a'),
('\u1f13', '\u1f1b'), ('\u1f14', '\u1f1c'),
('\u1f15', '\u1f1d'), ('\u1f20', '\u1f28'),
('\u1f21', '\u1f29'), ('\u1f22', '\u1f2a'),
('\u1f23', '\u1f2b'), ('\u1f24', '\u1f2c'),
('\u1f25', '\u1f2d'), ('\u1f26', '\u1f2e'),
('\u1f27', '\u1f2f'), ('\u1f30', '\u1f38'),
('\u1f31', '\u1f39'), ('\u1f32', '\u1f3a'),
('\u1f33', '\u1f3b'), ('\u1f34', '\u1f3c'),
('\u1f35', '\u1f3d'), ('\u1f36', '\u1f3e'),
('\u1f37', '\u1f3f'), ('\u1f40', '\u1f48'),
('\u1f41', '\u1f49'), ('\u1f42', '\u1f4a'),
('\u1f43', '\u1f4b'), ('\u1f44', '\u1f4c'),
('\u1f45', '\u1f4d'), ('\u1f51', '\u1f59'),
('\u1f53', '\u1f5b'), ('\u1f55', '\u1f5d'),
('\u1f57', '\u1f5f'), ('\u1f60', '\u1f68'),
('\u1f61', '\u1f69'), ('\u1f62', '\u1f6a'),
('\u1f63', '\u1f6b'), ('\u1f64', '\u1f6c'),
('\u1f65', '\u1f6d'), ('\u1f66', '\u1f6e'),
('\u1f67', '\u1f6f'), ('\u1f70', '\u1fba'),
('\u1f71', '\u1fbb'), ('\u1f72', '\u1fc8'),
('\u1f73', '\u1fc9'), ('\u1f74', '\u1fca'),
('\u1f75', '\u1fcb'), ('\u1f76', '\u1fda'),
('\u1f77', '\u1fdb'), ('\u1f78', '\u1ff8'),
('\u1f79', '\u1ff9'), ('\u1f7a', '\u1fea'),
('\u1f7b', '\u1feb'), ('\u1f7c', '\u1ffa'),
('\u1f7d', '\u1ffb'), ('\u1f80', '\u1f88'),
('\u1f81', '\u1f89'), ('\u1f82', '\u1f8a'),
('\u1f83', '\u1f8b'), ('\u1f84', '\u1f8c'),
('\u1f85', '\u1f8d'), ('\u1f86', '\u1f8e'),
('\u1f87', '\u1f8f'), ('\u1f90', '\u1f98'),
('\u1f91', '\u1f99'), ('\u1f92', '\u1f9a'),
('\u1f93', '\u1f9b'), ('\u1f94', '\u1f9c'),
('\u1f95', '\u1f9d'), ('\u1f96', '\u1f9e'),
('\u1f97', '\u1f9f'), ('\u1fa0', '\u1fa8'),
('\u1fa1', '\u1fa9'), ('\u1fa2', '\u1faa'),
('\u1fa3', '\u1fab'), ('\u1fa4', '\u1fac'),
('\u1fa5', '\u1fad'), ('\u1fa6', '\u1fae'),
('\u1fa7', '\u1faf'), ('\u1fb0', '\u1fb8'),
('\u1fb1', '\u1fb9'), ('\u1fb3', '\u1fbc'),
('\u1fbe', '\u0399'), ('\u1fc3', '\u1fcc'),
('\u1fd0', '\u1fd8'), ('\u1fd1', '\u1fd9'),
('\u1fe0', '\u1fe8'), ('\u1fe1', '\u1fe9'),
('\u1fe5', '\u1fec'), ('\u1ff3', '\u1ffc'),
('\u214e', '\u2132'), ('\u2184', '\u2183'),
('\u2c30', '\u2c00'), ('\u2c31', '\u2c01'),
('\u2c32', '\u2c02'), ('\u2c33', '\u2c03'),
('\u2c34', '\u2c04'), ('\u2c35', '\u2c05'),
('\u2c36', '\u2c06'), ('\u2c37', '\u2c07'),
('\u2c38', '\u2c08'), ('\u2c39', '\u2c09'),
('\u2c3a', '\u2c0a'), ('\u2c3b', '\u2c0b'),
('\u2c3c', '\u2c0c'), ('\u2c3d', '\u2c0d'),
('\u2c3e', '\u2c0e'), ('\u2c3f', '\u2c0f'),
('\u2c40', '\u2c10'), ('\u2c41', '\u2c11'),
('\u2c42', '\u2c12'), ('\u2c43', '\u2c13'),
('\u2c44', '\u2c14'), ('\u2c45', '\u2c15'),
('\u2c46', '\u2c16'), ('\u2c47', '\u2c17'),
('\u2c48', '\u2c18'), ('\u2c49', '\u2c19'),
('\u2c4a', '\u2c1a'), ('\u2c4b', '\u2c1b'),
('\u2c4c', '\u2c1c'), ('\u2c4d', '\u2c1d'),
('\u2c4e', '\u2c1e'), ('\u2c4f', '\u2c1f'),
('\u2c50', '\u2c20'), ('\u2c51', '\u2c21'),
('\u2c52', '\u2c22'), ('\u2c53', '\u2c23'),
('\u2c54', '\u2c24'), ('\u2c55', '\u2c25'),
('\u2c56', '\u2c26'), ('\u2c57', '\u2c27'),
('\u2c58', '\u2c28'), ('\u2c59', '\u2c29'),
('\u2c5a', '\u2c2a'), ('\u2c5b', '\u2c2b'),
('\u2c5c', '\u2c2c'), ('\u2c5d', '\u2c2d'),
('\u2c5e', '\u2c2e'), ('\u2c61', '\u2c60'),
('\u2c65', '\u023a'), ('\u2c66', '\u023e'),
('\u2c68', '\u2c67'), ('\u2c6a', '\u2c69'),
('\u2c6c', '\u2c6b'), ('\u2c73', '\u2c72'),
('\u2c76', '\u2c75'), ('\u2c81', '\u2c80'),
('\u2c83', '\u2c82'), ('\u2c85', '\u2c84'),
('\u2c87', '\u2c86'), ('\u2c89', '\u2c88'),
('\u2c8b', '\u2c8a'), ('\u2c8d', '\u2c8c'),
('\u2c8f', '\u2c8e'), ('\u2c91', '\u2c90'),
('\u2c93', '\u2c92'), ('\u2c95', '\u2c94'),
('\u2c97', '\u2c96'), ('\u2c99', '\u2c98'),
('\u2c9b', '\u2c9a'), ('\u2c9d', '\u2c9c'),
('\u2c9f', '\u2c9e'), ('\u2ca1', '\u2ca0'),
('\u2ca3', '\u2ca2'), ('\u2ca5', '\u2ca4'),
('\u2ca7', '\u2ca6'), ('\u2ca9', '\u2ca8'),
('\u2cab', '\u2caa'), ('\u2cad', '\u2cac'),
('\u2caf', '\u2cae'), ('\u2cb1', '\u2cb0'),
('\u2cb3', '\u2cb2'), ('\u2cb5', '\u2cb4'),
('\u2cb7', '\u2cb6'), ('\u2cb9', '\u2cb8'),
('\u2cbb', '\u2cba'), ('\u2cbd', '\u2cbc'),
('\u2cbf', '\u2cbe'), ('\u2cc1', '\u2cc0'),
('\u2cc3', '\u2cc2'), ('\u2cc5', '\u2cc4'),
('\u2cc7', '\u2cc6'), ('\u2cc9', '\u2cc8'),
('\u2ccb', '\u2cca'), ('\u2ccd', '\u2ccc'),
('\u2ccf', '\u2cce'), ('\u2cd1', '\u2cd0'),
('\u2cd3', '\u2cd2'), ('\u2cd5', '\u2cd4'),
('\u2cd7', '\u2cd6'), ('\u2cd9', '\u2cd8'),
('\u2cdb', '\u2cda'), ('\u2cdd', '\u2cdc'),
('\u2cdf', '\u2cde'), ('\u2ce1', '\u2ce0'),
('\u2ce3', '\u2ce2'), ('\u2cec', '\u2ceb'),
('\u2cee', '\u2ced'), ('\u2cf3', '\u2cf2'),
('\u2d00', '\u10a0'), ('\u2d01', '\u10a1'),
('\u2d02', '\u10a2'), ('\u2d03', '\u10a3'),
('\u2d04', '\u10a4'), ('\u2d05', '\u10a5'),
('\u2d06', '\u10a6'), ('\u2d07', '\u10a7'),
('\u2d08', '\u10a8'), ('\u2d09', '\u10a9'),
('\u2d0a', '\u10aa'), ('\u2d0b', '\u10ab'),
('\u2d0c', '\u10ac'), ('\u2d0d', '\u10ad'),
('\u2d0e', '\u10ae'), ('\u2d0f', '\u10af'),
('\u2d10', '\u10b0'), ('\u2d11', '\u10b1'),
('\u2d12', '\u10b2'), ('\u2d13', '\u10b3'),
('\u2d14', '\u10b4'), ('\u2d15', '\u10b5'),
('\u2d16', '\u10b6'), ('\u2d17', '\u10b7'),
('\u2d18', '\u10b8'), ('\u2d19', '\u10b9'),
('\u2d1a', '\u10ba'), ('\u2d1b', '\u10bb'),
('\u2d1c', '\u10bc'), ('\u2d1d', '\u10bd'),
('\u2d1e', '\u10be'), ('\u2d1f', '\u10bf'),
('\u2d20', '\u10c0'), ('\u2d21', '\u10c1'),
('\u2d22', '\u10c2'), ('\u2d23', '\u10c3'),
('\u2d24', '\u10c4'), ('\u2d25', '\u10c5'),
('\u2d27', '\u10c7'), ('\u2d2d', '\u10cd'),
('\ua641', '\ua640'), ('\ua643', '\ua642'),
('\ua645', '\ua644'), ('\ua647', '\ua646'),
('\ua649', '\ua648'), ('\ua64b', '\ua64a'),
('\ua64d', '\ua64c'), ('\ua64f', '\ua64e'),
('\ua651', '\ua650'), ('\ua653', '\ua652'),
('\ua655', '\ua654'), ('\ua657', '\ua656'),
('\ua659', '\ua658'), ('\ua65b', '\ua65a'),
('\ua65d', '\ua65c'), ('\ua65f', '\ua65e'),
('\ua661', '\ua660'), ('\ua663', '\ua662'),
('\ua665', '\ua664'), ('\ua667', '\ua666'),
('\ua669', '\ua668'), ('\ua66b', '\ua66a'),
('\ua66d', '\ua66c'), ('\ua681', '\ua680'),
('\ua683', '\ua682'), ('\ua685', '\ua684'),
('\ua687', '\ua686'), ('\ua689', '\ua688'),
('\ua68b', '\ua68a'), ('\ua68d', '\ua68c'),
('\ua68f', '\ua68e'), ('\ua691', '\ua690'),
('\ua693', '\ua692'), ('\ua695', '\ua694'),
('\ua697', '\ua696'), ('\ua723', '\ua722'),
('\ua725', '\ua724'), ('\ua727', '\ua726'),
('\ua729', '\ua728'), ('\ua72b', '\ua72a'),
('\ua72d', '\ua72c'), ('\ua72f', '\ua72e'),
('\ua733', '\ua732'), ('\ua735', '\ua734'),
('\ua737', '\ua736'), ('\ua739', '\ua738'),
('\ua73b', '\ua73a'), ('\ua73d', '\ua73c'),
('\ua73f', '\ua73e'), ('\ua741', '\ua740'),
('\ua743', '\ua742'), ('\ua745', '\ua744'),
('\ua747', '\ua746'), ('\ua749', '\ua748'),
('\ua74b', '\ua74a'), ('\ua74d', '\ua74c'),
('\ua74f', '\ua74e'), ('\ua751', '\ua750'),
('\ua753', '\ua752'), ('\ua755', '\ua754'),
('\ua757', '\ua756'), ('\ua759', '\ua758'),
('\ua75b', '\ua75a'), ('\ua75d', '\ua75c'),
('\ua75f', '\ua75e'), ('\ua761', '\ua760'),
('\ua763', '\ua762'), ('\ua765', '\ua764'),
('\ua767', '\ua766'), ('\ua769', '\ua768'),
('\ua76b', '\ua76a'), ('\ua76d', '\ua76c'),
('\ua76f', '\ua76e'), ('\ua77a', '\ua779'),
('\ua77c', '\ua77b'), ('\ua77f', '\ua77e'),
('\ua781', '\ua780'), ('\ua783', '\ua782'),
('\ua785', '\ua784'), ('\ua787', '\ua786'),
('\ua78c', '\ua78b'), ('\ua791', '\ua790'),
('\ua793', '\ua792'), ('\ua7a1', '\ua7a0'),
('\ua7a3', '\ua7a2'), ('\ua7a5', '\ua7a4'),
('\ua7a7', '\ua7a6'), ('\ua7a9', '\ua7a8'),
('\uff41', '\uff21'), ('\uff42', '\uff22'),
('\uff43', '\uff23'), ('\uff44', '\uff24'),
('\uff45', '\uff25'), ('\uff46', '\uff26'),
('\uff47', '\uff27'), ('\uff48', '\uff28'),
('\uff49', '\uff29'), ('\uff4a', '\uff2a'),
('\uff4b', '\uff2b'), ('\uff4c', '\uff2c'),
('\uff4d', '\uff2d'), ('\uff4e', '\uff2e'),
('\uff4f', '\uff2f'), ('\uff50', '\uff30'),
('\uff51', '\uff31'), ('\uff52', '\uff32'),
('\uff53', '\uff33'), ('\uff54', '\uff34'),
('\uff55', '\uff35'), ('\uff56', '\uff36'),
('\uff57', '\uff37'), ('\uff58', '\uff38'),
('\uff59', '\uff39'), ('\uff5a', '\uff3a'),
('\U00010428', '\U00010400'), ('\U00010429', '\U00010401'),
('\U0001042a', '\U00010402'), ('\U0001042b', '\U00010403'),
('\U0001042c', '\U00010404'), ('\U0001042d', '\U00010405'),
('\U0001042e', '\U00010406'), ('\U0001042f', '\U00010407'),
('\U00010430', '\U00010408'), ('\U00010431', '\U00010409'),
('\U00010432', '\U0001040a'), ('\U00010433', '\U0001040b'),
('\U00010434', '\U0001040c'), ('\U00010435', '\U0001040d'),
('\U00010436', '\U0001040e'), ('\U00010437', '\U0001040f'),
('\U00010438', '\U00010410'), ('\U00010439', '\U00010411'),
('\U0001043a', '\U00010412'), ('\U0001043b', '\U00010413'),
('\U0001043c', '\U00010414'), ('\U0001043d', '\U00010415'),
('\U0001043e', '\U00010416'), ('\U0001043f', '\U00010417'),
('\U00010440', '\U00010418'), ('\U00010441', '\U00010419'),
('\U00010442', '\U0001041a'), ('\U00010443', '\U0001041b'),
('\U00010444', '\U0001041c'), ('\U00010445', '\U0001041d'),
('\U00010446', '\U0001041e'), ('\U00010447', '\U0001041f'),
('\U00010448', '\U00010420'), ('\U00010449', '\U00010421'),
('\U0001044a', '\U00010422'), ('\U0001044b', '\U00010423'),
('\U0001044c', '\U00010424'), ('\U0001044d', '\U00010425'),
('\U0001044e', '\U00010426'), ('\U0001044f', '\U00010427')
];
}