Cross-Platform OpenGL Windowing Library
修订版 | 56d12b5995e0eb6e4c3321e7515b6a59b125a8e8 (tree) |
---|---|
时间 | 2022-11-26 02:13:47 |
作者 | AlaskanEmily <emily@eter...> |
Commiter | AlaskanEmily |
Fix key composition and extended UTF codepoints for X11 input
@@ -27,6 +27,994 @@ | ||
27 | 27 | #include <stdlib.h> |
28 | 28 | #include <string.h> |
29 | 29 | |
30 | +/******************************************************************************/ | |
31 | +/* Code taken from libxkbcommon, public domain (license header). | |
32 | + * bin_search has been slightly rewritten, and this has been converted to use | |
33 | + * the XLib keysym definitions rather than the XKB ones. | |
34 | + * | |
35 | + * This lets us get keysym -> UTF conversions without needing to depend on | |
36 | + * libxkbcommon. | |
37 | + */ | |
38 | + | |
39 | +/* Begin libxkbcommon code. */ | |
40 | + | |
41 | +/* This module converts keysym values into the corresponding ISO 10646 | |
42 | + * (UCS, Unicode) values. | |
43 | + * | |
44 | + * The array keysymtab[] contains pairs of X11 keysym values for graphical | |
45 | + * characters and the corresponding Unicode value. The function | |
46 | + * keysym2ucs() maps a keysym onto a Unicode value using a binary search, | |
47 | + * therefore keysymtab[] must remain SORTED by keysym value. | |
48 | + * | |
49 | + * The keysym -> UTF-8 conversion will hopefully one day be provided | |
50 | + * by Xlib via XmbLookupString() and should ideally not have to be | |
51 | + * done in X applications. But we are not there yet. | |
52 | + * | |
53 | + * We allow to represent any UCS character in the range U-00000000 to | |
54 | + * U-00FFFFFF by a keysym value in the range 0x01000000 to 0x01ffffff. | |
55 | + * This admittedly does not cover the entire 31-bit space of UCS, but | |
56 | + * it does cover all of the characters up to U-10FFFF, which can be | |
57 | + * represented by UTF-16, and more, and it is very unlikely that higher | |
58 | + * UCS codes will ever be assigned by ISO. So to get Unicode character | |
59 | + * U+ABCD you can directly use keysym 0x0100abcd. | |
60 | + * | |
61 | + * NOTE: The comments in the table below contain the actual character | |
62 | + * encoded in UTF-8, so for viewing and editing best use an editor in | |
63 | + * UTF-8 mode. | |
64 | + * | |
65 | + * Author: Markus G. Kuhn <http://www.cl.cam.ac.uk/~mgk25/>, | |
66 | + * University of Cambridge, April 2001 | |
67 | + * | |
68 | + * Special thanks to Richard Verhoeven <river@win.tue.nl> for preparing | |
69 | + * an initial draft of the mapping table. | |
70 | + * | |
71 | + * This software is in the public domain. Share and enjoy! | |
72 | + * | |
73 | + */ | |
74 | + | |
75 | +struct glow_xkb_codepair { | |
76 | + unsigned short keysym; | |
77 | + unsigned short ucs; | |
78 | +}; | |
79 | + | |
80 | +#if ((defined __GNUC__) || (defined __TINYC__)) && (defined __ELF__) | |
81 | +__attribute__((section("rodata"))) | |
82 | +#endif | |
83 | +static const struct glow_xkb_codepair glow_xkb_keysymtab[] = { | |
84 | +#define GLOW_XKB_FIRST_KEYSYM 0x01A1 | |
85 | + {0x01A1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ | |
86 | + {0x01A2, 0x02D8 }, /* breve ˘ BREVE */ | |
87 | + {0x01A3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ | |
88 | + {0x01A5, 0x013D }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ | |
89 | + {0x01A6, 0x015A }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ | |
90 | + {0x01A9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ | |
91 | + {0x01AA, 0x015E }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ | |
92 | + {0x01AB, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ | |
93 | + {0x01AC, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ | |
94 | + {0x01AE, 0x017D }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ | |
95 | + {0x01AF, 0x017B }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ | |
96 | + {0x01B1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ | |
97 | + {0x01B2, 0x02DB }, /* ogonek ˛ OGONEK */ | |
98 | + {0x01B3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ | |
99 | + {0x01B5, 0x013E }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ | |
100 | + {0x01B6, 0x015B }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ | |
101 | + {0x01B7, 0x02C7 }, /* caron ˇ CARON */ | |
102 | + {0x01B9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ | |
103 | + {0x01BA, 0x015F }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ | |
104 | + {0x01BB, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ | |
105 | + {0x01BC, 0x017A }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ | |
106 | + {0x01BD, 0x02DD }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ | |
107 | + {0x01BE, 0x017E }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ | |
108 | + {0x01BF, 0x017C }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ | |
109 | + {0x01C0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ | |
110 | + {0x01C3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ | |
111 | + {0x01C5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ | |
112 | + {0x01C6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ | |
113 | + {0x01C8, 0x010C }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ | |
114 | + {0x01CA, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ | |
115 | + {0x01CC, 0x011A }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ | |
116 | + {0x01CF, 0x010E }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ | |
117 | + {0x01D0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ | |
118 | + {0x01D1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ | |
119 | + {0x01D2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ | |
120 | + {0x01D5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ | |
121 | + {0x01D8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ | |
122 | + {0x01D9, 0x016E }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ | |
123 | + {0x01DB, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ | |
124 | + {0x01DE, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ | |
125 | + {0x01E0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ | |
126 | + {0x01E3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ | |
127 | + {0x01E5, 0x013A }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ | |
128 | + {0x01E6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ | |
129 | + {0x01E8, 0x010D }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ | |
130 | + {0x01EA, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ | |
131 | + {0x01EC, 0x011B }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ | |
132 | + {0x01EF, 0x010F }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ | |
133 | + {0x01F0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ | |
134 | + {0x01F1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ | |
135 | + {0x01F2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ | |
136 | + {0x01F5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ | |
137 | + {0x01F8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ | |
138 | + {0x01F9, 0x016F }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ | |
139 | + {0x01FB, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ | |
140 | + {0x01FE, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ | |
141 | + {0x01FF, 0x02D9 }, /* abovedot ˙ DOT ABOVE */ | |
142 | + {0x02A1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ | |
143 | + {0x02A6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ | |
144 | + {0x02A9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ | |
145 | + {0x02AB, 0x011E }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ | |
146 | + {0x02AC, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ | |
147 | + {0x02B1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ | |
148 | + {0x02B6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ | |
149 | + {0x02B9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ | |
150 | + {0x02BB, 0x011F }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ | |
151 | + {0x02BC, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ | |
152 | + {0x02C5, 0x010A }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ | |
153 | + {0x02C6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ | |
154 | + {0x02D5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ | |
155 | + {0x02D8, 0x011C }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ | |
156 | + {0x02DD, 0x016C }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ | |
157 | + {0x02DE, 0x015C }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ | |
158 | + {0x02E5, 0x010B }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ | |
159 | + {0x02E6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ | |
160 | + {0x02F5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ | |
161 | + {0x02F8, 0x011D }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ | |
162 | + {0x02FD, 0x016D }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ | |
163 | + {0x02FE, 0x015D }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ | |
164 | + {0x03A2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ | |
165 | + {0x03A3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ | |
166 | + {0x03A5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ | |
167 | + {0x03A6, 0x013B }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ | |
168 | + {0x03AA, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ | |
169 | + {0x03AB, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ | |
170 | + {0x03AC, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ | |
171 | + {0x03B3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ | |
172 | + {0x03B5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ | |
173 | + {0x03B6, 0x013C }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ | |
174 | + {0x03BA, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ | |
175 | + {0x03BB, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ | |
176 | + {0x03BC, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ | |
177 | + {0x03BD, 0x014A }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ | |
178 | + {0x03BF, 0x014B }, /* eng ŋ LATIN SMALL LETTER ENG */ | |
179 | + {0x03C0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ | |
180 | + {0x03C7, 0x012E }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ | |
181 | + {0x03CC, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ | |
182 | + {0x03CF, 0x012A }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ | |
183 | + {0x03D1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ | |
184 | + {0x03D2, 0x014C }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ | |
185 | + {0x03D3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ | |
186 | + {0x03D9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ | |
187 | + {0x03DD, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ | |
188 | + {0x03DE, 0x016A }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ | |
189 | + {0x03E0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ | |
190 | + {0x03E7, 0x012F }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ | |
191 | + {0x03EC, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ | |
192 | + {0x03EF, 0x012B }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ | |
193 | + {0x03F1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ | |
194 | + {0x03F2, 0x014D }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ | |
195 | + {0x03F3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ | |
196 | + {0x03F9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ | |
197 | + {0x03FD, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ | |
198 | + {0x03FE, 0x016B }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ | |
199 | + {0x047E, 0x203E }, /* overline ‾ OVERLINE */ | |
200 | + {0x04A1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ | |
201 | + {0x04A2, 0x300C }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ | |
202 | + {0x04A3, 0x300D }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ | |
203 | + {0x04A4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ | |
204 | + {0x04A5, 0x30FB }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ | |
205 | + {0x04A6, 0x30F2 }, /* kana_WO ヲ KATAKANA LETTER WO */ | |
206 | + {0x04A7, 0x30A1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ | |
207 | + {0x04A8, 0x30A3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ | |
208 | + {0x04A9, 0x30A5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ | |
209 | + {0x04AA, 0x30A7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ | |
210 | + {0x04AB, 0x30A9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ | |
211 | + {0x04AC, 0x30E3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ | |
212 | + {0x04AD, 0x30E5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ | |
213 | + {0x04AE, 0x30E7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ | |
214 | + {0x04AF, 0x30C3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ | |
215 | + {0x04B0, 0x30FC }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ | |
216 | + {0x04B1, 0x30A2 }, /* kana_A ア KATAKANA LETTER A */ | |
217 | + {0x04B2, 0x30A4 }, /* kana_I イ KATAKANA LETTER I */ | |
218 | + {0x04B3, 0x30A6 }, /* kana_U ウ KATAKANA LETTER U */ | |
219 | + {0x04B4, 0x30A8 }, /* kana_E エ KATAKANA LETTER E */ | |
220 | + {0x04B5, 0x30AA }, /* kana_O オ KATAKANA LETTER O */ | |
221 | + {0x04B6, 0x30AB }, /* kana_KA カ KATAKANA LETTER KA */ | |
222 | + {0x04B7, 0x30AD }, /* kana_KI キ KATAKANA LETTER KI */ | |
223 | + {0x04B8, 0x30AF }, /* kana_KU ク KATAKANA LETTER KU */ | |
224 | + {0x04B9, 0x30B1 }, /* kana_KE ケ KATAKANA LETTER KE */ | |
225 | + {0x04BA, 0x30B3 }, /* kana_KO コ KATAKANA LETTER KO */ | |
226 | + {0x04BB, 0x30B5 }, /* kana_SA サ KATAKANA LETTER SA */ | |
227 | + {0x04BC, 0x30B7 }, /* kana_SHI シ KATAKANA LETTER SI */ | |
228 | + {0x04BD, 0x30B9 }, /* kana_SU ス KATAKANA LETTER SU */ | |
229 | + {0x04BE, 0x30BB }, /* kana_SE セ KATAKANA LETTER SE */ | |
230 | + {0x04BF, 0x30BD }, /* kana_SO ソ KATAKANA LETTER SO */ | |
231 | + {0x04C0, 0x30BF }, /* kana_TA タ KATAKANA LETTER TA */ | |
232 | + {0x04C1, 0x30C1 }, /* kana_CHI チ KATAKANA LETTER TI */ | |
233 | + {0x04C2, 0x30C4 }, /* kana_TSU ツ KATAKANA LETTER TU */ | |
234 | + {0x04C3, 0x30C6 }, /* kana_TE テ KATAKANA LETTER TE */ | |
235 | + {0x04C4, 0x30C8 }, /* kana_TO ト KATAKANA LETTER TO */ | |
236 | + {0x04C5, 0x30CA }, /* kana_NA ナ KATAKANA LETTER NA */ | |
237 | + {0x04C6, 0x30CB }, /* kana_NI ニ KATAKANA LETTER NI */ | |
238 | + {0x04C7, 0x30CC }, /* kana_NU ヌ KATAKANA LETTER NU */ | |
239 | + {0x04C8, 0x30CD }, /* kana_NE ネ KATAKANA LETTER NE */ | |
240 | + {0x04C9, 0x30CE }, /* kana_NO ノ KATAKANA LETTER NO */ | |
241 | + {0x04CA, 0x30CF }, /* kana_HA ハ KATAKANA LETTER HA */ | |
242 | + {0x04CB, 0x30D2 }, /* kana_HI ヒ KATAKANA LETTER HI */ | |
243 | + {0x04CC, 0x30D5 }, /* kana_FU フ KATAKANA LETTER HU */ | |
244 | + {0x04CD, 0x30D8 }, /* kana_HE ヘ KATAKANA LETTER HE */ | |
245 | + {0x04CE, 0x30DB }, /* kana_HO ホ KATAKANA LETTER HO */ | |
246 | + {0x04CF, 0x30DE }, /* kana_MA マ KATAKANA LETTER MA */ | |
247 | + {0x04D0, 0x30DF }, /* kana_MI ミ KATAKANA LETTER MI */ | |
248 | + {0x04D1, 0x30E0 }, /* kana_MU ム KATAKANA LETTER MU */ | |
249 | + {0x04D2, 0x30E1 }, /* kana_ME メ KATAKANA LETTER ME */ | |
250 | + {0x04D3, 0x30E2 }, /* kana_MO モ KATAKANA LETTER MO */ | |
251 | + {0x04D4, 0x30E4 }, /* kana_YA ヤ KATAKANA LETTER YA */ | |
252 | + {0x04D5, 0x30E6 }, /* kana_YU ユ KATAKANA LETTER YU */ | |
253 | + {0x04D6, 0x30E8 }, /* kana_YO ヨ KATAKANA LETTER YO */ | |
254 | + {0x04D7, 0x30E9 }, /* kana_RA ラ KATAKANA LETTER RA */ | |
255 | + {0x04D8, 0x30EA }, /* kana_RI リ KATAKANA LETTER RI */ | |
256 | + {0x04D9, 0x30EB }, /* kana_RU ル KATAKANA LETTER RU */ | |
257 | + {0x04DA, 0x30EC }, /* kana_RE レ KATAKANA LETTER RE */ | |
258 | + {0x04DB, 0x30ED }, /* kana_RO ロ KATAKANA LETTER RO */ | |
259 | + {0x04DC, 0x30EF }, /* kana_WA ワ KATAKANA LETTER WA */ | |
260 | + {0x04DD, 0x30F3 }, /* kana_N ン KATAKANA LETTER N */ | |
261 | + {0x04DE, 0x309B }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ | |
262 | + {0x04DF, 0x309C }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ | |
263 | + {0x05AC, 0x060C }, /* Arabic_comma ، ARABIC COMMA */ | |
264 | + {0x05BB, 0x061B }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ | |
265 | + {0x05BF, 0x061F }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ | |
266 | + {0x05C1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ | |
267 | + {0x05C2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ | |
268 | + {0x05C3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ | |
269 | + {0x05C4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ | |
270 | + {0x05C5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ | |
271 | + {0x05C6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ | |
272 | + {0x05C7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ | |
273 | + {0x05C8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ | |
274 | + {0x05C9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ | |
275 | + {0x05CA, 0x062A }, /* Arabic_teh ت ARABIC LETTER TEH */ | |
276 | + {0x05CB, 0x062B }, /* Arabic_theh ث ARABIC LETTER THEH */ | |
277 | + {0x05CC, 0x062C }, /* Arabic_jeem ج ARABIC LETTER JEEM */ | |
278 | + {0x05CD, 0x062D }, /* Arabic_hah ح ARABIC LETTER HAH */ | |
279 | + {0x05CE, 0x062E }, /* Arabic_khah خ ARABIC LETTER KHAH */ | |
280 | + {0x05CF, 0x062F }, /* Arabic_dal د ARABIC LETTER DAL */ | |
281 | + {0x05D0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ | |
282 | + {0x05D1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ | |
283 | + {0x05D2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ | |
284 | + {0x05D3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ | |
285 | + {0x05D4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ | |
286 | + {0x05D5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ | |
287 | + {0x05D6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ | |
288 | + {0x05D7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ | |
289 | + {0x05D8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ | |
290 | + {0x05D9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ | |
291 | + {0x05DA, 0x063A }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ | |
292 | + {0x05E0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ | |
293 | + {0x05E1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ | |
294 | + {0x05E2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ | |
295 | + {0x05E3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ | |
296 | + {0x05E4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ | |
297 | + {0x05E5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ | |
298 | + {0x05E6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ | |
299 | + {0x05E7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ | |
300 | + {0x05E8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ | |
301 | + {0x05E9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ | |
302 | + {0x05EA, 0x064A }, /* Arabic_yeh ي ARABIC LETTER YEH */ | |
303 | + {0x05EB, 0x064B }, /* Arabic_fathatan ً ARABIC FATHATAN */ | |
304 | + {0x05EC, 0x064C }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ | |
305 | + {0x05ED, 0x064D }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ | |
306 | + {0x05EE, 0x064E }, /* Arabic_fatha َ ARABIC FATHA */ | |
307 | + {0x05EF, 0x064F }, /* Arabic_damma ُ ARABIC DAMMA */ | |
308 | + {0x05F0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ | |
309 | + {0x05F1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ | |
310 | + {0x05F2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ | |
311 | + {0x06A1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ | |
312 | + {0x06A2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ | |
313 | + {0x06A3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ | |
314 | + {0x06A4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ | |
315 | + {0x06A5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ | |
316 | + {0x06A6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ | |
317 | + {0x06A7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ | |
318 | + {0x06A8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ | |
319 | + {0x06A9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ | |
320 | + {0x06AA, 0x045A }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ | |
321 | + {0x06AB, 0x045B }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ | |
322 | + {0x06AC, 0x045C }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ | |
323 | + {0x06AD, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */ | |
324 | + {0x06AE, 0x045E }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ | |
325 | + {0x06AF, 0x045F }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ | |
326 | + {0x06B0, 0x2116 }, /* numerosign № NUMERO SIGN */ | |
327 | + {0x06B1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ | |
328 | + {0x06B2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ | |
329 | + {0x06B3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ | |
330 | + {0x06B4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ | |
331 | + {0x06B5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ | |
332 | + {0x06B6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ | |
333 | + {0x06B7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ | |
334 | + {0x06B8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ | |
335 | + {0x06B9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ | |
336 | + {0x06BA, 0x040A }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ | |
337 | + {0x06BB, 0x040B }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ | |
338 | + {0x06BC, 0x040C }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ | |
339 | + {0x06BD, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ | |
340 | + {0x06BE, 0x040E }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ | |
341 | + {0x06BF, 0x040F }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ | |
342 | + {0x06C0, 0x044E }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ | |
343 | + {0x06C1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ | |
344 | + {0x06C2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ | |
345 | + {0x06C3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ | |
346 | + {0x06C4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ | |
347 | + {0x06C5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ | |
348 | + {0x06C6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ | |
349 | + {0x06C7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ | |
350 | + {0x06C8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ | |
351 | + {0x06C9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ | |
352 | + {0x06CA, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ | |
353 | + {0x06CB, 0x043A }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ | |
354 | + {0x06CC, 0x043B }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ | |
355 | + {0x06CD, 0x043C }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ | |
356 | + {0x06CE, 0x043D }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ | |
357 | + {0x06CF, 0x043E }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ | |
358 | + {0x06D0, 0x043F }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ | |
359 | + {0x06D1, 0x044F }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ | |
360 | + {0x06D2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ | |
361 | + {0x06D3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ | |
362 | + {0x06D4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ | |
363 | + {0x06D5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ | |
364 | + {0x06D6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ | |
365 | + {0x06D7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ | |
366 | + {0x06D8, 0x044C }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ | |
367 | + {0x06D9, 0x044B }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ | |
368 | + {0x06DA, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ | |
369 | + {0x06DB, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ | |
370 | + {0x06DC, 0x044D }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ | |
371 | + {0x06DD, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ | |
372 | + {0x06DE, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ | |
373 | + {0x06DF, 0x044A }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ | |
374 | + {0x06E0, 0x042E }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ | |
375 | + {0x06E1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ | |
376 | + {0x06E2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ | |
377 | + {0x06E3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ | |
378 | + {0x06E4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ | |
379 | + {0x06E5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ | |
380 | + {0x06E6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ | |
381 | + {0x06E7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ | |
382 | + {0x06E8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ | |
383 | + {0x06E9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ | |
384 | + {0x06EA, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ | |
385 | + {0x06EB, 0x041A }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ | |
386 | + {0x06EC, 0x041B }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ | |
387 | + {0x06ED, 0x041C }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ | |
388 | + {0x06EE, 0x041D }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ | |
389 | + {0x06EF, 0x041E }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ | |
390 | + {0x06F0, 0x041F }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ | |
391 | + {0x06F1, 0x042F }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ | |
392 | + {0x06F2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ | |
393 | + {0x06F3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ | |
394 | + {0x06F4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ | |
395 | + {0x06F5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ | |
396 | + {0x06F6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ | |
397 | + {0x06F7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ | |
398 | + {0x06F8, 0x042C }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ | |
399 | + {0x06F9, 0x042B }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ | |
400 | + {0x06FA, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ | |
401 | + {0x06FB, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ | |
402 | + {0x06FC, 0x042D }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ | |
403 | + {0x06FD, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ | |
404 | + {0x06FE, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ | |
405 | + {0x06FF, 0x042A }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ | |
406 | + {0x07A1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ | |
407 | + {0x07A2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ | |
408 | + {0x07A3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ | |
409 | + {0x07A4, 0x038A }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ | |
410 | + {0x07A5, 0x03AA }, /* Greek_IOTAdiaeresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ | |
411 | + {0x07A7, 0x038C }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ | |
412 | + {0x07A8, 0x038E }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ | |
413 | + {0x07A9, 0x03AB }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ | |
414 | + {0x07AB, 0x038F }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ | |
415 | + {0x07AE, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ | |
416 | + {0x07AF, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ | |
417 | + {0x07B1, 0x03AC }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ | |
418 | + {0x07B2, 0x03AD }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ | |
419 | + {0x07B3, 0x03AE }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ | |
420 | + {0x07B4, 0x03AF }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ | |
421 | + {0x07B5, 0x03CA }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ | |
422 | + {0x07B6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ | |
423 | + {0x07B7, 0x03CC }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ | |
424 | + {0x07B8, 0x03CD }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ | |
425 | + {0x07B9, 0x03CB }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ | |
426 | + {0x07BA, 0x03B0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ | |
427 | + {0x07BB, 0x03CE }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ | |
428 | + {0x07C1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ | |
429 | + {0x07C2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ | |
430 | + {0x07C3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ | |
431 | + {0x07C4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ | |
432 | + {0x07C5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ | |
433 | + {0x07C6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ | |
434 | + {0x07C7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ | |
435 | + {0x07C8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ | |
436 | + {0x07C9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ | |
437 | + {0x07CA, 0x039A }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ | |
438 | + {0x07CB, 0x039B }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ | |
439 | + {0x07CC, 0x039C }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ | |
440 | + {0x07CD, 0x039D }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ | |
441 | + {0x07CE, 0x039E }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ | |
442 | + {0x07CF, 0x039F }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ | |
443 | + {0x07D0, 0x03A0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ | |
444 | + {0x07D1, 0x03A1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ | |
445 | + {0x07D2, 0x03A3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ | |
446 | + {0x07D4, 0x03A4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ | |
447 | + {0x07D5, 0x03A5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ | |
448 | + {0x07D6, 0x03A6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ | |
449 | + {0x07D7, 0x03A7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ | |
450 | + {0x07D8, 0x03A8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ | |
451 | + {0x07D9, 0x03A9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ | |
452 | + {0x07E1, 0x03B1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ | |
453 | + {0x07E2, 0x03B2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ | |
454 | + {0x07E3, 0x03B3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ | |
455 | + {0x07E4, 0x03B4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ | |
456 | + {0x07E5, 0x03B5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ | |
457 | + {0x07E6, 0x03B6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ | |
458 | + {0x07E7, 0x03B7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ | |
459 | + {0x07E8, 0x03B8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ | |
460 | + {0x07E9, 0x03B9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ | |
461 | + {0x07EA, 0x03BA }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ | |
462 | + {0x07EB, 0x03BB }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ | |
463 | + {0x07EC, 0x03BC }, /* Greek_mu μ GREEK SMALL LETTER MU */ | |
464 | + {0x07ED, 0x03BD }, /* Greek_nu ν GREEK SMALL LETTER NU */ | |
465 | + {0x07EE, 0x03BE }, /* Greek_xi ξ GREEK SMALL LETTER XI */ | |
466 | + {0x07EF, 0x03BF }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ | |
467 | + {0x07F0, 0x03C0 }, /* Greek_pi π GREEK SMALL LETTER PI */ | |
468 | + {0x07F1, 0x03C1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ | |
469 | + {0x07F2, 0x03C3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ | |
470 | + {0x07F3, 0x03C2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ | |
471 | + {0x07F4, 0x03C4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ | |
472 | + {0x07F5, 0x03C5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ | |
473 | + {0x07F6, 0x03C6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ | |
474 | + {0x07F7, 0x03C7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ | |
475 | + {0x07F8, 0x03C8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ | |
476 | + {0x07F9, 0x03C9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ | |
477 | + {0x08A1, 0x23B7 }, /* leftradical ⎷ ??? */ | |
478 | + {0x08A2, 0x250C }, /* topleftradical ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ | |
479 | + {0x08A3, 0x2500 }, /* horizconnector ─ BOX DRAWINGS LIGHT HORIZONTAL */ | |
480 | + {0x08A4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ | |
481 | + {0x08A5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ | |
482 | + {0x08A6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ | |
483 | + {0x08A7, 0x23A1 }, /* topleftsqbracket ⎡ ??? */ | |
484 | + {0x08A8, 0x23A3 }, /* botleftsqbracket ⎣ ??? */ | |
485 | + {0x08A9, 0x23A4 }, /* toprightsqbracket ⎤ ??? */ | |
486 | + {0x08AA, 0x23A6 }, /* botrightsqbracket ⎦ ??? */ | |
487 | + {0x08AB, 0x239B }, /* topleftparens ⎛ ??? */ | |
488 | + {0x08AC, 0x239D }, /* botleftparens ⎝ ??? */ | |
489 | + {0x08AD, 0x239E }, /* toprightparens ⎞ ??? */ | |
490 | + {0x08AE, 0x23A0 }, /* botrightparens ⎠ ??? */ | |
491 | + {0x08AF, 0x23A8 }, /* leftmiddlecurlybrace ⎨ ??? */ | |
492 | + {0x08B0, 0x23AC }, /* rightmiddlecurlybrace ⎬ ??? */ | |
493 | + /* 0X08B1 topleftsummation ? ??? */ | |
494 | + /* 0X08B2 botleftsummation ? ??? */ | |
495 | + /* 0X08B3 topvertsummationconnector ? ??? */ | |
496 | + /* 0X08B4 botvertsummationconnector ? ??? */ | |
497 | + /* 0X08B5 toprightsummation ? ??? */ | |
498 | + /* 0X08B6 botrightsummation ? ??? */ | |
499 | + /* 0X08B7 rightmiddlesummation ? ??? */ | |
500 | + {0x08BC, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ | |
501 | + {0x08BD, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ | |
502 | + {0x08BE, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ | |
503 | + {0x08BF, 0x222B }, /* integral ∫ INTEGRAL */ | |
504 | + {0x08C0, 0x2234 }, /* therefore ∴ THEREFORE */ | |
505 | + {0x08C1, 0x221D }, /* variation ∝ PROPORTIONAL TO */ | |
506 | + {0x08C2, 0x221E }, /* infinity ∞ INFINITY */ | |
507 | + {0x08C5, 0x2207 }, /* nabla ∇ NABLA */ | |
508 | + {0x08C8, 0x223C }, /* approximate ∼ TILDE OPERATOR */ | |
509 | + {0x08C9, 0x2243 }, /* similarequal ≃ ASYMPTOTICALLY EQUAL TO */ | |
510 | + {0x08CD, 0x21D4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ | |
511 | + {0x08CE, 0x21D2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ | |
512 | + {0x08CF, 0x2261 }, /* identical ≡ IDENTICAL TO */ | |
513 | + {0x08D6, 0x221A }, /* radical √ SQUARE ROOT */ | |
514 | + {0x08DA, 0x2282 }, /* includedin ⊂ SUBSET OF */ | |
515 | + {0x08DB, 0x2283 }, /* includes ⊃ SUPERSET OF */ | |
516 | + {0x08DC, 0x2229 }, /* intersection ∩ INTERSECTION */ | |
517 | + {0x08DD, 0x222A }, /* union ∪ UNION */ | |
518 | + {0x08DE, 0x2227 }, /* logicaland ∧ LOGICAL AND */ | |
519 | + {0x08DF, 0x2228 }, /* logicalor ∨ LOGICAL OR */ | |
520 | + {0x08EF, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ | |
521 | + {0x08F6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ | |
522 | + {0x08FB, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ | |
523 | + {0x08FC, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ | |
524 | + {0x08FD, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ | |
525 | + {0x08FE, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ | |
526 | +/* 0X09DF blank ? ??? */ | |
527 | + {0x09E0, 0x25C6 }, /* soliddiamond ◆ BLACK DIAMOND */ | |
528 | + {0x09E1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ | |
529 | + {0x09E2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ | |
530 | + {0x09E3, 0x240C }, /* ff ␌ SYMBOL FOR FORM FEED */ | |
531 | + {0x09E4, 0x240D }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ | |
532 | + {0x09E5, 0x240A }, /* lf ␊ SYMBOL FOR LINE FEED */ | |
533 | + {0x09E8, 0x2424 }, /* nl  SYMBOL FOR NEWLINE */ | |
534 | + {0x09E9, 0x240B }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ | |
535 | + {0x09EA, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ | |
536 | + {0x09EB, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ | |
537 | + {0x09EC, 0x250C }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ | |
538 | + {0x09ED, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ | |
539 | + {0x09EE, 0x253C }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ | |
540 | + {0x09EF, 0x23BA }, /* horizlinescan1 ⎺ HORIZONTAL SCAN LINE-1 (Unicode 3.2 draft) */ | |
541 | + {0x09F0, 0x23BB }, /* horizlinescan3 ⎻ HORIZONTAL SCAN LINE-3 (Unicode 3.2 draft) */ | |
542 | + {0x09F1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ | |
543 | + {0x09F2, 0x23BC }, /* horizlinescan7 ⎼ HORIZONTAL SCAN LINE-7 (Unicode 3.2 draft) */ | |
544 | + {0x09F3, 0x23BD }, /* horizlinescan9 ⎽ HORIZONTAL SCAN LINE-9 (Unicode 3.2 draft) */ | |
545 | + {0x09F4, 0x251C }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ | |
546 | + {0x09F5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ | |
547 | + {0x09F6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ | |
548 | + {0x09F7, 0x252C }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ | |
549 | + {0x09F8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ | |
550 | + {0x0AA1, 0x2003 }, /* emspace EM SPACE */ | |
551 | + {0x0AA2, 0x2002 }, /* enspace EN SPACE */ | |
552 | + {0x0AA3, 0x2004 }, /* em3space THREE-PER-EM SPACE */ | |
553 | + {0x0AA4, 0x2005 }, /* em4space FOUR-PER-EM SPACE */ | |
554 | + {0x0AA5, 0x2007 }, /* digitspace FIGURE SPACE */ | |
555 | + {0x0AA6, 0x2008 }, /* punctspace PUNCTUATION SPACE */ | |
556 | + {0x0AA7, 0x2009 }, /* thinspace THIN SPACE */ | |
557 | + {0x0AA8, 0x200A }, /* hairspace HAIR SPACE */ | |
558 | + {0x0AA9, 0x2014 }, /* emdash — EM DASH */ | |
559 | + {0x0AAA, 0x2013 }, /* endash – EN DASH */ | |
560 | + {0x0AAC, 0x2423 }, /* signifblank ␣ OPEN BOX */ | |
561 | + {0x0AAE, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ | |
562 | + {0x0AAF, 0x2025 }, /* doubbaselinedot ‥ TWO DOT LEADER */ | |
563 | + {0x0AB0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ | |
564 | + {0x0AB1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ | |
565 | + {0x0AB2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ | |
566 | + {0x0AB3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ | |
567 | + {0x0AB4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ | |
568 | + {0x0AB5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ | |
569 | + {0x0AB6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ | |
570 | + {0x0AB7, 0x215A }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ | |
571 | + {0x0AB8, 0x2105 }, /* careof ℅ CARE OF */ | |
572 | + {0x0ABB, 0x2012 }, /* figdash ‒ FIGURE DASH */ | |
573 | + {0x0ABC, 0x27E8 }, /* leftanglebracket ⟨ MATHEMATICAL LEFT ANGLE BRACKET */ | |
574 | + {0x0ABD, 0x002E }, /* decimalpoint . FULL STOP */ | |
575 | + {0x0ABE, 0x27E9 }, /* rightanglebracket ⟩ MATHEMATICAL RIGHT ANGLE BRACKET */ | |
576 | + /* 0X0ABF marker ? ??? */ | |
577 | + {0x0AC3, 0x215B }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ | |
578 | + {0x0AC4, 0x215C }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ | |
579 | + {0x0AC5, 0x215D }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ | |
580 | + {0x0AC6, 0x215E }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ | |
581 | + {0x0AC9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ | |
582 | + {0x0ACA, 0x2613 }, /* signaturemark ☓ SALTIRE */ | |
583 | + /* 0X0ACB trademarkincircle ? ??? */ | |
584 | + {0x0ACC, 0x25C1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ | |
585 | + {0x0ACD, 0x25B7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ | |
586 | + {0x0ACE, 0x25CB }, /* emopencircle ○ WHITE CIRCLE */ | |
587 | + {0x0ACF, 0x25AF }, /* emopenrectangle ▯ WHITE VERTICAL RECTANGLE */ | |
588 | + {0x0AD0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ | |
589 | + {0x0AD1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ | |
590 | + {0x0AD2, 0x201C }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ | |
591 | + {0x0AD3, 0x201D }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ | |
592 | + {0x0AD4, 0x211E }, /* prescription ℞ PRESCRIPTION TAKE */ | |
593 | + {0x0AD5, 0x2030 }, /* permille ‰ PER MILLE SIGN */ | |
594 | + {0x0AD6, 0x2032 }, /* minutes ′ PRIME */ | |
595 | + {0x0AD7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ | |
596 | + {0x0AD9, 0x271D }, /* latincross ✝ LATIN CROSS */ | |
597 | + /* 0X0ADA hexagram ? ??? */ | |
598 | + {0x0ADB, 0x25AC }, /* filledrectbullet ▬ BLACK RECTANGLE */ | |
599 | + {0x0ADC, 0x25C0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ | |
600 | + {0x0ADD, 0x25B6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ | |
601 | + {0x0ADE, 0x25CF }, /* emfilledcircle ● BLACK CIRCLE */ | |
602 | + {0x0ADF, 0x25AE }, /* emfilledrect ▮ BLACK VERTICAL RECTANGLE */ | |
603 | + {0x0AE0, 0x25E6 }, /* enopencircbullet ◦ WHITE BULLET */ | |
604 | + {0x0AE1, 0x25AB }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ | |
605 | + {0x0AE2, 0x25AD }, /* openrectbullet ▭ WHITE RECTANGLE */ | |
606 | + {0x0AE3, 0x25B3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ | |
607 | + {0x0AE4, 0x25BD }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ | |
608 | + {0x0AE5, 0x2606 }, /* openstar ☆ WHITE STAR */ | |
609 | + {0x0AE6, 0x2022 }, /* enfilledcircbullet • BULLET */ | |
610 | + {0x0AE7, 0x25AA }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ | |
611 | + {0x0AE8, 0x25B2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ | |
612 | + {0x0AE9, 0x25BC }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ | |
613 | + {0x0AEA, 0x261C }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ | |
614 | + {0x0AEB, 0x261E }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ | |
615 | + {0x0AEC, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ | |
616 | + {0x0AED, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ | |
617 | + {0x0AEE, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ | |
618 | + {0x0AF0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ | |
619 | + {0x0AF1, 0x2020 }, /* dagger † DAGGER */ | |
620 | + {0x0AF2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ | |
621 | + {0x0AF3, 0x2713 }, /* checkmark ✓ CHECK MARK */ | |
622 | + {0x0AF4, 0x2717 }, /* ballotcross ✗ BALLOT X */ | |
623 | + {0x0AF5, 0x266F }, /* musicalsharp ♯ MUSIC SHARP SIGN */ | |
624 | + {0x0AF6, 0x266D }, /* musicalflat ♭ MUSIC FLAT SIGN */ | |
625 | + {0x0AF7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ | |
626 | + {0x0AF8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ | |
627 | + {0x0AF9, 0x260E }, /* telephone ☎ BLACK TELEPHONE */ | |
628 | + {0x0AFA, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ | |
629 | + {0x0AFB, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ | |
630 | + {0x0AFC, 0x2038 }, /* caret ‸ CARET */ | |
631 | + {0x0AFD, 0x201A }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ | |
632 | + {0x0AFE, 0x201E }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ | |
633 | + /* 0X0AFF cursor ? ??? */ | |
634 | + {0x0BA3, 0x003C }, /* leftcaret < LESS-THAN SIGN */ | |
635 | + {0x0BA6, 0x003E }, /* rightcaret > GREATER-THAN SIGN */ | |
636 | + {0x0BA8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ | |
637 | + {0x0BA9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ | |
638 | + {0x0BC0, 0x00AF }, /* overbar ¯ MACRON */ | |
639 | + {0x0BC2, 0x22A4 }, /* downtack ⊤ DOWN TACK */ | |
640 | + {0x0BC3, 0x2229 }, /* upshoe ∩ INTERSECTION */ | |
641 | + {0x0BC4, 0x230A }, /* downstile ⌊ LEFT FLOOR */ | |
642 | + {0x0BC6, 0x005F }, /* underbar _ LOW LINE */ | |
643 | + {0x0BCA, 0x2218 }, /* jot ∘ RING OPERATOR */ | |
644 | + {0x0BCC, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ | |
645 | + {0x0BCE, 0x22A5 }, /* uptack ⊥ UP TACK */ | |
646 | + {0x0BCF, 0x25CB }, /* circle ○ WHITE CIRCLE */ | |
647 | + {0x0BD3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ | |
648 | + {0x0BD6, 0x222A }, /* downshoe ∪ UNION */ | |
649 | + {0x0BD8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ | |
650 | + {0x0BDA, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ | |
651 | + {0x0BDC, 0x22A3 }, /* lefttack ⊣ LEFT TACK */ | |
652 | + {0x0BFC, 0x22A2 }, /* righttack ⊢ RIGHT TACK */ | |
653 | + {0x0CDF, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ | |
654 | + {0x0CE0, 0x05D0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ | |
655 | + {0x0CE1, 0x05D1 }, /* hebrew_bet ב HEBREW LETTER BET */ | |
656 | + {0x0CE2, 0x05D2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ | |
657 | + {0x0CE3, 0x05D3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ | |
658 | + {0x0CE4, 0x05D4 }, /* hebrew_he ה HEBREW LETTER HE */ | |
659 | + {0x0CE5, 0x05D5 }, /* hebrew_waw ו HEBREW LETTER VAV */ | |
660 | + {0x0CE6, 0x05D6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ | |
661 | + {0x0CE7, 0x05D7 }, /* hebrew_chet ח HEBREW LETTER HET */ | |
662 | + {0x0CE8, 0x05D8 }, /* hebrew_tet ט HEBREW LETTER TET */ | |
663 | + {0x0CE9, 0x05D9 }, /* hebrew_yod י HEBREW LETTER YOD */ | |
664 | + {0x0CEA, 0x05DA }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ | |
665 | + {0x0CEB, 0x05DB }, /* hebrew_kaph כ HEBREW LETTER KAF */ | |
666 | + {0x0CEC, 0x05DC }, /* hebrew_lamed ל HEBREW LETTER LAMED */ | |
667 | + {0x0CED, 0x05DD }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ | |
668 | + {0x0CEE, 0x05DE }, /* hebrew_mem מ HEBREW LETTER MEM */ | |
669 | + {0x0CEF, 0x05DF }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ | |
670 | + {0x0CF0, 0x05E0 }, /* hebrew_nun נ HEBREW LETTER NUN */ | |
671 | + {0x0CF1, 0x05E1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ | |
672 | + {0x0CF2, 0x05E2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ | |
673 | + {0x0CF3, 0x05E3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ | |
674 | + {0x0CF4, 0x05E4 }, /* hebrew_pe פ HEBREW LETTER PE */ | |
675 | + {0x0CF5, 0x05E5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ | |
676 | + {0x0CF6, 0x05E6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ | |
677 | + {0x0CF7, 0x05E7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ | |
678 | + {0x0CF8, 0x05E8 }, /* hebrew_resh ר HEBREW LETTER RESH */ | |
679 | + {0x0CF9, 0x05E9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ | |
680 | + {0x0CFA, 0x05EA }, /* hebrew_taw ת HEBREW LETTER TAV */ | |
681 | + {0x0DA1, 0x0E01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ | |
682 | + {0x0DA2, 0x0E02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ | |
683 | + {0x0DA3, 0x0E03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ | |
684 | + {0x0DA4, 0x0E04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ | |
685 | + {0x0DA5, 0x0E05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ | |
686 | + {0x0DA6, 0x0E06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ | |
687 | + {0x0DA7, 0x0E07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ | |
688 | + {0x0DA8, 0x0E08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ | |
689 | + {0x0DA9, 0x0E09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ | |
690 | + {0x0DAA, 0x0E0A }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ | |
691 | + {0x0DAB, 0x0E0B }, /* Thai_soso ซ THAI CHARACTER SO SO */ | |
692 | + {0x0DAC, 0x0E0C }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ | |
693 | + {0x0DAD, 0x0E0D }, /* Thai_yoying ญ THAI CHARACTER YO YING */ | |
694 | + {0x0DAE, 0x0E0E }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ | |
695 | + {0x0DAF, 0x0E0F }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ | |
696 | + {0x0DB0, 0x0E10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ | |
697 | + {0x0DB1, 0x0E11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ | |
698 | + {0x0DB2, 0x0E12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ | |
699 | + {0x0DB3, 0x0E13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ | |
700 | + {0x0DB4, 0x0E14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ | |
701 | + {0x0DB5, 0x0E15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ | |
702 | + {0x0DB6, 0x0E16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ | |
703 | + {0x0DB7, 0x0E17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ | |
704 | + {0x0DB8, 0x0E18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ | |
705 | + {0x0DB9, 0x0E19 }, /* Thai_nonu น THAI CHARACTER NO NU */ | |
706 | + {0x0DBA, 0x0E1A }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ | |
707 | + {0x0DBB, 0x0E1B }, /* Thai_popla ป THAI CHARACTER PO PLA */ | |
708 | + {0x0DBC, 0x0E1C }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ | |
709 | + {0x0DBD, 0x0E1D }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ | |
710 | + {0x0DBE, 0x0E1E }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ | |
711 | + {0x0DBF, 0x0E1F }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ | |
712 | + {0x0DC0, 0x0E20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ | |
713 | + {0x0DC1, 0x0E21 }, /* Thai_moma ม THAI CHARACTER MO MA */ | |
714 | + {0x0DC2, 0x0E22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ | |
715 | + {0x0DC3, 0x0E23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ | |
716 | + {0x0DC4, 0x0E24 }, /* Thai_ru ฤ THAI CHARACTER RU */ | |
717 | + {0x0DC5, 0x0E25 }, /* Thai_loling ล THAI CHARACTER LO LING */ | |
718 | + {0x0DC6, 0x0E26 }, /* Thai_lu ฦ THAI CHARACTER LU */ | |
719 | + {0x0DC7, 0x0E27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ | |
720 | + {0x0DC8, 0x0E28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ | |
721 | + {0x0DC9, 0x0E29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ | |
722 | + {0x0DCA, 0x0E2A }, /* Thai_sosua ส THAI CHARACTER SO SUA */ | |
723 | + {0x0DCB, 0x0E2B }, /* Thai_hohip ห THAI CHARACTER HO HIP */ | |
724 | + {0x0DCC, 0x0E2C }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ | |
725 | + {0x0DCD, 0x0E2D }, /* Thai_oang อ THAI CHARACTER O ANG */ | |
726 | + {0x0DCE, 0x0E2E }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ | |
727 | + {0x0DCF, 0x0E2F }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ | |
728 | + {0x0DD0, 0x0E30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ | |
729 | + {0x0DD1, 0x0E31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ | |
730 | + {0x0DD2, 0x0E32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ | |
731 | + {0x0DD3, 0x0E33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ | |
732 | + {0x0DD4, 0x0E34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ | |
733 | + {0x0DD5, 0x0E35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ | |
734 | + {0x0DD6, 0x0E36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ | |
735 | + {0x0DD7, 0x0E37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ | |
736 | + {0x0DD8, 0x0E38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ | |
737 | + {0x0DD9, 0x0E39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ | |
738 | + {0x0DDA, 0x0E3A }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ | |
739 | + {0x0DDE, 0x0E3E }, /* Thai_maihanakat_maitho ??? */ | |
740 | + {0x0DDF, 0x0E3F }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ | |
741 | + {0x0DE0, 0x0E40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ | |
742 | + {0x0DE1, 0x0E41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ | |
743 | + {0x0DE2, 0x0E42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ | |
744 | + {0x0DE3, 0x0E43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ | |
745 | + {0x0DE4, 0x0E44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ | |
746 | + {0x0DE5, 0x0E45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ | |
747 | + {0x0DE6, 0x0E46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ | |
748 | + {0x0DE7, 0x0E47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ | |
749 | + {0x0DE8, 0x0E48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ | |
750 | + {0x0DE9, 0x0E49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ | |
751 | + {0x0DEA, 0x0E4A }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ | |
752 | + {0x0DEB, 0x0E4B }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ | |
753 | + {0x0DEC, 0x0E4C }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ | |
754 | + {0x0DED, 0x0E4D }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ | |
755 | + {0x0DF0, 0x0E50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ | |
756 | + {0x0DF1, 0x0E51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ | |
757 | + {0x0DF2, 0x0E52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ | |
758 | + {0x0DF3, 0x0E53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ | |
759 | + {0x0DF4, 0x0E54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ | |
760 | + {0x0DF5, 0x0E55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ | |
761 | + {0x0DF6, 0x0E56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ | |
762 | + {0x0DF7, 0x0E57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ | |
763 | + {0x0DF8, 0x0E58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ | |
764 | + {0x0DF9, 0x0E59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ | |
765 | + {0x0EA1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ | |
766 | + {0x0EA2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ | |
767 | + {0x0EA3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ | |
768 | + {0x0EA4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ | |
769 | + {0x0EA5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ | |
770 | + {0x0EA6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ | |
771 | + {0x0EA7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ | |
772 | + {0x0EA8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ | |
773 | + {0x0EA9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ | |
774 | + {0x0EAA, 0x313A }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ | |
775 | + {0x0EAB, 0x313B }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ | |
776 | + {0x0EAC, 0x313C }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ | |
777 | + {0x0EAD, 0x313D }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ | |
778 | + {0x0EAE, 0x313E }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ | |
779 | + {0x0EAF, 0x313F }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ | |
780 | + {0x0EB0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ | |
781 | + {0x0EB1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ | |
782 | + {0x0EB2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ | |
783 | + {0x0EB3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ | |
784 | + {0x0EB4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ | |
785 | + {0x0EB5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ | |
786 | + {0x0EB6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ | |
787 | + {0x0EB7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ | |
788 | + {0x0EB8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ | |
789 | + {0x0EB9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ | |
790 | + {0x0EBA, 0x314A }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ | |
791 | + {0x0EBB, 0x314B }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ | |
792 | + {0x0EBC, 0x314C }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ | |
793 | + {0x0EBD, 0x314D }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ | |
794 | + {0x0EBE, 0x314E }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ | |
795 | + {0x0EBF, 0x314F }, /* Hangul_A ㅏ HANGUL LETTER A */ | |
796 | + {0x0EC0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ | |
797 | + {0x0EC1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ | |
798 | + {0x0EC2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ | |
799 | + {0x0EC3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ | |
800 | + {0x0EC4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ | |
801 | + {0x0EC5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ | |
802 | + {0x0EC6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ | |
803 | + {0x0EC7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ | |
804 | + {0x0EC8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ | |
805 | + {0x0EC9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ | |
806 | + {0x0ECA, 0x315A }, /* Hangul_OE ㅚ HANGUL LETTER OE */ | |
807 | + {0x0ECB, 0x315B }, /* Hangul_YO ㅛ HANGUL LETTER YO */ | |
808 | + {0x0ECC, 0x315C }, /* Hangul_U ㅜ HANGUL LETTER U */ | |
809 | + {0x0ECD, 0x315D }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ | |
810 | + {0x0ECE, 0x315E }, /* Hangul_WE ㅞ HANGUL LETTER WE */ | |
811 | + {0x0ECF, 0x315F }, /* Hangul_WI ㅟ HANGUL LETTER WI */ | |
812 | + {0x0ED0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ | |
813 | + {0x0ED1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ | |
814 | + {0x0ED2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ | |
815 | + {0x0ED3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ | |
816 | + {0x0ED4, 0x11A8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ | |
817 | + {0x0ED5, 0x11A9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ | |
818 | + {0x0ED6, 0x11AA }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ | |
819 | + {0x0ED7, 0x11AB }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ | |
820 | + {0x0ED8, 0x11AC }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ | |
821 | + {0x0ED9, 0x11AD }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ | |
822 | + {0x0EDA, 0x11AE }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ | |
823 | + {0x0EDB, 0x11AF }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ | |
824 | + {0x0EDC, 0x11B0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ | |
825 | + {0x0EDD, 0x11B1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ | |
826 | + {0x0EDE, 0x11B2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ | |
827 | + {0x0EDF, 0x11B3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ | |
828 | + {0x0EE0, 0x11B4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ | |
829 | + {0x0EE1, 0x11B5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ | |
830 | + {0x0EE2, 0x11B6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ | |
831 | + {0x0EE3, 0x11B7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ | |
832 | + {0x0EE4, 0x11B8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ | |
833 | + {0x0EE5, 0x11B9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ | |
834 | + {0x0EE6, 0x11BA }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ | |
835 | + {0x0EE7, 0x11BB }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ | |
836 | + {0x0EE8, 0x11BC }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ | |
837 | + {0x0EE9, 0x11BD }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ | |
838 | + {0x0EEA, 0x11BE }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ | |
839 | + {0x0EEB, 0x11BF }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ | |
840 | + {0x0EEC, 0x11C0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ | |
841 | + {0x0EED, 0x11C1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ | |
842 | + {0x0EEE, 0x11C2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ | |
843 | + {0x0EEF, 0x316D }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ | |
844 | + {0x0EF0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ | |
845 | + {0x0EF1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ | |
846 | + {0x0EF2, 0x317F }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ | |
847 | + {0x0EF3, 0x3181 }, /* Hangul_KkogjiDalrinIeung ㆁ HANGUL LETTER YESIEUNG */ | |
848 | + {0x0EF4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ | |
849 | + {0x0EF5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ | |
850 | + {0x0EF6, 0x318D }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ | |
851 | + {0x0EF7, 0x318E }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ | |
852 | + {0x0EF8, 0x11EB }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ | |
853 | + {0x0EF9, 0x11F0 }, /* Hangul_J_KkogjiDalrinIeung ᇰ HANGUL JONGSEONG YESIEUNG */ | |
854 | + {0x0EFA, 0x11F9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ | |
855 | + {0x0EFF, 0x20A9 } /* Korean_Won ₩ WON SIGN */ | |
856 | +#define GLOW_XKB_LAST_KEYSYM 0x0EFF | |
857 | +#if 0 | |
858 | + /* High-table, see below in glow_xkb_bin_search. */ | |
859 | + {0x13BC, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ | |
860 | + {0x13BD, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ | |
861 | + {0x13BE, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ | |
862 | + {0x20AC, 0x20AC } /* EuroSign € EURO SIGN */ | |
863 | +#endif | |
864 | +}; | |
865 | + | |
866 | +#if ((defined __GNUC__) && (__GNUC__ >= 4)) || (defined __clang__) | |
867 | +__attribute__((pure)) | |
868 | +#endif | |
869 | +static unsigned glow_xkb_bin_search(unsigned long keysym_l){ | |
870 | + | |
871 | + unsigned short keysym; | |
872 | + unsigned long first, last, mid; | |
873 | + | |
874 | +#define GLOW_XKB_NUM_CODEPAIRS \ | |
875 | + (sizeof(glow_xkb_keysymtab) / sizeof(*glow_xkb_keysymtab)) | |
876 | + | |
877 | + if(keysym_l > GLOW_XKB_LAST_KEYSYM || keysym_l < GLOW_XKB_FIRST_KEYSYM){ | |
878 | + /* High-table, hardcoded high values. */ | |
879 | + switch(keysym_l){ | |
880 | + case 0x13BC: return 0x0152; | |
881 | + case 0x13BD: return 0x0153; | |
882 | + case 0x13BE: return 0x0178; | |
883 | + case 0x20AC: return 0x20AC; | |
884 | + } | |
885 | + } | |
886 | + else{ | |
887 | + keysym = (unsigned short)keysym_l; | |
888 | + first = 0; | |
889 | + last = GLOW_XKB_NUM_CODEPAIRS - 1; | |
890 | + do{ | |
891 | + mid = (first + last) >> 1; | |
892 | + if(glow_xkb_keysymtab[mid].keysym < keysym) | |
893 | + first = mid + 1; | |
894 | + else if(glow_xkb_keysymtab[mid].keysym > keysym) | |
895 | + last = mid - 1; | |
896 | + else | |
897 | + return glow_xkb_keysymtab[mid].ucs; | |
898 | + }while(last >= first); | |
899 | + } | |
900 | + return 0; | |
901 | +} | |
902 | + | |
903 | +#if ((defined __GNUC__) && (__GNUC__ >= 4)) || (defined __clang__) | |
904 | +__attribute__((pure)) | |
905 | +#endif | |
906 | +static unsigned glow_xkb_keysym_to_utf32(unsigned long keysym){ | |
907 | + /* first check for Latin-1 characters (1:1 mapping) */ | |
908 | + if(keysym < 0x100){ | |
909 | + if((keysym >= 0x0020 && keysym <= 0x007E) || keysym >= 0x00A0) | |
910 | + return keysym; | |
911 | + } | |
912 | + else if((keysym & 0xFFFFFF00) == 0x0000FF00){ | |
913 | + /* Note that this check only works because there are no 0xFF00-prefixed | |
914 | + * keysyms in the table! */ | |
915 | + switch(keysym){ | |
916 | + case XK_KP_Space: | |
917 | + /* patch encoding botch */ | |
918 | + keysym = XK_space; | |
919 | + /* FALLTHROUGH */ | |
920 | +#if ((defined __GNUC__) && (__GNUC__ <= 3)) || (defined __TINYC__) | |
921 | + /* TCC and old GCC actually generate better code for this. | |
922 | + * It's unclear where this changed for GCC, but it's safe to put | |
923 | + * it too high. */ | |
924 | + case XK_BackSpace ... XK_Clear: | |
925 | + case XK_Multiply ... XK_KP_9: | |
926 | +#else | |
927 | + case XK_BackSpace: /* FALLTHROUGH */ | |
928 | + case XK_Tab: /* FALLTHROUGH */ | |
929 | + case XK_Linefeed: /* FALLTHROUGH */ | |
930 | + case XK_Clear: /* FALLTHROUGH */ | |
931 | + case XK_KP_Multiply: /* FALLTHROUGH */ | |
932 | + case XK_KP_Add: /* FALLTHROUGH */ | |
933 | + case XK_KP_Separator: /* FALLTHROUGH */ | |
934 | + case XK_KP_Subtract: /* FALLTHROUGH */ | |
935 | + case XK_KP_Decimal: /* FALLTHROUGH */ | |
936 | + case XK_KP_Divide: /* FALLTHROUGH */ | |
937 | + case XK_KP_0: /* FALLTHROUGH */ | |
938 | + case XK_KP_1: /* FALLTHROUGH */ | |
939 | + case XK_KP_2: /* FALLTHROUGH */ | |
940 | + case XK_KP_3: /* FALLTHROUGH */ | |
941 | + case XK_KP_4: /* FALLTHROUGH */ | |
942 | + case XK_KP_5: /* FALLTHROUGH */ | |
943 | + case XK_KP_6: /* FALLTHROUGH */ | |
944 | + case XK_KP_7: /* FALLTHROUGH */ | |
945 | + case XK_KP_8: /* FALLTHROUGH */ | |
946 | + case XK_KP_9: /* FALLTHROUGH */ | |
947 | +#endif | |
948 | + case XK_Return: /* FALLTHROUGH */ | |
949 | + case XK_Escape: /* FALLTHROUGH */ | |
950 | + case XK_Delete: /* FALLTHROUGH */ | |
951 | + case XK_KP_Tab: /* FALLTHROUGH */ | |
952 | + case XK_KP_Enter: /* FALLTHROUGH */ | |
953 | + case XK_KP_Equal: | |
954 | + return keysym & 0x7F; | |
955 | + } | |
956 | + } | |
957 | + else if (keysym >= 0x01000000 && keysym < 0x01110000){ | |
958 | + /* also check for directly encoded Unicode codepoints */ | |
959 | + /* | |
960 | + * In theory, this is supposed to start from 0x100100, such that the | |
961 | + * ASCII range, which is already covered by 0x00-0xff, can't be encoded | |
962 | + * in two ways. However, changing this after a couple of decades | |
963 | + * probably won't go well, so it stays as it is. | |
964 | + */ | |
965 | + return keysym - 0x01000000; | |
966 | + } | |
967 | + else{ | |
968 | + /* search main table */ | |
969 | + return glow_xkb_bin_search(keysym); | |
970 | + } | |
971 | + return 0; | |
972 | +} | |
973 | + | |
974 | +/* End libxkbcommon code. */ | |
975 | +/******************************************************************************/ | |
976 | + | |
977 | +static int glow_xkb_keysym_to_utf8(unsigned long keysym, char buffer[]){ | |
978 | + unsigned ucs; | |
979 | + ucs = glow_xkb_keysym_to_utf32(keysym); | |
980 | + /* Encode UTF8 */ | |
981 | +# if (((defined __GNUC__) && (__GNUC__ >= 4)) || (defined __clang__)) && ((defined __i386) || (defined __amd64) || (defined __ARMEL__) || (defined __AARCH64EL__)) | |
982 | + /* Optimized for the Latin keyboard on PC or ARM (LE) hardware. */ | |
983 | + if(__builtin_expect(ucs < 0x00000080, 1)){ | |
984 | + /* This will null-terminate the buffer from of the zero high bits. */ | |
985 | + return !(((unsigned*)buffer)[0] = ucs); | |
986 | + } | |
987 | +# else | |
988 | + if(ucs < 0x00000080){ | |
989 | + if(ucs == 0) | |
990 | + return 1; | |
991 | + buffer[0] = ucs; | |
992 | + buffer[1] = 0; | |
993 | + } | |
994 | +# endif | |
995 | + else if(ucs < 0x00000800){ | |
996 | + buffer[0] = 0xC0 | (ucs >> 6); | |
997 | + buffer[1] = 0x80 | (ucs & 0x3F); | |
998 | + buffer[2] = 0; | |
999 | + } | |
1000 | + else if(ucs < 0x00001000){ | |
1001 | + buffer[0] = 0xE0 | (ucs >> 12); | |
1002 | + buffer[1] = 0x80 | ((ucs >> 6) & 0x3F); | |
1003 | + buffer[2] = 0x80 | (ucs & 0x3F); | |
1004 | + buffer[3] = 0; | |
1005 | + } | |
1006 | + else{ | |
1007 | + if(ucs >= 0x00011000) | |
1008 | + return 1; | |
1009 | + buffer[0] = 0xF0 | (ucs >> 18); | |
1010 | + buffer[1] = 0x80 | ((ucs >> 12) & 0x3F); | |
1011 | + buffer[2] = 0x80 | ((ucs >> 6) & 0x3F); | |
1012 | + buffer[3] = 0x80 | (ucs & 0x3F); | |
1013 | + buffer[4] = 0; | |
1014 | + } | |
1015 | + return 0; | |
1016 | +} | |
1017 | + | |
30 | 1018 | #define GLOW_X_EVENT_MASK\ |
31 | 1019 | (StructureNotifyMask\ |
32 | 1020 | |KeyPressMask\ |
@@ -40,10 +1028,10 @@ | ||
40 | 1028 | * X default (which may be different than the env variable depending on the DE), |
41 | 1029 | * and finally we just try 0, 0. |
42 | 1030 | */ |
43 | -static Display *glow_get_display(){ | |
44 | - char *const dpy_env = getenv("DISPLAY"); | |
1031 | +static Display *glow_get_display(void){ | |
1032 | + const char *dpy_env; | |
45 | 1033 | Display *dpy; |
46 | - if((dpy = XOpenDisplay(dpy_env))) | |
1034 | + if((dpy_env = getenv("DISPLAY")) && (dpy = XOpenDisplay(dpy_env))) | |
47 | 1035 | return dpy; |
48 | 1036 | if((dpy = XOpenDisplay(NULL))) |
49 | 1037 | return dpy; |
@@ -274,8 +1262,12 @@ void Glow_FlipScreen(struct Glow_Window *window){ | ||
274 | 1262 | |
275 | 1263 | /******************************************************************************/ |
276 | 1264 | |
277 | -static unsigned glow_get_event(struct Glow_Window *window, | |
278 | - unsigned block, struct Glow_Event *out){ | |
1265 | +static unsigned glow_get_event( | |
1266 | + struct Glow_Window *window, | |
1267 | + unsigned block, | |
1268 | + struct Glow_Event *out){ | |
1269 | + | |
1270 | + KeySym sym; | |
279 | 1271 | glow_get_event_start: |
280 | 1272 | if(block || XPending(window->dpy) > 0){ |
281 | 1273 | XEvent event; |
@@ -285,28 +1277,31 @@ glow_get_event_start: | ||
285 | 1277 | case KeyPress: |
286 | 1278 | press = 1u; |
287 | 1279 | case KeyRelease: |
288 | - { | |
289 | - KeySym sym; | |
290 | - XComposeStatus compose; | |
291 | - XLookupString(&event.xkey, out->value.key, | |
292 | - GLOW_MAX_KEY_NAME_SIZE, &sym, &compose); | |
1280 | +#if (defined XlibSpecificationRelease) && (XlibSpecificationRelease > 5) | |
1281 | + sym = XLookupKeysym(&(event.xkey), 0); | |
1282 | +#else | |
1283 | + sym = XKeycodeToKeysym(window->dpy, event.xkey.keycode, 0); | |
1284 | +#endif | |
293 | 1285 | #define GLOW_KEYSM(SYM, STR) case XK_ ## SYM: strcpy(out->value.key, ("" GLOW_ ## STR)); break; |
294 | - switch(sym){ | |
295 | - GLOW_KEYSM(Escape, ESCAPE); | |
296 | - GLOW_KEYSM(Up, UP_ARROW); | |
297 | - GLOW_KEYSM(Down, DOWN_ARROW); | |
298 | - GLOW_KEYSM(Left, LEFT_ARROW); | |
299 | - GLOW_KEYSM(Right, RIGHT_ARROW); | |
300 | - GLOW_KEYSM(Return, RETURN); | |
301 | - GLOW_KEYSM(Tab, TAB); | |
302 | - | |
303 | - case XK_Control_L: /* FALLTHROUGH */ | |
304 | - GLOW_KEYSM(Control_R, CONTROL); | |
305 | - | |
306 | - case XK_Shift_R: /* FALLTHROUGH */ | |
307 | - GLOW_KEYSM(Shift_L, SHIFT); | |
308 | - } | |
309 | - | |
1286 | + switch(sym){ | |
1287 | + GLOW_KEYSM(Escape, ESCAPE); | |
1288 | + GLOW_KEYSM(Up, UP_ARROW); | |
1289 | + GLOW_KEYSM(Down, DOWN_ARROW); | |
1290 | + GLOW_KEYSM(Left, LEFT_ARROW); | |
1291 | + GLOW_KEYSM(Right, RIGHT_ARROW); | |
1292 | + GLOW_KEYSM(Return, RETURN); | |
1293 | + GLOW_KEYSM(BackSpace, BACKSPACE); | |
1294 | + GLOW_KEYSM(Delete, DELETE); | |
1295 | + GLOW_KEYSM(Tab, TAB); | |
1296 | + | |
1297 | + case XK_Control_L: /* FALLTHROUGH */ | |
1298 | + GLOW_KEYSM(Control_R, CONTROL); | |
1299 | + | |
1300 | + case XK_Shift_R: /* FALLTHROUGH */ | |
1301 | + GLOW_KEYSM(Shift_L, SHIFT); | |
1302 | + default: | |
1303 | + if(glow_xkb_keysym_to_utf8(sym, out->value.key) != 0) | |
1304 | + goto glow_get_event_start; | |
310 | 1305 | } |
311 | 1306 | out->type = press ? |
312 | 1307 | eGlowKeyboardPressed : eGlowKeyboardReleased; |