diff --git a/ansi_parser.cpp b/ansi_parser.cpp index 59af13a..ff5f9db 100644 --- a/ansi_parser.cpp +++ b/ansi_parser.cpp @@ -20,85 +20,87 @@ static const char _ansi_parser_actions[] = { 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 15, 1, 16, 2, 1, 12, 2, 1, 13, 2, - 16, 5, 3, 1, 14, 2 + 6, 7, 2, 16, 5, 3, 1, 14, + 2 }; static const char _ansi_parser_key_offsets[] = { - 0, 0, 1, 2, 10, 11, 13, 16, - 20, 21, 25, 26, 27, 28, 29, 31, - 34, 36, 39, 41, 44, 45, 48, 49, - 50, 51, 52, 53 + 0, 0, 1, 2, 11, 12, 14, 17, + 18, 22, 23, 27, 28, 29, 30, 31, + 33, 36, 38, 41, 43, 46, 47, 50, + 51, 52, 53, 54, 55 }; static const int _ansi_parser_trans_keys[] = { - 27, 91, 49, 50, 51, 52, 55, 57, - 48, 54, 109, 48, 109, 34, 48, 55, - 50, 52, 55, 109, 109, 49, 56, 57, - 109, 109, 59, 50, 59, 48, 57, 59, - 48, 57, 48, 57, 59, 48, 57, 48, - 57, 109, 48, 57, 109, 56, 57, 109, - 59, 50, 109, 109, 27, 27, 0 + 27, 91, 48, 49, 50, 51, 52, 55, + 57, 53, 54, 109, 48, 109, 34, 48, + 55, 109, 50, 52, 55, 109, 109, 49, + 56, 57, 109, 109, 59, 50, 59, 48, + 57, 59, 48, 57, 48, 57, 59, 48, + 57, 48, 57, 109, 48, 57, 109, 56, + 57, 109, 59, 50, 109, 109, 27, 27, + 0 }; static const char _ansi_parser_single_lengths[] = { - 0, 1, 1, 6, 1, 2, 3, 4, - 1, 4, 1, 1, 1, 1, 0, 1, - 0, 1, 0, 1, 1, 3, 1, 1, - 1, 1, 1, 1 + 0, 1, 1, 7, 1, 2, 3, 1, + 4, 1, 4, 1, 1, 1, 1, 0, + 1, 0, 1, 0, 1, 1, 3, 1, + 1, 1, 1, 1, 1 }; static const char _ansi_parser_range_lengths[] = { 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0 }; static const char _ansi_parser_index_offsets[] = { - 0, 0, 2, 4, 12, 14, 17, 21, - 26, 28, 33, 35, 37, 39, 41, 43, - 46, 48, 51, 53, 56, 58, 62, 64, - 66, 68, 70, 72 + 0, 0, 2, 4, 13, 15, 18, 22, + 24, 29, 31, 36, 38, 40, 42, 44, + 46, 49, 51, 54, 56, 59, 61, 65, + 67, 69, 71, 73, 75 }; static const char _ansi_parser_trans_targs[] = { - 2, 1, 3, 0, 5, 7, 9, 21, - 25, 6, 4, 0, 27, 0, 6, 27, - 0, 4, 4, 4, 0, 4, 4, 8, - 27, 0, 27, 0, 10, 11, 20, 27, - 0, 27, 0, 12, 0, 13, 0, 14, - 0, 15, 0, 16, 15, 0, 17, 0, - 18, 17, 0, 19, 0, 27, 19, 0, - 27, 0, 22, 24, 27, 0, 23, 0, - 13, 0, 27, 0, 27, 0, 2, 1, - 2, 1, 0 + 2, 1, 3, 0, 4, 5, 8, 10, + 22, 26, 6, 7, 0, 28, 0, 6, + 28, 0, 7, 7, 7, 0, 28, 0, + 7, 7, 9, 28, 0, 28, 0, 11, + 12, 21, 28, 0, 28, 0, 13, 0, + 14, 0, 15, 0, 16, 0, 17, 16, + 0, 18, 0, 19, 18, 0, 20, 0, + 28, 20, 0, 28, 0, 23, 25, 28, + 0, 24, 0, 14, 0, 28, 0, 28, + 0, 2, 1, 2, 1, 0 }; static const char _ansi_parser_trans_actions[] = { 0, 7, 0, 0, 21, 21, 21, 21, - 21, 21, 21, 0, 0, 0, 0, 0, + 21, 21, 21, 21, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 15, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 3, 0, 0, - 0, 1, 0, 25, 0, 0, 1, 0, - 28, 0, 0, 1, 0, 34, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 11, 0, 13, 0, 0, 7, - 23, 31, 0 + 0, 0, 0, 17, 0, 15, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 25, 0, + 0, 1, 0, 28, 0, 0, 1, 0, + 37, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 11, 0, 13, + 0, 0, 7, 23, 34, 0 }; static const char _ansi_parser_eof_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23 + 0, 0, 0, 0, 23 }; -static const int ansi_parser_start = 26; -static const int ansi_parser_first_final = 26; +static const int ansi_parser_start = 27; +static const int ansi_parser_first_final = 27; static const int ansi_parser_error = 0; -static const int ansi_parser_en_main = 26; +static const int ansi_parser_en_main = 27; #line 125 "ansi_parser.rl" @@ -123,14 +125,14 @@ bool ANSIParser::parse(std::wstring_view codes, ColorCB color_cb, WriteCB write_ sf::Color* target = &color; -#line 118 "ansi_parser.cpp" +#line 120 "ansi_parser.cpp" { cs = ansi_parser_start; } #line 146 "ansi_parser.rl" -#line 121 "ansi_parser.cpp" +#line 123 "ansi_parser.cpp" { int _klen; unsigned int _trans; @@ -321,7 +323,7 @@ _match: #line 85 "ansi_parser.rl" {} break; -#line 294 "ansi_parser.cpp" +#line 296 "ansi_parser.cpp" } } @@ -341,7 +343,7 @@ _again: #line 85 "ansi_parser.rl" {} break; -#line 312 "ansi_parser.cpp" +#line 314 "ansi_parser.cpp" } } } diff --git a/ansi_parser.rl b/ansi_parser.rl index 43fc283..37a9fff 100644 --- a/ansi_parser.rl +++ b/ansi_parser.rl @@ -98,7 +98,7 @@ using namespace fmt; start %start ( reset | - "0" | + "0" %reset_fg %reset_bg | "1" | "2" %half_bright | "3" | diff --git a/assets/fontlist.json b/assets/fontlist.json new file mode 100644 index 0000000..ea2d2ed --- /dev/null +++ b/assets/fontlist.json @@ -0,0 +1,4830 @@ +[ + "!", + "#", + "%", + "'", + ")", + "+", + "-", + "/", + "1", + "3", + "5", + "7", + "9", + ";", + "=", + "?", + "A", + "C", + "E", + "G", + "I", + "K", + "M", + "O", + "Q", + "S", + "U", + "W", + "Y", + "[", + "]", + "_", + "a", + "c", + "e", + "g", + "i", + "k", + "m", + "o", + "q", + "s", + "u", + "w", + "y", + "{", + "}", + "¡", + "£", + "¥", + "§", + "©", + "«", + "®", + "°", + "²", + "´", + "¶", + "¸", + "º", + "¼", + "¾", + "À", + "Â", + "Ä", + "Æ", + "È", + "Ê", + "Ì", + "Î", + "Ð", + "Ò", + "Ô", + "Ö", + "Ø", + "Ú", + "Ü", + "Þ", + "à", + "â", + "ä", + "æ", + "è", + "ê", + "ì", + "î", + "ð", + "ò", + "ô", + "ö", + "ø", + "ú", + "ü", + "þ", + "Ā", + "Ă", + "Ą", + "Ć", + "Ĉ", + "Ċ", + "Č", + "Ď", + "Đ", + "Ē", + "Ĕ", + "Ė", + "Ę", + "Ě", + "Ĝ", + "Ğ", + "Ġ", + "Ģ", + "Ĥ", + "Ħ", + "Ĩ", + "Ī", + "Ĭ", + "Į", + "İ", + "IJ", + "Ĵ", + "Ķ", + "ĸ", + "ĺ", + "ļ", + "ľ", + "ŀ", + "ł", + "ń", + "ņ", + "ň", + "Ŋ", + "Ō", + "Ŏ", + "Ő", + "Œ", + "Ŕ", + "Ŗ", + "Ř", + "Ś", + "Ŝ", + "Ş", + "Š", + "Ţ", + "Ť", + "Ŧ", + "Ũ", + "Ū", + "Ŭ", + "Ů", + "Ű", + "Ų", + "Ŵ", + "Ŷ", + "Ÿ", + "ź", + "ż", + "ž", + "ƀ", + "Ƃ", + "Ƅ", + "Ɔ", + "ƈ", + "Ɗ", + "ƌ", + "Ǝ", + "Ɛ", + "ƒ", + "Ɣ", + "Ɩ", + "Ƙ", + "ƚ", + "Ɯ", + "ƞ", + "Ơ", + "Ƣ", + "Ƥ", + "Ʀ", + "ƨ", + "ƪ", + "Ƭ", + "Ʈ", + "ư", + "Ʋ", + "ƴ", + "ƶ", + "Ƹ", + "ƺ", + "Ƽ", + "ƾ", + "ǀ", + "ǂ", + "DŽ", + "dž", + "Lj", + "NJ", + "nj", + "ǎ", + "ǐ", + "ǒ", + "ǔ", + "ǖ", + "ǘ", + "ǚ", + "ǜ", + "Ǟ", + "Ǡ", + "Ǣ", + "Ǥ", + "Ǧ", + "Ǩ", + "Ǫ", + "Ǭ", + "Ǯ", + "ǰ", + "Dz", + "Ǵ", + "Ƕ", + "Ǹ", + "Ǻ", + "Ǽ", + "Ǿ", + "Ȁ", + "Ȃ", + "Ȅ", + "Ȇ", + "Ȉ", + "Ȋ", + "Ȍ", + "Ȏ", + "Ȑ", + "Ȓ", + "Ȕ", + "Ȗ", + "Ș", + "Ț", + "Ȝ", + "Ȟ", + "Ƞ", + "Ȣ", + "Ȥ", + "Ȧ", + "Ȩ", + "Ȫ", + "Ȭ", + "Ȯ", + "Ȱ", + "Ȳ", + "ȴ", + "ȶ", + "ȸ", + "Ⱥ", + "ȼ", + "Ⱦ", + "ɀ", + "ɂ", + "Ʉ", + "Ɇ", + "Ɉ", + "Ɋ", + "Ɍ", + "Ɏ", + "ɐ", + "ɒ", + "ɔ", + "ɖ", + "ɘ", + "ɚ", + "ɜ", + "ɞ", + "ɠ", + "ɢ", + "ɤ", + "ɦ", + "ɨ", + "ɪ", + "ɬ", + "ɮ", + "ɰ", + "ɲ", + "ɴ", + "ɶ", + "ɸ", + "ɺ", + "ɼ", + "ɾ", + "ʀ", + "ʂ", + "ʄ", + "ʆ", + "ʈ", + "ʊ", + "ʌ", + "ʎ", + "ʐ", + "ʒ", + "ʔ", + "ʖ", + "ʘ", + "ʚ", + "ʜ", + "ʞ", + "ʠ", + "ʢ", + "ʤ", + "ʦ", + "ʨ", + "ʪ", + "ʬ", + "ʮ", + "ʰ", + "ʲ", + "ʴ", + "ʶ", + "ʸ", + "ʺ", + "ʼ", + "ʾ", + "ˀ", + "˂", + "˄", + "ˆ", + "ˈ", + "ˊ", + "ˌ", + "ˎ", + "ː", + "˒", + "˔", + "˖", + "˘", + "˚", + "˜", + "˞", + "ˠ", + "ˢ", + "ˤ", + "˦", + "˨", + "˪", + "ˬ", + "ˮ", + "˰", + "˲", + "˴", + "˶", + "˸", + "˺", + "˼", + "˾", + "̀", + "̂", + "̄", + "̆", + "̈", + "̊", + "̌", + "̎", + "̐", + "̒", + "̔", + "̖", + "̘", + "̚", + "̜", + "̞", + "̠", + "̢", + "̤", + "̦", + "̨", + "̪", + "̬", + "̮", + "̰", + "̲", + "̴", + "̶", + "̸", + "̺", + "̼", + "̾", + "̀", + "͂", + "̈́", + "͆", + "͈", + "͊", + "͌", + "͎", + "͐", + "͒", + "͔", + "͖", + "͘", + "͚", + "ͣ", + "ͥ", + "ͧ", + "ͩ", + "ͫ", + "ͭ", + "ͯ", + "ͱ", + "ͳ", + "͵", + "ͷ", + "ͺ", + "ͼ", + ";", + "΄", + "Ά", + "Έ", + "Ί", + "Ό", + "Ύ", + "ΐ", + "Β", + "Δ", + "Ζ", + "Θ", + "Κ", + "Μ", + "Ξ", + "Π", + "Σ", + "Υ", + "Χ", + "Ω", + "Ϋ", + "έ", + "ί", + "α", + "γ", + "ε", + "η", + "ι", + "λ", + "ν", + "ο", + "ρ", + "σ", + "υ", + "χ", + "ω", + "ϋ", + "ύ", + "Ϗ", + "ϑ", + "ϓ", + "ϕ", + "ϗ", + "ϙ", + "ϛ", + "ϝ", + "ϟ", + "ϡ", + "ϣ", + "ϥ", + "ϧ", + "ϩ", + "ϫ", + "ϭ", + "ϯ", + "ϱ", + "ϳ", + "ϵ", + "Ϸ", + "Ϲ", + "ϻ", + "Ͻ", + "Ͽ", + "Ё", + "Ѓ", + "Ѕ", + "Ї", + "Љ", + "Ћ", + "Ѝ", + "Џ", + "Б", + "Г", + "Е", + "З", + "Й", + "Л", + "Н", + "П", + "С", + "У", + "Х", + "Ч", + "Щ", + "Ы", + "Э", + "Я", + "б", + "г", + "е", + "з", + "й", + "л", + "н", + "п", + "с", + "у", + "х", + "ч", + "щ", + "ы", + "э", + "я", + "ё", + "ѓ", + "ѕ", + "ї", + "љ", + "ћ", + "ѝ", + "џ", + "ѡ", + "ѣ", + "ѥ", + "ѧ", + "ѩ", + "ѫ", + "ѭ", + "ѯ", + "ѱ", + "ѳ", + "ѵ", + "ѷ", + "ѹ", + "ѻ", + "ѽ", + "ѿ", + "ҁ", + "҃", + "҅", + "҇", + "Ҋ", + "Ҍ", + "Ҏ", + "Ґ", + "Ғ", + "Ҕ", + "Җ", + "Ҙ", + "Қ", + "Ҝ", + "Ҟ", + "Ң", + "Ҥ", + "Ҧ", + "Ҩ", + "Ҫ", + "Ҭ", + "Ү", + "Ұ", + "Ҳ", + "Ҵ", + "Ҷ", + "Ҹ", + "Һ", + "Ҽ", + "Ҿ", + "Ӏ", + "ӂ", + "ӄ", + "ӆ", + "ӈ", + "ӊ", + "ӌ", + "ӎ", + "Ӑ", + "Ӓ", + "Ӕ", + "Ӗ", + "Ә", + "Ӛ", + "Ӝ", + "Ӟ", + "Ӡ", + "Ӣ", + "Ӥ", + "Ӧ", + "Ө", + "Ӫ", + "Ӭ", + "Ӯ", + "Ӱ", + "Ӳ", + "Ӵ", + "Ӷ", + "Ӹ", + "Ӻ", + "Ӽ", + "Ӿ", + "Ԁ", + "Ԃ", + "Ԅ", + "Ԇ", + "Ԉ", + "Ԋ", + "Ԍ", + "Ԏ", + "Ԑ", + "Ԓ", + "Ԕ", + "Ԗ", + "Ԙ", + "Ԛ", + "Ԝ", + "Ԟ", + "Ԡ", + "Ԣ", + "Ԥ", + "Ԧ", + "Ԩ", + "Ԭ", + "Ԯ", + "Ա", + "Գ", + "Ե", + "Է", + "Թ", + "Ի", + "Խ", + "Կ", + "Ձ", + "Ճ", + "Յ", + "Շ", + "Չ", + "Ջ", + "Ս", + "Տ", + "Ց", + "Փ", + "Օ", + "ՙ", + "՛", + "՝", + "՟", + "ա", + "գ", + "ե", + "է", + "թ", + "ի", + "խ", + "կ", + "ձ", + "ճ", + "յ", + "շ", + "չ", + "ջ", + "ս", + "տ", + "ց", + "փ", + "օ", + "և", + "։", + "֏", + "֑", + "֓", + "֕", + "֗", + "֙", + "֛", + "֝", + "֟", + "֡", + "֣", + "֥", + "֧", + "֩", + "֫", + "֭", + "֯", + "ֱ", + "ֳ", + "ֵ", + "ַ", + "ֹ", + "ֻ", + "ֽ", + "ֿ", + "ׁ", + "׃", + "ׅ", + "ׇ", + "א", + "ג", + "ה", + "ז", + "ט", + "ך", + "ל", + "מ", + "נ", + "ע", + "פ", + "צ", + "ר", + "ת", + "ׯ", + "ױ", + "׳", + "؉", + "،", + "؏", + "ؑ", + "ؕ", + "ؗ", + "ؙ", + "؛", + "؝", + "؟", + "ء", + "أ", + "إ", + "ا", + "ة", + "ث", + "ح", + "د", + "ر", + "س", + "ص", + "ط", + "ع", + "ػ", + "ؽ", + "ؿ", + "ف", + "ك", + "م", + "ه", + "ى", + "ً", + "ٍ", + "ُ", + "ّ", + "ٓ", + "ٕ", + "ٗ", + "ٙ", + "ٛ", + "ٝ", + "ٟ", + "١", + "٣", + "٥", + "٧", + "٩", + "٫", + "٭", + "ٯ", + "ٱ", + "ٳ", + "ٵ", + "ٷ", + "ٹ", + "ٻ", + "ٽ", + "ٿ", + "ځ", + "ڃ", + "څ", + "ڇ", + "ډ", + "ڋ", + "ڍ", + "ڏ", + "ڑ", + "ړ", + "ڕ", + "ڗ", + "ڙ", + "ڛ", + "ڝ", + "ڟ", + "ڡ", + "ڣ", + "ڥ", + "ڧ", + "ک", + "ګ", + "ڭ", + "گ", + "ڱ", + "ڳ", + "ڵ", + "ڷ", + "ڹ", + "ڻ", + "ڽ", + "ڿ", + "ہ", + "ۃ", + "ۅ", + "ۇ", + "ۉ", + "ۋ", + "ۍ", + "ۏ", + "ۑ", + "ۓ", + "ە", + "ۘ", + "ۚ", + "۟", + "ۡ", + "ۤ", + "ۦ", + "ۨ", + "۪", + "۬", + "ۮ", + "۰", + "۲", + "۴", + "۶", + "۸", + "ۺ", + "ۼ", + "۾", + "܁", + "܃", + "܅", + "܇", + "܉", + "ܑ", + "ܕ", + "ܙ", + "ܝ", + "ܪ", + "ܯ", + "ܱ", + "ܳ", + "ܵ", + "ܷ", + "ܹ", + "ܻ", + "ܿ", + "݁", + "݃", + "݅", + "݇", + "݊", + "ݐ", + "ݒ", + "ݔ", + "ݖ", + "ݘ", + "ݚ", + "ݜ", + "ݞ", + "ݠ", + "ݢ", + "ݤ", + "ݦ", + "ݨ", + "ݪ", + "ݬ", + "ݮ", + "ݰ", + "ݲ", + "ݴ", + "ݶ", + "ݸ", + "ݺ", + "ݼ", + "ݾ", + "ހ", + "ނ", + "ބ", + "ކ", + "ވ", + "ފ", + "ތ", + "ގ", + "ޑ", + "ޓ", + "ޕ", + "ޗ", + "ޙ", + "ޛ", + "ޠ", + "ޢ", + "ޤ", + "ަ", + "ި", + "ު", + "ެ", + "ޮ", + "ް", + "߀", + "߂", + "߄", + "߆", + "߈", + "ߊ", + "ߌ", + "ߎ", + "ߐ", + "ߒ", + "ߔ", + "ߖ", + "ߘ", + "ߚ", + "ߜ", + "ߞ", + "ߠ", + "ߢ", + "ߤ", + "ߦ", + "ߨ", + "ߪ", + "߬", + "߮", + "߰", + "߲", + "ߴ", + "߶", + "߸", + "ߺ", + "߽", + "߿", + "ࠖ", + "࠙", + "ࠜ", + "ࠞ", + "ࠠ", + "ࠢ", + "ࠤ", + "ࠦ", + "ࠨ", + "ࠪ", + "ࠬ", + "࠰", + "࠲", + "࠵", + "࠻", + "࠾", + "ࡀ", + "ࡆ", + "ࡉ", + "ࡋ", + "ࡘ", + "࡚", + "ࡧ", + "ࡰ", + "ࡲ", + "ࡴ", + "ࡶ", + "ࡸ", + "ࡺ", + "ࡼ", + "ࡾ", + "ࢀ", + "ࢂ", + "ࢅ", + "ࢇ", + "ࢉ", + "ࢋ", + "ࢍ", + "ࢗ", + "࢜", + "ࢠ", + "ࢢ", + "ࢤ", + "ࢦ", + "ࢨ", + "ࢪ", + "ࢬ", + "ࢮ", + "ࢰ", + "ࢲ", + "ࢴ", + "ࢶ", + "ࢸ", + "ࢺ", + "ࢼ", + "ࢾ", + "ࣀ", + "ࣂ", + "ࣄ", + "ࣆ", + "ࣈ", + "࣊", + "࣍", + "࣏", + "࣑", + "࣓", + "ࣕ", + "ࣗ", + "ࣙ", + "࣠", + "࣢", + "ࣤ", + "ࣦ", + "ࣨ", + "࣪", + "࣬", + "࣮", + "ࣰ", + "ࣲ", + "ࣴ", + "ࣶ", + "ࣸ", + "ࣺ", + "ࣼ", + "ࣾ", + "ऀ", + "ं", + "ऺ", + "़", + "ा", + "ु", + "ृ", + "ॅ", + "े", + "ॉ", + "्", + "॑", + "॓", + "ॕ", + "।", + "०", + "२", + "५", + "७", + "९", + "ॱ", + "ঁ", + "ঃ", + "ঌ", + "ও", + "়", + "া", + "ু", + "ৃ", + "ে", + "্", + "ৢ", + "০", + "২", + "৪", + "৭", + "৯", + "৲", + "৴", + "৷", + "৹", + "৻", + "৽", + "ਁ", + "ਃ", + "਼", + "ਾ", + "ੀ", + "ੂ", + "ੇ", + "ੋ", + "੍", + "ੑ", + "੧", + "੪", + "੭", + "ੰ", + "ੵ", + "ઁ", + "ઃ", + "ઇ", + "ઉ", + "ક", + "ટ", + "ડ", + "ત", + "દ", + "ન", + "ફ", + "ર", + "વ", + "ષ", + "઼", + "ા", + "ી", + "ૂ", + "ૄ", + "ે", + "ૉ", + "ો", + "્", + "ૢ", + "૧", + "૮", + "૰", + "ૺ", + "૽", + "ଁ", + "ଃ", + "ଌ", + "ଏ", + "ଓ", + "ଠ", + "ଧ", + "଼", + "ା", + "ୀ", + "ୂ", + "ୄ", + "େ", + "୍", + "୕", + "ୗ", + "ୡ", + "ୣ", + "୮", + "୲", + "ஂ", + "ப", + "ர", + "ா", + "ீ", + "ூ", + "ெ", + "்", + "ௗ", + "௦", + "ఀ", + "ం", + "ఄ", + "క", + "గ", + "ఠ", + "థ", + "ధ", + "ర", + "శ", + "఼", + "ా", + "ీ", + "ృ", + "ె", + "ై", + "్", + "ౕ", + "౦", + "౩", + "౭", + "౸", + "౺", + "౽", + "ಀ", + "ಂ", + "ಕ", + "ಠ", + "ಥ", + "ಧ", + "ರ", + "಼", + "ಾ", + "ೀ", + "ೂ", + "ೄ", + "್", + "ೕ", + "೦", + "೨", + "೪", + "೭", + "ೳ", + "ഀ", + "ം", + "ഉ", + "ട", + "ദ", + "ഭ", + "഻", + "ഽ", + "ി", + "ു", + "ൃ", + "െ", + "ൈ", + "്", + "ൗ", + "൦", + "൪", + "ඁ", + "ඃ", + "ද", + "ඳ", + "ර", + "්", + "ා", + "ෑ", + "ෘ", + "ෛ", + "ෟ", + "෫", + "ෲ", + "ก", + "ฃ", + "ฅ", + "ง", + "ฉ", + "ซ", + "ญ", + "ฏ", + "ฑ", + "ณ", + "ต", + "ท", + "น", + "ป", + "ฝ", + "ฟ", + "ม", + "ร", + "ล", + "ว", + "ษ", + "ห", + "อ", + "ฯ", + "ั", + "ำ", + "ี", + "ื", + "ู", + "฿", + "แ", + "ใ", + "ๅ", + "็", + "้", + "๋", + "ํ", + "๏", + "๑", + "๓", + "๕", + "๗", + "๙", + "ກ", + "ຄ", + "ຆ", + "ຈ", + "ຊ", + "ຌ", + "ຎ", + "ຐ", + "ຒ", + "ດ", + "ຖ", + "ຘ", + "ບ", + "ຜ", + "ພ", + "ຠ", + "ຢ", + "ລ", + "ວ", + "ຩ", + "ຫ", + "ອ", + "ຯ", + "ັ", + "ຳ", + "ີ", + "ື", + "ູ", + "ົ", + "ຽ", + "ເ", + "ໂ", + "ໄ", + "ໆ", + "່", + "໊", + "໌", + "໎", + "໐", + "໒", + "໔", + "໖", + "໘", + "ໜ", + "ໞ", + "ༀ", + "༅", + "༈", + "༊", + "༌", + "༎", + "༐", + "༒", + "༔", + "༙", + "༛", + "༝", + "༟", + "༡", + "༣", + "༥", + "༧", + "༩", + "༫", + "༭", + "༯", + "༱", + "༳", + "༵", + "༷", + "༹", + "༼", + "༾", + "ཀ", + "ག", + "ང", + "ཆ", + "ཉ", + "ཋ", + "ཌྷ", + "ཏ", + "ད", + "ན", + "ཕ", + "བྷ", + "ཙ", + "ཛ", + "ཝ", + "ཟ", + "ཡ", + "ལ", + "ཥ", + "ཧ", + "ཀྵ", + "ཫ", + "ཱ", + "ུ", + "ྲྀ", + "ཹ", + "ཻ", + "ཾ", + "ྀ", + "ྂ", + "྄", + "྆", + "ྈ", + "ྊ", + "ྌ", + "ྎ", + "ྐ", + "ྒ", + "ྔ", + "ྖ", + "ྙ", + "ྛ", + "ྜྷ", + "ྟ", + "ྡ", + "ྣ", + "ྥ", + "ྦྷ", + "ྩ", + "ྫ", + "ྭ", + "ྯ", + "ྱ", + "ླ", + "ྵ", + "ྷ", + "ྐྵ", + "ྻ", + "྾", + "࿀", + "࿂", + "࿄", + "࿎", + "࿑", + "࿔", + "ခ", + "င", + "ဋ", + "ဍ", + "ဒ", + "န", + "ဖ", + "မ", + "ဝ", + "ဠ", + "ဥ", + "ဧ", + "ါ", + "ိ", + "ု", + "ေ", + "ဳ", + "ဵ", + "့", + "္", + "ျ", + "ွ", + "၁", + "၃", + "၅", + "၇", + "၉", + "။", + "၎", + "ၐ", + "ၒ", + "ၔ", + "ၖ", + "ၘ", + "ၚ", + "ၜ", + "ၞ", + "ၠ", + "ၢ", + "ၤ", + "ၦ", + "ၨ", + "ၪ", + "ၬ", + "ၱ", + "ၳ", + "ၵ", + "ၷ", + "ၿ", + "ႁ", + "ႃ", + "ႅ", + "ႇ", + "ႉ", + "ႋ", + "ႍ", + "ႏ", + "႑", + "႓", + "႕", + "႗", + "႙", + "ႛ", + "ႝ", + "Ⴀ", + "Ⴂ", + "Ⴄ", + "Ⴆ", + "Ⴈ", + "Ⴊ", + "Ⴌ", + "Ⴎ", + "Ⴐ", + "Ⴒ", + "Ⴔ", + "Ⴖ", + "Ⴘ", + "Ⴚ", + "Ⴜ", + "Ⴞ", + "Ⴠ", + "Ⴢ", + "Ⴤ", + "Ⴧ", + "Ⴭ", + "ა", + "გ", + "ე", + "ზ", + "ი", + "ლ", + "ნ", + "პ", + "რ", + "ტ", + "ფ", + "ღ", + "შ", + "ც", + "წ", + "ხ", + "ჰ", + "ჲ", + "ჴ", + "ჶ", + "ჸ", + "ჺ", + "ჼ", + "ჾ", + "ᅡ", + "ᅣ", + "ᅥ", + "ᅧ", + "ᅵ", + "ᆘ", + "ᆝ", + "ᆢ", + "ሀ", + "ሂ", + "ሄ", + "ለ", + "ላ", + "ል", + "ረ", + "ር", + "ሰ", + "ሳ", + "ስ", + "በ", + "ባ", + "ቦ", + "ኀ", + "ኃ", + "ኅ", + "ነ", + "ኒ", + "ኔ", + "አ", + "ኣ", + "እ", + "ዐ", + "ዕ", + "ዘ", + "ዛ", + "ዞ", + "የ", + "ያ", + "ዳ", + "ዸ", + "ዻ", + "ገ", + "ጋ", + "ጎ", + "ጓ", + "ጘ", + "ጛ", + "ጞ", + "ጰ", + "ጳ", + "ጶ", + "ጸ", + "ጻ", + "ጾ", + "ፀ", + "ፃ", + "ፅ", + "ፍ", + "፞", + "፡", + "፣", + "፥", + "፧", + "፫", + "፱", + "፶", + "፸", + "፻", + "᎐", + "᎒", + "᎔", + "᎖", + "᎙", + "Ꭰ", + "Ꭲ", + "Ꭴ", + "Ꭶ", + "Ꭸ", + "Ꭺ", + "Ꭼ", + "Ꭾ", + "Ꮀ", + "Ꮂ", + "Ꮄ", + "Ꮆ", + "Ꮈ", + "Ꮊ", + "Ꮌ", + "Ꮎ", + "Ꮐ", + "Ꮒ", + "Ꮔ", + "Ꮖ", + "Ꮘ", + "Ꮚ", + "Ꮜ", + "Ꮞ", + "Ꮠ", + "Ꮢ", + "Ꮤ", + "Ꮦ", + "Ꮨ", + "Ꮪ", + "Ꮬ", + "Ꮮ", + "Ꮰ", + "Ꮲ", + "Ꮴ", + "Ꮶ", + "Ꮸ", + "Ꮺ", + "Ꮼ", + "Ꮾ", + "Ᏸ", + "Ᏺ", + "Ᏼ", + "ᏸ", + "ᏺ", + "ᏼ", + "᐀", + "ᐅ", + "ᐇ", + "ᐉ", + "ᐋ", + "ᐖ", + "ᐛ", + "ᐞ", + "ᐠ", + "ᐢ", + "ᐤ", + "ᐦ", + "ᐨ", + "ᐪ", + "ᐳ", + "ᐵ", + "ᐷ", + "ᐹ", + "ᑈ", + "ᑊ", + "ᑦ", + "ᑫ", + "ᑭ", + "ᑯ", + "ᑱ", + "ᑳ", + "ᑵ", + "ᑷ", + "ᑹ", + "ᑻ", + "ᑽ", + "ᑿ", + "ᒁ", + "ᒃ", + "ᒅ", + "ᒇ", + "ᒉ", + "ᒋ", + "ᒍ", + "ᒏ", + "ᒑ", + "ᒓ", + "ᒕ", + "ᒗ", + "ᒙ", + "ᒛ", + "ᒝ", + "ᒟ", + "ᒡ", + "ᒣ", + "ᒥ", + "ᒧ", + "ᒩ", + "ᒫ", + "ᒭ", + "ᒯ", + "ᒱ", + "ᒳ", + "ᒷ", + "ᒹ", + "ᒻ", + "ᒽ", + "ᒿ", + "ᓐ", + "ᓒ", + "ᓪ", + "ᓬ", + "ᓮ", + "ᓰ", + "ᓲ", + "ᓴ", + "ᓶ", + "ᓸ", + "ᓺ", + "ᓼ", + "ᓾ", + "ᔀ", + "ᔂ", + "ᔄ", + "ᔆ", + "ᔈ", + "ᔊ", + "ᔥ", + "ᔧ", + "ᔩ", + "ᔫ", + "ᔭ", + "ᔯ", + "ᔱ", + "ᔳ", + "ᔵ", + "ᔷ", + "ᔹ", + "ᔻ", + "ᔽ", + "ᔿ", + "ᕁ", + "ᕈ", + "ᕊ", + "ᕌ", + "ᕎ", + "ᕐ", + "ᕒ", + "ᕗ", + "ᕙ", + "ᕝ", + "ᕪ", + "ᕴ", + "ᕶ", + "ᕸ", + "ᕺ", + "ᕼ", + "ᖆ", + "ᖈ", + "ᖊ", + "ᖌ", + "ᖕ", + "ᖗ", + "ᖙ", + "ᖟ", + "ᖦ", + "ᖨ", + "ᖪ", + "ᖬ", + "ᖮ", + "ᖰ", + "ᖲ", + "ᖴ", + "ᖶ", + "ᖸ", + "ᖺ", + "ᖼ", + "ᖾ", + "ᗆ", + "ᗈ", + "ᗌ", + "ᗎ", + "ᗒ", + "ᗔ", + "ᗘ", + "ᗛ", + "ᗮ", + "ᗱ", + "ᗳ", + "ᗷ", + "ᗹ", + "ᗽ", + "ᗿ", + "ᘁ", + "ᙆ", + "ᙚ", + "᙭", + "ᙷ", + "ᙹ", + "ᙻ", + "ᙽ", + "ᙿ", + "ᚠ", + "ᚢ", + "ᚤ", + "ᚦ", + "ᚨ", + "ᚪ", + "ᚬ", + "ᚮ", + "ᚰ", + "ᚲ", + "ᚴ", + "ᚶ", + "ᚸ", + "ᚺ", + "ᚼ", + "ᚾ", + "ᛀ", + "ᛂ", + "ᛄ", + "ᛆ", + "ᛈ", + "ᛊ", + "ᛌ", + "ᛎ", + "ᛐ", + "ᛒ", + "ᛔ", + "ᛖ", + "ᛘ", + "ᛚ", + "ᛜ", + "ᛞ", + "ᛡ", + "ᛣ", + "ᛥ", + "ᛧ", + "ᛩ", + "᛫", + "᛭", + "ᛯ", + "ᛱ", + "ᛳ", + "ᛵ", + "ᛷ", + "ᜒ", + "᜔", + "ᜢ", + "ᜲ", + "᜵", + "ᝂ", + "ᝄ", + "ᝈ", + "ᝊ", + "ᝑ", + "ᝓ", + "ᝢ", + "ᝲ", + "ក", + "គ", + "ង", + "ជ", + "ដ", + "ត", + "ន", + "ផ", + "រ", + "វ", + "ឥ", + "ឧ", + "ឪ", + "ឯ", + "ឱ", + "ឳ", + "ា", + "ី", + "ឺ", + "ូ", + "េ", + "ៃ", + "ំ", + "ៈ", + "៊", + "៌", + "៎", + "័", + "្", + "។", + "៖", + "៙", + "៛", + "៝", + "០", + "៥", + "៰", + "៲", + "៴", + "៶", + "៸", + "᠀", + "᠂", + "᠄", + "᠆", + "᠈", + "᠊", + "᠐", + "᠔", + "᠖", + "᠘", + "ᠨ", + "ᠪ", + "ᠮ", + "ᠰ", + "ᠳ", + "ᠵ", + "ᠷ", + "ᠹ", + "ᠻ", + "ᠿ", + "ᡁ", + "ᡃ", + "ᡋ", + "ᡏ", + "ᡑ", + "ᡓ", + "ᡕ", + "ᡗ", + "ᡛ", + "ᡝ", + "ᡟ", + "ᡣ", + "ᡦ", + "ᡪ", + "ᡬ", + "ᡮ", + "ᡰ", + "ᡲ", + "ᡵ", + "ᡷ", + "ᢀ", + "ᢂ", + "ᢄ", + "ᢌ", + "ᢐ", + "ᢒ", + "ᢕ", + "ᢗ", + "ᢙ", + "ᢜ", + "ᢠ", + "ᢢ", + "ᢤ", + "ᢦ", + "ᢩ", + "ᢰ", + "ᢲ", + "ᢴ", + "ᢶ", + "ᢸ", + "ᢺ", + "ᢾ", + "ᣃ", + "ᣅ", + "ᣔ", + "ᣖ", + "ᣘ", + "ᣚ", + "ᣜ", + "ᣞ", + "ᣡ", + "ᣩ", + "ᣫ", + "ᣮ", + "ᣳ", + "ᣵ", + "ᤁ", + "ᤉ", + "ᤏ", + "ᤕ", + "ᤗ", + "ᤚ", + "ᤡ", + "ᤣ", + "ᤧ", + "ᤩ", + "ᤫ", + "ᤰ", + "ᤲ", + "ᤴ", + "ᤶ", + "ᤸ", + "᤺", + "᥄", + "᥆", + "᥉", + "᥋", + "ᥐ", + "ᥒ", + "ᥔ", + "ᥖ", + "ᥘ", + "ᥚ", + "ᥜ", + "ᥞ", + "ᥠ", + "ᥢ", + "ᥤ", + "ᥦ", + "ᥨ", + "ᥪ", + "ᥬ", + "ᥰ", + "ᥲ", + "ᥴ", + "ᦃ", + "ᦏ", + "ᦑ", + "ᦚ", + "ᦞ", + "ᦡ", + "ᦣ", + "ᦧ", + "ᦰ", + "ᦲ", + "ᦷ", + "ᦹ", + "ᧁ", + "ᧆ", + "ᧈ", + "᧐", + "᧒", + "᧔", + "᧖", + "᧙", + "᧡", + "᧤", + "᧦", + "᧨", + "᧰", + "᧴", + "᧶", + "᧸", + "ᨁ", + "ᨄ", + "ᨆ", + "ᨈ", + "ᨊ", + "ᨌ", + "ᨑ", + "ᨗ", + "ᨙ", + "ᨛ", + "᨟", + "ᨧ", + "ᨩ", + "ᨯ", + "ᩖ", + "ᩘ", + "ᩚ", + "ᩜ", + "ᩞ", + "᩠", + "ᩢ", + "ᩤ", + "ᩦ", + "ᩩ", + "ᩫ", + "ᩭ", + "ᩯ", + "ᩱ", + "ᩳ", + "᩵", + "᩷", + "᩹", + "᩻", + "᩿", + "᪁", + "᪃", + "᪅", + "᪇", + "᪉", + "᪐", + "᪒", + "᪔", + "᪖", + "᪦", + "᪨", + "᪪", + "᪭", + "᪰", + "᪲", + "᪴", + "᪶", + "᪸", + "᪺", + "᪼", + "᪾", + "ᫀ", + "᫂", + "᫄", + "᫇", + "᫉", + "ᫌ", + "ᫎ", + "ᬁ", + "ᬃ", + "᬴", + "ᬸ", + "ᬾ", + "᭄", + "᭎", + "᭐", + "᭔", + "᭜", + "᭞", + "᭠", + "᭢", + "᭤", + "᭨", + "᭪", + "᭬", + "᭮", + "᭰", + "᭲", + "᭴", + "᭶", + "᭸", + "᭺", + "᭼", + "᭿", + "ᮁ", + "ᮃ", + "ᮅ", + "ᮇ", + "ᮉ", + "ᮌ", + "ᮐ", + "ᮒ", + "ᮔ", + "ᮖ", + "ᮙ", + "ᮛ", + "ᮝ", + "ᮟ", + "ᮣ", + "ᮥ", + "ᮧ", + "ᮩ", + "᮫", + "ᮭ", + "᮰", + "᮲", + "᮴", + "᮶", + "᮹", + "ᮻ", + "ᮿ", + "ᯍ", + "᯦", + "ᯨ", + "ᯪ", + "ᯬ", + "ᯮ", + "ᯰ", + "᯲", + "᯿", + "ᰁ", + "ᰅ", + "ᰇ", + "ᰉ", + "ᰋ", + "ᰍ", + "ᰏ", + "ᰑ", + "ᰓ", + "ᰕ", + "ᰚ", + "ᰞ", + "ᰠ", + "ᰣ", + "ᰥ", + "ᰧ", + "ᰪ", + "ᰬ", + "ᰮ", + "ᰰ", + "ᰲ", + "ᰴ", + "᰷", + "᰻", + "᰽", + "᱀", + "᱂", + "᱇", + "᱉", + "᱐", + "᱒", + "᱔", + "᱖", + "᱘", + "ᱚ", + "ᱜ", + "ᱞ", + "ᱠ", + "ᱢ", + "ᱤ", + "ᱦ", + "ᱨ", + "ᱪ", + "ᱬ", + "ᱮ", + "ᱰ", + "ᱲ", + "ᱴ", + "ᱶ", + "ᱸ", + "ᱺ", + "ᱼ", + "᱾", + "ᲀ", + "ᲂ", + "ᲄ", + "ᲆ", + "ᲈ", + "ᲊ", + "Ა", + "Გ", + "Ე", + "Ზ", + "Ი", + "Ლ", + "Ნ", + "Პ", + "Რ", + "Ტ", + "Ფ", + "Ღ", + "Შ", + "Ც", + "Წ", + "Ხ", + "Ჰ", + "Ჲ", + "Ჴ", + "Ჶ", + "Ჸ", + "Ჺ", + "Ჽ", + "Ჿ", + "᳁", + "᳃", + "᳐", + "᳒", + "᳔", + "᳖", + "᳘", + "᳚", + "᳜", + "᳞", + "᳠", + "᳢", + "᳤", + "᳦", + "᳨", + "᳭", + "ᳯ", + "᳴", + "᳷", + "ᴀ", + "ᴂ", + "ᴄ", + "ᴆ", + "ᴈ", + "ᴊ", + "ᴌ", + "ᴎ", + "ᴐ", + "ᴒ", + "ᴔ", + "ᴖ", + "ᴘ", + "ᴚ", + "ᴜ", + "ᴞ", + "ᴠ", + "ᴢ", + "ᴤ", + "ᴦ", + "ᴨ", + "ᴪ", + "ᴬ", + "ᴮ", + "ᴰ", + "ᴲ", + "ᴴ", + "ᴶ", + "ᴸ", + "ᴺ", + "ᴼ", + "ᴾ", + "ᵀ", + "ᵂ", + "ᵄ", + "ᵆ", + "ᵈ", + "ᵊ", + "ᵌ", + "ᵎ", + "ᵐ", + "ᵒ", + "ᵔ", + "ᵖ", + "ᵘ", + "ᵚ", + "ᵜ", + "ᵞ", + "ᵠ", + "ᵢ", + "ᵤ", + "ᵦ", + "ᵨ", + "ᵪ", + "ᵬ", + "ᵮ", + "ᵰ", + "ᵲ", + "ᵴ", + "ᵶ", + "ᵸ", + "ᵻ", + "ᵽ", + "ᵿ", + "ᶁ", + "ᶃ", + "ᶅ", + "ᶇ", + "ᶉ", + "ᶋ", + "ᶍ", + "ᶏ", + "ᶑ", + "ᶓ", + "ᶕ", + "ᶗ", + "ᶙ", + "ᶛ", + "ᶝ", + "ᶟ", + "ᶡ", + "ᶣ", + "ᶥ", + "ᶧ", + "ᶩ", + "ᶫ", + "ᶭ", + "ᶯ", + "ᶱ", + "ᶳ", + "ᶵ", + "ᶷ", + "ᶹ", + "ᶻ", + "ᶽ", + "ᶿ", + "᷁", + "᷃", + "᷅", + "᷇", + "᷉", + "᷋", + "᷍", + "᷏", + "᷑", + "ᷓ", + "ᷕ", + "ᷗ", + "ᷙ", + "ᷛ", + "ᷝ", + "ᷟ", + "ᷡ", + "ᷣ", + "ᷥ", + "ᷧ", + "ᷩ", + "ᷫ", + "ᷭ", + "ᷯ", + "ᷱ", + "ᷳ", + "᷵", + "᷷", + "᷹", + "᷻", + "᷽", + "᷿", + "ḁ", + "ḃ", + "ḅ", + "ḇ", + "ḉ", + "ḋ", + "ḍ", + "ḏ", + "ḑ", + "ḓ", + "ḕ", + "ḗ", + "ḙ", + "ḛ", + "ḝ", + "ḟ", + "ḡ", + "ḣ", + "ḥ", + "ḧ", + "ḩ", + "ḫ", + "ḭ", + "ḯ", + "ḱ", + "ḳ", + "ḵ", + "ḷ", + "ḹ", + "ḻ", + "ḽ", + "ḿ", + "ṁ", + "ṃ", + "ṅ", + "ṇ", + "ṉ", + "ṋ", + "ṍ", + "ṏ", + "ṑ", + "ṓ", + "ṕ", + "ṗ", + "ṙ", + "ṛ", + "ṝ", + "ṟ", + "ṡ", + "ṣ", + "ṥ", + "ṧ", + "ṩ", + "ṫ", + "ṭ", + "ṯ", + "ṱ", + "ṳ", + "ṵ", + "ṷ", + "ṹ", + "ṻ", + "ṽ", + "ṿ", + "ẁ", + "ẃ", + "ẅ", + "ẇ", + "ẉ", + "ẋ", + "ẍ", + "ẏ", + "ẑ", + "ẓ", + "ẕ", + "ẗ", + "ẙ", + "ẛ", + "ẝ", + "ẟ", + "ạ", + "ả", + "ấ", + "ầ", + "ẩ", + "ẫ", + "ậ", + "ắ", + "ằ", + "ẳ", + "ẵ", + "ặ", + "ẹ", + "ẻ", + "ẽ", + "ế", + "ề", + "ể", + "ễ", + "ệ", + "ỉ", + "ị", + "ọ", + "ỏ", + "ố", + "ồ", + "ổ", + "ỗ", + "ộ", + "ớ", + "ờ", + "ở", + "ỡ", + "ợ", + "ụ", + "ủ", + "ứ", + "ừ", + "ử", + "ữ", + "ự", + "ỳ", + "ỵ", + "ỷ", + "ỹ", + "ỻ", + "ỽ", + "ỿ", + "ἁ", + "ἃ", + "ἅ", + "ἇ", + "Ἁ", + "Ἃ", + "Ἅ", + "Ἇ", + "ἑ", + "ἓ", + "ἕ", + "Ἐ", + "Ἒ", + "Ἔ", + "ἠ", + "ἢ", + "ἤ", + "ἦ", + "Ἠ", + "Ἢ", + "Ἤ", + "Ἦ", + "ἰ", + "ἲ", + "ἴ", + "ἶ", + "Ἰ", + "Ἲ", + "Ἴ", + "Ἶ", + "ὀ", + "ὂ", + "ὄ", + "Ὀ", + "Ὂ", + "Ὄ", + "ὐ", + "ὒ", + "ὔ", + "ὖ", + "Ὑ", + "Ὓ", + "Ὕ", + "Ὗ", + "ὡ", + "ὣ", + "ὥ", + "ὧ", + "Ὡ", + "Ὣ", + "Ὥ", + "Ὧ", + "ά", + "έ", + "ή", + "ί", + "ό", + "ύ", + "ώ", + "ᾀ", + "ᾂ", + "ᾄ", + "ᾆ", + "ᾈ", + "ᾊ", + "ᾌ", + "ᾎ", + "ᾐ", + "ᾒ", + "ᾔ", + "ᾖ", + "ᾘ", + "ᾚ", + "ᾜ", + "ᾞ", + "ᾠ", + "ᾢ", + "ᾤ", + "ᾦ", + "ᾨ", + "ᾪ", + "ᾬ", + "ᾮ", + "ᾰ", + "ᾲ", + "ᾴ", + "ᾶ", + "Ᾰ", + "Ὰ", + "ᾼ", + "ι", + "῀", + "ῂ", + "ῄ", + "ῆ", + "Ὲ", + "Ὴ", + "ῌ", + "῎", + "ῐ", + "ῒ", + "ῖ", + "Ῐ", + "Ὶ", + "῝", + "῟", + "ῡ", + "ΰ", + "ῥ", + "ῧ", + "Ῡ", + "Ύ", + "῭", + "`", + "ῲ", + "ῴ", + "ῶ", + "Ὸ", + "Ὼ", + "ῼ", + "῾", + "‐", + "‒", + "—", + "‖", + "‘", + "‚", + "“", + "„", + "†", + "•", + "․", + "…", + "‰", + "′", + "‴", + "‶", + "‸", + "›", + "‼", + "‾", + "⁀", + "⁂", + "⁄", + "⁆", + "⁈", + "⁊", + "⁌", + "⁎", + "⁐", + "⁒", + "⁔", + "⁖", + "⁘", + "⁚", + "⁜", + "⁞", + "⁰", + "⁴", + "⁶", + "⁸", + "⁺", + "⁼", + "⁾", + "₀", + "₂", + "₄", + "₆", + "₈", + "₊", + "₌", + "₎", + "ₐ", + "ₒ", + "ₔ", + "ₖ", + "ₘ", + "ₚ", + "ₜ", + "₠", + "₢", + "₤", + "₦", + "₨", + "₪", + "€", + "₮", + "₰", + "₲", + "₴", + "₶", + "₸", + "₺", + "₼", + "₾", + "⃀", + "⃐", + "⃒", + "⃔", + "⃖", + "⃘", + "⃚", + "⃜", + "⃡", + "⃥", + "⃨", + "⃫", + "⃭", + "⃯", + "℀", + "ℂ", + "℄", + "℆", + "℈", + "ℌ", + "ℎ", + "ℓ", + "ℕ", + "℘", + "ℚ", + "ℜ", + "℞", + "ℤ", + "Ω", + "ℨ", + "K", + "ℭ", + "ℯ", + "Ⅎ", + "ℵ", + "ℷ", + "ℹ", + "ℾ", + "⅁", + "⅃", + "ⅈ", + "⅊", + "ⅎ", + "⅐", + "⅒", + "⅔", + "⅖", + "⅘", + "⅚", + "⅜", + "⅞", + "Ⅰ", + "Ⅲ", + "Ⅴ", + "Ⅶ", + "Ⅸ", + "Ⅺ", + "Ⅼ", + "Ⅾ", + "ⅰ", + "ⅲ", + "ⅴ", + "ⅶ", + "ⅸ", + "ⅺ", + "ⅼ", + "ⅾ", + "ↀ", + "Ↄ", + "ↅ", + "ↇ", + "↉", + "↋", + "←", + "→", + "↔", + "↖", + "↘", + "↚", + "↞", + "↡", + "↣", + "↥", + "↧", + "↩", + "↫", + "↭", + "↯", + "↱", + "↳", + "↵", + "↸", + "↺", + "↼", + "↾", + "⇀", + "⇂", + "⇄", + "⇆", + "⇉", + "⇋", + "⇍", + "⇏", + "⇑", + "⇓", + "⇕", + "⇗", + "⇙", + "⇛", + "⇞", + "⇠", + "⇣", + "⇥", + "⇧", + "⇩", + "⇫", + "⇭", + "⇯", + "⇱", + "⇳", + "⇷", + "∀", + "∂", + "∄", + "∆", + "∈", + "∊", + "∌", + "∎", + "∐", + "−", + "∔", + "∖", + "∘", + "√", + "∜", + "∞", + "∠", + "∢", + "∤", + "∦", + "∨", + "∪", + "∬", + "∮", + "∱", + "∳", + "∵", + "∷", + "∹", + "∻", + "∽", + "∿", + "≁", + "≃", + "≅", + "≇", + "≉", + "≋", + "≍", + "≏", + "≑", + "≓", + "≕", + "≗", + "≙", + "≛", + "≝", + "≟", + "≡", + "≣", + "≥", + "≧", + "≩", + "≬", + "≮", + "≰", + "≲", + "≴", + "≶", + "≸", + "≺", + "≼", + "≾", + "⊀", + "⊂", + "⊄", + "⊆", + "⊈", + "⊊", + "⊌", + "⊎", + "⊐", + "⊒", + "⊔", + "⊖", + "⊘", + "⊚", + "⊜", + "⊞", + "⊠", + "⊢", + "⊤", + "⊦", + "⊨", + "⊪", + "⊬", + "⊮", + "⊰", + "⊲", + "⊴", + "⊹", + "⊻", + "⊽", + "⊿", + "⋁", + "⋃", + "⋅", + "⋇", + "⋉", + "⋋", + "⋍", + "⋏", + "⋑", + "⋓", + "⋕", + "⋗", + "⋚", + "⋜", + "⋞", + "⋠", + "⋢", + "⋤", + "⋦", + "⋨", + "⋪", + "⋬", + "⋮", + "⋴", + "⋷", + "⋼", + "⋾", + "⌀", + "⌂", + "⌄", + "⌆", + "⌈", + "⌊", + "⌌", + "⌎", + "⌐", + "⌒", + "⌔", + "⌘", + "⌛", + "⌝", + "⌟", + "⌡", + "⌣", + "⌥", + "⌧", + "〈", + "⌶", + "⌸", + "⌺", + "⌼", + "⌾", + "⍁", + "⍃", + "⍅", + "⍇", + "⍉", + "⍋", + "⍍", + "⍏", + "⍑", + "⍓", + "⍕", + "⍗", + "⍙", + "⍛", + "⍝", + "⍟", + "⍡", + "⍣", + "⍥", + "⍧", + "⍩", + "⍫", + "⍭", + "⍯", + "⍱", + "⍳", + "⍵", + "⍷", + "⍹", + "⍿", + "⎕", + "⎛", + "⎞", + "⎡", + "⎤", + "⎧", + "⎪", + "⎮", + "⎷", + "⎹", + "⎻", + "⎽", + "⎿", + "⏋", + "⏏", + "⏑", + "⏓", + "⏨", + "⏴", + "⏸", + "⏽", + "␢", + "␤", + "␦", + "␨", + "⑀", + "⑂", + "⑄", + "⑆", + "⑈", + "⒈", + "⒌", + "─", + "│", + "┆", + "┈", + "┊", + "┌", + "┎", + "┐", + "┒", + "└", + "┖", + "┘", + "┚", + "┞", + "┬", + "┮", + "┴", + "┶", + "┹", + "╌", + "╎", + "═", + "╒", + "╔", + "╖", + "╘", + "╚", + "╜", + "╟", + "╢", + "╤", + "╦", + "╨", + "╭", + "╯", + "╴", + "╶", + "╸", + "╺", + "╼", + "╾", + "▀", + "▂", + "▄", + "▆", + "█", + "▊", + "▌", + "▎", + "▐", + "▔", + "▖", + "▘", + "▛", + "▝", + "▟", + "□", + "▣", + "▥", + "▧", + "▩", + "▫", + "▭", + "▯", + "▲", + "▴", + "▶", + "▸", + "►", + "▼", + "▾", + "◀", + "◂", + "◄", + "◆", + "◈", + "◊", + "◌", + "◎", + "◐", + "◒", + "◔", + "◖", + "◚", + "◜", + "◞", + "◠", + "◦", + "◨", + "◪", + "◬", + "◮", + "◰", + "◲", + "◻", + "◽", + "☀", + "☂", + "☄", + "☇", + "☌", + "☎", + "☐", + "☒", + "☔", + "☚", + "☜", + "☞", + "☡", + "☥", + "☧", + "☩", + "☮", + "☸", + "☻", + "☽", + "☿", + "♁", + "♃", + "♅", + "♇", + "♉", + "♋", + "♍", + "♏", + "♒", + "♔", + "♖", + "♘", + "♚", + "♜", + "♞", + "♠", + "♢", + "♤", + "♦", + "♩", + "♫", + "♭", + "♯", + "♱", + "⚐", + "⚡", + "⚨", + "⚪", + "⚬", + "⚲", + "⚴", + "⚷", + "⚺", + "⚼", + "⛢", + "✓", + "✗", + "❕", + "❗", + "❙", + "❛", + "❟", + "❨", + "❪", + "❬", + "❮", + "❰", + "❲", + "❴", + "➧", + "➰", + "⟀", + "⟂", + "⟅", + "⟇", + "⟊", + "⟑", + "⟓", + "⟟", + "⟦", + "⟨", + "⟪", + "⟬", + "⟮", + "⠀", + "⠂", + "⠄", + "⠆", + "⠈", + "⠊", + "⠌", + "⠎", + "⠐", + "⠒", + "⠔", + "⠖", + "⠘", + "⠚", + "⠜", + "⠞", + "⠠", + "⠢", + "⠤", + "⠦", + "⠨", + "⠪", + "⠬", + "⠮", + "⠰", + "⠲", + "⠴", + "⠶", + "⠸", + "⠺", + "⠼", + "⠾", + "⡀", + "⡂", + "⡄", + "⡆", + "⡈", + "⡊", + "⡌", + "⡎", + "⡐", + "⡒", + "⡔", + "⡖", + "⡘", + "⡚", + "⡜", + "⡞", + "⡠", + "⡢", + "⡤", + "⡦", + "⡨", + "⡪", + "⡬", + "⡮", + "⡰", + "⡲", + "⡴", + "⡶", + "⡸", + "⡺", + "⡼", + "⡾", + "⢀", + "⢂", + "⢄", + "⢆", + "⢈", + "⢊", + "⢌", + "⢎", + "⢐", + "⢒", + "⢔", + "⢖", + "⢘", + "⢚", + "⢜", + "⢞", + "⢠", + "⢢", + "⢤", + "⢦", + "⢨", + "⢪", + "⢬", + "⢮", + "⢰", + "⢲", + "⢴", + "⢶", + "⢸", + "⢺", + "⢼", + "⢾", + "⣀", + "⣂", + "⣄", + "⣆", + "⣈", + "⣊", + "⣌", + "⣎", + "⣐", + "⣒", + "⣔", + "⣖", + "⣘", + "⣚", + "⣜", + "⣞", + "⣠", + "⣢", + "⣤", + "⣦", + "⣨", + "⣪", + "⣬", + "⣮", + "⣰", + "⣲", + "⣴", + "⣶", + "⣸", + "⣺", + "⣼", + "⣾", + "⤈", + "⤒", + "⤸", + "⥉", + "⥌", + "⥏", + "⥑", + "⥔", + "⥘", + "⥜", + "⥠", + "⥼", + "⦀", + "⦂", + "⦄", + "⦆", + "⦈", + "⦊", + "⦌", + "⦎", + "⦐", + "⦒", + "⦗", + "⦙", + "⦛", + "⦝", + "⦟", + "⦡", + "⦣", + "⦥", + "⦧", + "⧑", + "⧓", + "⧕", + "⧗", + "⧙", + "⧛", + "⧝", + "⧡", + "⧫", + "⧭", + "⧯", + "⧱", + "⧳", + "⧵", + "⧷", + "⧹", + "⧻", + "⧽", + "⨋", + "⨍", + "⨏", + "⨑", + "⨓", + "⨕", + "⨗", + "⨙", + "⨛", + "⨞", + "⨡", + "⨣", + "⨥", + "⨨", + "⨪", + "⨬", + "⨯", + "⨱", + "⨼", + "⨾", + "⩀", + "⩂", + "⩄", + "⩆", + "⩈", + "⩊", + "⩦", + "⩪", + "⩬", + "⩮", + "⩰", + "⩲", + "⩷", + "⩽", + "⩿", + "⪁", + "⪃", + "⪇", + "⪋", + "⪍", + "⪏", + "⪑", + "⪓", + "⪕", + "⪗", + "⪙", + "⪛", + "⪟", + "⪿", + "⫁", + "⫃", + "⫅", + "⫇", + "⫉", + "⫋", + "⫓", + "⫕", + "⫞", + "⫮", + "⫰", + "⫲", + "⫴", + "⫶", + "⫹", + "⫼", + "⫾", + "⬆", + "⬍", + "⬝", + "⬥", + "⬧", + "⬩", + "⬫", + "⬮", + "⬱", + "⭎", + "⭡", + "⭣", + "⭥", + "⭫", + "⭭", + "⭱", + "⭳", + "⭻", + "⭽", + "⯉", + "⯒", + "⯗", + "⯛", + "⯝", + "⯥", + "⯨", + "⯱", + "⯼", + "⯾", + "Ⰰ", + "Ⰲ", + "Ⰴ", + "Ⰶ", + "Ⰸ", + "Ⰺ", + "Ⰼ", + "Ⰾ", + "Ⱀ", + "Ⱂ", + "Ⱄ", + "Ⱆ", + "Ⱈ", + "Ⱊ", + "Ⱌ", + "Ⱎ", + "Ⱐ", + "Ⱒ", + "Ⱔ", + "Ⱖ", + "Ⱚ", + "Ⱜ", + "Ⱞ", + "ⰰ", + "ⰲ", + "ⰴ", + "ⰶ", + "ⰸ", + "ⰺ", + "ⰼ", + "ⰾ", + "ⱀ", + "ⱂ", + "ⱄ", + "ⱆ", + "ⱈ", + "ⱊ", + "ⱌ", + "ⱎ", + "ⱐ", + "ⱒ", + "ⱔ", + "ⱖ", + "ⱚ", + "ⱜ", + "ⱞ", + "Ⱡ", + "Ɫ", + "Ɽ", + "ⱦ", + "ⱨ", + "ⱪ", + "ⱬ", + "Ɱ", + "Ɒ", + "Ⱳ", + "ⱴ", + "ⱶ", + "ⱸ", + "ⱺ", + "ⱼ", + "Ȿ", + "Ⲁ", + "Ⲃ", + "Ⲅ", + "Ⲇ", + "Ⲉ", + "Ⲋ", + "Ⲍ", + "Ⲏ", + "Ⲑ", + "Ⲓ", + "Ⲕ", + "Ⲗ", + "Ⲙ", + "Ⲛ", + "Ⲝ", + "Ⲟ", + "Ⲡ", + "Ⲣ", + "Ⲥ", + "Ⲧ", + "Ⲩ", + "Ⲫ", + "Ⲭ", + "Ⲯ", + "Ⲱ", + "Ⲳ", + "Ⲵ", + "Ⲷ", + "Ⲹ", + "Ⲻ", + "Ⲽ", + "Ⲿ", + "Ⳁ", + "ⳃ", + "ⳅ", + "ⳇ", + "ⳉ", + "ⳋ", + "ⳍ", + "ⳏ", + "ⳑ", + "ⳓ", + "ⳕ", + "ⳗ", + "ⳙ", + "ⳛ", + "ⳝ", + "ⳟ", + "ⳡ", + "ⳣ", + "⳥", + "⳨", + "Ⳬ", + "Ⳮ", + "⳰", + "Ⳳ", + "⳹", + "⳻", + "⳽", + "⳿", + "ⴁ", + "ⴃ", + "ⴆ", + "ⴈ", + "ⴋ", + "ⴑ", + "ⴕ", + "ⴗ", + "ⴙ", + "ⴝ", + "ⴟ", + "ⴡ", + "ⴣ", + "ⴧ", + "ⴭ", + "ⴰ", + "ⴲ", + "ⴴ", + "ⴶ", + "ⴸ", + "ⴺ", + "ⴼ", + "ⴾ", + "ⵀ", + "ⵂ", + "ⵄ", + "ⵆ", + "ⵉ", + "ⵋ", + "ⵍ", + "ⵏ", + "ⵑ", + "ⵓ", + "ⵕ", + "ⵗ", + "ⵙ", + "ⵛ", + "ⵝ", + "ⵟ", + "ⵡ", + "ⵣ", + "ⵥ", + "ⵧ", + "ⵯ", + "⵿", + "ⷝ", + "ⷠ", + "ⷢ", + "ⷤ", + "ⷦ", + "ⷨ", + "ⷪ", + "ⷬ", + "ⷮ", + "ⷰ", + "ⷲ", + "ⷴ", + "ⷶ", + "ⷸ", + "ⷺ", + "ⷼ", + "ⷾ", + "⸀", + "⸂", + "⸄", + "⸆", + "⸈", + "⸊", + "⸌", + "⸒", + "⸖", + "⸘", + "⸚", + "⸜", + "⸞", + "⸠", + "⸢", + "⸤", + "⸦", + "⸨", + "⸪", + "⸬", + "⸮", + "⸰", + "⸲", + "⸴", + "⸶", + "⸸", + "⸼", + "⸾", + "⹀", + "⹂", + "⹄", + "⹆", + "⹈", + "⹊", + "⹌", + "⹎", + "⹒", + "⹔", + "⹖", + "⹘", + "⹚", + "⹜", + "⺡", + "⺨", + "⺪", + "⺬", + "⺰", + "⻈", + "⻊", + "⻏", + "⻠", + "⼁", + "⼃", + "⼅", + "⼎", + "⼘", + "⼺", + "、", + "〃", + "〈", + "「", + "『", + "【", + "〔", + "〖", + "〘", + "〚", + "〝", + "〟", + "〡", + "〪", + "〬", + "〮", + "〻", + "〿", + "ぅ", + "く", + "゙", + "゛", + "ゝ", + "゠", + "ト", + "ョ", + "リ", + "・", + "ヽ", + "ㅏ", + "ㅑ", + "ㅓ", + "ㅕ", + "ㅣ", + "ㆍ", + "㆐", + "㆒", + "ㆢ", + "ㆳ", + "ㆵ", + "ㆷ", + "ㆻ", + "㇄", + "㇌", + "㇑", + "㇓", + "㇙", + "㇛", + "ㇰ", + "ㇲ", + "ㇴ", + "ㇶ", + "ㇹ", + "ㇻ", + "ㇾ", + "丨", + "丶", + "冫", + "卜", + "卩", + "氵", + "犭", + "纟", + "訁", + "讠", + "钅", + "阝", + "饣", + "ꀅ", + "ꀉ", + "ꀖ", + "ꀙ", + "ꀞ", + "ꀤ", + "ꀦ", + "ꀫ", + "ꀭ", + "ꀯ", + "ꀱ", + "ꁃ", + "ꁇ", + "ꁊ", + "ꁢ", + "ꁦ", + "ꁵ", + "ꁼ", + "ꂑ", + "ꂗ", + "ꂢ", + "ꂤ", + "ꂫ", + "ꃎ", + "ꄋ", + "ꄍ", + "ꄩ", + "ꅁ", + "ꅃ", + "ꅈ", + "ꅒ", + "ꅔ", + "ꅛ", + "ꅢ", + "ꅳ", + "ꅺ", + "ꅾ", + "ꆎ", + "ꆢ", + "ꆸ", + "ꆻ", + "ꆽ", + "ꇀ", + "ꇈ", + "ꇊ", + "ꇌ", + "ꇘ", + "ꇯ", + "ꇸ", + "ꈅ", + "ꈋ", + "ꈒ", + "ꈕ", + "ꈣ", + "ꈥ", + "ꈸ", + "ꉁ", + "ꉆ", + "ꉊ", + "ꉓ", + "ꉖ", + "ꉘ", + "ꉥ", + "ꉨ", + "ꉫ", + "ꉿ", + "ꊉ", + "ꊘ", + "ꊛ", + "ꊡ", + "ꊣ", + "ꊩ", + "ꊱ", + "ꊳ", + "ꊼ", + "ꋊ", + "ꋌ", + "ꋓ", + "ꋥ", + "ꋪ", + "ꋬ", + "ꋮ", + "ꋴ", + "ꋶ", + "ꋼ", + "ꌄ", + "ꌔ", + "ꌖ", + "ꌚ", + "ꌫ", + "ꌹ", + "ꍌ", + "ꍘ", + "ꍛ", + "ꍞ", + "ꍡ", + "ꍣ", + "ꍹ", + "ꎁ", + "ꎅ", + "ꎌ", + "ꎏ", + "ꎟ", + "ꎥ", + "ꎯ", + "ꎺ", + "ꏁ", + "ꏉ", + "ꏋ", + "ꏎ", + "ꏔ", + "ꏘ", + "ꏛ", + "ꏠ", + "ꏱ", + "ꏷ", + "ꏹ", + "ꏽ", + "ꐓ", + "ꐕ", + "ꐘ", + "ꐟ", + "ꐪ", + "ꐮ", + "ꐾ", + "ꑀ", + "ꑇ", + "ꑍ", + "ꑘ", + "ꑠ", + "ꑥ", + "ꑫ", + "ꑴ", + "ꒁ", + "ꒄ", + "ꒆ", + "ꒈ", + "꒐", + "꒒", + "꒔", + "꒖", + "꒚", + "꒞", + "꒠", + "꒢", + "꒥", + "꒧", + "꒩", + "꒫", + "꒯", + "꒱", + "꒻", + "꒽", + "꓃", + "꓆", + "ꓐ", + "ꓒ", + "ꓔ", + "ꓖ", + "ꓘ", + "ꓚ", + "ꓜ", + "ꓞ", + "ꓠ", + "ꓢ", + "ꓤ", + "ꓦ", + "ꓨ", + "ꓪ", + "ꓬ", + "ꓮ", + "ꓰ", + "ꓲ", + "ꓴ", + "ꓶ", + "ꓸ", + "ꓺ", + "ꓼ", + "꓾", + "ꔌ", + "ꔖ", + "ꔧ", + "ꔪ", + "ꔵ", + "ꔷ", + "ꔿ", + "ꕃ", + "ꕇ", + "ꕉ", + "ꕗ", + "ꕞ", + "ꕪ", + "ꕯ", + "ꕶ", + "ꕺ", + "ꕼ", + "ꕿ", + "ꖉ", + "ꖋ", + "ꖎ", + "ꖔ", + "ꖤ", + "ꖵ", + "ꖷ", + "ꖹ", + "ꗉ", + "ꗏ", + "ꗓ", + "ꗕ", + "ꗗ", + "ꗚ", + "ꗟ", + "ꗨ", + "ꗪ", + "꘍", + "ꘓ", + "ꘖ", + "꘡", + "꘤", + "꘦", + "꘨", + "ꘫ", + "Ꙁ", + "Ꙃ", + "Ꙅ", + "Ꙇ", + "Ꙉ", + "Ꙋ", + "Ꙏ", + "Ꙑ", + "Ꙓ", + "Ꙕ", + "Ꙗ", + "Ꙙ", + "Ꙛ", + "Ꙝ", + "ꙟ", + "ꙡ", + "Ꙩ", + "Ꙫ", + "꙯", + "꙱", + "꙳", + "ꙵ", + "ꙷ", + "ꙹ", + "ꙻ", + "꙽", + "ꙿ", + "ꚁ", + "ꚃ", + "Ꚇ", + "Ꚉ", + "Ꚋ", + "Ꚍ", + "Ꚏ", + "Ꚑ", + "Ꚓ", + "Ꚕ", + "Ꚗ", + "Ꚛ", + "ꚜ", + "ꚞ", + "ꚠ", + "ꚢ", + "ꚤ", + "ꚦ", + "ꚨ", + "ꚪ", + "ꚬ", + "ꚮ", + "ꚰ", + "ꚲ", + "ꚴ", + "ꚶ", + "ꚸ", + "ꚺ", + "ꚼ", + "ꚾ", + "ꛀ", + "ꛂ", + "ꛄ", + "ꛆ", + "ꛈ", + "ꛊ", + "ꛌ", + "ꛎ", + "ꛐ", + "ꛒ", + "ꛔ", + "ꛖ", + "ꛘ", + "ꛚ", + "ꛜ", + "ꛞ", + "ꛠ", + "ꛢ", + "ꛤ", + "ꛦ", + "ꛨ", + "ꛪ", + "ꛬ", + "ꛮ", + "꛰", + "꛲", + "꛴", + "꛶", + "꜀", + "꜂", + "꜄", + "꜆", + "꜈", + "꜊", + "꜌", + "꜎", + "꜐", + "꜒", + "꜔", + "꜖", + "ꜘ", + "ꜚ", + "ꜜ", + "ꜞ", + "꜠", + "Ꜣ", + "Ꜥ", + "Ꜧ", + "Ꜩ", + "Ꜫ", + "Ꜭ", + "Ꜯ", + "ꜰ", + "Ꜳ", + "Ꜵ", + "Ꜷ", + "Ꜹ", + "Ꜻ", + "Ꜽ", + "Ꜿ", + "Ꝁ", + "Ꝃ", + "Ꝅ", + "Ꝇ", + "Ꝉ", + "Ꝋ", + "Ꝍ", + "Ꝏ", + "Ꝑ", + "Ꝓ", + "Ꝕ", + "Ꝗ", + "Ꝙ", + "Ꝛ", + "Ꝝ", + "Ꝟ", + "Ꝡ", + "Ꝣ", + "Ꝥ", + "Ꝧ", + "Ꝩ", + "Ꝫ", + "Ꝭ", + "Ꝯ", + "ꝰ", + "ꝲ", + "ꝴ", + "ꝶ", + "ꝸ", + "ꝺ", + "ꝼ", + "Ꝿ", + "Ꞁ", + "Ꞃ", + "Ꞅ", + "Ꞇ", + "ꞈ", + "꞊", + "ꞌ", + "ꞎ", + "Ꞑ", + "Ꞓ", + "ꞔ", + "Ꞗ", + "Ꞙ", + "Ꞛ", + "Ꞝ", + "Ꞟ", + "Ꞡ", + "Ꞣ", + "Ꞥ", + "Ꞧ", + "Ꞩ", + "Ɦ", + "Ɡ", + "Ɪ", + "Ʞ", + "Ʝ", + "Ꞵ", + "Ꞷ", + "Ꞹ", + "Ꞻ", + "Ꞽ", + "Ꞿ", + "Ꟁ", + "Ꟃ", + "Ꞔ", + "Ᶎ", + "ꟈ", + "ꟊ", + "Ꟍ", + "Ꟑ", + "ꟓ", + "ꟕ", + "ꟗ", + "ꟙ", + "ꟛ", + "ꟲ", + "ꟴ", + "ꟶ", + "ꟸ", + "ꟺ", + "ꟼ", + "ꟾ", + "ꠂ", + "꠆", + "ꠋ", + "ꠣ", + "ꠥ", + "ꠧ", + "꠩", + "꠬", + "꠰", + "꠲", + "꠶", + "꠸", + "ꡘ", + "ꡲ", + "꡶", + "ꢀ", + "ꢒ", + "ꢢ", + "ꢴ", + "ꢶ", + "ꢸ", + "ꢺ", + "ꢼ", + "ꢾ", + "ꣀ", + "ꣂ", + "꣄", + "꣎", + "꣐", + "꣒", + "꣔", + "꣖", + "꣘", + "꣠", + "꣢", + "꣤", + "꣦", + "꣨", + "꣫", + "꣭", + "꣯", + "꣱", + "ꣶ", + "꣺", + "ꤒ", + "ꤙ", + "ꤦ", + "ꤩ", + "꤫", + "꤭", + "꤯", + "ꥇ", + "ꥉ", + "ꥋ", + "ꥍ", + "ꥏ", + "ꥑ", + "꥓", + "ꦁ", + "ꦃ", + "ꦴ", + "ꦶ", + "ꦸ", + "ꦽ", + "꧆", + "꧈", + "꧊", + "꧌", + "ꧏ", + "꧔", + "꧞", + "ꧠ", + "ꧥ", + "꧰", + "꧲", + "꧴", + "꧶", + "꧸", + "ꧽ", + "ꨂ", + "ꨩ", + "ꨫ", + "ꨭ", + "ꨯ", + "ꨱ", + "ꨳ", + "ꨵ", + "ꩃ", + "ꩌ", + "꩕", + "꩝", + "꩟", + "ꩢ", + "ꩯ", + "ꩻ", + "ꩽ", + "ꪆ", + "ꪩ", + "ꪫ", + "ꪮ", + "ꪰ", + "ꪲ", + "ꪴ", + "ꪶ", + "ꪸ", + "ꪺ", + "ꪼ", + "꪿", + "꫁", + "ꫪ", + "ꫬ", + "ꫮ", + "꫰", + "ꫲ", + "ꫴ", + "꫶", + "ꬃ", + "ꬅ", + "ꬋ", + "ꬰ", + "ꬲ", + "ꬴ", + "ꬶ", + "ꬸ", + "ꬺ", + "ꬼ", + "ꬾ", + "ꭀ", + "ꭂ", + "ꭄ", + "ꭆ", + "ꭈ", + "ꭊ", + "ꭌ", + "ꭎ", + "ꭐ", + "ꭒ", + "ꭔ", + "ꭖ", + "ꭘ", + "ꭚ", + "ꭜ", + "ꭞ", + "ꭠ", + "ꭢ", + "ꭤ", + "ꭦ", + "ꭨ", + "꭪", + "ꭰ", + "ꭲ", + "ꭴ", + "ꭶ", + "ꭸ", + "ꭺ", + "ꭼ", + "ꭾ", + "ꮀ", + "ꮂ", + "ꮄ", + "ꮆ", + "ꮈ", + "ꮊ", + "ꮌ", + "ꮎ", + "ꮐ", + "ꮒ", + "ꮔ", + "ꮖ", + "ꮘ", + "ꮚ", + "ꮜ", + "ꮞ", + "ꮠ", + "ꮢ", + "ꮤ", + "ꮦ", + "ꮨ", + "ꮪ", + "ꮬ", + "ꮮ", + "ꮰ", + "ꮲ", + "ꮴ", + "ꮶ", + "ꮸ", + "ꮺ", + "ꮼ", + "ꮾ", + "ꯕ", + "ꯣ", + "ꯥ", + "ꯧ", + "ꯩ", + "꯫", + "꯱", + "꯴", + "ힾ", + "ퟄ", + "ff", + "fl", + "ffl", + "st", + "ﬓ", + "ﬕ", + "ﬗ", + "יִ", + "ײַ", + "﬩", + "שׂ", + "שּׂ", + "אָ", + "בּ", + "דּ", + "וּ", + "טּ", + "ךּ", + "לּ", + "מּ", + "נּ", + "ףּ", + "צּ", + "רּ", + "תּ", + "בֿ", + "פֿ", + "ﭐ", + "ﭒ", + "ﭔ", + "ﭖ", + "ﭘ", + "ﭚ", + "ﭜ", + "ﭞ", + "ﭠ", + "ﭢ", + "ﭤ", + "ﭦ", + "ﭨ", + "ﭪ", + "ﭬ", + "ﭮ", + "ﭰ", + "ﭲ", + "ﭴ", + "ﭶ", + "ﭸ", + "ﭺ", + "ﭼ", + "ﭾ", + "ﮀ", + "ﮂ", + "ﮄ", + "ﮆ", + "ﮈ", + "ﮊ", + "ﮌ", + "ﮎ", + "ﮐ", + "ﮒ", + "ﮔ", + "ﮖ", + "ﮘ", + "ﮚ", + "ﮜ", + "ﮞ", + "ﮠ", + "ﮢ", + "ﮤ", + "ﮦ", + "ﮨ", + "ﮪ", + "ﮬ", + "ﮮ", + "ﮰ", + "﮲", + "﮴", + "﮶", + "﮸", + "﮺", + "﮼", + "﮾", + "﯀", + "﯂", + "ﯓ", + "ﯕ", + "ﯗ", + "ﯙ", + "ﯛ", + "ﯝ", + "ﯟ", + "ﯡ", + "ﯣ", + "ﯥ", + "ﯨ", + "ﯪ", + "ﯬ", + "ﯮ", + "ﯰ", + "ﯲ", + "ﯴ", + "ﯶ", + "ﯸ", + "ﯺ", + "ﯼ", + "ﯾ", + "ﰀ", + "ﰂ", + "ﰄ", + "ﰆ", + "ﰈ", + "ﰊ", + "ﰌ", + "ﰎ", + "ﰐ", + "ﰒ", + "ﰔ", + "ﰖ", + "ﰘ", + "ﰚ", + "ﰜ", + "ﰞ", + "ﰠ", + "ﰢ", + "ﰤ", + "ﰦ", + "ﰨ", + "ﰪ", + "ﰬ", + "ﰮ", + "ﰰ", + "ﰲ", + "ﰴ", + "ﰶ", + "ﰸ", + "ﰺ", + "ﰼ", + "ﰿ", + "ﱁ", + "ﱃ", + "ﱅ", + "ﱇ", + "ﱉ", + "ﱋ", + "ﱍ", + "ﱏ", + "ﱑ", + "ﱓ", + "ﱕ", + "ﱗ", + "ﱙ", + "ﱛ", + "ﱝ", + "ﱟ", + "ﱡ", + "ﱣ", + "ﱥ", + "ﱧ", + "ﱩ", + "ﱫ", + "ﱭ", + "ﱯ", + "ﱱ", + "ﱳ", + "ﱵ", + "ﱷ", + "ﱹ", + "ﱻ", + "ﱽ", + "ﱿ", + "ﲁ", + "ﲃ", + "ﲅ", + "ﲇ", + "ﲉ", + "ﲋ", + "ﲍ", + "ﲏ", + "ﲑ", + "ﲓ", + "ﲕ", + "ﲗ", + "ﲙ", + "ﲜ", + "ﲞ", + "ﲡ", + "ﲣ", + "ﲦ", + "ﲨ", + "ﲪ", + "ﲬ", + "ﲰ", + "ﲸ", + "ﲺ", + "ﲼ", + "ﲾ", + "ﳀ", + "ﳂ", + "ﳄ", + "ﳆ", + "ﳈ", + "ﳊ", + "ﳌ", + "ﳎ", + "ﳐ", + "ﳒ", + "ﳔ", + "ﳖ", + "ﳘ", + "ﳚ", + "ﳜ", + "ﳞ", + "ﳡ", + "ﳣ", + "ﳥ", + "ﳫ", + "ﳭ", + "ﳯ", + "ﳱ", + "ﳳ", + "ﳵ", + "ﳷ", + "ﳹ", + "ﳿ", + "ﴁ", + "ﴃ", + "ﴅ", + "ﴇ", + "ﴉ", + "ﴋ", + "ﴍ", + "ﴏ", + "ﴑ", + "ﴓ", + "ﴕ", + "ﴡ", + "ﴣ", + "ﴥ", + "ﴧ", + "ﴩ", + "ﴫ", + "ﴳ", + "ﴺ", + "ﴼ", + "︐", + "︒", + "︔", + "︖", + "︙", + "︠", + "︢", + "︤", + "︦", + "︨", + "︪", + "︬", + "︮", + "︰", + "︲", + "﹅", + "﹐", + "﹒", + "﹔", + "﹖", + "﹘", + "﹚", + "﹜", + "﹞", + "﹠", + "﹢", + "﹤", + "﹦", + "﹨", + "﹪", + "ﹰ", + "ﹲ", + "ﹴ", + "ﹶ", + "ﹸ", + "ﹺ", + "ﹼ", + "ﹾ", + "ﺀ", + "ﺂ", + "ﺄ", + "ﺆ", + "ﺈ", + "ﺊ", + "ﺌ", + "ﺎ", + "ﺐ", + "ﺒ", + "ﺔ", + "ﺖ", + "ﺘ", + "ﺚ", + "ﺜ", + "ﺞ", + "ﺠ", + "ﺢ", + "ﺤ", + "ﺦ", + "ﺨ", + "ﺪ", + "ﺬ", + "ﺮ", + "ﺰ", + "ﺲ", + "ﺴ", + "ﺶ", + "ﺸ", + "ﺺ", + "ﺼ", + "ﺾ", + "ﻀ", + "ﻂ", + "ﻄ", + "ﻆ", + "ﻈ", + "ﻊ", + "ﻌ", + "ﻎ", + "ﻐ", + "ﻒ", + "ﻔ", + "ﻖ", + "ﻘ", + "ﻚ", + "ﻜ", + "ﻞ", + "ﻠ", + "ﻢ", + "ﻤ", + "ﻦ", + "ﻨ", + "ﻪ", + "ﻬ", + "ﻮ", + "ﻰ", + "ﻲ", + "ﻴ", + "ﻶ", + "ﻸ", + "ﻺ", + "ﻼ", + "!", + "'", + ")", + ",", + ".", + "0", + ":", + "I", + "[", + "]", + "`", + "i", + "l", + "z", + "|", + "。", + "」", + "・", + "ァ", + "ゥ", + "ォ", + "ュ", + "ッ", + "ア", + "ウ", + "オ", + "キ", + "ケ", + "サ", + "ス", + "ソ", + "チ", + "テ", + "ナ", + "ヌ", + "ノ", + "ヒ", + "ヘ", + "マ", + "ム", + "モ", + "ユ", + "ラ", + "ル", + "ロ", + "ン", + "゚", + "ᄀ", + "ᆪ", + "ᆬ", + "ᄃ", + "ᄅ", + "ᆱ", + "ᆳ", + "ᄚ", + "ᄇ", + "ᄡ", + "ᄋ", + "ᄎ", + "ᄐ", + "ᄒ", + "ᅡ", + "ᅣ", + "ᅥ", + "ᅧ", + "ᅩ", + "ᅫ", + "ᅭ", + "ᅯ", + "ᅱ", + "ᅳ", + "ᅵ", + "¦", + "│", + "↑", + "↓", + "○", + "�" +] diff --git a/gui.cpp b/gui.cpp index 9ca6de3..fd522e0 100644 --- a/gui.cpp +++ b/gui.cpp @@ -178,6 +178,7 @@ bool GUI::handle_ui_events() { auto player = $world.get_the(); int map_font_size = $renderer.font_size(); auto& player_motion = $world.get(player.entity); + Point pos; while($renderer.poll_event(event)) { if(event.type == sf::Event::Closed) { @@ -203,15 +204,16 @@ bool GUI::handle_ui_events() { } else if(KB::isKeyPressed(KB::S)) { save_world(); } else if(KB::isKeyPressed(KB::Tab)) { - $status_ui.$component->OnEvent(Event::Tab); + $status_ui.key_press(Event::Tab); } else if(KB::isKeyPressed(KB::Enter)) { - $status_ui.$component->OnEvent(Event::Return); + $status_ui.key_press(Event::Return); } - } else if(MOUSE::isButtonPressed(MOUSE::Left)) { - Point pos; - if($renderer.mouse_position($status_ui, pos)) { + } else if($renderer.mouse_position($status_ui, pos)) { + if(MOUSE::isButtonPressed(MOUSE::Left)) { $status_ui.mouse_click(Mouse::Button::Left, pos); event_happened = true; + } else { + $status_ui.mouse_release(Mouse::Button::Left, pos); } } } diff --git a/panel.cpp b/panel.cpp index 6ab1abf..e3a3cbf 100644 --- a/panel.cpp +++ b/panel.cpp @@ -38,13 +38,27 @@ const std::wstring& Panel::to_string() { void Panel::mouse_click(ftxui::Mouse::Button btn, Point pos) { ftxui::Mouse mev{ .button=btn, + .motion=ftxui::Mouse::Motion::Pressed, .x=int(pos.x), .y=int(pos.y) }; $component->OnEvent(ftxui::Event::Mouse("", mev)); } +void Panel::mouse_release(ftxui::Mouse::Button btn, Point pos) { + ftxui::Mouse mev{ + .button=btn, + .motion=ftxui::Mouse::Motion::Released, + .x=int(pos.x), .y=int(pos.y) + }; -const Screen &Panel::screen() { + $component->OnEvent(ftxui::Event::Mouse("", mev)); +} + +const Screen& Panel::screen() { return $screen; } + +void Panel::key_press(ftxui::Event event) { + $component->OnEvent(event); +} diff --git a/panel.hpp b/panel.hpp index 0883dbf..e61a1aa 100644 --- a/panel.hpp +++ b/panel.hpp @@ -52,6 +52,8 @@ struct Panel { void add(Component child); void render(); void mouse_click(ftxui::Mouse::Button btn, Point pos); + void mouse_release(ftxui::Mouse::Button btn, Point pos); + void key_press(ftxui::Event event); const std::wstring &to_string(); const Screen &screen(); }; diff --git a/render.cpp b/render.cpp index 60b5c9a..292b0aa 100644 --- a/render.cpp +++ b/render.cpp @@ -239,9 +239,6 @@ bool SFMLRender::mouse_position(Panel &panel, Point &out) { auto bounds = panel.grid ? $grid_bounds : $text_bounds; - println("mouse position pos={},{} panel.pos={},{} panel.size={},{}", - pos.x, pos.y, panel.x, panel.y, panel.width, panel.height); - if(pos.x >= panel.x && pos.y >= panel.y && pos.x <= (panel.x + panel.width * bounds.width) && pos.y <= (panel.y + panel.height * bounds.height)) diff --git a/status.txt b/status.txt index 039fa51..2b42a2a 100644 --- a/status.txt +++ b/status.txt @@ -1,11 +1,13 @@ TODAY'S GOAL: -0. \ua3fd causes the character immediately after to vanish. +-1. Learn std::initializer_list by using it. +0. \ua3fd causes the character immediately after to vanish. Make a test and solve it. 1. Why do Sliders only have to be kept around forever and can't go in containers like everything else? 2. Why are sliders not selected when I click on them? Is it a hover? 3. Why do fonts render blank? Also when I scroll they slowly disappear until there's a column. * \u2738 is missing on the row when in grid but works when clicked. + * A designer tool to help find characters for foreground, background, and figure out their colors. * renderer's mouse coordinates are totally wrong. Need to put glyph bounds into the panel and then you can ask if a mouse click is on a panel, and what the _panel's_ coordinates are. @@ -14,7 +16,9 @@ TODAY'S GOAL: TODO: -* Make a unicode helper. +* Refine the event handling to pass most of them to the gui panels and then I can intercept them. + +* Resolve fmt::format vs std::format. * Fix " room should always be found" diff --git a/tools/designer.cpp b/tools/designer.cpp index e519577..a389308 100644 --- a/tools/designer.cpp +++ b/tools/designer.cpp @@ -17,6 +17,7 @@ #include #include #include +#include using namespace nlohmann; using namespace fmt; @@ -39,19 +40,23 @@ struct FontGrid { size_t width; size_t height; vector> $grid; + string $font_list; std::wstring_convert> $converter; vector $wcharmap; vector $charmap; - FontGrid(size_t width, size_t height) : + FontGrid(string font_list, size_t width, size_t height) : width(width), height(height), - $grid(height, vector(width, {0, "", L""})) + $grid(height, vector(width, {0, "", L""})), + $font_list(font_list) { configure_font(); } void configure_font() { - std::ifstream in_file("./fontlist.json"); + dbc::check(fs::exists($font_list), format("font listing {} does not exist", $font_list)); + + std::ifstream in_file($font_list); json input = json::parse(in_file); for(auto inchar : input) { @@ -120,7 +125,6 @@ struct WhatTheColor { class GUI { public: - DinkyECS::World& $world; Panel $font_view; Panel $status_ui; Canvas $canvas; @@ -133,11 +137,10 @@ class GUI { Component $fg_settings; Component $bg_settings; - GUI(DinkyECS::World &world) : - $world(world), + GUI(string font_list) : $font_view(GAME_MAP_POS, 0, GRID_SIZE.x, GRID_SIZE.y, true), $status_ui(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), - $font_grid(GRID_SIZE.x, GRID_SIZE.y), + $font_grid(font_list, GRID_SIZE.x, GRID_SIZE.y), $fg_color{.h=20, .s=50, .v=20}, $bg_color{.h=100, .s=100, .v=100} { @@ -157,12 +160,11 @@ class GUI { } void draw_font_grid() { - int flip_it = 0; for(size_t y = 0; y < $font_grid.height; y++) { - for(size_t x = 0; x < $font_grid.width; x++, flip_it++) { + for(size_t x = 0; x < $font_grid.width; x++) { $canvas.DrawText(x * 2, y * 4, $font_grid.as_string(x, y), [&](auto &pixel) { - pixel.foreground_color = Color::HSV($fg_color.h, $fg_color.s, $fg_color.v / (flip_it % 2 + 1)); - pixel.background_color = Color::HSV($bg_color.h, $bg_color.s, $bg_color.v / (flip_it % 2 + 1)); + pixel.foreground_color = Color::HSV($fg_color.h, $fg_color.s, $fg_color.v); + pixel.background_color = Color::HSV($bg_color.h, $bg_color.s, $bg_color.v); }); } } @@ -238,6 +240,7 @@ class GUI { bool event_happened; using KB = sf::Keyboard; sf::Event event; + Point pos; int font_size = $renderer.font_size(); int page_size = $font_grid.page_size(); @@ -255,22 +258,29 @@ class GUI { $start_char = std::min($font_grid.max_chars() - page_size, $start_char + page_size); render_grid($start_char, false); $renderer.clear_cache(); + } else if(KB::isKeyPressed(KB::Tab)) { + $status_ui.key_press(Event::Tab); + } else if(KB::isKeyPressed(KB::Tab)) { + $status_ui.key_press(Event::Return); } else if(KB::isKeyPressed(KB::Equal)) { resize_fonts(font_size + 10); } else if(KB::isKeyPressed(KB::Hyphen)) { resize_fonts(font_size - 10); event_happened = true; } - } else if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) { - Point pos; - if($renderer.mouse_position($font_view, pos)) { + } else if($renderer.mouse_position($font_view, pos)) { + if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) { select_cell(pos); event_happened = true; - } else if($renderer.mouse_position($status_ui, pos)) { + } else if(sf::Mouse::isButtonPressed(sf::Mouse::Right)) { + deselect_cell(); + } + } else if($renderer.mouse_position($status_ui, pos)) { + if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) { $status_ui.mouse_click(Mouse::Button::Left, pos); + } else if(event.type == sf::Event::MouseMoved) { + $status_ui.mouse_release(Mouse::Button::Left, pos); } - } else if(sf::Mouse::isButtonPressed(sf::Mouse::Right)) { - deselect_cell(); } } @@ -291,20 +301,26 @@ class GUI { }; int main(int argc, char *argv[]) { - DinkyECS::World world; + try { + dbc::check(argc == 2, "USAGE: designer fontlist.json"); - GUI gui(world); + string font_list{argv[1]}; - gui.create_renderer(); + GUI gui(font_list); - do { - gui.render_scene(); + gui.create_renderer(); - if(gui.handle_ui_events()) { - } + do { + gui.render_scene(); - std::this_thread::sleep_for(10ms); - } while(gui.$renderer.is_open()); + if(gui.handle_ui_events()) { + } + + std::this_thread::sleep_for(10ms); + } while(gui.$renderer.is_open()); - return 0; + return 0; + } catch(const dbc::Error &e) { + println("ERROR: {}", e.message); + } } diff --git a/tools/fontextract.cpp b/tools/fontextract.cpp index 614cebe..515e73a 100644 --- a/tools/fontextract.cpp +++ b/tools/fontextract.cpp @@ -2,10 +2,8 @@ #include #include // for operator""s, chrono_literals #include // for sleep_for -#include "dbc.hpp" #include #include -#include "constants.hpp" #include #include #include @@ -16,6 +14,8 @@ #include FT_FREETYPE_H #include FT_TRUETYPE_TABLES_H #include FT_TRUETYPE_IDS_H +#include "dbc.hpp" +#include "constants.hpp" using namespace nlohmann; using namespace fmt;