From 494c22c408525eda898d890baab8f2c9767319d1 Mon Sep 17 00:00:00 2001 From: asie Date: Tue, 19 Jan 2016 18:46:40 +0000 Subject: [PATCH] utf8 fixes --- Makefile | 2 +- include/luares.h | 2 - src/c/lnative.c | 22 +- src/c/modules.c | 4 +- src/lua/core/init.lua | 4 +- src/lua/core/sandbox.lua | 82 +- src/lua/core/textgpu.lua | 4 +- src/lua/core/utf8/utf8.lua | 328 ------ src/lua/core/utf8/utf8data.lua | 1861 -------------------------------- 9 files changed, 98 insertions(+), 2211 deletions(-) delete mode 100644 src/lua/core/utf8/utf8.lua delete mode 100644 src/lua/core/utf8/utf8data.lua diff --git a/Makefile b/Makefile index f25b03b..6384882 100644 --- a/Makefile +++ b/Makefile @@ -59,4 +59,4 @@ smallclean: # Other -.PHONY: clean cleanresourcues resources build smallclean all \ No newline at end of file +.PHONY: clean cleanresourcues resources build smallclean all diff --git a/include/luares.h b/include/luares.h index 92ee895..146df03 100644 --- a/include/luares.h +++ b/include/luares.h @@ -8,8 +8,6 @@ extern char lua_filesystem[]; extern char lua_init[]; extern char lua_sandbox[]; extern char lua_textgpu[]; -extern char lua_utf8_utf8data[]; -extern char lua_utf8_utf8[]; extern char lua_util_color[]; extern char lua_util_random[]; #endif diff --git a/src/c/lnative.c b/src/c/lnative.c index 9d5893f..d31877e 100644 --- a/src/c/lnative.c +++ b/src/c/lnative.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -350,6 +351,21 @@ static int l_pull (lua_State *L) { return 1; } +static int l_wcwidth (lua_State *L) { + lua_pushnumber(L, wcwidth(lua_tonumber(L, 1))); + return 1; +} + +static int l_towupper (lua_State *L) { + lua_pushnumber(L, towupper(lua_tonumber(L, 1))); + return 1; +} + +static int l_towlower (lua_State *L) { + lua_pushnumber(L, towlower(lua_tonumber(L, 1))); + return 1; +} + void luanative_start(lua_State *L) { lua_createtable (L, 0, 1); @@ -371,6 +387,10 @@ void luanative_start(lua_State *L) { pushctuple(L, "fs_size", l_fs_size); pushctuple(L, "fs_read", l_fs_read); + pushctuple(L, "wcwidth", l_wcwidth); + pushctuple(L, "towlower", l_towlower); + pushctuple(L, "towupper", l_towupper); + pushctuple(L, "beep", l_beep); pushctuple(L, "uptime", l_uptime); pushctuple(L, "totalMemory", l_totalMemory); @@ -378,4 +398,4 @@ void luanative_start(lua_State *L) { pushctuple(L, "pull", l_pull); lua_setglobal(L, "native"); -} \ No newline at end of file +} diff --git a/src/c/modules.c b/src/c/modules.c index c6a2bd1..fb33f5e 100644 --- a/src/c/modules.c +++ b/src/c/modules.c @@ -18,10 +18,8 @@ void setup_modules(lua_State *L) { pushstuple(L, "textgpu", lua_textgpu); pushstuple(L, "color", lua_util_color); pushstuple(L, "random", lua_util_random); - pushstuple(L, "utf8data", lua_utf8_utf8data); - pushstuple(L, "utf8", lua_utf8_utf8); pushstuple(L, "eepromDefault", res_eepromDefault); lua_setglobal(L, "moduleCode"); -} \ No newline at end of file +} diff --git a/src/lua/core/init.lua b/src/lua/core/init.lua index bd9e04b..bd13558 100644 --- a/src/lua/core/init.lua +++ b/src/lua/core/init.lua @@ -43,8 +43,6 @@ function main() --Utils loadModule("random") loadModule("color") - loadModule("utf8data") - loadModule("utf8") modules.address = modules.random.uuid() --TODO: PREALPHA: Make constant @@ -88,4 +86,4 @@ for k, hook in ipairs(deadhooks) do print("Shutdown hook with following error:") print(cause) end -end \ No newline at end of file +end diff --git a/src/lua/core/sandbox.lua b/src/lua/core/sandbox.lua index 209ae06..f15dd60 100644 --- a/src/lua/core/sandbox.lua +++ b/src/lua/core/sandbox.lua @@ -1,4 +1,14 @@ local sandbox + +local l_wlen = function(text) + checkArg(1, text, "string") + local i = 0 + for p, c in utf8.codes(text) do + i = i + native.wcwidth(c) + end + return utf8.len(text) + end + sandbox = { assert = assert, dofile = nil, @@ -163,20 +173,72 @@ sandbox = { unicode = { char = utf8.char, charWidth = function(c) - checkArg(1, c, "string") - return modules.utf8.charbytes(c) + return l_wlen(c) end, isWide = function(c) - checkArg(1, c, "string") - return modules.utf8.charbytes(c) > 1 + return l_wlen(c) > 1 end, len = utf8.len, - lower = modules.utf8.lower, - reverse = modules.utf8.reverse, - sub = modules.utf8.sub, - upper = modules.utf8.upper, - wlen = utf8.len, --How is it different from len? - --wtrunc? + lower = function(text) + checkArg(1, text, "string") + local s = "" + for p, c in utf8.codes(text) do + s = s .. utf8.char(native.towlower(c)) + end + return s + end, + upper = function(text) + checkArg(1, text, "string") + local s = "" + for p, c in utf8.codes(text) do + s = s .. utf8.char(native.towupper(c)) + end + return s + end, + reverse = function(text) + checkArg(1, text, "string") + local s = "" + for p, c in utf8.codes(text) do + s = utf8.char(c) .. s + end + return s + end, + sub = function(s, i, j) + checkArg(1, s, "string") + i = i or 1 + j = j or math.maxinteger + if i<1 or j<1 then + local n = utf8.len(s) + if not n then return nil end + if i<0 then i = n+1+i end + if j<0 then j = n+1+j end + if i<0 then i = 1 elseif i>n then i = n end + if j<0 then j = 1 elseif j>n then j = n end + end + if jupper case mappings) is loaded, these --- additional functions are available: --- * string.utf8upper(s) --- * string.utf8lower(s) --- --- All functions behave as their non UTF-8 aware counterparts with the exception --- that UTF-8 characters are used instead of bytes for all units. - ---[[ -Copyright (c) 2006-2007, Kyle Smith -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the author nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---]] - --- ABNF from RFC 3629 --- --- UTF8-octets = *( UTF8-char ) --- UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 --- UTF8-1 = %x00-7F --- UTF8-2 = %xC2-DF UTF8-tail --- UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) / --- %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail ) --- UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) / --- %xF4 %x80-8F 2( UTF8-tail ) --- UTF8-tail = %x80-BF --- - -local strbyte, strlen, strsub, type = string.byte, string.len, string.sub, type -local lutf8 = utf8 -local utf8 = {} - --- returns the number of bytes used by the UTF-8 character at byte i in s --- also doubles as a UTF-8 character validator -local function utf8charbytes(s, i) - -- argument defaults - i = i or 1 - - -- argument checking - if type(s) ~= "string" then - error("bad argument #1 to 'utf8charbytes' (string expected, got ".. type(s).. ")") - end - if type(i) ~= "number" then - error("bad argument #2 to 'utf8charbytes' (number expected, got ".. type(i).. ")") - end - - local c = strbyte(s, i) - - -- determine bytes needed for character, based on RFC 3629 - -- validate byte 1 - if c > 0 and c <= 127 then - -- UTF8-1 - return 1 - - elseif c >= 194 and c <= 223 then - -- UTF8-2 - local c2 = strbyte(s, i + 1) - - if not c2 then - error("UTF-8 string terminated early") - end - - -- validate byte 2 - if c2 < 128 or c2 > 191 then - error("Invalid UTF-8 character") - end - - return 2 - - elseif c >= 224 and c <= 239 then - -- UTF8-3 - local c2 = strbyte(s, i + 1) - local c3 = strbyte(s, i + 2) - - if not c2 or not c3 then - error("UTF-8 string terminated early") - end - - -- validate byte 2 - if c == 224 and (c2 < 160 or c2 > 191) then - error("Invalid UTF-8 character") - elseif c == 237 and (c2 < 128 or c2 > 159) then - error("Invalid UTF-8 character") - elseif c2 < 128 or c2 > 191 then - error("Invalid UTF-8 character") - end - - -- validate byte 3 - if c3 < 128 or c3 > 191 then - error("Invalid UTF-8 character") - end - - return 3 - - elseif c >= 240 and c <= 244 then - -- UTF8-4 - local c2 = strbyte(s, i + 1) - local c3 = strbyte(s, i + 2) - local c4 = strbyte(s, i + 3) - - if not c2 or not c3 or not c4 then - error("UTF-8 string terminated early") - end - - -- validate byte 2 - if c == 240 and (c2 < 144 or c2 > 191) then - error("Invalid UTF-8 character") - elseif c == 244 and (c2 < 128 or c2 > 143) then - error("Invalid UTF-8 character") - elseif c2 < 128 or c2 > 191 then - error("Invalid UTF-8 character") - end - - -- validate byte 3 - if c3 < 128 or c3 > 191 then - error("Invalid UTF-8 character") - end - - -- validate byte 4 - if c4 < 128 or c4 > 191 then - error("Invalid UTF-8 character") - end - - return 4 - - else - error("Invalid UTF-8 character") - end -end - -utf8.charbytes = utf8charbytes - --- returns the number of characters in a UTF-8 string -local function utf8len(s) - -- argument checking - if type(s) ~= "string" then - error("bad argument #1 to 'utf8len' (string expected, got ".. type(s).. ")") - end - - local pos = 1 - local bytes = strlen(s) - local len = 0 - - while pos <= bytes do - len = len + 1 - pos = pos + utf8charbytes(s, pos) - end - - return len -end - -utf8.len = utf8len - --- functions identically to string.sub except that i and j are UTF-8 characters --- instead of bytes -local function utf8sub(s, i, j) - -- argument defaults - j = j or -1 - - -- argument checking - if type(s) ~= "string" then - error("bad argument #1 to 'utf8sub' (string expected, got ".. type(s).. ")") - end - if type(i) ~= "number" then - error("bad argument #2 to 'utf8sub' (number expected, got ".. type(i).. ")") - end - if type(j) ~= "number" then - error("bad argument #3 to 'utf8sub' (number expected, got ".. type(j).. ")") - end - - local pos = 1 - local bytes = strlen(s) - local len = 0 - - -- only set l if i or j is negative - local l = (i >= 0 and j >= 0) or utf8len(s) - local startChar = (i >= 0) and i or l + i + 1 - local endChar = (j >= 0) and j or l + j + 1 - - -- can't have start before end! - if startChar > endChar then - return "" - end - - -- byte offsets to pass to string.sub - local startByte, endByte = 1, bytes - - while pos <= bytes do - len = len + 1 - - if len == startChar then - startByte = pos - end - - pos = pos + utf8charbytes(s, pos) - - if len == endChar then - endByte = pos - 1 - break - end - end - - return strsub(s, startByte, endByte) -end - -function utf8.sub(s,i,j) - i = i or 1 - j = j or math.maxinteger - if i<1 or j<1 then - local n = lutf8.len(s) - if not n then return nil end - if i<0 then i = n+1+i end - if j<0 then j = n+1+j end - if i<0 then i = 1 elseif i>n then i = n end - if j<0 then j = 1 elseif j>n then j = n end - end - if j 0 do - c = strbyte(s, pos) - while c >= 128 and c <= 191 do - pos = pos - 1 - c = strbyte(pos) - end - - charbytes = utf8charbytes(s, pos) - - newstr = newstr .. strsub(s, pos, pos + charbytes - 1) - - pos = pos - 1 - end - - return newstr -end - -utf8.reverse = utf8reverse - -return utf8 diff --git a/src/lua/core/utf8/utf8data.lua b/src/lua/core/utf8/utf8data.lua deleted file mode 100644 index 124da91..0000000 --- a/src/lua/core/utf8/utf8data.lua +++ /dev/null @@ -1,1861 +0,0 @@ -local lc_uc = { - ["a"] = "A", - ["b"] = "B", - ["c"] = "C", - ["d"] = "D", - ["e"] = "E", - ["f"] = "F", - ["g"] = "G", - ["h"] = "H", - ["i"] = "I", - ["j"] = "J", - ["k"] = "K", - ["l"] = "L", - ["m"] = "M", - ["n"] = "N", - ["o"] = "O", - ["p"] = "P", - ["q"] = "Q", - ["r"] = "R", - ["s"] = "S", - ["t"] = "T", - ["u"] = "U", - ["v"] = "V", - ["w"] = "W", - ["x"] = "X", - ["y"] = "Y", - ["z"] = "Z", - ["µ"] = "Μ", - ["à"] = "À", - ["á"] = "Á", - ["â"] = "Â", - ["ã"] = "Ã", - ["ä"] = "Ä", - ["å"] = "Å", - ["æ"] = "Æ", - ["ç"] = "Ç", - ["è"] = "È", - ["é"] = "É", - ["ê"] = "Ê", - ["ë"] = "Ë", - ["ì"] = "Ì", - ["í"] = "Í", - ["î"] = "Î", - ["ï"] = "Ï", - ["ð"] = "Ð", - ["ñ"] = "Ñ", - ["ò"] = "Ò", - ["ó"] = "Ó", - ["ô"] = "Ô", - ["õ"] = "Õ", - ["ö"] = "Ö", - ["ø"] = "Ø", - ["ù"] = "Ù", - ["ú"] = "Ú", - ["û"] = "Û", - ["ü"] = "Ü", - ["ý"] = "Ý", - ["þ"] = "Þ", - ["ÿ"] = "Ÿ", - ["ā"] = "Ā", - ["ă"] = "Ă", - ["ą"] = "Ą", - ["ć"] = "Ć", - ["ĉ"] = "Ĉ", - ["ċ"] = "Ċ", - ["č"] = "Č", - ["ď"] = "Ď", - ["đ"] = "Đ", - ["ē"] = "Ē", - ["ĕ"] = "Ĕ", - ["ė"] = "Ė", - ["ę"] = "Ę", - ["ě"] = "Ě", - ["ĝ"] = "Ĝ", - ["ğ"] = "Ğ", - ["ġ"] = "Ġ", - ["ģ"] = "Ģ", - ["ĥ"] = "Ĥ", - ["ħ"] = "Ħ", - ["ĩ"] = "Ĩ", - ["ī"] = "Ī", - ["ĭ"] = "Ĭ", - ["į"] = "Į", - ["ı"] = "I", - ["ij"] = "IJ", - ["ĵ"] = "Ĵ", - ["ķ"] = "Ķ", - ["ĺ"] = "Ĺ", - ["ļ"] = "Ļ", - ["ľ"] = "Ľ", - ["ŀ"] = "Ŀ", - ["ł"] = "Ł", - ["ń"] = "Ń", - ["ņ"] = "Ņ", - ["ň"] = "Ň", - ["ŋ"] = "Ŋ", - ["ō"] = "Ō", - ["ŏ"] = "Ŏ", - ["ő"] = "Ő", - ["œ"] = "Œ", - ["ŕ"] = "Ŕ", - ["ŗ"] = "Ŗ", - ["ř"] = "Ř", - ["ś"] = "Ś", - ["ŝ"] = "Ŝ", - ["ş"] = "Ş", - ["š"] = "Š", - ["ţ"] = "Ţ", - ["ť"] = "Ť", - ["ŧ"] = "Ŧ", - ["ũ"] = "Ũ", - ["ū"] = "Ū", - ["ŭ"] = "Ŭ", - ["ů"] = "Ů", - ["ű"] = "Ű", - ["ų"] = "Ų", - ["ŵ"] = "Ŵ", - ["ŷ"] = "Ŷ", - ["ź"] = "Ź", - ["ż"] = "Ż", - ["ž"] = "Ž", - ["ſ"] = "S", - ["ƀ"] = "Ƀ", - ["ƃ"] = "Ƃ", - ["ƅ"] = "Ƅ", - ["ƈ"] = "Ƈ", - ["ƌ"] = "Ƌ", - ["ƒ"] = "Ƒ", - ["ƕ"] = "Ƕ", - ["ƙ"] = "Ƙ", - ["ƚ"] = "Ƚ", - ["ƞ"] = "Ƞ", - ["ơ"] = "Ơ", - ["ƣ"] = "Ƣ", - ["ƥ"] = "Ƥ", - ["ƨ"] = "Ƨ", - ["ƭ"] = "Ƭ", - ["ư"] = "Ư", - ["ƴ"] = "Ƴ", - ["ƶ"] = "Ƶ", - ["ƹ"] = "Ƹ", - ["ƽ"] = "Ƽ", - ["ƿ"] = "Ƿ", - ["Dž"] = "DŽ", - ["dž"] = "DŽ", - ["Lj"] = "LJ", - ["lj"] = "LJ", - ["Nj"] = "NJ", - ["nj"] = "NJ", - ["ǎ"] = "Ǎ", - ["ǐ"] = "Ǐ", - ["ǒ"] = "Ǒ", - ["ǔ"] = "Ǔ", - ["ǖ"] = "Ǖ", - ["ǘ"] = "Ǘ", - ["ǚ"] = "Ǚ", - ["ǜ"] = "Ǜ", - ["ǝ"] = "Ǝ", - ["ǟ"] = "Ǟ", - ["ǡ"] = "Ǡ", - ["ǣ"] = "Ǣ", - ["ǥ"] = "Ǥ", - ["ǧ"] = "Ǧ", - ["ǩ"] = "Ǩ", - ["ǫ"] = "Ǫ", - ["ǭ"] = "Ǭ", - ["ǯ"] = "Ǯ", - ["Dz"] = "DZ", - ["dz"] = "DZ", - ["ǵ"] = "Ǵ", - ["ǹ"] = "Ǹ", - ["ǻ"] = "Ǻ", - ["ǽ"] = "Ǽ", - ["ǿ"] = "Ǿ", - ["ȁ"] = "Ȁ", - ["ȃ"] = "Ȃ", - ["ȅ"] = "Ȅ", - ["ȇ"] = "Ȇ", - ["ȉ"] = "Ȉ", - ["ȋ"] = "Ȋ", - ["ȍ"] = "Ȍ", - ["ȏ"] = "Ȏ", - ["ȑ"] = "Ȑ", - ["ȓ"] = "Ȓ", - ["ȕ"] = "Ȕ", - ["ȗ"] = "Ȗ", - ["ș"] = "Ș", - ["ț"] = "Ț", - ["ȝ"] = "Ȝ", - ["ȟ"] = "Ȟ", - ["ȣ"] = "Ȣ", - ["ȥ"] = "Ȥ", - ["ȧ"] = "Ȧ", - ["ȩ"] = "Ȩ", - ["ȫ"] = "Ȫ", - ["ȭ"] = "Ȭ", - ["ȯ"] = "Ȯ", - ["ȱ"] = "Ȱ", - ["ȳ"] = "Ȳ", - ["ȼ"] = "Ȼ", - ["ɂ"] = "Ɂ", - ["ɇ"] = "Ɇ", - ["ɉ"] = "Ɉ", - ["ɋ"] = "Ɋ", - ["ɍ"] = "Ɍ", - ["ɏ"] = "Ɏ", - ["ɓ"] = "Ɓ", - ["ɔ"] = "Ɔ", - ["ɖ"] = "Ɖ", - ["ɗ"] = "Ɗ", - ["ə"] = "Ə", - ["ɛ"] = "Ɛ", - ["ɠ"] = "Ɠ", - ["ɣ"] = "Ɣ", - ["ɨ"] = "Ɨ", - ["ɩ"] = "Ɩ", - ["ɫ"] = "Ɫ", - ["ɯ"] = "Ɯ", - ["ɲ"] = "Ɲ", - ["ɵ"] = "Ɵ", - ["ɽ"] = "Ɽ", - ["ʀ"] = "Ʀ", - ["ʃ"] = "Ʃ", - ["ʈ"] = "Ʈ", - ["ʉ"] = "Ʉ", - ["ʊ"] = "Ʊ", - ["ʋ"] = "Ʋ", - ["ʌ"] = "Ʌ", - ["ʒ"] = "Ʒ", - ["ͅ"] = "Ι", - ["ͻ"] = "Ͻ", - ["ͼ"] = "Ͼ", - ["ͽ"] = "Ͽ", - ["ά"] = "Ά", - ["έ"] = "Έ", - ["ή"] = "Ή", - ["ί"] = "Ί", - ["α"] = "Α", - ["β"] = "Β", - ["γ"] = "Γ", - ["δ"] = "Δ", - ["ε"] = "Ε", - ["ζ"] = "Ζ", - ["η"] = "Η", - ["θ"] = "Θ", - ["ι"] = "Ι", - ["κ"] = "Κ", - ["λ"] = "Λ", - ["μ"] = "Μ", - ["ν"] = "Ν", - ["ξ"] = "Ξ", - ["ο"] = "Ο", - ["π"] = "Π", - ["ρ"] = "Ρ", - ["ς"] = "Σ", - ["σ"] = "Σ", - ["τ"] = "Τ", - ["υ"] = "Υ", - ["φ"] = "Φ", - ["χ"] = "Χ", - ["ψ"] = "Ψ", - ["ω"] = "Ω", - ["ϊ"] = "Ϊ", - ["ϋ"] = "Ϋ", - ["ό"] = "Ό", - ["ύ"] = "Ύ", - ["ώ"] = "Ώ", - ["ϐ"] = "Β", - ["ϑ"] = "Θ", - ["ϕ"] = "Φ", - ["ϖ"] = "Π", - ["ϙ"] = "Ϙ", - ["ϛ"] = "Ϛ", - ["ϝ"] = "Ϝ", - ["ϟ"] = "Ϟ", - ["ϡ"] = "Ϡ", - ["ϣ"] = "Ϣ", - ["ϥ"] = "Ϥ", - ["ϧ"] = "Ϧ", - ["ϩ"] = "Ϩ", - ["ϫ"] = "Ϫ", - ["ϭ"] = "Ϭ", - ["ϯ"] = "Ϯ", - ["ϰ"] = "Κ", - ["ϱ"] = "Ρ", - ["ϲ"] = "Ϲ", - ["ϵ"] = "Ε", - ["ϸ"] = "Ϸ", - ["ϻ"] = "Ϻ", - ["а"] = "А", - ["б"] = "Б", - ["в"] = "В", - ["г"] = "Г", - ["д"] = "Д", - ["е"] = "Е", - ["ж"] = "Ж", - ["з"] = "З", - ["и"] = "И", - ["й"] = "Й", - ["к"] = "К", - ["л"] = "Л", - ["м"] = "М", - ["н"] = "Н", - ["о"] = "О", - ["п"] = "П", - ["р"] = "Р", - ["с"] = "С", - ["т"] = "Т", - ["у"] = "У", - ["ф"] = "Ф", - ["х"] = "Х", - ["ц"] = "Ц", - ["ч"] = "Ч", - ["ш"] = "Ш", - ["щ"] = "Щ", - ["ъ"] = "Ъ", - ["ы"] = "Ы", - ["ь"] = "Ь", - ["э"] = "Э", - ["ю"] = "Ю", - ["я"] = "Я", - ["ѐ"] = "Ѐ", - ["ё"] = "Ё", - ["ђ"] = "Ђ", - ["ѓ"] = "Ѓ", - ["є"] = "Є", - ["ѕ"] = "Ѕ", - ["і"] = "І", - ["ї"] = "Ї", - ["ј"] = "Ј", - ["љ"] = "Љ", - ["њ"] = "Њ", - ["ћ"] = "Ћ", - ["ќ"] = "Ќ", - ["ѝ"] = "Ѝ", - ["ў"] = "Ў", - ["џ"] = "Џ", - ["ѡ"] = "Ѡ", - ["ѣ"] = "Ѣ", - ["ѥ"] = "Ѥ", - ["ѧ"] = "Ѧ", - ["ѩ"] = "Ѩ", - ["ѫ"] = "Ѫ", - ["ѭ"] = "Ѭ", - ["ѯ"] = "Ѯ", - ["ѱ"] = "Ѱ", - ["ѳ"] = "Ѳ", - ["ѵ"] = "Ѵ", - ["ѷ"] = "Ѷ", - ["ѹ"] = "Ѹ", - ["ѻ"] = "Ѻ", - ["ѽ"] = "Ѽ", - ["ѿ"] = "Ѿ", - ["ҁ"] = "Ҁ", - ["ҋ"] = "Ҋ", - ["ҍ"] = "Ҍ", - ["ҏ"] = "Ҏ", - ["ґ"] = "Ґ", - ["ғ"] = "Ғ", - ["ҕ"] = "Ҕ", - ["җ"] = "Җ", - ["ҙ"] = "Ҙ", - ["қ"] = "Қ", - ["ҝ"] = "Ҝ", - ["ҟ"] = "Ҟ", - ["ҡ"] = "Ҡ", - ["ң"] = "Ң", - ["ҥ"] = "Ҥ", - ["ҧ"] = "Ҧ", - ["ҩ"] = "Ҩ", - ["ҫ"] = "Ҫ", - ["ҭ"] = "Ҭ", - ["ү"] = "Ү", - ["ұ"] = "Ұ", - ["ҳ"] = "Ҳ", - ["ҵ"] = "Ҵ", - ["ҷ"] = "Ҷ", - ["ҹ"] = "Ҹ", - ["һ"] = "Һ", - ["ҽ"] = "Ҽ", - ["ҿ"] = "Ҿ", - ["ӂ"] = "Ӂ", - ["ӄ"] = "Ӄ", - ["ӆ"] = "Ӆ", - ["ӈ"] = "Ӈ", - ["ӊ"] = "Ӊ", - ["ӌ"] = "Ӌ", - ["ӎ"] = "Ӎ", - ["ӏ"] = "Ӏ", - ["ӑ"] = "Ӑ", - ["ӓ"] = "Ӓ", - ["ӕ"] = "Ӕ", - ["ӗ"] = "Ӗ", - ["ә"] = "Ә", - ["ӛ"] = "Ӛ", - ["ӝ"] = "Ӝ", - ["ӟ"] = "Ӟ", - ["ӡ"] = "Ӡ", - ["ӣ"] = "Ӣ", - ["ӥ"] = "Ӥ", - ["ӧ"] = "Ӧ", - ["ө"] = "Ө", - ["ӫ"] = "Ӫ", - ["ӭ"] = "Ӭ", - ["ӯ"] = "Ӯ", - ["ӱ"] = "Ӱ", - ["ӳ"] = "Ӳ", - ["ӵ"] = "Ӵ", - ["ӷ"] = "Ӷ", - ["ӹ"] = "Ӹ", - ["ӻ"] = "Ӻ", - ["ӽ"] = "Ӽ", - ["ӿ"] = "Ӿ", - ["ԁ"] = "Ԁ", - ["ԃ"] = "Ԃ", - ["ԅ"] = "Ԅ", - ["ԇ"] = "Ԇ", - ["ԉ"] = "Ԉ", - ["ԋ"] = "Ԋ", - ["ԍ"] = "Ԍ", - ["ԏ"] = "Ԏ", - ["ԑ"] = "Ԑ", - ["ԓ"] = "Ԓ", - ["ա"] = "Ա", - ["բ"] = "Բ", - ["գ"] = "Գ", - ["դ"] = "Դ", - ["ե"] = "Ե", - ["զ"] = "Զ", - ["է"] = "Է", - ["ը"] = "Ը", - ["թ"] = "Թ", - ["ժ"] = "Ժ", - ["ի"] = "Ի", - ["լ"] = "Լ", - ["խ"] = "Խ", - ["ծ"] = "Ծ", - ["կ"] = "Կ", - ["հ"] = "Հ", - ["ձ"] = "Ձ", - ["ղ"] = "Ղ", - ["ճ"] = "Ճ", - ["մ"] = "Մ", - ["յ"] = "Յ", - ["ն"] = "Ն", - ["շ"] = "Շ", - ["ո"] = "Ո", - ["չ"] = "Չ", - ["պ"] = "Պ", - ["ջ"] = "Ջ", - ["ռ"] = "Ռ", - ["ս"] = "Ս", - ["վ"] = "Վ", - ["տ"] = "Տ", - ["ր"] = "Ր", - ["ց"] = "Ց", - ["ւ"] = "Ւ", - ["փ"] = "Փ", - ["ք"] = "Ք", - ["օ"] = "Օ", - ["ֆ"] = "Ֆ", - ["ᵽ"] = "Ᵽ", - ["ḁ"] = "Ḁ", - ["ḃ"] = "Ḃ", - ["ḅ"] = "Ḅ", - ["ḇ"] = "Ḇ", - ["ḉ"] = "Ḉ", - ["ḋ"] = "Ḋ", - ["ḍ"] = "Ḍ", - ["ḏ"] = "Ḏ", - ["ḑ"] = "Ḑ", - ["ḓ"] = "Ḓ", - ["ḕ"] = "Ḕ", - ["ḗ"] = "Ḗ", - ["ḙ"] = "Ḙ", - ["ḛ"] = "Ḛ", - ["ḝ"] = "Ḝ", - ["ḟ"] = "Ḟ", - ["ḡ"] = "Ḡ", - ["ḣ"] = "Ḣ", - ["ḥ"] = "Ḥ", - ["ḧ"] = "Ḧ", - ["ḩ"] = "Ḩ", - ["ḫ"] = "Ḫ", - ["ḭ"] = "Ḭ", - ["ḯ"] = "Ḯ", - ["ḱ"] = "Ḱ", - ["ḳ"] = "Ḳ", - ["ḵ"] = "Ḵ", - ["ḷ"] = "Ḷ", - ["ḹ"] = "Ḹ", - ["ḻ"] = "Ḻ", - ["ḽ"] = "Ḽ", - ["ḿ"] = "Ḿ", - ["ṁ"] = "Ṁ", - ["ṃ"] = "Ṃ", - ["ṅ"] = "Ṅ", - ["ṇ"] = "Ṇ", - ["ṉ"] = "Ṉ", - ["ṋ"] = "Ṋ", - ["ṍ"] = "Ṍ", - ["ṏ"] = "Ṏ", - ["ṑ"] = "Ṑ", - ["ṓ"] = "Ṓ", - ["ṕ"] = "Ṕ", - ["ṗ"] = "Ṗ", - ["ṙ"] = "Ṙ", - ["ṛ"] = "Ṛ", - ["ṝ"] = "Ṝ", - ["ṟ"] = "Ṟ", - ["ṡ"] = "Ṡ", - ["ṣ"] = "Ṣ", - ["ṥ"] = "Ṥ", - ["ṧ"] = "Ṧ", - ["ṩ"] = "Ṩ", - ["ṫ"] = "Ṫ", - ["ṭ"] = "Ṭ", - ["ṯ"] = "Ṯ", - ["ṱ"] = "Ṱ", - ["ṳ"] = "Ṳ", - ["ṵ"] = "Ṵ", - ["ṷ"] = "Ṷ", - ["ṹ"] = "Ṹ", - ["ṻ"] = "Ṻ", - ["ṽ"] = "Ṽ", - ["ṿ"] = "Ṿ", - ["ẁ"] = "Ẁ", - ["ẃ"] = "Ẃ", - ["ẅ"] = "Ẅ", - ["ẇ"] = "Ẇ", - ["ẉ"] = "Ẉ", - ["ẋ"] = "Ẋ", - ["ẍ"] = "Ẍ", - ["ẏ"] = "Ẏ", - ["ẑ"] = "Ẑ", - ["ẓ"] = "Ẓ", - ["ẕ"] = "Ẕ", - ["ẛ"] = "Ṡ", - ["ạ"] = "Ạ", - ["ả"] = "Ả", - ["ấ"] = "Ấ", - ["ầ"] = "Ầ", - ["ẩ"] = "Ẩ", - ["ẫ"] = "Ẫ", - ["ậ"] = "Ậ", - ["ắ"] = "Ắ", - ["ằ"] = "Ằ", - ["ẳ"] = "Ẳ", - ["ẵ"] = "Ẵ", - ["ặ"] = "Ặ", - ["ẹ"] = "Ẹ", - ["ẻ"] = "Ẻ", - ["ẽ"] = "Ẽ", - ["ế"] = "Ế", - ["ề"] = "Ề", - ["ể"] = "Ể", - ["ễ"] = "Ễ", - ["ệ"] = "Ệ", - ["ỉ"] = "Ỉ", - ["ị"] = "Ị", - ["ọ"] = "Ọ", - ["ỏ"] = "Ỏ", - ["ố"] = "Ố", - ["ồ"] = "Ồ", - ["ổ"] = "Ổ", - ["ỗ"] = "Ỗ", - ["ộ"] = "Ộ", - ["ớ"] = "Ớ", - ["ờ"] = "Ờ", - ["ở"] = "Ở", - ["ỡ"] = "Ỡ", - ["ợ"] = "Ợ", - ["ụ"] = "Ụ", - ["ủ"] = "Ủ", - ["ứ"] = "Ứ", - ["ừ"] = "Ừ", - ["ử"] = "Ử", - ["ữ"] = "Ữ", - ["ự"] = "Ự", - ["ỳ"] = "Ỳ", - ["ỵ"] = "Ỵ", - ["ỷ"] = "Ỷ", - ["ỹ"] = "Ỹ", - ["ἀ"] = "Ἀ", - ["ἁ"] = "Ἁ", - ["ἂ"] = "Ἂ", - ["ἃ"] = "Ἃ", - ["ἄ"] = "Ἄ", - ["ἅ"] = "Ἅ", - ["ἆ"] = "Ἆ", - ["ἇ"] = "Ἇ", - ["ἐ"] = "Ἐ", - ["ἑ"] = "Ἑ", - ["ἒ"] = "Ἒ", - ["ἓ"] = "Ἓ", - ["ἔ"] = "Ἔ", - ["ἕ"] = "Ἕ", - ["ἠ"] = "Ἠ", - ["ἡ"] = "Ἡ", - ["ἢ"] = "Ἢ", - ["ἣ"] = "Ἣ", - ["ἤ"] = "Ἤ", - ["ἥ"] = "Ἥ", - ["ἦ"] = "Ἦ", - ["ἧ"] = "Ἧ", - ["ἰ"] = "Ἰ", - ["ἱ"] = "Ἱ", - ["ἲ"] = "Ἲ", - ["ἳ"] = "Ἳ", - ["ἴ"] = "Ἴ", - ["ἵ"] = "Ἵ", - ["ἶ"] = "Ἶ", - ["ἷ"] = "Ἷ", - ["ὀ"] = "Ὀ", - ["ὁ"] = "Ὁ", - ["ὂ"] = "Ὂ", - ["ὃ"] = "Ὃ", - ["ὄ"] = "Ὄ", - ["ὅ"] = "Ὅ", - ["ὑ"] = "Ὑ", - ["ὓ"] = "Ὓ", - ["ὕ"] = "Ὕ", - ["ὗ"] = "Ὗ", - ["ὠ"] = "Ὠ", - ["ὡ"] = "Ὡ", - ["ὢ"] = "Ὢ", - ["ὣ"] = "Ὣ", - ["ὤ"] = "Ὤ", - ["ὥ"] = "Ὥ", - ["ὦ"] = "Ὦ", - ["ὧ"] = "Ὧ", - ["ὰ"] = "Ὰ", - ["ά"] = "Ά", - ["ὲ"] = "Ὲ", - ["έ"] = "Έ", - ["ὴ"] = "Ὴ", - ["ή"] = "Ή", - ["ὶ"] = "Ὶ", - ["ί"] = "Ί", - ["ὸ"] = "Ὸ", - ["ό"] = "Ό", - ["ὺ"] = "Ὺ", - ["ύ"] = "Ύ", - ["ὼ"] = "Ὼ", - ["ώ"] = "Ώ", - ["ᾀ"] = "ᾈ", - ["ᾁ"] = "ᾉ", - ["ᾂ"] = "ᾊ", - ["ᾃ"] = "ᾋ", - ["ᾄ"] = "ᾌ", - ["ᾅ"] = "ᾍ", - ["ᾆ"] = "ᾎ", - ["ᾇ"] = "ᾏ", - ["ᾐ"] = "ᾘ", - ["ᾑ"] = "ᾙ", - ["ᾒ"] = "ᾚ", - ["ᾓ"] = "ᾛ", - ["ᾔ"] = "ᾜ", - ["ᾕ"] = "ᾝ", - ["ᾖ"] = "ᾞ", - ["ᾗ"] = "ᾟ", - ["ᾠ"] = "ᾨ", - ["ᾡ"] = "ᾩ", - ["ᾢ"] = "ᾪ", - ["ᾣ"] = "ᾫ", - ["ᾤ"] = "ᾬ", - ["ᾥ"] = "ᾭ", - ["ᾦ"] = "ᾮ", - ["ᾧ"] = "ᾯ", - ["ᾰ"] = "Ᾰ", - ["ᾱ"] = "Ᾱ", - ["ᾳ"] = "ᾼ", - ["ι"] = "Ι", - ["ῃ"] = "ῌ", - ["ῐ"] = "Ῐ", - ["ῑ"] = "Ῑ", - ["ῠ"] = "Ῠ", - ["ῡ"] = "Ῡ", - ["ῥ"] = "Ῥ", - ["ῳ"] = "ῼ", - ["ⅎ"] = "Ⅎ", - ["ⅰ"] = "Ⅰ", - ["ⅱ"] = "Ⅱ", - ["ⅲ"] = "Ⅲ", - ["ⅳ"] = "Ⅳ", - ["ⅴ"] = "Ⅴ", - ["ⅵ"] = "Ⅵ", - ["ⅶ"] = "Ⅶ", - ["ⅷ"] = "Ⅷ", - ["ⅸ"] = "Ⅸ", - ["ⅹ"] = "Ⅹ", - ["ⅺ"] = "Ⅺ", - ["ⅻ"] = "Ⅻ", - ["ⅼ"] = "Ⅼ", - ["ⅽ"] = "Ⅽ", - ["ⅾ"] = "Ⅾ", - ["ⅿ"] = "Ⅿ", - ["ↄ"] = "Ↄ", - ["ⓐ"] = "Ⓐ", - ["ⓑ"] = "Ⓑ", - ["ⓒ"] = "Ⓒ", - ["ⓓ"] = "Ⓓ", - ["ⓔ"] = "Ⓔ", - ["ⓕ"] = "Ⓕ", - ["ⓖ"] = "Ⓖ", - ["ⓗ"] = "Ⓗ", - ["ⓘ"] = "Ⓘ", - ["ⓙ"] = "Ⓙ", - ["ⓚ"] = "Ⓚ", - ["ⓛ"] = "Ⓛ", - ["ⓜ"] = "Ⓜ", - ["ⓝ"] = "Ⓝ", - ["ⓞ"] = "Ⓞ", - ["ⓟ"] = "Ⓟ", - ["ⓠ"] = "Ⓠ", - ["ⓡ"] = "Ⓡ", - ["ⓢ"] = "Ⓢ", - ["ⓣ"] = "Ⓣ", - ["ⓤ"] = "Ⓤ", - ["ⓥ"] = "Ⓥ", - ["ⓦ"] = "Ⓦ", - ["ⓧ"] = "Ⓧ", - ["ⓨ"] = "Ⓨ", - ["ⓩ"] = "Ⓩ", - ["ⰰ"] = "Ⰰ", - ["ⰱ"] = "Ⰱ", - ["ⰲ"] = "Ⰲ", - ["ⰳ"] = "Ⰳ", - ["ⰴ"] = "Ⰴ", - ["ⰵ"] = "Ⰵ", - ["ⰶ"] = "Ⰶ", - ["ⰷ"] = "Ⰷ", - ["ⰸ"] = "Ⰸ", - ["ⰹ"] = "Ⰹ", - ["ⰺ"] = "Ⰺ", - ["ⰻ"] = "Ⰻ", - ["ⰼ"] = "Ⰼ", - ["ⰽ"] = "Ⰽ", - ["ⰾ"] = "Ⰾ", - ["ⰿ"] = "Ⰿ", - ["ⱀ"] = "Ⱀ", - ["ⱁ"] = "Ⱁ", - ["ⱂ"] = "Ⱂ", - ["ⱃ"] = "Ⱃ", - ["ⱄ"] = "Ⱄ", - ["ⱅ"] = "Ⱅ", - ["ⱆ"] = "Ⱆ", - ["ⱇ"] = "Ⱇ", - ["ⱈ"] = "Ⱈ", - ["ⱉ"] = "Ⱉ", - ["ⱊ"] = "Ⱊ", - ["ⱋ"] = "Ⱋ", - ["ⱌ"] = "Ⱌ", - ["ⱍ"] = "Ⱍ", - ["ⱎ"] = "Ⱎ", - ["ⱏ"] = "Ⱏ", - ["ⱐ"] = "Ⱐ", - ["ⱑ"] = "Ⱑ", - ["ⱒ"] = "Ⱒ", - ["ⱓ"] = "Ⱓ", - ["ⱔ"] = "Ⱔ", - ["ⱕ"] = "Ⱕ", - ["ⱖ"] = "Ⱖ", - ["ⱗ"] = "Ⱗ", - ["ⱘ"] = "Ⱘ", - ["ⱙ"] = "Ⱙ", - ["ⱚ"] = "Ⱚ", - ["ⱛ"] = "Ⱛ", - ["ⱜ"] = "Ⱜ", - ["ⱝ"] = "Ⱝ", - ["ⱞ"] = "Ⱞ", - ["ⱡ"] = "Ⱡ", - ["ⱥ"] = "Ⱥ", - ["ⱦ"] = "Ⱦ", - ["ⱨ"] = "Ⱨ", - ["ⱪ"] = "Ⱪ", - ["ⱬ"] = "Ⱬ", - ["ⱶ"] = "Ⱶ", - ["ⲁ"] = "Ⲁ", - ["ⲃ"] = "Ⲃ", - ["ⲅ"] = "Ⲅ", - ["ⲇ"] = "Ⲇ", - ["ⲉ"] = "Ⲉ", - ["ⲋ"] = "Ⲋ", - ["ⲍ"] = "Ⲍ", - ["ⲏ"] = "Ⲏ", - ["ⲑ"] = "Ⲑ", - ["ⲓ"] = "Ⲓ", - ["ⲕ"] = "Ⲕ", - ["ⲗ"] = "Ⲗ", - ["ⲙ"] = "Ⲙ", - ["ⲛ"] = "Ⲛ", - ["ⲝ"] = "Ⲝ", - ["ⲟ"] = "Ⲟ", - ["ⲡ"] = "Ⲡ", - ["ⲣ"] = "Ⲣ", - ["ⲥ"] = "Ⲥ", - ["ⲧ"] = "Ⲧ", - ["ⲩ"] = "Ⲩ", - ["ⲫ"] = "Ⲫ", - ["ⲭ"] = "Ⲭ", - ["ⲯ"] = "Ⲯ", - ["ⲱ"] = "Ⲱ", - ["ⲳ"] = "Ⲳ", - ["ⲵ"] = "Ⲵ", - ["ⲷ"] = "Ⲷ", - ["ⲹ"] = "Ⲹ", - ["ⲻ"] = "Ⲻ", - ["ⲽ"] = "Ⲽ", - ["ⲿ"] = "Ⲿ", - ["ⳁ"] = "Ⳁ", - ["ⳃ"] = "Ⳃ", - ["ⳅ"] = "Ⳅ", - ["ⳇ"] = "Ⳇ", - ["ⳉ"] = "Ⳉ", - ["ⳋ"] = "Ⳋ", - ["ⳍ"] = "Ⳍ", - ["ⳏ"] = "Ⳏ", - ["ⳑ"] = "Ⳑ", - ["ⳓ"] = "Ⳓ", - ["ⳕ"] = "Ⳕ", - ["ⳗ"] = "Ⳗ", - ["ⳙ"] = "Ⳙ", - ["ⳛ"] = "Ⳛ", - ["ⳝ"] = "Ⳝ", - ["ⳟ"] = "Ⳟ", - ["ⳡ"] = "Ⳡ", - ["ⳣ"] = "Ⳣ", - ["ⴀ"] = "Ⴀ", - ["ⴁ"] = "Ⴁ", - ["ⴂ"] = "Ⴂ", - ["ⴃ"] = "Ⴃ", - ["ⴄ"] = "Ⴄ", - ["ⴅ"] = "Ⴅ", - ["ⴆ"] = "Ⴆ", - ["ⴇ"] = "Ⴇ", - ["ⴈ"] = "Ⴈ", - ["ⴉ"] = "Ⴉ", - ["ⴊ"] = "Ⴊ", - ["ⴋ"] = "Ⴋ", - ["ⴌ"] = "Ⴌ", - ["ⴍ"] = "Ⴍ", - ["ⴎ"] = "Ⴎ", - ["ⴏ"] = "Ⴏ", - ["ⴐ"] = "Ⴐ", - ["ⴑ"] = "Ⴑ", - ["ⴒ"] = "Ⴒ", - ["ⴓ"] = "Ⴓ", - ["ⴔ"] = "Ⴔ", - ["ⴕ"] = "Ⴕ", - ["ⴖ"] = "Ⴖ", - ["ⴗ"] = "Ⴗ", - ["ⴘ"] = "Ⴘ", - ["ⴙ"] = "Ⴙ", - ["ⴚ"] = "Ⴚ", - ["ⴛ"] = "Ⴛ", - ["ⴜ"] = "Ⴜ", - ["ⴝ"] = "Ⴝ", - ["ⴞ"] = "Ⴞ", - ["ⴟ"] = "Ⴟ", - ["ⴠ"] = "Ⴠ", - ["ⴡ"] = "Ⴡ", - ["ⴢ"] = "Ⴢ", - ["ⴣ"] = "Ⴣ", - ["ⴤ"] = "Ⴤ", - ["ⴥ"] = "Ⴥ", - ["a"] = "A", - ["b"] = "B", - ["c"] = "C", - ["d"] = "D", - ["e"] = "E", - ["f"] = "F", - ["g"] = "G", - ["h"] = "H", - ["i"] = "I", - ["j"] = "J", - ["k"] = "K", - ["l"] = "L", - ["m"] = "M", - ["n"] = "N", - ["o"] = "O", - ["p"] = "P", - ["q"] = "Q", - ["r"] = "R", - ["s"] = "S", - ["t"] = "T", - ["u"] = "U", - ["v"] = "V", - ["w"] = "W", - ["x"] = "X", - ["y"] = "Y", - ["z"] = "Z", - ["𐐨"] = "𐐀", - ["𐐩"] = "𐐁", - ["𐐪"] = "𐐂", - ["𐐫"] = "𐐃", - ["𐐬"] = "𐐄", - ["𐐭"] = "𐐅", - ["𐐮"] = "𐐆", - ["𐐯"] = "𐐇", - ["𐐰"] = "𐐈", - ["𐐱"] = "𐐉", - ["𐐲"] = "𐐊", - ["𐐳"] = "𐐋", - ["𐐴"] = "𐐌", - ["𐐵"] = "𐐍", - ["𐐶"] = "𐐎", - ["𐐷"] = "𐐏", - ["𐐸"] = "𐐐", - ["𐐹"] = "𐐑", - ["𐐺"] = "𐐒", - ["𐐻"] = "𐐓", - ["𐐼"] = "𐐔", - ["𐐽"] = "𐐕", - ["𐐾"] = "𐐖", - ["𐐿"] = "𐐗", - ["𐑀"] = "𐐘", - ["𐑁"] = "𐐙", - ["𐑂"] = "𐐚", - ["𐑃"] = "𐐛", - ["𐑄"] = "𐐜", - ["𐑅"] = "𐐝", - ["𐑆"] = "𐐞", - ["𐑇"] = "𐐟", - ["𐑈"] = "𐐠", - ["𐑉"] = "𐐡", - ["𐑊"] = "𐐢", - ["𐑋"] = "𐐣", - ["𐑌"] = "𐐤", - ["𐑍"] = "𐐥", - ["𐑎"] = "𐐦", - ["𐑏"] = "𐐧", -} - - -local uc_lc = { - ["A"] = "a", - ["B"] = "b", - ["C"] = "c", - ["D"] = "d", - ["E"] = "e", - ["F"] = "f", - ["G"] = "g", - ["H"] = "h", - ["I"] = "i", - ["J"] = "j", - ["K"] = "k", - ["L"] = "l", - ["M"] = "m", - ["N"] = "n", - ["O"] = "o", - ["P"] = "p", - ["Q"] = "q", - ["R"] = "r", - ["S"] = "s", - ["T"] = "t", - ["U"] = "u", - ["V"] = "v", - ["W"] = "w", - ["X"] = "x", - ["Y"] = "y", - ["Z"] = "z", - ["À"] = "à", - ["Á"] = "á", - ["Â"] = "â", - ["Ã"] = "ã", - ["Ä"] = "ä", - ["Å"] = "å", - ["Æ"] = "æ", - ["Ç"] = "ç", - ["È"] = "è", - ["É"] = "é", - ["Ê"] = "ê", - ["Ë"] = "ë", - ["Ì"] = "ì", - ["Í"] = "í", - ["Î"] = "î", - ["Ï"] = "ï", - ["Ð"] = "ð", - ["Ñ"] = "ñ", - ["Ò"] = "ò", - ["Ó"] = "ó", - ["Ô"] = "ô", - ["Õ"] = "õ", - ["Ö"] = "ö", - ["Ø"] = "ø", - ["Ù"] = "ù", - ["Ú"] = "ú", - ["Û"] = "û", - ["Ü"] = "ü", - ["Ý"] = "ý", - ["Þ"] = "þ", - ["Ā"] = "ā", - ["Ă"] = "ă", - ["Ą"] = "ą", - ["Ć"] = "ć", - ["Ĉ"] = "ĉ", - ["Ċ"] = "ċ", - ["Č"] = "č", - ["Ď"] = "ď", - ["Đ"] = "đ", - ["Ē"] = "ē", - ["Ĕ"] = "ĕ", - ["Ė"] = "ė", - ["Ę"] = "ę", - ["Ě"] = "ě", - ["Ĝ"] = "ĝ", - ["Ğ"] = "ğ", - ["Ġ"] = "ġ", - ["Ģ"] = "ģ", - ["Ĥ"] = "ĥ", - ["Ħ"] = "ħ", - ["Ĩ"] = "ĩ", - ["Ī"] = "ī", - ["Ĭ"] = "ĭ", - ["Į"] = "į", - ["İ"] = "i", - ["IJ"] = "ij", - ["Ĵ"] = "ĵ", - ["Ķ"] = "ķ", - ["Ĺ"] = "ĺ", - ["Ļ"] = "ļ", - ["Ľ"] = "ľ", - ["Ŀ"] = "ŀ", - ["Ł"] = "ł", - ["Ń"] = "ń", - ["Ņ"] = "ņ", - ["Ň"] = "ň", - ["Ŋ"] = "ŋ", - ["Ō"] = "ō", - ["Ŏ"] = "ŏ", - ["Ő"] = "ő", - ["Œ"] = "œ", - ["Ŕ"] = "ŕ", - ["Ŗ"] = "ŗ", - ["Ř"] = "ř", - ["Ś"] = "ś", - ["Ŝ"] = "ŝ", - ["Ş"] = "ş", - ["Š"] = "š", - ["Ţ"] = "ţ", - ["Ť"] = "ť", - ["Ŧ"] = "ŧ", - ["Ũ"] = "ũ", - ["Ū"] = "ū", - ["Ŭ"] = "ŭ", - ["Ů"] = "ů", - ["Ű"] = "ű", - ["Ų"] = "ų", - ["Ŵ"] = "ŵ", - ["Ŷ"] = "ŷ", - ["Ÿ"] = "ÿ", - ["Ź"] = "ź", - ["Ż"] = "ż", - ["Ž"] = "ž", - ["Ɓ"] = "ɓ", - ["Ƃ"] = "ƃ", - ["Ƅ"] = "ƅ", - ["Ɔ"] = "ɔ", - ["Ƈ"] = "ƈ", - ["Ɖ"] = "ɖ", - ["Ɗ"] = "ɗ", - ["Ƌ"] = "ƌ", - ["Ǝ"] = "ǝ", - ["Ə"] = "ə", - ["Ɛ"] = "ɛ", - ["Ƒ"] = "ƒ", - ["Ɠ"] = "ɠ", - ["Ɣ"] = "ɣ", - ["Ɩ"] = "ɩ", - ["Ɨ"] = "ɨ", - ["Ƙ"] = "ƙ", - ["Ɯ"] = "ɯ", - ["Ɲ"] = "ɲ", - ["Ɵ"] = "ɵ", - ["Ơ"] = "ơ", - ["Ƣ"] = "ƣ", - ["Ƥ"] = "ƥ", - ["Ʀ"] = "ʀ", - ["Ƨ"] = "ƨ", - ["Ʃ"] = "ʃ", - ["Ƭ"] = "ƭ", - ["Ʈ"] = "ʈ", - ["Ư"] = "ư", - ["Ʊ"] = "ʊ", - ["Ʋ"] = "ʋ", - ["Ƴ"] = "ƴ", - ["Ƶ"] = "ƶ", - ["Ʒ"] = "ʒ", - ["Ƹ"] = "ƹ", - ["Ƽ"] = "ƽ", - ["DŽ"] = "dž", - ["Dž"] = "dž", - ["LJ"] = "lj", - ["Lj"] = "lj", - ["NJ"] = "nj", - ["Nj"] = "nj", - ["Ǎ"] = "ǎ", - ["Ǐ"] = "ǐ", - ["Ǒ"] = "ǒ", - ["Ǔ"] = "ǔ", - ["Ǖ"] = "ǖ", - ["Ǘ"] = "ǘ", - ["Ǚ"] = "ǚ", - ["Ǜ"] = "ǜ", - ["Ǟ"] = "ǟ", - ["Ǡ"] = "ǡ", - ["Ǣ"] = "ǣ", - ["Ǥ"] = "ǥ", - ["Ǧ"] = "ǧ", - ["Ǩ"] = "ǩ", - ["Ǫ"] = "ǫ", - ["Ǭ"] = "ǭ", - ["Ǯ"] = "ǯ", - ["DZ"] = "dz", - ["Dz"] = "dz", - ["Ǵ"] = "ǵ", - ["Ƕ"] = "ƕ", - ["Ƿ"] = "ƿ", - ["Ǹ"] = "ǹ", - ["Ǻ"] = "ǻ", - ["Ǽ"] = "ǽ", - ["Ǿ"] = "ǿ", - ["Ȁ"] = "ȁ", - ["Ȃ"] = "ȃ", - ["Ȅ"] = "ȅ", - ["Ȇ"] = "ȇ", - ["Ȉ"] = "ȉ", - ["Ȋ"] = "ȋ", - ["Ȍ"] = "ȍ", - ["Ȏ"] = "ȏ", - ["Ȑ"] = "ȑ", - ["Ȓ"] = "ȓ", - ["Ȕ"] = "ȕ", - ["Ȗ"] = "ȗ", - ["Ș"] = "ș", - ["Ț"] = "ț", - ["Ȝ"] = "ȝ", - ["Ȟ"] = "ȟ", - ["Ƞ"] = "ƞ", - ["Ȣ"] = "ȣ", - ["Ȥ"] = "ȥ", - ["Ȧ"] = "ȧ", - ["Ȩ"] = "ȩ", - ["Ȫ"] = "ȫ", - ["Ȭ"] = "ȭ", - ["Ȯ"] = "ȯ", - ["Ȱ"] = "ȱ", - ["Ȳ"] = "ȳ", - ["Ⱥ"] = "ⱥ", - ["Ȼ"] = "ȼ", - ["Ƚ"] = "ƚ", - ["Ⱦ"] = "ⱦ", - ["Ɂ"] = "ɂ", - ["Ƀ"] = "ƀ", - ["Ʉ"] = "ʉ", - ["Ʌ"] = "ʌ", - ["Ɇ"] = "ɇ", - ["Ɉ"] = "ɉ", - ["Ɋ"] = "ɋ", - ["Ɍ"] = "ɍ", - ["Ɏ"] = "ɏ", - ["Ά"] = "ά", - ["Έ"] = "έ", - ["Ή"] = "ή", - ["Ί"] = "ί", - ["Ό"] = "ό", - ["Ύ"] = "ύ", - ["Ώ"] = "ώ", - ["Α"] = "α", - ["Β"] = "β", - ["Γ"] = "γ", - ["Δ"] = "δ", - ["Ε"] = "ε", - ["Ζ"] = "ζ", - ["Η"] = "η", - ["Θ"] = "θ", - ["Ι"] = "ι", - ["Κ"] = "κ", - ["Λ"] = "λ", - ["Μ"] = "μ", - ["Ν"] = "ν", - ["Ξ"] = "ξ", - ["Ο"] = "ο", - ["Π"] = "π", - ["Ρ"] = "ρ", - ["Σ"] = "σ", - ["Τ"] = "τ", - ["Υ"] = "υ", - ["Φ"] = "φ", - ["Χ"] = "χ", - ["Ψ"] = "ψ", - ["Ω"] = "ω", - ["Ϊ"] = "ϊ", - ["Ϋ"] = "ϋ", - ["Ϙ"] = "ϙ", - ["Ϛ"] = "ϛ", - ["Ϝ"] = "ϝ", - ["Ϟ"] = "ϟ", - ["Ϡ"] = "ϡ", - ["Ϣ"] = "ϣ", - ["Ϥ"] = "ϥ", - ["Ϧ"] = "ϧ", - ["Ϩ"] = "ϩ", - ["Ϫ"] = "ϫ", - ["Ϭ"] = "ϭ", - ["Ϯ"] = "ϯ", - ["ϴ"] = "θ", - ["Ϸ"] = "ϸ", - ["Ϲ"] = "ϲ", - ["Ϻ"] = "ϻ", - ["Ͻ"] = "ͻ", - ["Ͼ"] = "ͼ", - ["Ͽ"] = "ͽ", - ["Ѐ"] = "ѐ", - ["Ё"] = "ё", - ["Ђ"] = "ђ", - ["Ѓ"] = "ѓ", - ["Є"] = "є", - ["Ѕ"] = "ѕ", - ["І"] = "і", - ["Ї"] = "ї", - ["Ј"] = "ј", - ["Љ"] = "љ", - ["Њ"] = "њ", - ["Ћ"] = "ћ", - ["Ќ"] = "ќ", - ["Ѝ"] = "ѝ", - ["Ў"] = "ў", - ["Џ"] = "џ", - ["А"] = "а", - ["Б"] = "б", - ["В"] = "в", - ["Г"] = "г", - ["Д"] = "д", - ["Е"] = "е", - ["Ж"] = "ж", - ["З"] = "з", - ["И"] = "и", - ["Й"] = "й", - ["К"] = "к", - ["Л"] = "л", - ["М"] = "м", - ["Н"] = "н", - ["О"] = "о", - ["П"] = "п", - ["Р"] = "р", - ["С"] = "с", - ["Т"] = "т", - ["У"] = "у", - ["Ф"] = "ф", - ["Х"] = "х", - ["Ц"] = "ц", - ["Ч"] = "ч", - ["Ш"] = "ш", - ["Щ"] = "щ", - ["Ъ"] = "ъ", - ["Ы"] = "ы", - ["Ь"] = "ь", - ["Э"] = "э", - ["Ю"] = "ю", - ["Я"] = "я", - ["Ѡ"] = "ѡ", - ["Ѣ"] = "ѣ", - ["Ѥ"] = "ѥ", - ["Ѧ"] = "ѧ", - ["Ѩ"] = "ѩ", - ["Ѫ"] = "ѫ", - ["Ѭ"] = "ѭ", - ["Ѯ"] = "ѯ", - ["Ѱ"] = "ѱ", - ["Ѳ"] = "ѳ", - ["Ѵ"] = "ѵ", - ["Ѷ"] = "ѷ", - ["Ѹ"] = "ѹ", - ["Ѻ"] = "ѻ", - ["Ѽ"] = "ѽ", - ["Ѿ"] = "ѿ", - ["Ҁ"] = "ҁ", - ["Ҋ"] = "ҋ", - ["Ҍ"] = "ҍ", - ["Ҏ"] = "ҏ", - ["Ґ"] = "ґ", - ["Ғ"] = "ғ", - ["Ҕ"] = "ҕ", - ["Җ"] = "җ", - ["Ҙ"] = "ҙ", - ["Қ"] = "қ", - ["Ҝ"] = "ҝ", - ["Ҟ"] = "ҟ", - ["Ҡ"] = "ҡ", - ["Ң"] = "ң", - ["Ҥ"] = "ҥ", - ["Ҧ"] = "ҧ", - ["Ҩ"] = "ҩ", - ["Ҫ"] = "ҫ", - ["Ҭ"] = "ҭ", - ["Ү"] = "ү", - ["Ұ"] = "ұ", - ["Ҳ"] = "ҳ", - ["Ҵ"] = "ҵ", - ["Ҷ"] = "ҷ", - ["Ҹ"] = "ҹ", - ["Һ"] = "һ", - ["Ҽ"] = "ҽ", - ["Ҿ"] = "ҿ", - ["Ӏ"] = "ӏ", - ["Ӂ"] = "ӂ", - ["Ӄ"] = "ӄ", - ["Ӆ"] = "ӆ", - ["Ӈ"] = "ӈ", - ["Ӊ"] = "ӊ", - ["Ӌ"] = "ӌ", - ["Ӎ"] = "ӎ", - ["Ӑ"] = "ӑ", - ["Ӓ"] = "ӓ", - ["Ӕ"] = "ӕ", - ["Ӗ"] = "ӗ", - ["Ә"] = "ә", - ["Ӛ"] = "ӛ", - ["Ӝ"] = "ӝ", - ["Ӟ"] = "ӟ", - ["Ӡ"] = "ӡ", - ["Ӣ"] = "ӣ", - ["Ӥ"] = "ӥ", - ["Ӧ"] = "ӧ", - ["Ө"] = "ө", - ["Ӫ"] = "ӫ", - ["Ӭ"] = "ӭ", - ["Ӯ"] = "ӯ", - ["Ӱ"] = "ӱ", - ["Ӳ"] = "ӳ", - ["Ӵ"] = "ӵ", - ["Ӷ"] = "ӷ", - ["Ӹ"] = "ӹ", - ["Ӻ"] = "ӻ", - ["Ӽ"] = "ӽ", - ["Ӿ"] = "ӿ", - ["Ԁ"] = "ԁ", - ["Ԃ"] = "ԃ", - ["Ԅ"] = "ԅ", - ["Ԇ"] = "ԇ", - ["Ԉ"] = "ԉ", - ["Ԋ"] = "ԋ", - ["Ԍ"] = "ԍ", - ["Ԏ"] = "ԏ", - ["Ԑ"] = "ԑ", - ["Ԓ"] = "ԓ", - ["Ա"] = "ա", - ["Բ"] = "բ", - ["Գ"] = "գ", - ["Դ"] = "դ", - ["Ե"] = "ե", - ["Զ"] = "զ", - ["Է"] = "է", - ["Ը"] = "ը", - ["Թ"] = "թ", - ["Ժ"] = "ժ", - ["Ի"] = "ի", - ["Լ"] = "լ", - ["Խ"] = "խ", - ["Ծ"] = "ծ", - ["Կ"] = "կ", - ["Հ"] = "հ", - ["Ձ"] = "ձ", - ["Ղ"] = "ղ", - ["Ճ"] = "ճ", - ["Մ"] = "մ", - ["Յ"] = "յ", - ["Ն"] = "ն", - ["Շ"] = "շ", - ["Ո"] = "ո", - ["Չ"] = "չ", - ["Պ"] = "պ", - ["Ջ"] = "ջ", - ["Ռ"] = "ռ", - ["Ս"] = "ս", - ["Վ"] = "վ", - ["Տ"] = "տ", - ["Ր"] = "ր", - ["Ց"] = "ց", - ["Ւ"] = "ւ", - ["Փ"] = "փ", - ["Ք"] = "ք", - ["Օ"] = "օ", - ["Ֆ"] = "ֆ", - ["Ⴀ"] = "ⴀ", - ["Ⴁ"] = "ⴁ", - ["Ⴂ"] = "ⴂ", - ["Ⴃ"] = "ⴃ", - ["Ⴄ"] = "ⴄ", - ["Ⴅ"] = "ⴅ", - ["Ⴆ"] = "ⴆ", - ["Ⴇ"] = "ⴇ", - ["Ⴈ"] = "ⴈ", - ["Ⴉ"] = "ⴉ", - ["Ⴊ"] = "ⴊ", - ["Ⴋ"] = "ⴋ", - ["Ⴌ"] = "ⴌ", - ["Ⴍ"] = "ⴍ", - ["Ⴎ"] = "ⴎ", - ["Ⴏ"] = "ⴏ", - ["Ⴐ"] = "ⴐ", - ["Ⴑ"] = "ⴑ", - ["Ⴒ"] = "ⴒ", - ["Ⴓ"] = "ⴓ", - ["Ⴔ"] = "ⴔ", - ["Ⴕ"] = "ⴕ", - ["Ⴖ"] = "ⴖ", - ["Ⴗ"] = "ⴗ", - ["Ⴘ"] = "ⴘ", - ["Ⴙ"] = "ⴙ", - ["Ⴚ"] = "ⴚ", - ["Ⴛ"] = "ⴛ", - ["Ⴜ"] = "ⴜ", - ["Ⴝ"] = "ⴝ", - ["Ⴞ"] = "ⴞ", - ["Ⴟ"] = "ⴟ", - ["Ⴠ"] = "ⴠ", - ["Ⴡ"] = "ⴡ", - ["Ⴢ"] = "ⴢ", - ["Ⴣ"] = "ⴣ", - ["Ⴤ"] = "ⴤ", - ["Ⴥ"] = "ⴥ", - ["Ḁ"] = "ḁ", - ["Ḃ"] = "ḃ", - ["Ḅ"] = "ḅ", - ["Ḇ"] = "ḇ", - ["Ḉ"] = "ḉ", - ["Ḋ"] = "ḋ", - ["Ḍ"] = "ḍ", - ["Ḏ"] = "ḏ", - ["Ḑ"] = "ḑ", - ["Ḓ"] = "ḓ", - ["Ḕ"] = "ḕ", - ["Ḗ"] = "ḗ", - ["Ḙ"] = "ḙ", - ["Ḛ"] = "ḛ", - ["Ḝ"] = "ḝ", - ["Ḟ"] = "ḟ", - ["Ḡ"] = "ḡ", - ["Ḣ"] = "ḣ", - ["Ḥ"] = "ḥ", - ["Ḧ"] = "ḧ", - ["Ḩ"] = "ḩ", - ["Ḫ"] = "ḫ", - ["Ḭ"] = "ḭ", - ["Ḯ"] = "ḯ", - ["Ḱ"] = "ḱ", - ["Ḳ"] = "ḳ", - ["Ḵ"] = "ḵ", - ["Ḷ"] = "ḷ", - ["Ḹ"] = "ḹ", - ["Ḻ"] = "ḻ", - ["Ḽ"] = "ḽ", - ["Ḿ"] = "ḿ", - ["Ṁ"] = "ṁ", - ["Ṃ"] = "ṃ", - ["Ṅ"] = "ṅ", - ["Ṇ"] = "ṇ", - ["Ṉ"] = "ṉ", - ["Ṋ"] = "ṋ", - ["Ṍ"] = "ṍ", - ["Ṏ"] = "ṏ", - ["Ṑ"] = "ṑ", - ["Ṓ"] = "ṓ", - ["Ṕ"] = "ṕ", - ["Ṗ"] = "ṗ", - ["Ṙ"] = "ṙ", - ["Ṛ"] = "ṛ", - ["Ṝ"] = "ṝ", - ["Ṟ"] = "ṟ", - ["Ṡ"] = "ṡ", - ["Ṣ"] = "ṣ", - ["Ṥ"] = "ṥ", - ["Ṧ"] = "ṧ", - ["Ṩ"] = "ṩ", - ["Ṫ"] = "ṫ", - ["Ṭ"] = "ṭ", - ["Ṯ"] = "ṯ", - ["Ṱ"] = "ṱ", - ["Ṳ"] = "ṳ", - ["Ṵ"] = "ṵ", - ["Ṷ"] = "ṷ", - ["Ṹ"] = "ṹ", - ["Ṻ"] = "ṻ", - ["Ṽ"] = "ṽ", - ["Ṿ"] = "ṿ", - ["Ẁ"] = "ẁ", - ["Ẃ"] = "ẃ", - ["Ẅ"] = "ẅ", - ["Ẇ"] = "ẇ", - ["Ẉ"] = "ẉ", - ["Ẋ"] = "ẋ", - ["Ẍ"] = "ẍ", - ["Ẏ"] = "ẏ", - ["Ẑ"] = "ẑ", - ["Ẓ"] = "ẓ", - ["Ẕ"] = "ẕ", - ["Ạ"] = "ạ", - ["Ả"] = "ả", - ["Ấ"] = "ấ", - ["Ầ"] = "ầ", - ["Ẩ"] = "ẩ", - ["Ẫ"] = "ẫ", - ["Ậ"] = "ậ", - ["Ắ"] = "ắ", - ["Ằ"] = "ằ", - ["Ẳ"] = "ẳ", - ["Ẵ"] = "ẵ", - ["Ặ"] = "ặ", - ["Ẹ"] = "ẹ", - ["Ẻ"] = "ẻ", - ["Ẽ"] = "ẽ", - ["Ế"] = "ế", - ["Ề"] = "ề", - ["Ể"] = "ể", - ["Ễ"] = "ễ", - ["Ệ"] = "ệ", - ["Ỉ"] = "ỉ", - ["Ị"] = "ị", - ["Ọ"] = "ọ", - ["Ỏ"] = "ỏ", - ["Ố"] = "ố", - ["Ồ"] = "ồ", - ["Ổ"] = "ổ", - ["Ỗ"] = "ỗ", - ["Ộ"] = "ộ", - ["Ớ"] = "ớ", - ["Ờ"] = "ờ", - ["Ở"] = "ở", - ["Ỡ"] = "ỡ", - ["Ợ"] = "ợ", - ["Ụ"] = "ụ", - ["Ủ"] = "ủ", - ["Ứ"] = "ứ", - ["Ừ"] = "ừ", - ["Ử"] = "ử", - ["Ữ"] = "ữ", - ["Ự"] = "ự", - ["Ỳ"] = "ỳ", - ["Ỵ"] = "ỵ", - ["Ỷ"] = "ỷ", - ["Ỹ"] = "ỹ", - ["Ἀ"] = "ἀ", - ["Ἁ"] = "ἁ", - ["Ἂ"] = "ἂ", - ["Ἃ"] = "ἃ", - ["Ἄ"] = "ἄ", - ["Ἅ"] = "ἅ", - ["Ἆ"] = "ἆ", - ["Ἇ"] = "ἇ", - ["Ἐ"] = "ἐ", - ["Ἑ"] = "ἑ", - ["Ἒ"] = "ἒ", - ["Ἓ"] = "ἓ", - ["Ἔ"] = "ἔ", - ["Ἕ"] = "ἕ", - ["Ἠ"] = "ἠ", - ["Ἡ"] = "ἡ", - ["Ἢ"] = "ἢ", - ["Ἣ"] = "ἣ", - ["Ἤ"] = "ἤ", - ["Ἥ"] = "ἥ", - ["Ἦ"] = "ἦ", - ["Ἧ"] = "ἧ", - ["Ἰ"] = "ἰ", - ["Ἱ"] = "ἱ", - ["Ἲ"] = "ἲ", - ["Ἳ"] = "ἳ", - ["Ἴ"] = "ἴ", - ["Ἵ"] = "ἵ", - ["Ἶ"] = "ἶ", - ["Ἷ"] = "ἷ", - ["Ὀ"] = "ὀ", - ["Ὁ"] = "ὁ", - ["Ὂ"] = "ὂ", - ["Ὃ"] = "ὃ", - ["Ὄ"] = "ὄ", - ["Ὅ"] = "ὅ", - ["Ὑ"] = "ὑ", - ["Ὓ"] = "ὓ", - ["Ὕ"] = "ὕ", - ["Ὗ"] = "ὗ", - ["Ὠ"] = "ὠ", - ["Ὡ"] = "ὡ", - ["Ὢ"] = "ὢ", - ["Ὣ"] = "ὣ", - ["Ὤ"] = "ὤ", - ["Ὥ"] = "ὥ", - ["Ὦ"] = "ὦ", - ["Ὧ"] = "ὧ", - ["ᾈ"] = "ᾀ", - ["ᾉ"] = "ᾁ", - ["ᾊ"] = "ᾂ", - ["ᾋ"] = "ᾃ", - ["ᾌ"] = "ᾄ", - ["ᾍ"] = "ᾅ", - ["ᾎ"] = "ᾆ", - ["ᾏ"] = "ᾇ", - ["ᾘ"] = "ᾐ", - ["ᾙ"] = "ᾑ", - ["ᾚ"] = "ᾒ", - ["ᾛ"] = "ᾓ", - ["ᾜ"] = "ᾔ", - ["ᾝ"] = "ᾕ", - ["ᾞ"] = "ᾖ", - ["ᾟ"] = "ᾗ", - ["ᾨ"] = "ᾠ", - ["ᾩ"] = "ᾡ", - ["ᾪ"] = "ᾢ", - ["ᾫ"] = "ᾣ", - ["ᾬ"] = "ᾤ", - ["ᾭ"] = "ᾥ", - ["ᾮ"] = "ᾦ", - ["ᾯ"] = "ᾧ", - ["Ᾰ"] = "ᾰ", - ["Ᾱ"] = "ᾱ", - ["Ὰ"] = "ὰ", - ["Ά"] = "ά", - ["ᾼ"] = "ᾳ", - ["Ὲ"] = "ὲ", - ["Έ"] = "έ", - ["Ὴ"] = "ὴ", - ["Ή"] = "ή", - ["ῌ"] = "ῃ", - ["Ῐ"] = "ῐ", - ["Ῑ"] = "ῑ", - ["Ὶ"] = "ὶ", - ["Ί"] = "ί", - ["Ῠ"] = "ῠ", - ["Ῡ"] = "ῡ", - ["Ὺ"] = "ὺ", - ["Ύ"] = "ύ", - ["Ῥ"] = "ῥ", - ["Ὸ"] = "ὸ", - ["Ό"] = "ό", - ["Ὼ"] = "ὼ", - ["Ώ"] = "ώ", - ["ῼ"] = "ῳ", - ["Ω"] = "ω", - ["K"] = "k", - ["Å"] = "å", - ["Ⅎ"] = "ⅎ", - ["Ⅰ"] = "ⅰ", - ["Ⅱ"] = "ⅱ", - ["Ⅲ"] = "ⅲ", - ["Ⅳ"] = "ⅳ", - ["Ⅴ"] = "ⅴ", - ["Ⅵ"] = "ⅵ", - ["Ⅶ"] = "ⅶ", - ["Ⅷ"] = "ⅷ", - ["Ⅸ"] = "ⅸ", - ["Ⅹ"] = "ⅹ", - ["Ⅺ"] = "ⅺ", - ["Ⅻ"] = "ⅻ", - ["Ⅼ"] = "ⅼ", - ["Ⅽ"] = "ⅽ", - ["Ⅾ"] = "ⅾ", - ["Ⅿ"] = "ⅿ", - ["Ↄ"] = "ↄ", - ["Ⓐ"] = "ⓐ", - ["Ⓑ"] = "ⓑ", - ["Ⓒ"] = "ⓒ", - ["Ⓓ"] = "ⓓ", - ["Ⓔ"] = "ⓔ", - ["Ⓕ"] = "ⓕ", - ["Ⓖ"] = "ⓖ", - ["Ⓗ"] = "ⓗ", - ["Ⓘ"] = "ⓘ", - ["Ⓙ"] = "ⓙ", - ["Ⓚ"] = "ⓚ", - ["Ⓛ"] = "ⓛ", - ["Ⓜ"] = "ⓜ", - ["Ⓝ"] = "ⓝ", - ["Ⓞ"] = "ⓞ", - ["Ⓟ"] = "ⓟ", - ["Ⓠ"] = "ⓠ", - ["Ⓡ"] = "ⓡ", - ["Ⓢ"] = "ⓢ", - ["Ⓣ"] = "ⓣ", - ["Ⓤ"] = "ⓤ", - ["Ⓥ"] = "ⓥ", - ["Ⓦ"] = "ⓦ", - ["Ⓧ"] = "ⓧ", - ["Ⓨ"] = "ⓨ", - ["Ⓩ"] = "ⓩ", - ["Ⰰ"] = "ⰰ", - ["Ⰱ"] = "ⰱ", - ["Ⰲ"] = "ⰲ", - ["Ⰳ"] = "ⰳ", - ["Ⰴ"] = "ⰴ", - ["Ⰵ"] = "ⰵ", - ["Ⰶ"] = "ⰶ", - ["Ⰷ"] = "ⰷ", - ["Ⰸ"] = "ⰸ", - ["Ⰹ"] = "ⰹ", - ["Ⰺ"] = "ⰺ", - ["Ⰻ"] = "ⰻ", - ["Ⰼ"] = "ⰼ", - ["Ⰽ"] = "ⰽ", - ["Ⰾ"] = "ⰾ", - ["Ⰿ"] = "ⰿ", - ["Ⱀ"] = "ⱀ", - ["Ⱁ"] = "ⱁ", - ["Ⱂ"] = "ⱂ", - ["Ⱃ"] = "ⱃ", - ["Ⱄ"] = "ⱄ", - ["Ⱅ"] = "ⱅ", - ["Ⱆ"] = "ⱆ", - ["Ⱇ"] = "ⱇ", - ["Ⱈ"] = "ⱈ", - ["Ⱉ"] = "ⱉ", - ["Ⱊ"] = "ⱊ", - ["Ⱋ"] = "ⱋ", - ["Ⱌ"] = "ⱌ", - ["Ⱍ"] = "ⱍ", - ["Ⱎ"] = "ⱎ", - ["Ⱏ"] = "ⱏ", - ["Ⱐ"] = "ⱐ", - ["Ⱑ"] = "ⱑ", - ["Ⱒ"] = "ⱒ", - ["Ⱓ"] = "ⱓ", - ["Ⱔ"] = "ⱔ", - ["Ⱕ"] = "ⱕ", - ["Ⱖ"] = "ⱖ", - ["Ⱗ"] = "ⱗ", - ["Ⱘ"] = "ⱘ", - ["Ⱙ"] = "ⱙ", - ["Ⱚ"] = "ⱚ", - ["Ⱛ"] = "ⱛ", - ["Ⱜ"] = "ⱜ", - ["Ⱝ"] = "ⱝ", - ["Ⱞ"] = "ⱞ", - ["Ⱡ"] = "ⱡ", - ["Ɫ"] = "ɫ", - ["Ᵽ"] = "ᵽ", - ["Ɽ"] = "ɽ", - ["Ⱨ"] = "ⱨ", - ["Ⱪ"] = "ⱪ", - ["Ⱬ"] = "ⱬ", - ["Ⱶ"] = "ⱶ", - ["Ⲁ"] = "ⲁ", - ["Ⲃ"] = "ⲃ", - ["Ⲅ"] = "ⲅ", - ["Ⲇ"] = "ⲇ", - ["Ⲉ"] = "ⲉ", - ["Ⲋ"] = "ⲋ", - ["Ⲍ"] = "ⲍ", - ["Ⲏ"] = "ⲏ", - ["Ⲑ"] = "ⲑ", - ["Ⲓ"] = "ⲓ", - ["Ⲕ"] = "ⲕ", - ["Ⲗ"] = "ⲗ", - ["Ⲙ"] = "ⲙ", - ["Ⲛ"] = "ⲛ", - ["Ⲝ"] = "ⲝ", - ["Ⲟ"] = "ⲟ", - ["Ⲡ"] = "ⲡ", - ["Ⲣ"] = "ⲣ", - ["Ⲥ"] = "ⲥ", - ["Ⲧ"] = "ⲧ", - ["Ⲩ"] = "ⲩ", - ["Ⲫ"] = "ⲫ", - ["Ⲭ"] = "ⲭ", - ["Ⲯ"] = "ⲯ", - ["Ⲱ"] = "ⲱ", - ["Ⲳ"] = "ⲳ", - ["Ⲵ"] = "ⲵ", - ["Ⲷ"] = "ⲷ", - ["Ⲹ"] = "ⲹ", - ["Ⲻ"] = "ⲻ", - ["Ⲽ"] = "ⲽ", - ["Ⲿ"] = "ⲿ", - ["Ⳁ"] = "ⳁ", - ["Ⳃ"] = "ⳃ", - ["Ⳅ"] = "ⳅ", - ["Ⳇ"] = "ⳇ", - ["Ⳉ"] = "ⳉ", - ["Ⳋ"] = "ⳋ", - ["Ⳍ"] = "ⳍ", - ["Ⳏ"] = "ⳏ", - ["Ⳑ"] = "ⳑ", - ["Ⳓ"] = "ⳓ", - ["Ⳕ"] = "ⳕ", - ["Ⳗ"] = "ⳗ", - ["Ⳙ"] = "ⳙ", - ["Ⳛ"] = "ⳛ", - ["Ⳝ"] = "ⳝ", - ["Ⳟ"] = "ⳟ", - ["Ⳡ"] = "ⳡ", - ["Ⳣ"] = "ⳣ", - ["A"] = "a", - ["B"] = "b", - ["C"] = "c", - ["D"] = "d", - ["E"] = "e", - ["F"] = "f", - ["G"] = "g", - ["H"] = "h", - ["I"] = "i", - ["J"] = "j", - ["K"] = "k", - ["L"] = "l", - ["M"] = "m", - ["N"] = "n", - ["O"] = "o", - ["P"] = "p", - ["Q"] = "q", - ["R"] = "r", - ["S"] = "s", - ["T"] = "t", - ["U"] = "u", - ["V"] = "v", - ["W"] = "w", - ["X"] = "x", - ["Y"] = "y", - ["Z"] = "z", - ["𐐀"] = "𐐨", - ["𐐁"] = "𐐩", - ["𐐂"] = "𐐪", - ["𐐃"] = "𐐫", - ["𐐄"] = "𐐬", - ["𐐅"] = "𐐭", - ["𐐆"] = "𐐮", - ["𐐇"] = "𐐯", - ["𐐈"] = "𐐰", - ["𐐉"] = "𐐱", - ["𐐊"] = "𐐲", - ["𐐋"] = "𐐳", - ["𐐌"] = "𐐴", - ["𐐍"] = "𐐵", - ["𐐎"] = "𐐶", - ["𐐏"] = "𐐷", - ["𐐐"] = "𐐸", - ["𐐑"] = "𐐹", - ["𐐒"] = "𐐺", - ["𐐓"] = "𐐻", - ["𐐔"] = "𐐼", - ["𐐕"] = "𐐽", - ["𐐖"] = "𐐾", - ["𐐗"] = "𐐿", - ["𐐘"] = "𐑀", - ["𐐙"] = "𐑁", - ["𐐚"] = "𐑂", - ["𐐛"] = "𐑃", - ["𐐜"] = "𐑄", - ["𐐝"] = "𐑅", - ["𐐞"] = "𐑆", - ["𐐟"] = "𐑇", - ["𐐠"] = "𐑈", - ["𐐡"] = "𐑉", - ["𐐢"] = "𐑊", - ["𐐣"] = "𐑋", - ["𐐤"] = "𐑌", - ["𐐥"] = "𐑍", - ["𐐦"] = "𐑎", - ["𐐧"] = "𐑏", -} - -return {uc_lc = uc_lc, lc_uc = lc_uc}