Skip to content
Snippets Groups Projects
Commit 559cbc8a authored by Franck Dary's avatar Franck Dary
Browse files

Added functions modifier to submodules context and focused

parent 8e01a100
No related branches found
No related tags found
No related merge requests found
namespace util
{
std::map<utf8char, utf8char> upper2lower
{
{"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"},
{"À", "à"},
{"Á", "á"},
{"Â", "â"},
{"Ã", "ã"},
{"Ä", "ä"},
{"Å", "å"},
{"Æ", "æ"},
{"Ç", "ç"},
{"È", "è"},
{"É", "é"},
{"Ê", "ê"},
{"Ë", "ë"},
{"Ì", "ì"},
{"Í", "í"},
{"Î", "î"},
{"Ï", "ï"},
{"Ð", "ð"},
{"Ñ", "ñ"},
{"Ò", "ò"},
{"Ó", "ó"},
{"Ô", "ô"},
{"Õ", "õ"},
{"Ö", "ö"},
{"Ø", "ø"},
{"Ù", "ù"},
{"Ú", "ú"},
{"Û", "û"},
{"Ü", "ü"},
{"Ý", "ý"},
{"Þ", "þ"},
{"Ā", "ā"},
{"Ă", "ă"},
{"Ą", "ą"},
{"Ć", "ć"},
{"Ĉ", "ĉ"},
{"Ċ", "ċ"},
{"Č", "č"},
{"Ď", "ď"},
{"Đ", "đ"},
{"Ē", "ē"},
{"Ĕ", "ĕ"},
{"Ė", "ė"},
{"Ę", "ę"},
{"Ě", "ě"},
{"Ĝ", "ĝ"},
{"Ğ", "ğ"},
{"Ġ", "ġ"},
{"Ģ", "ģ"},
{"Ĥ", "ĥ"},
{"Ħ", "ħ"},
{"Ĩ", "ĩ"},
{"Ī", "ī"},
{"Ĭ", "ĭ"},
{"Į", "į"},
{"IJ", "ij"},
{"Ĵ", "ĵ"},
{"Ķ", "ķ"},
{"Ĺ", "ĺ"},
{"Ļ", "ļ"},
{"Ľ", "ľ"},
{"Ŀ", "ŀ"},
{"Ł", "ł"},
{"Ń", "ń"},
{"Ņ", "ņ"},
{"Ň", "ň"},
{"Ŋ", "ŋ"},
{"Ō", "ō"},
{"Ŏ", "ŏ"},
{"Ő", "ő"},
{"Œ", "œ"},
{"Ŕ", "ŕ"},
{"Ŗ", "ŗ"},
{"Ř", "ř"},
{"Ś", "ś"},
{"Ŝ", "ŝ"},
{"Ş", "ş"},
{"Š", "š"},
{"Ţ", "ţ"},
{"Ť", "ť"},
{"Ŧ", "ŧ"},
{"Ũ", "ũ"},
{"Ū", "ū"},
{"Ŭ", "ŭ"},
{"Ů", "ů"},
{"Ű", "ű"},
{"Ų", "ų"},
{"Ŵ", "ŵ"},
{"Ŷ", "ŷ"},
{"Ÿ", "ÿ"},
{"Ź", "ź"},
{"Ż", "ż"},
{"Ž", "ž"},
{"Ɓ", "ɓ"},
{"Ƃ", "ƃ"},
{"Ƅ", "ƅ"},
{"Ɔ", "ɔ"},
{"Ƈ", "ƈ"},
{"Ɖ", "ɖ"},
{"Ɗ", "ɗ"},
{"Ƌ", "ƌ"},
{"Ǝ", "ǝ"},
{"Ə", "ə"},
{"Ɛ", "ɛ"},
{"Ƒ", "ƒ"},
{"Ɠ", "ɠ"},
{"Ɣ", "ɣ"},
{"Ɩ", "ɩ"},
{"Ɨ", "ɨ"},
{"Ƙ", "ƙ"},
{"Ɯ", "ɯ"},
{"Ɲ", "ɲ"},
{"Ɵ", "ɵ"},
{"Ơ", "ơ"},
{"Ƣ", "ƣ"},
{"Ƥ", "ƥ"},
{"Ʀ", "ʀ"},
{"Ƨ", "ƨ"},
{"Ʃ", "ʃ"},
{"Ƭ", "ƭ"},
{"Ʈ", "ʈ"},
{"Ư", "ư"},
{"Ʊ", "ʊ"},
{"Ʋ", "ʋ"},
{"Ƴ", "ƴ"},
{"Ƶ", "ƶ"},
{"Ʒ", "ʒ"},
{"Ƹ", "ƹ"},
{"Ƽ", "ƽ"},
{"DŽ", "dž"},
{"LJ", "lj"},
{"NJ", "nj"},
{"Ǎ", "ǎ"},
{"Ǐ", "ǐ"},
{"Ǒ", "ǒ"},
{"Ǔ", "ǔ"},
{"Ǖ", "ǖ"},
{"Ǘ", "ǘ"},
{"Ǚ", "ǚ"},
{"Ǜ", "ǜ"},
{"Ǟ", "ǟ"},
{"Ǡ", "ǡ"},
{"Ǣ", "ǣ"},
{"Ǥ", "ǥ"},
{"Ǧ", "ǧ"},
{"Ǩ", "ǩ"},
{"Ǫ", "ǫ"},
{"Ǭ", "ǭ"},
{"Ǯ", "ǯ"},
{"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"},
{"𐐀", "𐐨"},
{"𐐁", "𐐩"},
{"𐐂", "𐐪"},
{"𐐃", "𐐫"},
{"𐐄", "𐐬"},
{"𐐅", "𐐭"},
{"𐐆", "𐐮"},
{"𐐇", "𐐯"},
{"𐐈", "𐐰"},
{"𐐉", "𐐱"},
{"𐐊", "𐐲"},
{"𐐋", "𐐳"},
{"𐐌", "𐐴"},
{"𐐍", "𐐵"},
{"𐐎", "𐐶"},
{"𐐏", "𐐷"},
{"𐐐", "𐐸"},
{"𐐑", "𐐹"},
{"𐐒", "𐐺"},
{"𐐓", "𐐻"},
{"𐐔", "𐐼"},
{"𐐕", "𐐽"},
{"𐐖", "𐐾"},
{"𐐗", "𐐿"},
{"𐐘", "𐑀"},
{"𐐙", "𐑁"},
{"𐐚", "𐑂"},
{"𐐛", "𐑃"},
{"𐐜", "𐑄"},
{"𐐝", "𐑅"},
{"𐐞", "𐑆"},
{"𐐟", "𐑇"},
{"𐐠", "𐑈"},
{"𐐡", "𐑉"},
{"𐐢", "𐑊"},
{"𐐣", "𐑋"},
{"𐐤", "𐑌"},
{"𐐥", "𐑍"},
{"𐐦", "𐑎"},
{"𐐧", "𐑏"},
{"𐒰", "𐓘"},
{"𐒱", "𐓙"},
{"𐒲", "𐓚"},
{"𐒳", "𐓛"},
{"𐒴", "𐓜"},
{"𐒵", "𐓝"},
{"𐒶", "𐓞"},
{"𐒷", "𐓟"},
{"𐒸", "𐓠"},
{"𐒹", "𐓡"},
{"𐒺", "𐓢"},
{"𐒻", "𐓣"},
{"𐒼", "𐓤"},
{"𐒽", "𐓥"},
{"𐒾", "𐓦"},
{"𐒿", "𐓧"},
{"𐓀", "𐓨"},
{"𐓁", "𐓩"},
{"𐓂", "𐓪"},
{"𐓃", "𐓫"},
{"𐓄", "𐓬"},
{"𐓅", "𐓭"},
{"𐓆", "𐓮"},
{"𐓇", "𐓯"},
{"𐓈", "𐓰"},
{"𐓉", "𐓱"},
{"𐓊", "𐓲"},
{"𐓋", "𐓳"},
{"𐓌", "𐓴"},
{"𐓍", "𐓵"},
{"𐓎", "𐓶"},
{"𐓏", "𐓷"},
{"𐓐", "𐓸"},
{"𐓑", "𐓹"},
{"𐓒", "𐓺"},
{"𐓓", "𐓻"},
{"𐲀", "𐳀"},
{"𐲁", "𐳁"},
{"𐲂", "𐳂"},
{"𐲃", "𐳃"},
{"𐲄", "𐳄"},
{"𐲅", "𐳅"},
{"𐲆", "𐳆"},
{"𐲇", "𐳇"},
{"𐲈", "𐳈"},
{"𐲉", "𐳉"},
{"𐲊", "𐳊"},
{"𐲋", "𐳋"},
{"𐲌", "𐳌"},
{"𐲍", "𐳍"},
{"𐲎", "𐳎"},
{"𐲏", "𐳏"},
{"𐲐", "𐳐"},
{"𐲑", "𐳑"},
{"𐲒", "𐳒"},
{"𐲓", "𐳓"},
{"𐲔", "𐳔"},
{"𐲕", "𐳕"},
{"𐲖", "𐳖"},
{"𐲗", "𐳗"},
{"𐲘", "𐳘"},
{"𐲙", "𐳙"},
{"𐲚", "𐳚"},
{"𐲛", "𐳛"},
{"𐲜", "𐳜"},
{"𐲝", "𐳝"},
{"𐲞", "𐳞"},
{"𐲟", "𐳟"},
{"𐲠", "𐳠"},
{"𐲡", "𐳡"},
{"𐲢", "𐳢"},
{"𐲣", "𐳣"},
{"𐲤", "𐳤"},
{"𐲥", "𐳥"},
{"𐲦", "𐳦"},
{"𐲧", "𐳧"},
{"𐲨", "𐳨"},
{"𐲩", "𐳩"},
{"𐲪", "𐳪"},
{"𐲫", "𐳫"},
{"𐲬", "𐳬"},
{"𐲭", "𐳭"},
{"𐲮", "𐳮"},
{"𐲯", "𐳯"},
{"𐲰", "𐳰"},
{"𐲱", "𐳱"},
{"𐲲", "𐳲"},
{"𑢠", "𑣀"},
{"𑢡", "𑣁"},
{"𑢢", "𑣂"},
{"𑢣", "𑣃"},
{"𑢤", "𑣄"},
{"𑢥", "𑣅"},
{"𑢦", "𑣆"},
{"𑢧", "𑣇"},
{"𑢨", "𑣈"},
{"𑢩", "𑣉"},
{"𑢪", "𑣊"},
{"𑢫", "𑣋"},
{"𑢬", "𑣌"},
{"𑢭", "𑣍"},
{"𑢮", "𑣎"},
{"𑢯", "𑣏"},
{"𑢰", "𑣐"},
{"𑢱", "𑣑"},
{"𑢲", "𑣒"},
{"𑢳", "𑣓"},
{"𑢴", "𑣔"},
{"𑢵", "𑣕"},
{"𑢶", "𑣖"},
{"𑢷", "𑣗"},
{"𑢸", "𑣘"},
{"𑢹", "𑣙"},
{"𑢺", "𑣚"},
{"𑢻", "𑣛"},
{"𑢼", "𑣜"},
{"𑢽", "𑣝"},
{"𑢾", "𑣞"},
{"𑢿", "𑣟"},
{"𖹀", "𖹠"},
{"𖹁", "𖹡"},
{"𖹂", "𖹢"},
{"𖹃", "𖹣"},
{"𖹄", "𖹤"},
{"𖹅", "𖹥"},
{"𖹆", "𖹦"},
{"𖹇", "𖹧"},
{"𖹈", "𖹨"},
{"𖹉", "𖹩"},
{"𖹊", "𖹪"},
{"𖹋", "𖹫"},
{"𖹌", "𖹬"},
{"𖹍", "𖹭"},
{"𖹎", "𖹮"},
{"𖹏", "𖹯"},
{"𖹐", "𖹰"},
{"𖹑", "𖹱"},
{"𖹒", "𖹲"},
{"𖹓", "𖹳"},
{"𖹔", "𖹴"},
{"𖹕", "𖹵"},
{"𖹖", "𖹶"},
{"𖹗", "𖹷"},
{"𖹘", "𖹸"},
{"𖹙", "𖹹"},
{"𖹚", "𖹺"},
{"𖹛", "𖹻"},
{"𖹜", "𖹼"},
{"𖹝", "𖹽"},
{"𖹞", "𖹾"},
{"𖹟", "𖹿"},
{"𝐀", "𝐀"},
{"𝐁", "𝐁"},
{"𝐂", "𝐂"},
{"𝐃", "𝐃"},
{"𝐄", "𝐄"},
{"𝐅", "𝐅"},
{"𝐆", "𝐆"},
{"𝐇", "𝐇"},
{"𝐈", "𝐈"},
{"𝐉", "𝐉"},
{"𝐊", "𝐊"},
{"𝐋", "𝐋"},
{"𝐌", "𝐌"},
{"𝐍", "𝐍"},
{"𝐎", "𝐎"},
{"𝐏", "𝐏"},
{"𝐐", "𝐐"},
{"𝐑", "𝐑"},
{"𝐒", "𝐒"},
{"𝐓", "𝐓"},
{"𝐔", "𝐔"},
{"𝐕", "𝐕"},
{"𝐖", "𝐖"},
{"𝐗", "𝐗"},
{"𝐘", "𝐘"},
{"𝐙", "𝐙"},
{"𝐴", "𝐴"},
{"𝐵", "𝐵"},
{"𝐶", "𝐶"},
{"𝐷", "𝐷"},
{"𝐸", "𝐸"},
{"𝐹", "𝐹"},
{"𝐺", "𝐺"},
{"𝐻", "𝐻"},
{"𝐼", "𝐼"},
{"𝐽", "𝐽"},
{"𝐾", "𝐾"},
{"𝐿", "𝐿"},
{"𝑀", "𝑀"},
{"𝑁", "𝑁"},
{"𝑂", "𝑂"},
{"𝑃", "𝑃"},
{"𝑄", "𝑄"},
{"𝑅", "𝑅"},
{"𝑆", "𝑆"},
{"𝑇", "𝑇"},
{"𝑈", "𝑈"},
{"𝑉", "𝑉"},
{"𝑊", "𝑊"},
{"𝑋", "𝑋"},
{"𝑌", "𝑌"},
{"𝑍", "𝑍"},
{"𝑨", "𝑨"},
{"𝑩", "𝑩"},
{"𝑪", "𝑪"},
{"𝑫", "𝑫"},
{"𝑬", "𝑬"},
{"𝑭", "𝑭"},
{"𝑮", "𝑮"},
{"𝑯", "𝑯"},
{"𝑰", "𝑰"},
{"𝑱", "𝑱"},
{"𝑲", "𝑲"},
{"𝑳", "𝑳"},
{"𝑴", "𝑴"},
{"𝑵", "𝑵"},
{"𝑶", "𝑶"},
{"𝑷", "𝑷"},
{"𝑸", "𝑸"},
{"𝑹", "𝑹"},
{"𝑺", "𝑺"},
{"𝑻", "𝑻"},
{"𝑼", "𝑼"},
{"𝑽", "𝑽"},
{"𝑾", "𝑾"},
{"𝑿", "𝑿"},
{"𝒀", "𝒀"},
{"𝒁", "𝒁"},
{"𝒜", "𝒜"},
{"𝒞", "𝒞"},
{"𝒟", "𝒟"},
{"𝒢", "𝒢"},
{"𝒥", "𝒥"},
{"𝒦", "𝒦"},
{"𝒩", "𝒩"},
{"𝒪", "𝒪"},
{"𝒫", "𝒫"},
{"𝒬", "𝒬"},
{"𝒮", "𝒮"},
{"𝒯", "𝒯"},
{"𝒰", "𝒰"},
{"𝒱", "𝒱"},
{"𝒲", "𝒲"},
{"𝒳", "𝒳"},
{"𝒴", "𝒴"},
{"𝒵", "𝒵"},
{"𝓐", "𝓐"},
{"𝓑", "𝓑"},
{"𝓒", "𝓒"},
{"𝓓", "𝓓"},
{"𝓔", "𝓔"},
{"𝓕", "𝓕"},
{"𝓖", "𝓖"},
{"𝓗", "𝓗"},
{"𝓘", "𝓘"},
{"𝓙", "𝓙"},
{"𝓚", "𝓚"},
{"𝓛", "𝓛"},
{"𝓜", "𝓜"},
{"𝓝", "𝓝"},
{"𝓞", "𝓞"},
{"𝓟", "𝓟"},
{"𝓠", "𝓠"},
{"𝓡", "𝓡"},
{"𝓢", "𝓢"},
{"𝓣", "𝓣"},
{"𝓤", "𝓤"},
{"𝓥", "𝓥"},
{"𝓦", "𝓦"},
{"𝓧", "𝓧"},
{"𝓨", "𝓨"},
{"𝓩", "𝓩"},
{"𝔄", "𝔄"},
{"𝔅", "𝔅"},
{"𝔇", "𝔇"},
{"𝔈", "𝔈"},
{"𝔉", "𝔉"},
{"𝔊", "𝔊"},
{"𝔍", "𝔍"},
{"𝔎", "𝔎"},
{"𝔏", "𝔏"},
{"𝔐", "𝔐"},
{"𝔑", "𝔑"},
{"𝔒", "𝔒"},
{"𝔓", "𝔓"},
{"𝔔", "𝔔"},
{"𝔖", "𝔖"},
{"𝔗", "𝔗"},
{"𝔘", "𝔘"},
{"𝔙", "𝔙"},
{"𝔚", "𝔚"},
{"𝔛", "𝔛"},
{"𝔜", "𝔜"},
{"𝔸", "𝔸"},
{"𝔹", "𝔹"},
{"𝔻", "𝔻"},
{"𝔼", "𝔼"},
{"𝔽", "𝔽"},
{"𝔾", "𝔾"},
{"𝕀", "𝕀"},
{"𝕁", "𝕁"},
{"𝕂", "𝕂"},
{"𝕃", "𝕃"},
{"𝕄", "𝕄"},
{"𝕆", "𝕆"},
{"𝕊", "𝕊"},
{"𝕋", "𝕋"},
{"𝕌", "𝕌"},
{"𝕍", "𝕍"},
{"𝕎", "𝕎"},
{"𝕏", "𝕏"},
{"𝕐", "𝕐"},
{"𝕬", "𝕬"},
{"𝕭", "𝕭"},
{"𝕮", "𝕮"},
{"𝕯", "𝕯"},
{"𝕰", "𝕰"},
{"𝕱", "𝕱"},
{"𝕲", "𝕲"},
{"𝕳", "𝕳"},
{"𝕴", "𝕴"},
{"𝕵", "𝕵"},
{"𝕶", "𝕶"},
{"𝕷", "𝕷"},
{"𝕸", "𝕸"},
{"𝕹", "𝕹"},
{"𝕺", "𝕺"},
{"𝕻", "𝕻"},
{"𝕼", "𝕼"},
{"𝕽", "𝕽"},
{"𝕾", "𝕾"},
{"𝕿", "𝕿"},
{"𝖀", "𝖀"},
{"𝖁", "𝖁"},
{"𝖂", "𝖂"},
{"𝖃", "𝖃"},
{"𝖄", "𝖄"},
{"𝖅", "𝖅"},
{"𝖠", "𝖠"},
{"𝖡", "𝖡"},
{"𝖢", "𝖢"},
{"𝖣", "𝖣"},
{"𝖤", "𝖤"},
{"𝖥", "𝖥"},
{"𝖦", "𝖦"},
{"𝖧", "𝖧"},
{"𝖨", "𝖨"},
{"𝖩", "𝖩"},
{"𝖪", "𝖪"},
{"𝖫", "𝖫"},
{"𝖬", "𝖬"},
{"𝖭", "𝖭"},
{"𝖮", "𝖮"},
{"𝖯", "𝖯"},
{"𝖰", "𝖰"},
{"𝖱", "𝖱"},
{"𝖲", "𝖲"},
{"𝖳", "𝖳"},
{"𝖴", "𝖴"},
{"𝖵", "𝖵"},
{"𝖶", "𝖶"},
{"𝖷", "𝖷"},
{"𝖸", "𝖸"},
{"𝖹", "𝖹"},
{"𝗔", "𝗔"},
{"𝗕", "𝗕"},
{"𝗖", "𝗖"},
{"𝗗", "𝗗"},
{"𝗘", "𝗘"},
{"𝗙", "𝗙"},
{"𝗚", "𝗚"},
{"𝗛", "𝗛"},
{"𝗜", "𝗜"},
{"𝗝", "𝗝"},
{"𝗞", "𝗞"},
{"𝗟", "𝗟"},
{"𝗠", "𝗠"},
{"𝗡", "𝗡"},
{"𝗢", "𝗢"},
{"𝗣", "𝗣"},
{"𝗤", "𝗤"},
{"𝗥", "𝗥"},
{"𝗦", "𝗦"},
{"𝗧", "𝗧"},
{"𝗨", "𝗨"},
{"𝗩", "𝗩"},
{"𝗪", "𝗪"},
{"𝗫", "𝗫"},
{"𝗬", "𝗬"},
{"𝗭", "𝗭"},
{"𝘈", "𝘈"},
{"𝘉", "𝘉"},
{"𝘊", "𝘊"},
{"𝘋", "𝘋"},
{"𝘌", "𝘌"},
{"𝘍", "𝘍"},
{"𝘎", "𝘎"},
{"𝘏", "𝘏"},
{"𝘐", "𝘐"},
{"𝘑", "𝘑"},
{"𝘒", "𝘒"},
{"𝘓", "𝘓"},
{"𝘔", "𝘔"},
{"𝘕", "𝘕"},
{"𝘖", "𝘖"},
{"𝘗", "𝘗"},
{"𝘘", "𝘘"},
{"𝘙", "𝘙"},
{"𝘚", "𝘚"},
{"𝘛", "𝘛"},
{"𝘜", "𝘜"},
{"𝘝", "𝘝"},
{"𝘞", "𝘞"},
{"𝘟", "𝘟"},
{"𝘠", "𝘠"},
{"𝘡", "𝘡"},
{"𝘼", "𝘼"},
{"𝘽", "𝘽"},
{"𝘾", "𝘾"},
{"𝘿", "𝘿"},
{"𝙀", "𝙀"},
{"𝙁", "𝙁"},
{"𝙂", "𝙂"},
{"𝙃", "𝙃"},
{"𝙄", "𝙄"},
{"𝙅", "𝙅"},
{"𝙆", "𝙆"},
{"𝙇", "𝙇"},
{"𝙈", "𝙈"},
{"𝙉", "𝙉"},
{"𝙊", "𝙊"},
{"𝙋", "𝙋"},
{"𝙌", "𝙌"},
{"𝙍", "𝙍"},
{"𝙎", "𝙎"},
{"𝙏", "𝙏"},
{"𝙐", "𝙐"},
{"𝙑", "𝙑"},
{"𝙒", "𝙒"},
{"𝙓", "𝙓"},
{"𝙔", "𝙔"},
{"𝙕", "𝙕"},
{"𝙰", "𝙰"},
{"𝙱", "𝙱"},
{"𝙲", "𝙲"},
{"𝙳", "𝙳"},
{"𝙴", "𝙴"},
{"𝙵", "𝙵"},
{"𝙶", "𝙶"},
{"𝙷", "𝙷"},
{"𝙸", "𝙸"},
{"𝙹", "𝙹"},
{"𝙺", "𝙺"},
{"𝙻", "𝙻"},
{"𝙼", "𝙼"},
{"𝙽", "𝙽"},
{"𝙾", "𝙾"},
{"𝙿", "𝙿"},
{"𝚀", "𝚀"},
{"𝚁", "𝚁"},
{"𝚂", "𝚂"},
{"𝚃", "𝚃"},
{"𝚄", "𝚄"},
{"𝚅", "𝚅"},
{"𝚆", "𝚆"},
{"𝚇", "𝚇"},
{"𝚈", "𝚈"},
{"𝚉", "𝚉"},
{"𝚨", "𝚨"},
{"𝚩", "𝚩"},
{"𝚪", "𝚪"},
{"𝚫", "𝚫"},
{"𝚬", "𝚬"},
{"𝚭", "𝚭"},
{"𝚮", "𝚮"},
{"𝚯", "𝚯"},
{"𝚰", "𝚰"},
{"𝚱", "𝚱"},
{"𝚲", "𝚲"},
{"𝚳", "𝚳"},
{"𝚴", "𝚴"},
{"𝚵", "𝚵"},
{"𝚶", "𝚶"},
{"𝚷", "𝚷"},
{"𝚸", "𝚸"},
{"𝚹", "𝚹"},
{"𝚺", "𝚺"},
{"𝚻", "𝚻"},
{"𝚼", "𝚼"},
{"𝚽", "𝚽"},
{"𝚾", "𝚾"},
{"𝚿", "𝚿"},
{"𝛀", "𝛀"},
{"𝛢", "𝛢"},
{"𝛣", "𝛣"},
{"𝛤", "𝛤"},
{"𝛥", "𝛥"},
{"𝛦", "𝛦"},
{"𝛧", "𝛧"},
{"𝛨", "𝛨"},
{"𝛩", "𝛩"},
{"𝛪", "𝛪"},
{"𝛫", "𝛫"},
{"𝛬", "𝛬"},
{"𝛭", "𝛭"},
{"𝛮", "𝛮"},
{"𝛯", "𝛯"},
{"𝛰", "𝛰"},
{"𝛱", "𝛱"},
{"𝛲", "𝛲"},
{"𝛳", "𝛳"},
{"𝛴", "𝛴"},
{"𝛵", "𝛵"},
{"𝛶", "𝛶"},
{"𝛷", "𝛷"},
{"𝛸", "𝛸"},
{"𝛹", "𝛹"},
{"𝛺", "𝛺"},
{"𝜜", "𝜜"},
{"𝜝", "𝜝"},
{"𝜞", "𝜞"},
{"𝜟", "𝜟"},
{"𝜠", "𝜠"},
{"𝜡", "𝜡"},
{"𝜢", "𝜢"},
{"𝜣", "𝜣"},
{"𝜤", "𝜤"},
{"𝜥", "𝜥"},
{"𝜦", "𝜦"},
{"𝜧", "𝜧"},
{"𝜨", "𝜨"},
{"𝜩", "𝜩"},
{"𝜪", "𝜪"},
{"𝜫", "𝜫"},
{"𝜬", "𝜬"},
{"𝜭", "𝜭"},
{"𝜮", "𝜮"},
{"𝜯", "𝜯"},
{"𝜰", "𝜰"},
{"𝜱", "𝜱"},
{"𝜲", "𝜲"},
{"𝜳", "𝜳"},
{"𝜴", "𝜴"},
{"𝝖", "𝝖"},
{"𝝗", "𝝗"},
{"𝝘", "𝝘"},
{"𝝙", "𝝙"},
{"𝝚", "𝝚"},
{"𝝛", "𝝛"},
{"𝝜", "𝝜"},
{"𝝝", "𝝝"},
{"𝝞", "𝝞"},
{"𝝟", "𝝟"},
{"𝝠", "𝝠"},
{"𝝡", "𝝡"},
{"𝝢", "𝝢"},
{"𝝣", "𝝣"},
{"𝝤", "𝝤"},
{"𝝥", "𝝥"},
{"𝝦", "𝝦"},
{"𝝧", "𝝧"},
{"𝝨", "𝝨"},
{"𝝩", "𝝩"},
{"𝝪", "𝝪"},
{"𝝫", "𝝫"},
{"𝝬", "𝝬"},
{"𝝭", "𝝭"},
{"𝝮", "𝝮"},
{"𝞐", "𝞐"},
{"𝞑", "𝞑"},
{"𝞒", "𝞒"},
{"𝞓", "𝞓"},
{"𝞔", "𝞔"},
{"𝞕", "𝞕"},
{"𝞖", "𝞖"},
{"𝞗", "𝞗"},
{"𝞘", "𝞘"},
{"𝞙", "𝞙"},
{"𝞚", "𝞚"},
{"𝞛", "𝞛"},
{"𝞜", "𝞜"},
{"𝞝", "𝞝"},
{"𝞞", "𝞞"},
{"𝞟", "𝞟"},
{"𝞠", "𝞠"},
{"𝞡", "𝞡"},
{"𝞢", "𝞢"},
{"𝞣", "𝞣"},
{"𝞤", "𝞤"},
{"𝞥", "𝞥"},
{"𝞦", "𝞦"},
{"𝞧", "𝞧"},
{"𝞨", "𝞨"},
{"𝟊", "𝟊"},
{"𞤀", "𞤢"},
{"𞤁", "𞤣"},
{"𞤂", "𞤤"},
{"𞤃", "𞤥"},
{"𞤄", "𞤦"},
{"𞤅", "𞤧"},
{"𞤆", "𞤨"},
{"𞤇", "𞤩"},
{"𞤈", "𞤪"},
{"𞤉", "𞤫"},
{"𞤊", "𞤬"},
{"𞤋", "𞤭"},
{"𞤌", "𞤮"},
{"𞤍", "𞤯"},
{"𞤎", "𞤰"},
{"𞤏", "𞤱"},
{"𞤐", "𞤲"},
{"𞤑", "𞤳"},
{"𞤒", "𞤴"},
{"𞤓", "𞤵"},
{"𞤔", "𞤶"},
{"𞤕", "𞤷"},
{"𞤖", "𞤸"},
{"𞤗", "𞤹"},
{"𞤘", "𞤺"},
{"𞤙", "𞤻"},
{"𞤚", "𞤼"},
{"𞤛", "𞤽"},
{"𞤜", "𞤾"},
{"𞤝", "𞤿"},
{"𞤞", "𞥀"},
{"𞤟", "𞥁"},
{"𞤠", "𞥂"},
{"𞤡", "𞥃"},
};
}
......@@ -16,7 +16,6 @@
namespace util
{
void warning(std::string_view message, const std::experimental::source_location & location = std::experimental::source_location::current());
void error(std::string_view message, const std::experimental::source_location & location = std::experimental::source_location::current());
void error(const std::exception & e, const std::experimental::source_location & location = std::experimental::source_location::current());
......@@ -102,6 +101,8 @@ std::string join(const std::string & delim, const boost::circular_buffer<T> elem
return result;
}
std::string lower(const std::string & s);
};
template <>
......
......@@ -2,6 +2,7 @@
#include "utf8.hpp"
#include <ctime>
#include <algorithm>
#include "upper2lower"
int util::printedLength(std::string_view s)
{
......@@ -199,8 +200,19 @@ bool util::choiceWithProbability(float probability)
bool util::isUppercase(utf8char c)
{
static std::set<utf8char> uppercaseChars{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ù","Ú","Û","Ü","Ý","Þ","Ā","Ă","Ą","Ć","Ĉ","Ċ","Č","Ď","Đ","Ē","Ĕ","Ė","Ę","Ě","Ĝ","Ğ","Ġ","Ģ","Ĥ","Ħ","Ĩ","Ī","Ĭ","Į","İ","IJ","Ĵ","Ķ","Ĺ","Ļ","Ľ","Ŀ","Ł","Ń","Ņ","Ň","Ŋ","Ō","Ŏ","Ő","Œ","Ŕ","Ŗ","Ř","Ś","Ŝ","Ş","Š","Ţ","Ť","Ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","Ŵ","Ŷ","Ÿ","Ź","Ż","Ž","Ɓ","Ƃ","Ƅ","Ɔ","Ƈ","Ɖ","Ɗ","Ƌ","Ǝ","Ə","Ɛ","Ƒ","Ɠ","Ɣ","Ɩ","Ɨ","Ƙ","Ɯ","Ɲ","Ɵ","Ơ","Ƣ","Ƥ","Ʀ","Ƨ","Ʃ","Ƭ","Ʈ","Ư","Ʊ","Ʋ","Ƴ","Ƶ","Ʒ","Ƹ","Ƽ","DŽ","LJ","NJ","Ǎ","Ǐ","Ǒ","Ǔ","Ǖ","Ǘ","Ǚ","Ǜ","Ǟ","Ǡ","Ǣ","Ǥ","Ǧ","Ǩ","Ǫ","Ǭ","Ǯ","DZ","Ǵ","Ƕ","Ƿ","Ǹ","Ǻ","Ǽ","Ǿ","Ȁ","Ȃ","Ȅ","Ȇ","Ȉ","Ȋ","Ȍ","Ȏ","Ȑ","Ȓ","Ȕ","Ȗ","Ș","Ț","Ȝ","Ȟ","Ƞ","Ȣ","Ȥ","Ȧ","Ȩ","Ȫ","Ȭ","Ȯ","Ȱ","Ȳ","Ⱥ","Ȼ","Ƚ","Ⱦ","Ɂ","Ƀ","Ʉ","Ʌ","Ɇ","Ɉ","Ɋ","Ɍ","Ɏ","Ͱ","Ͳ","Ͷ","Ϳ","Ά","Έ","Ή","Ί","Ό","Ύ","Ώ","Α","Β","Γ","Δ","Ε","Ζ","Η","Θ","Ι","Κ","Λ","Μ","Ν","Ξ","Ο","Π","Ρ","Σ","Τ","Υ","Φ","Χ","Ψ","Ω","Ϊ","Ϋ","Ϗ","ϒ","ϓ","ϔ","Ϙ","Ϛ","Ϝ","Ϟ","Ϡ","Ϣ","Ϥ","Ϧ","Ϩ","Ϫ","Ϭ","Ϯ","ϴ","Ϸ","Ϲ","Ϻ","Ͻ","Ͼ","Ͽ","Ѐ","Ё","Ђ","Ѓ","Є","Ѕ","І","Ї","Ј","Љ","Њ","Ћ","Ќ","Ѝ","Ў","Џ","А","Б","В","Г","Д","Е","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я","Ѡ","Ѣ","Ѥ","Ѧ","Ѩ","Ѫ","Ѭ","Ѯ","Ѱ","Ѳ","Ѵ","Ѷ","Ѹ","Ѻ","Ѽ","Ѿ","Ҁ","Ҋ","Ҍ","Ҏ","Ґ","Ғ","Ҕ","Җ","Ҙ","Қ","Ҝ","Ҟ","Ҡ","Ң","Ҥ","Ҧ","Ҩ","Ҫ","Ҭ","Ү","Ұ","Ҳ","Ҵ","Ҷ","Ҹ","Һ","Ҽ","Ҿ","Ӏ","Ӂ","Ӄ","Ӆ","Ӈ","Ӊ","Ӌ","Ӎ","Ӑ","Ӓ","Ӕ","Ӗ","Ә","Ӛ","Ӝ","Ӟ","Ӡ","Ӣ","Ӥ","Ӧ","Ө","Ӫ","Ӭ","Ӯ","Ӱ","Ӳ","Ӵ","Ӷ","Ӹ","Ӻ","Ӽ","Ӿ","Ԁ","Ԃ","Ԅ","Ԇ","Ԉ","Ԋ","Ԍ","Ԏ","Ԑ","Ԓ","Ԕ","Ԗ","Ԙ","Ԛ","Ԝ","Ԟ","Ԡ","Ԣ","Ԥ","Ԧ","Ԩ","Ԫ","Ԭ","Ԯ","Ա","Բ","Գ","Դ","Ե","Զ","Է","Ը","Թ","Ժ","Ի","Լ","Խ","Ծ","Կ","Հ","Ձ","Ղ","Ճ","Մ","Յ","Ն","Շ","Ո","Չ","Պ","Ջ","Ռ","Ս","Վ","Տ","Ր","Ց","Ւ","Փ","Ք","Օ","Ֆ","Ⴀ","Ⴁ","Ⴂ","Ⴃ","Ⴄ","Ⴅ","Ⴆ","Ⴇ","Ⴈ","Ⴉ","Ⴊ","Ⴋ","Ⴌ","Ⴍ","Ⴎ","Ⴏ","Ⴐ","Ⴑ","Ⴒ","Ⴓ","Ⴔ","Ⴕ","Ⴖ","Ⴗ","Ⴘ","Ⴙ","Ⴚ","Ⴛ","Ⴜ","Ⴝ","Ⴞ","Ⴟ","Ⴠ","Ⴡ","Ⴢ","Ⴣ","Ⴤ","Ⴥ","Ⴧ","Ⴭ","Ꭰ","Ꭱ","Ꭲ","Ꭳ","Ꭴ","Ꭵ","Ꭶ","Ꭷ","Ꭸ","Ꭹ","Ꭺ","Ꭻ","Ꭼ","Ꭽ","Ꭾ","Ꭿ","Ꮀ","Ꮁ","Ꮂ","Ꮃ","Ꮄ","Ꮅ","Ꮆ","Ꮇ","Ꮈ","Ꮉ","Ꮊ","Ꮋ","Ꮌ","Ꮍ","Ꮎ","Ꮏ","Ꮐ","Ꮑ","Ꮒ","Ꮓ","Ꮔ","Ꮕ","Ꮖ","Ꮗ","Ꮘ","Ꮙ","Ꮚ","Ꮛ","Ꮜ","Ꮝ","Ꮞ","Ꮟ","Ꮠ","Ꮡ","Ꮢ","Ꮣ","Ꮤ","Ꮥ","Ꮦ","Ꮧ","Ꮨ","Ꮩ","Ꮪ","Ꮫ","Ꮬ","Ꮭ","Ꮮ","Ꮯ","Ꮰ","Ꮱ","Ꮲ","Ꮳ","Ꮴ","Ꮵ","Ꮶ","Ꮷ","Ꮸ","Ꮹ","Ꮺ","Ꮻ","Ꮼ","Ꮽ","Ꮾ","Ꮿ","Ᏸ","Ᏹ","Ᏺ","Ᏻ","Ᏼ","Ᏽ","Ა","Ბ","Გ","Დ","Ე","Ვ","Ზ","Თ","Ი","Კ","Ლ","Მ","Ნ","Ო","Პ","Ჟ","Რ","Ს","Ტ","Უ","Ფ","Ქ","Ღ","Ყ","Შ","Ჩ","Ც","Ძ","Წ","Ჭ","Ხ","Ჯ","Ჰ","Ჱ","Ჲ","Ჳ","Ჴ","Ჵ","Ჶ","Ჷ","Ჸ","Ჹ","Ჺ","Ჽ","Ჾ","Ჿ","Ḁ","Ḃ","Ḅ","Ḇ","Ḉ","Ḋ","Ḍ","Ḏ","Ḑ","Ḓ","Ḕ","Ḗ","Ḙ","Ḛ","Ḝ","Ḟ","Ḡ","Ḣ","Ḥ","Ḧ","Ḩ","Ḫ","Ḭ","Ḯ","Ḱ","Ḳ","Ḵ","Ḷ","Ḹ","Ḻ","Ḽ","Ḿ","Ṁ","Ṃ","Ṅ","Ṇ","Ṉ","Ṋ","Ṍ","Ṏ","Ṑ","Ṓ","Ṕ","Ṗ","Ṙ","Ṛ","Ṝ","Ṟ","Ṡ","Ṣ","Ṥ","Ṧ","Ṩ","Ṫ","Ṭ","Ṯ","Ṱ","Ṳ","Ṵ","Ṷ","Ṹ","Ṻ","Ṽ","Ṿ","Ẁ","Ẃ","Ẅ","Ẇ","Ẉ","Ẋ","Ẍ","Ẏ","Ẑ","Ẓ","Ẕ","ẞ","Ạ","Ả","Ấ","Ầ","Ẩ","Ẫ","Ậ","Ắ","Ằ","Ẳ","Ẵ","Ặ","Ẹ","Ẻ","Ẽ","Ế","Ề","Ể","Ễ","Ệ","Ỉ","Ị","Ọ","Ỏ","Ố","Ồ","Ổ","Ỗ","Ộ","Ớ","Ờ","Ở","Ỡ","Ợ","Ụ","Ủ","Ứ","Ừ","Ử","Ữ","Ự","Ỳ","Ỵ","Ỷ","Ỹ","Ỻ","Ỽ","Ỿ","Ἀ","Ἁ","Ἂ","Ἃ","Ἄ","Ἅ","Ἆ","Ἇ","Ἐ","Ἑ","Ἒ","Ἓ","Ἔ","Ἕ","Ἠ","Ἡ","Ἢ","Ἣ","Ἤ","Ἥ","Ἦ","Ἧ","Ἰ","Ἱ","Ἲ","Ἳ","Ἴ","Ἵ","Ἶ","Ἷ","Ὀ","Ὁ","Ὂ","Ὃ","Ὄ","Ὅ","Ὑ","Ὓ","Ὕ","Ὗ","Ὠ","Ὡ","Ὢ","Ὣ","Ὤ","Ὥ","Ὦ","Ὧ","Ᾰ","Ᾱ","Ὰ","Ά","Ὲ","Έ","Ὴ","Ή","Ῐ","Ῑ","Ὶ","Ί","Ῠ","Ῡ","Ὺ","Ύ","Ῥ","Ὸ","Ό","Ὼ","Ώ","ℂ","ℇ","ℋ","ℌ","ℍ","ℐ","ℑ","ℒ","ℕ","ℙ","ℚ","ℛ","ℜ","ℝ","ℤ","Ω","ℨ","K","Å","ℬ","ℭ","ℰ","ℱ","Ⅎ","ℳ","ℾ","ℿ","ⅅ","Ↄ","Ⰰ","Ⰱ","Ⰲ","Ⰳ","Ⰴ","Ⰵ","Ⰶ","Ⰷ","Ⰸ","Ⰹ","Ⰺ","Ⰻ","Ⰼ","Ⰽ","Ⰾ","Ⰿ","Ⱀ","Ⱁ","Ⱂ","Ⱃ","Ⱄ","Ⱅ","Ⱆ","Ⱇ","Ⱈ","Ⱉ","Ⱊ","Ⱋ","Ⱌ","Ⱍ","Ⱎ","Ⱏ","Ⱐ","Ⱑ","Ⱒ","Ⱓ","Ⱔ","Ⱕ","Ⱖ","Ⱗ","Ⱘ","Ⱙ","Ⱚ","Ⱛ","Ⱜ","Ⱝ","Ⱞ","Ⱡ","Ɫ","Ᵽ","Ɽ","Ⱨ","Ⱪ","Ⱬ","Ɑ","Ɱ","Ɐ","Ɒ","Ⱳ","Ⱶ","Ȿ","Ɀ","Ⲁ","Ⲃ","Ⲅ","Ⲇ","Ⲉ","Ⲋ","Ⲍ","Ⲏ","Ⲑ","Ⲓ","Ⲕ","Ⲗ","Ⲙ","Ⲛ","Ⲝ","Ⲟ","Ⲡ","Ⲣ","Ⲥ","Ⲧ","Ⲩ","Ⲫ","Ⲭ","Ⲯ","Ⲱ","Ⲳ","Ⲵ","Ⲷ","Ⲹ","Ⲻ","Ⲽ","Ⲿ","Ⳁ","Ⳃ","Ⳅ","Ⳇ","Ⳉ","Ⳋ","Ⳍ","Ⳏ","Ⳑ","Ⳓ","Ⳕ","Ⳗ","Ⳙ","Ⳛ","Ⳝ","Ⳟ","Ⳡ","Ⳣ","Ⳬ","Ⳮ","Ⳳ","Ꙁ","Ꙃ","Ꙅ","Ꙇ","Ꙉ","Ꙋ","Ꙍ","Ꙏ","Ꙑ","Ꙓ","Ꙕ","Ꙗ","Ꙙ","Ꙛ","Ꙝ","Ꙟ","Ꙡ","Ꙣ","Ꙥ","Ꙧ","Ꙩ","Ꙫ","Ꙭ","Ꚁ","Ꚃ","Ꚅ","Ꚇ","Ꚉ","Ꚋ","Ꚍ","Ꚏ","Ꚑ","Ꚓ","Ꚕ","Ꚗ","Ꚙ","Ꚛ","Ꜣ","Ꜥ","Ꜧ","Ꜩ","Ꜫ","Ꜭ","Ꜯ","Ꜳ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ꜿ","Ꝁ","Ꝃ","Ꝅ","Ꝇ","Ꝉ","Ꝋ","Ꝍ","Ꝏ","Ꝑ","Ꝓ","Ꝕ","Ꝗ","Ꝙ","Ꝛ","Ꝝ","Ꝟ","Ꝡ","Ꝣ","Ꝥ","Ꝧ","Ꝩ","Ꝫ","Ꝭ","Ꝯ","Ꝺ","Ꝼ","Ᵹ","Ꝿ","Ꞁ","Ꞃ","Ꞅ","Ꞇ","Ꞌ","Ɥ","Ꞑ","Ꞓ","Ꞗ","Ꞙ","Ꞛ","Ꞝ","Ꞟ","Ꞡ","Ꞣ","Ꞥ","Ꞧ","Ꞩ","Ɦ","Ɜ","Ɡ","Ɬ","Ɪ","Ʞ","Ʇ","Ʝ","Ꭓ","Ꞵ","Ꞷ","Ꞹ","Ꞻ","Ꞽ","Ꞿ","Ꟃ","Ꞔ","Ʂ","Ᶎ","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","𐐀","𐐁","𐐂","𐐃","𐐄","𐐅","𐐆","𐐇","𐐈","𐐉","𐐊","𐐋","𐐌","𐐍","𐐎","𐐏","𐐐","𐐑","𐐒","𐐓","𐐔","𐐕","𐐖","𐐗","𐐘","𐐙","𐐚","𐐛","𐐜","𐐝","𐐞","𐐟","𐐠","𐐡","𐐢","𐐣","𐐤","𐐥","𐐦","𐐧","𐒰","𐒱","𐒲","𐒳","𐒴","𐒵","𐒶","𐒷","𐒸","𐒹","𐒺","𐒻","𐒼","𐒽","𐒾","𐒿","𐓀","𐓁","𐓂","𐓃","𐓄","𐓅","𐓆","𐓇","𐓈","𐓉","𐓊","𐓋","𐓌","𐓍","𐓎","𐓏","𐓐","𐓑","𐓒","𐓓","𐲀","𐲁","𐲂","𐲃","𐲄","𐲅","𐲆","𐲇","𐲈","𐲉","𐲊","𐲋","𐲌","𐲍","𐲎","𐲏","𐲐","𐲑","𐲒","𐲓","𐲔","𐲕","𐲖","𐲗","𐲘","𐲙","𐲚","𐲛","𐲜","𐲝","𐲞","𐲟","𐲠","𐲡","𐲢","𐲣","𐲤","𐲥","𐲦","𐲧","𐲨","𐲩","𐲪","𐲫","𐲬","𐲭","𐲮","𐲯","𐲰","𐲱","𐲲","𑢠","𑢡","𑢢","𑢣","𑢤","𑢥","𑢦","𑢧","𑢨","𑢩","𑢪","𑢫","𑢬","𑢭","𑢮","𑢯","𑢰","𑢱","𑢲","𑢳","𑢴","𑢵","𑢶","𑢷","𑢸","𑢹","𑢺","𑢻","𑢼","𑢽","𑢾","𑢿","𖹀","𖹁","𖹂","𖹃","𖹄","𖹅","𖹆","𖹇","𖹈","𖹉","𖹊","𖹋","𖹌","𖹍","𖹎","𖹏","𖹐","𖹑","𖹒","𖹓","𖹔","𖹕","𖹖","𖹗","𖹘","𖹙","𖹚","𖹛","𖹜","𖹝","𖹞","𖹟","𝐀","𝐁","𝐂","𝐃","𝐄","𝐅","𝐆","𝐇","𝐈","𝐉","𝐊","𝐋","𝐌","𝐍","𝐎","𝐏","𝐐","𝐑","𝐒","𝐓","𝐔","𝐕","𝐖","𝐗","𝐘","𝐙","𝐴","𝐵","𝐶","𝐷","𝐸","𝐹","𝐺","𝐻","𝐼","𝐽","𝐾","𝐿","𝑀","𝑁","𝑂","𝑃","𝑄","𝑅","𝑆","𝑇","𝑈","𝑉","𝑊","𝑋","𝑌","𝑍","𝑨","𝑩","𝑪","𝑫","𝑬","𝑭","𝑮","𝑯","𝑰","𝑱","𝑲","𝑳","𝑴","𝑵","𝑶","𝑷","𝑸","𝑹","𝑺","𝑻","𝑼","𝑽","𝑾","𝑿","𝒀","𝒁","𝒜","𝒞","𝒟","𝒢","𝒥","𝒦","𝒩","𝒪","𝒫","𝒬","𝒮","𝒯","𝒰","𝒱","𝒲","𝒳","𝒴","𝒵","𝓐","𝓑","𝓒","𝓓","𝓔","𝓕","𝓖","𝓗","𝓘","𝓙","𝓚","𝓛","𝓜","𝓝","𝓞","𝓟","𝓠","𝓡","𝓢","𝓣","𝓤","𝓥","𝓦","𝓧","𝓨","𝓩","𝔄","𝔅","𝔇","𝔈","𝔉","𝔊","𝔍","𝔎","𝔏","𝔐","𝔑","𝔒","𝔓","𝔔","𝔖","𝔗","𝔘","𝔙","𝔚","𝔛","𝔜","𝔸","𝔹","𝔻","𝔼","𝔽","𝔾","𝕀","𝕁","𝕂","𝕃","𝕄","𝕆","𝕊","𝕋","𝕌","𝕍","𝕎","𝕏","𝕐","𝕬","𝕭","𝕮","𝕯","𝕰","𝕱","𝕲","𝕳","𝕴","𝕵","𝕶","𝕷","𝕸","𝕹","𝕺","𝕻","𝕼","𝕽","𝕾","𝕿","𝖀","𝖁","𝖂","𝖃","𝖄","𝖅","𝖠","𝖡","𝖢","𝖣","𝖤","𝖥","𝖦","𝖧","𝖨","𝖩","𝖪","𝖫","𝖬","𝖭","𝖮","𝖯","𝖰","𝖱","𝖲","𝖳","𝖴","𝖵","𝖶","𝖷","𝖸","𝖹","𝗔","𝗕","𝗖","𝗗","𝗘","𝗙","𝗚","𝗛","𝗜","𝗝","𝗞","𝗟","𝗠","𝗡","𝗢","𝗣","𝗤","𝗥","𝗦","𝗧","𝗨","𝗩","𝗪","𝗫","𝗬","𝗭","𝘈","𝘉","𝘊","𝘋","𝘌","𝘍","𝘎","𝘏","𝘐","𝘑","𝘒","𝘓","𝘔","𝘕","𝘖","𝘗","𝘘","𝘙","𝘚","𝘛","𝘜","𝘝","𝘞","𝘟","𝘠","𝘡","𝘼","𝘽","𝘾","𝘿","𝙀","𝙁","𝙂","𝙃","𝙄","𝙅","𝙆","𝙇","𝙈","𝙉","𝙊","𝙋","𝙌","𝙍","𝙎","𝙏","𝙐","𝙑","𝙒","𝙓","𝙔","𝙕","𝙰","𝙱","𝙲","𝙳","𝙴","𝙵","𝙶","𝙷","𝙸","𝙹","𝙺","𝙻","𝙼","𝙽","𝙾","𝙿","𝚀","𝚁","𝚂","𝚃","𝚄","𝚅","𝚆","𝚇","𝚈","𝚉","𝚨","𝚩","𝚪","𝚫","𝚬","𝚭","𝚮","𝚯","𝚰","𝚱","𝚲","𝚳","𝚴","𝚵","𝚶","𝚷","𝚸","𝚹","𝚺","𝚻","𝚼","𝚽","𝚾","𝚿","𝛀","𝛢","𝛣","𝛤","𝛥","𝛦","𝛧","𝛨","𝛩","𝛪","𝛫","𝛬","𝛭","𝛮","𝛯","𝛰","𝛱","𝛲","𝛳","𝛴","𝛵","𝛶","𝛷","𝛸","𝛹","𝛺","𝜜","𝜝","𝜞","𝜟","𝜠","𝜡","𝜢","𝜣","𝜤","𝜥","𝜦","𝜧","𝜨","𝜩","𝜪","𝜫","𝜬","𝜭","𝜮","𝜯","𝜰","𝜱","𝜲","𝜳","𝜴","𝝖","𝝗","𝝘","𝝙","𝝚","𝝛","𝝜","𝝝","𝝞","𝝟","𝝠","𝝡","𝝢","𝝣","𝝤","𝝥","𝝦","𝝧","𝝨","𝝩","𝝪","𝝫","𝝬","𝝭","𝝮","𝞐","𝞑","𝞒","𝞓","𝞔","𝞕","𝞖","𝞗","𝞘","𝞙","𝞚","𝞛","𝞜","𝞝","𝞞","𝞟","𝞠","𝞡","𝞢","𝞣","𝞤","𝞥","𝞦","𝞧","𝞨","𝟊","𞤀","𞤁","𞤂","𞤃","𞤄","𞤅","𞤆","𞤇","𞤈","𞤉","𞤊","𞤋","𞤌","𞤍","𞤎","𞤏","𞤐","𞤑","𞤒","𞤓","𞤔","𞤕","𞤖","𞤗","𞤘","𞤙","𞤚","𞤛","𞤜","𞤝","𞤞","𞤟","𞤠","𞤡"};
return upper2lower.count(c);
}
std::string util::lower(const std::string & s)
{
auto splited = util::splitAsUtf8(s);
for (auto & c : splited)
{
auto it = upper2lower.find(c);
if (it != upper2lower.end())
c = it->second;
}
return uppercaseChars.count(c);
return fmt::format("{}", splited);
}
......@@ -15,6 +15,7 @@ class ContextModuleImpl : public Submodule
torch::nn::Embedding wordEmbeddings{nullptr};
std::shared_ptr<MyModule> myModule{nullptr};
std::vector<std::string> columns;
std::map<std::size_t, std::function<std::string(const std::string &)>> functions;
std::vector<int> bufferContext;
std::vector<int> stackContext;
int inSize;
......
......@@ -16,6 +16,7 @@ class FocusedColumnModuleImpl : public Submodule
std::shared_ptr<MyModule> myModule{nullptr};
std::vector<int> focusedBuffer, focusedStack;
std::string column;
std::function<std::string(const std::string&)> func{[](const std::string &s){return s;}};
int maxNbElements;
int inSize;
......
......@@ -22,6 +22,7 @@ class Submodule : public torch::nn::Module, public DictHolder, public StateHolde
virtual void addToContext(std::vector<std::vector<long>> & context, const Config & config) = 0;
virtual torch::Tensor forward(torch::Tensor input) = 0;
virtual void registerEmbeddings(std::filesystem::path pretrained) = 0;
const std::function<std::string(const std::string &)> & getFunction(const std::string functionName);
};
#endif
......
......@@ -14,7 +14,17 @@ ContextModuleImpl::ContextModuleImpl(std::string name, const std::string & defin
for (auto & index : util::split(sm.str(2), ' '))
stackContext.emplace_back(std::stoi(index));
columns = util::split(sm.str(3), ' ');
auto funcColumns = util::split(sm.str(3), ' ');
columns.clear();
for (auto & funcCol : funcColumns)
{
auto splited = util::split(funcCol, ':');
if (splited.size() > 2)
util::myThrow(fmt::format("invalid function:column '{}' of size {}", funcCol, splited.size()));
if (splited.size() == 2)
functions[columns.size()] = getFunction(splited[0]);
columns.emplace_back(splited.back());
}
auto subModuleType = sm.str(4);
auto subModuleArguments = util::split(sm.str(5), ' ');
......@@ -67,7 +77,9 @@ void ContextModuleImpl::addToContext(std::vector<std::vector<long>> & context, c
contextIndexes.emplace_back(-1);
for (auto index : contextIndexes)
for (auto & col : columns)
for (unsigned int colIndex = 0; colIndex < columns.size(); colIndex++)
{
auto & col = columns[colIndex];
if (index == -1)
{
for (auto & contextElement : context)
......@@ -75,12 +87,17 @@ void ContextModuleImpl::addToContext(std::vector<std::vector<long>> & context, c
}
else
{
int dictIndex = dict.getIndexOrInsert(config.getAsFeature(col, index));
int dictIndex;
if (functions.count(colIndex))
dictIndex = dict.getIndexOrInsert(functions.at(colIndex)(config.getAsFeature(col, index)));
else
dictIndex = dict.getIndexOrInsert(config.getAsFeature(col, index));
for (auto & contextElement : context)
contextElement.push_back(dictIndex);
}
}
}
torch::Tensor ContextModuleImpl::forward(torch::Tensor input)
{
......
......@@ -8,7 +8,12 @@ FocusedColumnModuleImpl::FocusedColumnModuleImpl(std::string name, const std::st
{
try
{
column = sm.str(1);
auto funcCol = util::split(sm.str(1), ':');
if (funcCol.size() > 2)
util::myThrow(fmt::format("invalid function:column '{}' of size {}", sm.str(1), funcCol.size()));
if (funcCol.size() == 2)
func = getFunction(funcCol[0]);
column = funcCol.back();
maxNbElements = std::stoi(sm.str(2));
for (auto & index : util::split(sm.str(3), ' '))
......@@ -90,7 +95,7 @@ void FocusedColumnModuleImpl::addToContext(std::vector<std::vector<long>> & cont
std::vector<std::string> elements;
if (column == "FORM")
{
auto asUtf8 = util::splitAsUtf8(config.getAsFeature(column, index).get());
auto asUtf8 = util::splitAsUtf8(func(config.getAsFeature(column, index).get()));
for (int i = 0; i < maxNbElements; i++)
if (i < (int)asUtf8.size())
......@@ -100,7 +105,7 @@ void FocusedColumnModuleImpl::addToContext(std::vector<std::vector<long>> & cont
}
else if (column == "FEATS")
{
auto splited = util::split(config.getAsFeature(column, index).get(), '|');
auto splited = util::split(func(config.getAsFeature(column, index).get()), '|');
for (int i = 0; i < maxNbElements; i++)
if (i < (int)splited.size())
......@@ -119,12 +124,12 @@ void FocusedColumnModuleImpl::addToContext(std::vector<std::vector<long>> & cont
}
else if (column == "EOS")
{
bool isEOS = config.getAsFeature(Config::EOSColName, index) == Config::EOSSymbol1;
bool isEOS = func(config.getAsFeature(Config::EOSColName, index)) == Config::EOSSymbol1;
elements.emplace_back(fmt::format("EOS({})", isEOS));
}
else
{
elements.emplace_back(config.getAsFeature(column, index));
elements.emplace_back(func(config.getAsFeature(column, index)));
}
if ((int)elements.size() != maxNbElements)
......
......@@ -63,3 +63,17 @@ void Submodule::loadPretrainedW2vEmbeddings(torch::nn::Embedding & embeddings, s
getDict().setState(originalState);
}
const std::function<std::string(const std::string &)> & Submodule::getFunction(const std::string functionName)
{
static std::map<std::string, std::function<std::string(const std::string &)>> functions
{
{"lower", [](const std::string & s) {return util::lower(s);}}
};
auto it = functions.find(util::lower(functionName));
if (it == functions.end())
util::myThrow(fmt::format("unknown function name '{}'", functionName));
return it->second;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment