1 /* Copyright (C) 2000-2012 by George Williams */
2 /*
3  * Redistribution and use in source and binary forms, with or without
4  * modification, are permitted provided that the following conditions are met:
5  *
6  * Redistributions of source code must retain the above copyright notice, this
7  * list of conditions and the following disclaimer.
8  *
9  * Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12  *
13  * The name of the author may not be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 /* This file was generated using the program 'makebuildtables.c' */
29 
30 #include "gdrawP.h"
31 
32 #define	ACUTE		0x0000001
33 #define	GRAVE		0x0000002
34 #define	DIAERESIS	0x0000004
35 #define	CIRCUMFLEX	0x0000008
36 #define	TILDE		0x0000010
37 #define	RING		0x0000020
38 #define	SLASH		0x0000040
39 #define	BREVE		0x0000080
40 #define	CARON		0x0000100
41 #define	DOTABOVE	0x0000200
42 #define	DOTBELOW	0x0000400
43 #define	CEDILLA		0x0000800
44 #define	OGONEK		0x0001000
45 #define	MACRON		0x0002000
46 #define	DBLGRAVE	0x0004000
47 #define	DBLACUTE	0x0008000
48 #define	INVBREVE	0x0010000
49 #define	DIAERESISBELOW	0x0020000
50 #define	CIRCUMFLEXBELOW	0x0040000
51 #define	TILDEBELOW	0x0080000
52 #define	RINGBELOW	0x0100000
53 #define	LINEBELOW	0x0200000
54 #define	HOOKABOVE	0x0400000
55 #define	HORN		0x0800000
56 #define	GREEK		0x8000000
57 
58 #define	ANY		0xfffffff
59 
60 static struct gchr_transform trans_space[] = {
61     { 0, 0, 0x00000a0 },
62     { GREEK, 0, 0x0002001 }
63 };
64 
65 static struct gchr_transform trans_exclam[] = {
66     { 0, 0, 0x00000a1 }
67 };
68 
69 static struct gchr_transform trans_quotedbl[] = {
70     { ANY, DBLGRAVE, 0x0000000 }
71 };
72 
73 static struct gchr_transform trans_numbersign[] = {
74     { 0, 0, 0x00000a3 },
75     { GREEK, 0, 0x00000a5 }
76 };
77 
78 static struct gchr_transform trans_dollar[] = {
79     { 0, 0, 0x00020ac },
80     { GREEK, 0, 0x00000a2 }
81 };
82 
83 static struct gchr_transform trans_quotesingle[] = {
84     { ANY, ACUTE, 0x0000000 }
85 };
86 
87 static struct gchr_transform trans_asterisk[] = {
88     { 0, 0, 0x00000b0 },
89     { GREEK, 0, 0x0002022 }
90 };
91 
92 static struct gchr_transform trans_plus[] = {
93     { 0, 0, 0x00000b1 }
94 };
95 
96 static struct gchr_transform trans_comma[] = {
97     { ANY, DOTBELOW, 0x0000000 }
98 };
99 
100 static struct gchr_transform trans_hyphenminus[] = {
101     { 0, 0, 0x00000ad },
102     { GREEK, 0, 0x0002013 }
103 };
104 
105 static struct gchr_transform trans_period[] = {
106     { ANY, DOTABOVE, 0x0000000 },
107     { GREEK, 0, 0x00000b7 }
108 };
109 
110 static struct gchr_transform trans_slash[] = {
111     { ANY, SLASH, 0x0000000 }
112 };
113 
114 static struct gchr_transform trans_zero[] = {
115     { ANY, RING, 0x0000000 }
116 };
117 
118 static struct gchr_transform trans_two[] = {
119     { BREVE, 0, 0x00000bd }
120 };
121 
122 static struct gchr_transform trans_four[] = {
123     { ANY, OGONEK, 0x0000000 }
124 };
125 
126 static struct gchr_transform trans_five[] = {
127     { ANY, CEDILLA, 0x0000000 }
128 };
129 
130 static struct gchr_transform trans_six[] = {
131     { ANY, CARON, 0x0000000 }
132 };
133 
134 static struct gchr_transform trans_seven[] = {
135     { ANY, BREVE, 0x0000000 }
136 };
137 
138 static struct gchr_transform trans_colon[] = {
139     { ANY, DIAERESIS, 0x0000000 }
140 };
141 
142 static struct gchr_transform trans_semicolon[] = {
143     { 0, 0, 0x0002026 }
144 };
145 
146 static struct gchr_transform trans_less[] = {
147     { 0, 0, 0x0002265 }
148 };
149 
150 static struct gchr_transform trans_equal[] = {
151     { GREEK, 0, 0x0002015 }
152 };
153 
154 static struct gchr_transform trans_greater[] = {
155     { 0, 0, 0x0002264 },
156     { GREEK, 0, 0x0002023 }
157 };
158 
159 static struct gchr_transform trans_question[] = {
160     { 0, 0, 0x00000bf }
161 };
162 
163 static struct gchr_transform trans_at[] = {
164     { ANY, GREEK, 0x0000000 }
165 };
166 
167 static struct gchr_transform trans_A[] = {
168     { 0, 0, 0x00000c6 },
169     { GREEK, 0, 0x0000391 },
170     { DBLGRAVE|GREEK, 0, 0x0000386 },
171     { BREVE|GREEK, 0, 0x0001fb8 },
172     { MACRON|GREEK, 0, 0x0001fb9 },
173     { GRAVE, 0, 0x00000c0 },
174     { ACUTE, 0, 0x00000c1 },
175     { CIRCUMFLEX, 0, 0x00000c2 },
176     { TILDE, 0, 0x00000c3 },
177     { DIAERESIS, 0, 0x00000c4 },
178     { RING, 0, 0x00000c5 },
179     { MACRON, 0, 0x0000100 },
180     { BREVE, 0, 0x0000102 },
181     { OGONEK, 0, 0x0000104 },
182     { CARON, 0, 0x00001cd },
183     { DIAERESIS|MACRON, 0, 0x00001de },
184     { DOTABOVE|MACRON, 0, 0x00001e0 },
185     { ACUTE|RING, 0, 0x00001fa },
186     { DBLGRAVE, 0, 0x0000200 },
187     { INVBREVE, 0, 0x0000202 },
188     { DOTABOVE, 0, 0x0000226 },
189     { SLASH, 0, 0x000023a },
190     { RINGBELOW, 0, 0x0001e00 },
191     { DOTBELOW, 0, 0x0001ea0 },
192     { HOOKABOVE, 0, 0x0001ea2 },
193     { ACUTE|CIRCUMFLEX, 0, 0x0001ea4 },
194     { GRAVE|CIRCUMFLEX, 0, 0x0001ea6 },
195     { CIRCUMFLEX|HOOKABOVE, 0, 0x0001ea8 },
196     { CIRCUMFLEX|TILDE, 0, 0x0001eaa },
197     { CIRCUMFLEX|DOTBELOW, 0, 0x0001eac },
198     { ACUTE|BREVE, 0, 0x0001eae },
199     { GRAVE|BREVE, 0, 0x0001eb0 },
200     { BREVE|HOOKABOVE, 0, 0x0001eb2 },
201     { TILDE|BREVE, 0, 0x0001eb4 },
202     { BREVE|DOTBELOW, 0, 0x0001eb6 }
203 };
204 
205 static struct gchr_transform trans_B[] = {
206     { GREEK, 0, 0x0000392 },
207     { SLASH, 0, 0x0000243 },
208     { DOTABOVE, 0, 0x0001e02 },
209     { DOTBELOW, 0, 0x0001e04 },
210     { LINEBELOW, 0, 0x0001e06 }
211 };
212 
213 static struct gchr_transform trans_C[] = {
214     { 0, 0, 0x00000c7 },
215     { GREEK, 0, 0x00003a7 },
216     { CEDILLA, 0, 0x00000c7 },
217     { ACUTE, 0, 0x0000106 },
218     { CIRCUMFLEX, 0, 0x0000108 },
219     { DOTABOVE, 0, 0x000010a },
220     { CARON, 0, 0x000010c },
221     { SLASH, 0, 0x000023b },
222     { ACUTE|CEDILLA, 0, 0x0001e08 }
223 };
224 
225 static struct gchr_transform trans_D[] = {
226     { GREEK, 0, 0x0000394 },
227     { CARON, 0, 0x000010e },
228     { SLASH, 0, 0x0000110 },
229     { DOTABOVE, 0, 0x0001e0a },
230     { DOTBELOW, 0, 0x0001e0c },
231     { LINEBELOW, 0, 0x0001e0e },
232     { CEDILLA, 0, 0x0001e10 },
233     { CIRCUMFLEXBELOW, 0, 0x0001e12 }
234 };
235 
236 static struct gchr_transform trans_E[] = {
237     { GREEK, 0, 0x0000395 },
238     { DBLGRAVE|GREEK, 0, 0x0000388 },
239     { GRAVE|GREEK, 0, 0x0001fc8 },
240     { ACUTE|GREEK, 0, 0x0001fc9 },
241     { GRAVE, 0, 0x00000c8 },
242     { ACUTE, 0, 0x00000c9 },
243     { CIRCUMFLEX, 0, 0x00000ca },
244     { DIAERESIS, 0, 0x00000cb },
245     { MACRON, 0, 0x0000112 },
246     { BREVE, 0, 0x0000114 },
247     { DOTABOVE, 0, 0x0000116 },
248     { OGONEK, 0, 0x0000118 },
249     { CARON, 0, 0x000011a },
250     { DBLGRAVE, 0, 0x0000204 },
251     { INVBREVE, 0, 0x0000206 },
252     { CEDILLA, 0, 0x0000228 },
253     { SLASH, 0, 0x0000246 },
254     { GRAVE|MACRON, 0, 0x0001e14 },
255     { ACUTE|MACRON, 0, 0x0001e16 },
256     { CIRCUMFLEXBELOW, 0, 0x0001e18 },
257     { TILDEBELOW, 0, 0x0001e1a },
258     { BREVE|CEDILLA, 0, 0x0001e1c },
259     { DOTBELOW, 0, 0x0001eb8 },
260     { HOOKABOVE, 0, 0x0001eba },
261     { TILDE, 0, 0x0001ebc },
262     { ACUTE|CIRCUMFLEX, 0, 0x0001ebe },
263     { GRAVE|CIRCUMFLEX, 0, 0x0001ec0 },
264     { CIRCUMFLEX|HOOKABOVE, 0, 0x0001ec2 },
265     { CIRCUMFLEX|TILDE, 0, 0x0001ec4 },
266     { CIRCUMFLEX|DOTBELOW, 0, 0x0001ec6 }
267 };
268 
269 static struct gchr_transform trans_F[] = {
270     { GREEK, 0, 0x00003a6 },
271     { DOTABOVE, 0, 0x0001e1e },
272     { SLASH, 0, 0x000a798 }
273 };
274 
275 static struct gchr_transform trans_G[] = {
276     { GREEK, 0, 0x0000393 },
277     { CIRCUMFLEX, 0, 0x000011c },
278     { BREVE, 0, 0x000011e },
279     { DOTABOVE, 0, 0x0000120 },
280     { CEDILLA, 0, 0x0000122 },
281     { SLASH, 0, 0x00001e4 },
282     { CARON, 0, 0x00001e6 },
283     { ACUTE, 0, 0x00001f4 },
284     { MACRON, 0, 0x0001e20 }
285 };
286 
287 static struct gchr_transform trans_H[] = {
288     { 0, 0, 0x000261e },
289     { GREEK, 0, 0x0000397 },
290     { DBLGRAVE|GREEK, 0, 0x0000389 },
291     { GRAVE|GREEK, 0, 0x0001fca },
292     { ACUTE|GREEK, 0, 0x0001fcb },
293     { CIRCUMFLEX, 0, 0x0000124 },
294     { SLASH, 0, 0x0000126 },
295     { CARON, 0, 0x000021e },
296     { DOTABOVE, 0, 0x0001e22 },
297     { DOTBELOW, 0, 0x0001e24 },
298     { DIAERESIS, 0, 0x0001e26 },
299     { CEDILLA, 0, 0x0001e28 },
300     { BREVE, 0, 0x0001e2a }
301 };
302 
303 static struct gchr_transform trans_I[] = {
304     { GREEK, 0, 0x0000399 },
305     { DBLGRAVE|GREEK, 0, 0x000038a },
306     { DIAERESIS|GREEK, 0, 0x00003aa },
307     { GRAVE|GREEK, 0, 0x0001f7a },
308     { ACUTE|GREEK, 0, 0x0001f7b },
309     { TILDE|GREEK, 0, 0x0001f78 },
310     { MACRON|GREEK, 0, 0x0001f79 },
311     { GRAVE, 0, 0x00000cc },
312     { ACUTE, 0, 0x00000cd },
313     { CIRCUMFLEX, 0, 0x00000ce },
314     { DIAERESIS, 0, 0x00000cf },
315     { TILDE, 0, 0x0000128 },
316     { MACRON, 0, 0x000012a },
317     { BREVE, 0, 0x000012c },
318     { OGONEK, 0, 0x000012e },
319     { DOTABOVE, 0, 0x0000130 },
320     { SLASH, 0, 0x0000197 },
321     { CARON, 0, 0x00001cf },
322     { DBLGRAVE, 0, 0x0000208 },
323     { INVBREVE, 0, 0x000020a },
324     { TILDEBELOW, 0, 0x0001e2c },
325     { ACUTE|DIAERESIS, 0, 0x0001e2e },
326     { HOOKABOVE, 0, 0x0001ec8 },
327     { DOTBELOW, 0, 0x0001eca }
328 };
329 
330 static struct gchr_transform trans_J[] = {
331     { GREEK, 0, 0x00003d1 },
332     { CIRCUMFLEX, 0, 0x0000134 },
333     { SLASH, 0, 0x0000248 }
334 };
335 
336 static struct gchr_transform trans_K[] = {
337     { GREEK, 0, 0x000039a },
338     { CEDILLA, 0, 0x0000136 },
339     { CARON, 0, 0x00001e8 },
340     { ACUTE, 0, 0x0001e30 },
341     { DOTBELOW, 0, 0x0001e32 },
342     { LINEBELOW, 0, 0x0001e34 },
343     { SLASH, 0, 0x000a740 }
344 };
345 
346 static struct gchr_transform trans_L[] = {
347     { GREEK, 0, 0x000039b },
348     { ACUTE, 0, 0x0000139 },
349     { CEDILLA, 0, 0x000013b },
350     { CARON, 0, 0x000013d },
351     { DOTABOVE, 0, 0x000013f },
352     { SLASH, 0, 0x0000141 },
353     { DOTBELOW, 0, 0x0001e36 },
354     { DOTBELOW|MACRON, 0, 0x0001e38 },
355     { LINEBELOW, 0, 0x0001e3a },
356     { CIRCUMFLEXBELOW, 0, 0x0001e3c }
357 };
358 
359 static struct gchr_transform trans_M[] = {
360     { GREEK, 0, 0x000039c },
361     { ACUTE, 0, 0x0001e3e },
362     { DOTABOVE, 0, 0x0001e40 },
363     { DOTBELOW, 0, 0x0001e42 }
364 };
365 
366 static struct gchr_transform trans_N[] = {
367     { GREEK, 0, 0x000039d },
368     { TILDE, 0, 0x00000d1 },
369     { ACUTE, 0, 0x0000143 },
370     { CEDILLA, 0, 0x0000145 },
371     { CARON, 0, 0x0000147 },
372     { GRAVE, 0, 0x00001f8 },
373     { DOTABOVE, 0, 0x0001e44 },
374     { DOTBELOW, 0, 0x0001e46 },
375     { LINEBELOW, 0, 0x0001e48 },
376     { CIRCUMFLEXBELOW, 0, 0x0001e4a }
377 };
378 
379 static struct gchr_transform trans_O[] = {
380     { 0, 0, 0x0000152 },
381     { GREEK, 0, 0x000039f },
382     { DBLGRAVE|GREEK, 0, 0x000038c },
383     { GRAVE|GREEK, 0, 0x0001ff8 },
384     { ACUTE|GREEK, 0, 0x0001ff9 },
385     { GRAVE, 0, 0x00000d2 },
386     { ACUTE, 0, 0x00000d3 },
387     { CIRCUMFLEX, 0, 0x00000d4 },
388     { TILDE, 0, 0x00000d5 },
389     { DIAERESIS, 0, 0x00000d6 },
390     { SLASH, 0, 0x00000d8 },
391     { MACRON, 0, 0x000014c },
392     { BREVE, 0, 0x000014e },
393     { DBLACUTE, 0, 0x0000150 },
394     { HORN, 0, 0x00001a0 },
395     { CARON, 0, 0x00001d1 },
396     { OGONEK, 0, 0x00001ea },
397     { OGONEK|MACRON, 0, 0x00001ec },
398     { ACUTE|SLASH, 0, 0x00001fe },
399     { DBLGRAVE, 0, 0x000020c },
400     { INVBREVE, 0, 0x000020e },
401     { DIAERESIS|MACRON, 0, 0x000022a },
402     { TILDE|MACRON, 0, 0x000022c },
403     { DOTABOVE, 0, 0x000022e },
404     { DOTABOVE|MACRON, 0, 0x0000230 },
405     { ACUTE|TILDE, 0, 0x0001e4c },
406     { DIAERESIS|TILDE, 0, 0x0001e4e },
407     { GRAVE|MACRON, 0, 0x0001e50 },
408     { ACUTE|MACRON, 0, 0x0001e52 },
409     { DOTBELOW, 0, 0x0001ecc },
410     { HOOKABOVE, 0, 0x0001ece },
411     { ACUTE|CIRCUMFLEX, 0, 0x0001ed0 },
412     { GRAVE|CIRCUMFLEX, 0, 0x0001ed2 },
413     { CIRCUMFLEX|HOOKABOVE, 0, 0x0001ed4 },
414     { CIRCUMFLEX|TILDE, 0, 0x0001ed6 },
415     { CIRCUMFLEX|DOTBELOW, 0, 0x0001ed8 },
416     { ACUTE|HORN, 0, 0x0001eda },
417     { GRAVE|HORN, 0, 0x0001edc },
418     { HOOKABOVE|HORN, 0, 0x0001ede },
419     { TILDE|HORN, 0, 0x0001ee0 },
420     { DOTBELOW|HORN, 0, 0x0001ee2 }
421 };
422 
423 static struct gchr_transform trans_P[] = {
424     { 0, 0, 0x00000a7 },
425     { GREEK, 0, 0x00003a0 },
426     { ACUTE, 0, 0x0001e54 },
427     { DOTABOVE, 0, 0x0001e56 },
428     { SLASH, 0, 0x0002c63 },
429     { SLASH, 0, 0x000a750 }
430 };
431 
432 static struct gchr_transform trans_Q[] = {
433     { GREEK, 0, 0x0000398 },
434     { SLASH, 0, 0x000a756 }
435 };
436 
437 static struct gchr_transform trans_R[] = {
438     { GREEK, 0, 0x00003a1 },
439     { ACUTE, 0, 0x0000154 },
440     { CEDILLA, 0, 0x0000156 },
441     { CARON, 0, 0x0000158 },
442     { DBLGRAVE, 0, 0x0000210 },
443     { INVBREVE, 0, 0x0000212 },
444     { SLASH, 0, 0x000024c },
445     { DOTABOVE, 0, 0x0001e58 },
446     { DOTBELOW, 0, 0x0001e5a },
447     { DOTBELOW|MACRON, 0, 0x0001e5c },
448     { LINEBELOW, 0, 0x0001e5e }
449 };
450 
451 static struct gchr_transform trans_S[] = {
452     { GREEK, 0, 0x00003a3 },
453     { ACUTE, 0, 0x000015a },
454     { CIRCUMFLEX, 0, 0x000015c },
455     { CEDILLA, 0, 0x000015e },
456     { CARON, 0, 0x0000160 },
457     { DOTABOVE, 0, 0x0001e60 },
458     { DOTBELOW, 0, 0x0001e62 },
459     { ACUTE|DOTABOVE, 0, 0x0001e64 },
460     { CARON|DOTABOVE, 0, 0x0001e66 },
461     { DOTABOVE|DOTBELOW, 0, 0x0001e68 }
462 };
463 
464 static struct gchr_transform trans_T[] = {
465     { GREEK, 0, 0x00003a4 },
466     { CEDILLA, 0, 0x0000162 },
467     { CARON, 0, 0x0000164 },
468     { SLASH, 0, 0x0000166 },
469     { DOTABOVE, 0, 0x0001e6a },
470     { DOTBELOW, 0, 0x0001e6c },
471     { LINEBELOW, 0, 0x0001e6e },
472     { CIRCUMFLEXBELOW, 0, 0x0001e70 }
473 };
474 
475 static struct gchr_transform trans_U[] = {
476     { GREEK, 0, 0x00003a5 },
477     { DBLGRAVE|GREEK, 0, 0x000038e },
478     { DIAERESIS|GREEK, 0, 0x00003ab },
479     { GRAVE|GREEK, 0, 0x0001fea },
480     { ACUTE|GREEK, 0, 0x0001feb },
481     { BREVE|GREEK, 0, 0x0001fe8 },
482     { MACRON|GREEK, 0, 0x0001fe9 },
483     { GRAVE, 0, 0x00000d9 },
484     { ACUTE, 0, 0x00000da },
485     { CIRCUMFLEX, 0, 0x00000db },
486     { DIAERESIS, 0, 0x00000dc },
487     { TILDE, 0, 0x0000168 },
488     { MACRON, 0, 0x000016a },
489     { BREVE, 0, 0x000016c },
490     { RING, 0, 0x000016e },
491     { DBLACUTE, 0, 0x0000170 },
492     { OGONEK, 0, 0x0000172 },
493     { HORN, 0, 0x00001af },
494     { CARON, 0, 0x00001d3 },
495     { DIAERESIS|MACRON, 0, 0x00001d5 },
496     { ACUTE|DIAERESIS, 0, 0x00001d7 },
497     { DIAERESIS|CARON, 0, 0x00001d9 },
498     { GRAVE|DIAERESIS, 0, 0x00001db },
499     { DBLGRAVE, 0, 0x0000214 },
500     { INVBREVE, 0, 0x0000216 },
501     { DIAERESISBELOW, 0, 0x0001e72 },
502     { TILDEBELOW, 0, 0x0001e74 },
503     { CIRCUMFLEXBELOW, 0, 0x0001e76 },
504     { ACUTE|TILDE, 0, 0x0001e78 },
505     { DIAERESIS|MACRON, 0, 0x0001e7a },
506     { DOTBELOW, 0, 0x0001ee4 },
507     { HOOKABOVE, 0, 0x0001ee6 },
508     { ACUTE|HORN, 0, 0x0001ee8 },
509     { GRAVE|HORN, 0, 0x0001eea },
510     { HOOKABOVE|HORN, 0, 0x0001eec },
511     { TILDE|HORN, 0, 0x0001eee },
512     { DOTBELOW|HORN, 0, 0x0001ef0 },
513     { SLASH, 0, 0x000a7b8 }
514 };
515 
516 static struct gchr_transform trans_V[] = {
517     { GREEK, 0, 0x00003c2 },
518     { TILDE, 0, 0x0001e7c },
519     { DOTBELOW, 0, 0x0001e7e }
520 };
521 
522 static struct gchr_transform trans_W[] = {
523     { GREEK, 0, 0x00003a9 },
524     { DBLGRAVE|GREEK, 0, 0x000038f },
525     { GRAVE|GREEK, 0, 0x0001ffa },
526     { ACUTE|GREEK, 0, 0x0001ffb },
527     { CIRCUMFLEX, 0, 0x0000174 },
528     { GRAVE, 0, 0x0001e80 },
529     { ACUTE, 0, 0x0001e82 },
530     { DIAERESIS, 0, 0x0001e84 },
531     { DOTABOVE, 0, 0x0001e86 },
532     { DOTBELOW, 0, 0x0001e88 }
533 };
534 
535 static struct gchr_transform trans_X[] = {
536     { GREEK, 0, 0x000039e },
537     { DOTABOVE, 0, 0x0001e8a },
538     { DIAERESIS, 0, 0x0001e8c }
539 };
540 
541 static struct gchr_transform trans_Y[] = {
542     { GREEK, 0, 0x00003a8 },
543     { ACUTE, 0, 0x00000dd },
544     { CIRCUMFLEX, 0, 0x0000176 },
545     { DIAERESIS, 0, 0x0000178 },
546     { MACRON, 0, 0x0000232 },
547     { SLASH, 0, 0x000024e },
548     { DOTABOVE, 0, 0x0001e8e },
549     { GRAVE, 0, 0x0001ef2 },
550     { DOTBELOW, 0, 0x0001ef4 },
551     { HOOKABOVE, 0, 0x0001ef6 },
552     { TILDE, 0, 0x0001ef8 }
553 };
554 
555 static struct gchr_transform trans_Z[] = {
556     { GREEK, 0, 0x0000396 },
557     { ACUTE, 0, 0x0000179 },
558     { DOTABOVE, 0, 0x000017b },
559     { CARON, 0, 0x000017d },
560     { SLASH, 0, 0x00001b5 },
561     { CIRCUMFLEX, 0, 0x0001e90 },
562     { DOTBELOW, 0, 0x0001e92 },
563     { LINEBELOW, 0, 0x0001e94 }
564 };
565 
566 static struct gchr_transform trans_bracketleft[] = {
567     { 0, 0, 0x0002018 }
568 };
569 
570 static struct gchr_transform trans_backslash[] = {
571     { 0, 0, 0x00000ab },
572     { GREEK, 0, 0x0002039 }
573 };
574 
575 static struct gchr_transform trans_bracketright[] = {
576     { 0, 0, 0x0002019 }
577 };
578 
579 static struct gchr_transform trans_asciicircum[] = {
580     { ANY, CIRCUMFLEX, 0x0000000 }
581 };
582 
583 static struct gchr_transform trans_underscore[] = {
584     { ANY, MACRON, 0x0000000 },
585     { GREEK, 0, 0x0002014 }
586 };
587 
588 static struct gchr_transform trans_grave[] = {
589     { ANY, GRAVE, 0x0000000 }
590 };
591 
592 static struct gchr_transform trans_a[] = {
593     { 0, 0, 0x00000e6 },
594     { GREEK, 0, 0x00003b1 },
595     { DBLGRAVE|GREEK, 0, 0x00003ac },
596     { GRAVE|GREEK, 0, 0x0001f70 },
597     { ACUTE|GREEK, 0, 0x0001f71 },
598     { BREVE|GREEK, 0, 0x0001fb0 },
599     { MACRON|GREEK, 0, 0x0001fb1 },
600     { TILDE|GREEK, 0, 0x0001fb6 },
601     { GRAVE, 0, 0x00000e0 },
602     { ACUTE, 0, 0x00000e1 },
603     { CIRCUMFLEX, 0, 0x00000e2 },
604     { TILDE, 0, 0x00000e3 },
605     { DIAERESIS, 0, 0x00000e4 },
606     { RING, 0, 0x00000e5 },
607     { MACRON, 0, 0x0000101 },
608     { BREVE, 0, 0x0000103 },
609     { OGONEK, 0, 0x0000105 },
610     { CARON, 0, 0x00001ce },
611     { DIAERESIS|MACRON, 0, 0x00001df },
612     { DOTABOVE|MACRON, 0, 0x00001e1 },
613     { ACUTE|RING, 0, 0x00001fb },
614     { DBLGRAVE, 0, 0x0000201 },
615     { INVBREVE, 0, 0x0000203 },
616     { DOTABOVE, 0, 0x0000227 },
617     { RINGBELOW, 0, 0x0001e01 },
618     { DOTBELOW, 0, 0x0001ea1 },
619     { HOOKABOVE, 0, 0x0001ea3 },
620     { ACUTE|CIRCUMFLEX, 0, 0x0001ea5 },
621     { GRAVE|CIRCUMFLEX, 0, 0x0001ea7 },
622     { CIRCUMFLEX|HOOKABOVE, 0, 0x0001ea9 },
623     { CIRCUMFLEX|TILDE, 0, 0x0001eab },
624     { CIRCUMFLEX|DOTBELOW, 0, 0x0001ead },
625     { ACUTE|BREVE, 0, 0x0001eaf },
626     { GRAVE|BREVE, 0, 0x0001eb1 },
627     { BREVE|HOOKABOVE, 0, 0x0001eb3 },
628     { TILDE|BREVE, 0, 0x0001eb5 },
629     { BREVE|DOTBELOW, 0, 0x0001eb7 },
630     { SLASH, 0, 0x0002c65 }
631 };
632 
633 static struct gchr_transform trans_b[] = {
634     { GREEK, 0, 0x00003b2 },
635     { SLASH, 0, 0x0000180 },
636     { DOTABOVE, 0, 0x0001e03 },
637     { DOTBELOW, 0, 0x0001e05 },
638     { LINEBELOW, 0, 0x0001e07 }
639 };
640 
641 static struct gchr_transform trans_c[] = {
642     { 0, 0, 0x00000e7 },
643     { GREEK, 0, 0x00003c7 },
644     { CEDILLA, 0, 0x00000e7 },
645     { ACUTE, 0, 0x0000107 },
646     { CIRCUMFLEX, 0, 0x0000109 },
647     { DOTABOVE, 0, 0x000010b },
648     { CARON, 0, 0x000010d },
649     { SLASH, 0, 0x000023c },
650     { ACUTE|CEDILLA, 0, 0x0001e09 }
651 };
652 
653 static struct gchr_transform trans_d[] = {
654     { GREEK, 0, 0x00003b4 },
655     { CARON, 0, 0x000010f },
656     { SLASH, 0, 0x0000111 },
657     { DOTABOVE, 0, 0x0001e0b },
658     { DOTBELOW, 0, 0x0001e0d },
659     { LINEBELOW, 0, 0x0001e0f },
660     { CEDILLA, 0, 0x0001e11 },
661     { CIRCUMFLEXBELOW, 0, 0x0001e13 }
662 };
663 
664 static struct gchr_transform trans_e[] = {
665     { 0, ACUTE, 0x0000000 },
666     { GREEK, 0, 0x00003b5 },
667     { DBLGRAVE|GREEK, 0, 0x00003ad },
668     { GRAVE|GREEK, 0, 0x0001f72 },
669     { ACUTE|GREEK, 0, 0x0001f73 },
670     { GRAVE, 0, 0x00000e8 },
671     { ACUTE, 0, 0x00000e9 },
672     { CIRCUMFLEX, 0, 0x00000ea },
673     { DIAERESIS, 0, 0x00000eb },
674     { MACRON, 0, 0x0000113 },
675     { BREVE, 0, 0x0000115 },
676     { DOTABOVE, 0, 0x0000117 },
677     { OGONEK, 0, 0x0000119 },
678     { CARON, 0, 0x000011b },
679     { DBLGRAVE, 0, 0x0000205 },
680     { INVBREVE, 0, 0x0000207 },
681     { CEDILLA, 0, 0x0000229 },
682     { SLASH, 0, 0x0000247 },
683     { GRAVE|MACRON, 0, 0x0001e15 },
684     { ACUTE|MACRON, 0, 0x0001e17 },
685     { CIRCUMFLEXBELOW, 0, 0x0001e19 },
686     { TILDEBELOW, 0, 0x0001e1b },
687     { BREVE|CEDILLA, 0, 0x0001e1d },
688     { DOTBELOW, 0, 0x0001eb9 },
689     { HOOKABOVE, 0, 0x0001ebb },
690     { TILDE, 0, 0x0001ebd },
691     { ACUTE|CIRCUMFLEX, 0, 0x0001ebf },
692     { GRAVE|CIRCUMFLEX, 0, 0x0001ec1 },
693     { CIRCUMFLEX|HOOKABOVE, 0, 0x0001ec3 },
694     { CIRCUMFLEX|TILDE, 0, 0x0001ec5 },
695     { CIRCUMFLEX|DOTBELOW, 0, 0x0001ec7 }
696 };
697 
698 static struct gchr_transform trans_f[] = {
699     { 0, 0, 0x0002640 },
700     { GREEK, 0, 0x00003c6 },
701     { DOTABOVE, 0, 0x0001e1f },
702     { SLASH, 0, 0x000a799 }
703 };
704 
705 static struct gchr_transform trans_g[] = {
706     { 0, 0, 0x00000a9 },
707     { GREEK, 0, 0x00003b3 },
708     { CIRCUMFLEX, 0, 0x000011d },
709     { BREVE, 0, 0x000011f },
710     { DOTABOVE, 0, 0x0000121 },
711     { CEDILLA, 0, 0x0000123 },
712     { SLASH, 0, 0x00001e5 },
713     { CARON, 0, 0x00001e7 },
714     { ACUTE, 0, 0x00001f5 },
715     { MACRON, 0, 0x0001e21 }
716 };
717 
718 static struct gchr_transform trans_h[] = {
719     { SLASH|GREEK, 0, 0x000210f },
720     { 0, 0, 0x000261e },
721     { GREEK, 0, 0x00003b7 },
722     { DBLGRAVE|GREEK, 0, 0x00003ae },
723     { GRAVE|GREEK, 0, 0x0001f74 },
724     { ACUTE|GREEK, 0, 0x0001f75 },
725     { TILDE|GREEK, 0, 0x0001fc6 },
726     { CIRCUMFLEX, 0, 0x0000125 },
727     { SLASH, 0, 0x0000127 },
728     { CARON, 0, 0x000021f },
729     { DOTABOVE, 0, 0x0001e23 },
730     { DOTBELOW, 0, 0x0001e25 },
731     { DIAERESIS, 0, 0x0001e27 },
732     { CEDILLA, 0, 0x0001e29 },
733     { BREVE, 0, 0x0001e2b },
734     { LINEBELOW, 0, 0x0001e96 }
735 };
736 
737 static struct gchr_transform trans_i[] = {
738     { 0, CIRCUMFLEX, 0x0000000 },
739     { DOTABOVE, 0, 0x0000131 },
740     { GREEK, 0, 0x00003b9 },
741     { DBLGRAVE|GREEK, 0, 0x00003af },
742     { DIAERESIS|GREEK, 0, 0x00003ca },
743     { DIAERESIS|DBLGRAVE|GREEK, 0, 0x0000390 },
744     { GRAVE|GREEK, 0, 0x0001f76 },
745     { ACUTE|GREEK, 0, 0x0001f77 },
746     { BREVE|GREEK, 0, 0x0001fd0 },
747     { MACRON|GREEK, 0, 0x0001fd1 },
748     { TILDE|GREEK, 0, 0x0001fd6 },
749     { GRAVE|DIAERESIS|GREEK, 0, 0x0001fd2 },
750     { ACUTE|DIAERESIS|GREEK, 0, 0x0001fd3 },
751     { DIAERESIS|TILDE|GREEK, 0, 0x0001fd7 },
752     { GRAVE, 0, 0x00000ec },
753     { ACUTE, 0, 0x00000ed },
754     { CIRCUMFLEX, 0, 0x00000ee },
755     { DIAERESIS, 0, 0x00000ef },
756     { TILDE, 0, 0x0000129 },
757     { MACRON, 0, 0x000012b },
758     { BREVE, 0, 0x000012d },
759     { OGONEK, 0, 0x000012f },
760     { CARON, 0, 0x00001d0 },
761     { DBLGRAVE, 0, 0x0000209 },
762     { INVBREVE, 0, 0x000020b },
763     { SLASH, 0, 0x0000268 },
764     { TILDEBELOW, 0, 0x0001e2d },
765     { ACUTE|DIAERESIS, 0, 0x0001e2f },
766     { HOOKABOVE, 0, 0x0001ec9 },
767     { DOTBELOW, 0, 0x0001ecb }
768 };
769 
770 static struct gchr_transform trans_j[] = {
771     { GREEK, 0, 0x00003d5 },
772     { CIRCUMFLEX, 0, 0x0000135 },
773     { CARON, 0, 0x00001f0 },
774     { SLASH, 0, 0x0000249 }
775 };
776 
777 static struct gchr_transform trans_k[] = {
778     { GREEK, 0, 0x00003ba },
779     { CEDILLA, 0, 0x0000137 },
780     { CARON, 0, 0x00001e9 },
781     { ACUTE, 0, 0x0001e31 },
782     { DOTBELOW, 0, 0x0001e33 },
783     { LINEBELOW, 0, 0x0001e35 },
784     { SLASH, 0, 0x000a741 }
785 };
786 
787 static struct gchr_transform trans_l[] = {
788     { GREEK, 0, 0x00003bb },
789     { ACUTE, 0, 0x000013a },
790     { CEDILLA, 0, 0x000013c },
791     { CARON, 0, 0x000013e },
792     { DOTABOVE, 0, 0x0000140 },
793     { SLASH, 0, 0x0000142 },
794     { DOTBELOW, 0, 0x0001e37 },
795     { DOTBELOW|MACRON, 0, 0x0001e39 },
796     { LINEBELOW, 0, 0x0001e3b },
797     { CIRCUMFLEXBELOW, 0, 0x0001e3d }
798 };
799 
800 static struct gchr_transform trans_m[] = {
801     { 0, 0, 0x0002642 },
802     { GREEK, 0, 0x00003bc },
803     { ACUTE, 0, 0x0001e3f },
804     { DOTABOVE, 0, 0x0001e41 },
805     { DOTBELOW, 0, 0x0001e43 }
806 };
807 
808 static struct gchr_transform trans_n[] = {
809     { 0, TILDE, 0x0000000 },
810     { GREEK, 0, 0x00003bd },
811     { TILDE, 0, 0x00000f1 },
812     { ACUTE, 0, 0x0000144 },
813     { CEDILLA, 0, 0x0000146 },
814     { CARON, 0, 0x0000148 },
815     { GRAVE, 0, 0x00001f9 },
816     { DOTABOVE, 0, 0x0001e45 },
817     { DOTBELOW, 0, 0x0001e47 },
818     { LINEBELOW, 0, 0x0001e49 },
819     { CIRCUMFLEXBELOW, 0, 0x0001e4b }
820 };
821 
822 static struct gchr_transform trans_o[] = {
823     { 0, 0, 0x0001536 },
824     { GREEK, 0, 0x00003bf },
825     { DBLGRAVE|GREEK, 0, 0x00003cc },
826     { GRAVE|GREEK, 0, 0x0001f78 },
827     { ACUTE|GREEK, 0, 0x0001f79 },
828     { GRAVE, 0, 0x00000f2 },
829     { ACUTE, 0, 0x00000f3 },
830     { CIRCUMFLEX, 0, 0x00000f4 },
831     { TILDE, 0, 0x00000f5 },
832     { DIAERESIS, 0, 0x00000f6 },
833     { SLASH, 0, 0x00000f8 },
834     { MACRON, 0, 0x000014d },
835     { BREVE, 0, 0x000014f },
836     { DBLACUTE, 0, 0x0000151 },
837     { HORN, 0, 0x00001a1 },
838     { CARON, 0, 0x00001d2 },
839     { OGONEK, 0, 0x00001eb },
840     { OGONEK|MACRON, 0, 0x00001ed },
841     { ACUTE|SLASH, 0, 0x00001ff },
842     { DBLGRAVE, 0, 0x000020d },
843     { INVBREVE, 0, 0x000020f },
844     { DIAERESIS|MACRON, 0, 0x000022b },
845     { TILDE|MACRON, 0, 0x000022d },
846     { DOTABOVE, 0, 0x000022f },
847     { DOTABOVE|MACRON, 0, 0x0000231 },
848     { ACUTE|TILDE, 0, 0x0001e4d },
849     { DIAERESIS|TILDE, 0, 0x0001e4f },
850     { GRAVE|MACRON, 0, 0x0001e51 },
851     { ACUTE|MACRON, 0, 0x0001e53 },
852     { DOTBELOW, 0, 0x0001ecd },
853     { HOOKABOVE, 0, 0x0001ecf },
854     { ACUTE|CIRCUMFLEX, 0, 0x0001ed1 },
855     { GRAVE|CIRCUMFLEX, 0, 0x0001ed3 },
856     { CIRCUMFLEX|HOOKABOVE, 0, 0x0001ed5 },
857     { CIRCUMFLEX|TILDE, 0, 0x0001ed7 },
858     { CIRCUMFLEX|DOTBELOW, 0, 0x0001ed9 },
859     { ACUTE|HORN, 0, 0x0001edb },
860     { GRAVE|HORN, 0, 0x0001edd },
861     { HOOKABOVE|HORN, 0, 0x0001edf },
862     { TILDE|HORN, 0, 0x0001ee1 },
863     { DOTBELOW|HORN, 0, 0x0001ee3 }
864 };
865 
866 static struct gchr_transform trans_p[] = {
867     { 0, 0, 0x00000b6 },
868     { GREEK, 0, 0x00003c0 },
869     { SLASH, 0, 0x0001d7d },
870     { ACUTE, 0, 0x0001e55 },
871     { DOTABOVE, 0, 0x0001e57 },
872     { SLASH, 0, 0x000a751 }
873 };
874 
875 static struct gchr_transform trans_q[] = {
876     { GREEK, 0, 0x00003b8 },
877     { SLASH, 0, 0x000a757 }
878 };
879 
880 static struct gchr_transform trans_r[] = {
881     { 0, 0, 0x00000ae },
882     { GREEK, 0, 0x00003c1 },
883     { ACUTE, 0, 0x0000155 },
884     { CEDILLA, 0, 0x0000157 },
885     { CARON, 0, 0x0000159 },
886     { DBLGRAVE, 0, 0x0000211 },
887     { INVBREVE, 0, 0x0000213 },
888     { SLASH, 0, 0x000024d },
889     { DOTABOVE, 0, 0x0001e59 },
890     { DOTBELOW, 0, 0x0001e5b },
891     { DOTBELOW|MACRON, 0, 0x0001e5d },
892     { LINEBELOW, 0, 0x0001e5f }
893 };
894 
895 static struct gchr_transform trans_s[] = {
896     { 0, 0, 0x00000df },
897     { GREEK, 0, 0x00003c3 },
898     { ACUTE, 0, 0x000015b },
899     { CIRCUMFLEX, 0, 0x000015d },
900     { CEDILLA, 0, 0x000015f },
901     { CARON, 0, 0x0000161 },
902     { DOTABOVE, 0, 0x0001e61 },
903     { DOTBELOW, 0, 0x0001e63 },
904     { ACUTE|DOTABOVE, 0, 0x0001e65 },
905     { CARON|DOTABOVE, 0, 0x0001e67 },
906     { DOTABOVE|DOTBELOW, 0, 0x0001e69 }
907 };
908 
909 static struct gchr_transform trans_t[] = {
910     { 0, 0, 0x0002122 },
911     { GREEK, 0, 0x00003c4 },
912     { CEDILLA, 0, 0x0000163 },
913     { CARON, 0, 0x0000165 },
914     { SLASH, 0, 0x0000167 },
915     { DOTABOVE, 0, 0x0001e6b },
916     { DOTBELOW, 0, 0x0001e6d },
917     { LINEBELOW, 0, 0x0001e6f },
918     { CIRCUMFLEXBELOW, 0, 0x0001e71 },
919     { DIAERESIS, 0, 0x0001e97 }
920 };
921 
922 static struct gchr_transform trans_u[] = {
923     { 0, DIAERESIS, 0x0000000 },
924     { GREEK, 0, 0x00003c5 },
925     { DBLGRAVE|GREEK, 0, 0x00003cd },
926     { DIAERESIS|GREEK, 0, 0x00003cb },
927     { DIAERESIS|DBLGRAVE|GREEK, 0, 0x00003b0 },
928     { GRAVE|GREEK, 0, 0x0001f7a },
929     { ACUTE|GREEK, 0, 0x0001f7b },
930     { BREVE|GREEK, 0, 0x0001ff0 },
931     { MACRON|GREEK, 0, 0x0001fe1 },
932     { GRAVE|DIAERESIS|GREEK, 0, 0x0001fe3 },
933     { ACUTE|DIAERESIS|GREEK, 0, 0x0001fe4 },
934     { TILDE|GREEK, 0, 0x0001fe6 },
935     { DIAERESIS|TILDE|GREEK, 0, 0x0001fe7 },
936     { GRAVE, 0, 0x00000f9 },
937     { ACUTE, 0, 0x00000fa },
938     { CIRCUMFLEX, 0, 0x00000fb },
939     { DIAERESIS, 0, 0x00000fc },
940     { TILDE, 0, 0x0000169 },
941     { MACRON, 0, 0x000016b },
942     { BREVE, 0, 0x000016d },
943     { RING, 0, 0x000016f },
944     { DBLACUTE, 0, 0x0000171 },
945     { OGONEK, 0, 0x0000173 },
946     { HORN, 0, 0x00001b0 },
947     { CARON, 0, 0x00001d4 },
948     { DIAERESIS|MACRON, 0, 0x00001d6 },
949     { ACUTE|DIAERESIS, 0, 0x00001d8 },
950     { DIAERESIS|CARON, 0, 0x00001da },
951     { GRAVE|DIAERESIS, 0, 0x00001dc },
952     { DBLGRAVE, 0, 0x0000215 },
953     { INVBREVE, 0, 0x0000217 },
954     { DIAERESISBELOW, 0, 0x0001e73 },
955     { TILDEBELOW, 0, 0x0001e75 },
956     { CIRCUMFLEXBELOW, 0, 0x0001e77 },
957     { ACUTE|TILDE, 0, 0x0001e79 },
958     { DIAERESIS|MACRON, 0, 0x0001e7b },
959     { DOTBELOW, 0, 0x0001ee5 },
960     { HOOKABOVE, 0, 0x0001ee7 },
961     { ACUTE|HORN, 0, 0x0001ee9 },
962     { GRAVE|HORN, 0, 0x0001eeb },
963     { HOOKABOVE|HORN, 0, 0x0001eed },
964     { TILDE|HORN, 0, 0x0001eef },
965     { DOTBELOW|HORN, 0, 0x0001ef1 },
966     { SLASH, 0, 0x000a7b9 }
967 };
968 
969 static struct gchr_transform trans_v[] = {
970     { GREEK, 0, 0x00003d6 },
971     { TILDE, 0, 0x0001e7d },
972     { DOTBELOW, 0, 0x0001e7f }
973 };
974 
975 static struct gchr_transform trans_w[] = {
976     { GREEK, 0, 0x00003c9 },
977     { DBLGRAVE|GREEK, 0, 0x00003ce },
978     { GRAVE|GREEK, 0, 0x0001f7a },
979     { ACUTE|GREEK, 0, 0x0001f7b },
980     { CIRCUMFLEX, 0, 0x0000175 },
981     { GRAVE, 0, 0x0001e81 },
982     { ACUTE, 0, 0x0001e83 },
983     { DIAERESIS, 0, 0x0001e85 },
984     { DOTABOVE, 0, 0x0001e87 },
985     { DOTBELOW, 0, 0x0001e89 },
986     { RING, 0, 0x0001e98 }
987 };
988 
989 static struct gchr_transform trans_x[] = {
990     { GREEK, 0, 0x00003be },
991     { DOTABOVE, 0, 0x0001e8b },
992     { DIAERESIS, 0, 0x0001e8d }
993 };
994 
995 static struct gchr_transform trans_y[] = {
996     { GREEK, 0, 0x00003c8 },
997     { ACUTE, 0, 0x00000fd },
998     { DIAERESIS, 0, 0x00000ff },
999     { CIRCUMFLEX, 0, 0x0000177 },
1000     { MACRON, 0, 0x0000233 },
1001     { SLASH, 0, 0x000024f },
1002     { DOTABOVE, 0, 0x0001e8f },
1003     { RING, 0, 0x0001e99 },
1004     { GRAVE, 0, 0x0001ef3 },
1005     { DOTBELOW, 0, 0x0001ef5 },
1006     { HOOKABOVE, 0, 0x0001ef7 },
1007     { TILDE, 0, 0x0001ef9 }
1008 };
1009 
1010 static struct gchr_transform trans_z[] = {
1011     { 0, 0, 0x000017f },
1012     { GREEK, 0, 0x00003b6 },
1013     { ACUTE, 0, 0x000017a },
1014     { DOTABOVE, 0, 0x000017c },
1015     { CARON, 0, 0x000017e },
1016     { SLASH, 0, 0x00001b6 },
1017     { CIRCUMFLEX, 0, 0x0001e91 },
1018     { DOTBELOW, 0, 0x0001e93 },
1019     { LINEBELOW, 0, 0x0001e95 }
1020 };
1021 
1022 static struct gchr_transform trans_braceleft[] = {
1023     { 0, 0, 0x000201c }
1024 };
1025 
1026 static struct gchr_transform trans_bar[] = {
1027     { 0, 0, 0x00000bb },
1028     { GREEK, 0, 0x000203a }
1029 };
1030 
1031 static struct gchr_transform trans_braceright[] = {
1032     { 0, 0, 0x000201c }
1033 };
1034 
1035 static struct gchr_transform trans_asciitilde[] = {
1036     { ANY, TILDE, 0x0000000 }
1037 };
1038 
1039 struct gchr_lookup _gdraw_chrlookup[95] = {
1040     /*   */ { 2, trans_space },
1041     /* ! */ { 1, trans_exclam },
1042     /* " */ { 1, trans_quotedbl },
1043     /* # */ { 2, trans_numbersign },
1044     /* $ */ { 2, trans_dollar },
1045     /* % */ { 0 },
1046     /* & */ { 0 },
1047     /* ' */ { 1, trans_quotesingle },
1048     /* ( */ { 0 },
1049     /* ) */ { 0 },
1050     /* * */ { 2, trans_asterisk },
1051     /* + */ { 1, trans_plus },
1052     /* , */ { 1, trans_comma },
1053     /* - */ { 2, trans_hyphenminus },
1054     /* . */ { 2, trans_period },
1055     /* / */ { 1, trans_slash },
1056     /* 0 */ { 1, trans_zero },
1057     /* 1 */ { 0 },
1058     /* 2 */ { 1, trans_two },
1059     /* 3 */ { 0 },
1060     /* 4 */ { 1, trans_four },
1061     /* 5 */ { 1, trans_five },
1062     /* 6 */ { 1, trans_six },
1063     /* 7 */ { 1, trans_seven },
1064     /* 8 */ { 0 },
1065     /* 9 */ { 0 },
1066     /* : */ { 1, trans_colon },
1067     /* ; */ { 1, trans_semicolon },
1068     /* < */ { 1, trans_less },
1069     /* = */ { 1, trans_equal },
1070     /* > */ { 2, trans_greater },
1071     /* ? */ { 1, trans_question },
1072     /* @ */ { 1, trans_at },
1073     /* A */ { 35, trans_A },
1074     /* B */ { 5, trans_B },
1075     /* C */ { 9, trans_C },
1076     /* D */ { 8, trans_D },
1077     /* E */ { 30, trans_E },
1078     /* F */ { 3, trans_F },
1079     /* G */ { 9, trans_G },
1080     /* H */ { 13, trans_H },
1081     /* I */ { 24, trans_I },
1082     /* J */ { 3, trans_J },
1083     /* K */ { 7, trans_K },
1084     /* L */ { 10, trans_L },
1085     /* M */ { 4, trans_M },
1086     /* N */ { 10, trans_N },
1087     /* O */ { 41, trans_O },
1088     /* P */ { 6, trans_P },
1089     /* Q */ { 2, trans_Q },
1090     /* R */ { 11, trans_R },
1091     /* S */ { 10, trans_S },
1092     /* T */ { 8, trans_T },
1093     /* U */ { 38, trans_U },
1094     /* V */ { 3, trans_V },
1095     /* W */ { 10, trans_W },
1096     /* X */ { 3, trans_X },
1097     /* Y */ { 11, trans_Y },
1098     /* Z */ { 8, trans_Z },
1099     /* [ */ { 1, trans_bracketleft },
1100     /* \ */ { 2, trans_backslash },
1101     /* ] */ { 1, trans_bracketright },
1102     /* ^ */ { 1, trans_asciicircum },
1103     /* _ */ { 2, trans_underscore },
1104     /* ` */ { 1, trans_grave },
1105     /* a */ { 38, trans_a },
1106     /* b */ { 5, trans_b },
1107     /* c */ { 9, trans_c },
1108     /* d */ { 8, trans_d },
1109     /* e */ { 31, trans_e },
1110     /* f */ { 4, trans_f },
1111     /* g */ { 10, trans_g },
1112     /* h */ { 16, trans_h },
1113     /* i */ { 30, trans_i },
1114     /* j */ { 4, trans_j },
1115     /* k */ { 7, trans_k },
1116     /* l */ { 10, trans_l },
1117     /* m */ { 5, trans_m },
1118     /* n */ { 11, trans_n },
1119     /* o */ { 41, trans_o },
1120     /* p */ { 6, trans_p },
1121     /* q */ { 2, trans_q },
1122     /* r */ { 12, trans_r },
1123     /* s */ { 11, trans_s },
1124     /* t */ { 10, trans_t },
1125     /* u */ { 44, trans_u },
1126     /* v */ { 3, trans_v },
1127     /* w */ { 11, trans_w },
1128     /* x */ { 3, trans_x },
1129     /* y */ { 12, trans_y },
1130     /* z */ { 9, trans_z },
1131     /* { */ { 1, trans_braceleft },
1132     /* | */ { 2, trans_bar },
1133     /* } */ { 1, trans_braceright },
1134     /* ~ */ { 1, trans_asciitilde },
1135 };
1136 
1137 struct gchr_accents _gdraw_accents[] = {
1138     { 0x0301, 0x0000001 },
1139     { 0x0300, 0x0000002 },
1140     { 0x0308, 0x0000004 },
1141     { 0x0302, 0x0000008 },
1142     { 0x0303, 0x0000010 },
1143     { 0x030a, 0x0000020 },
1144     { 0x0338, 0x0000040 },
1145     { 0x0306, 0x0000080 },
1146     { 0x030c, 0x0000100 },
1147     { 0x0307, 0x0000200 },
1148     { 0x0323, 0x0000400 },
1149     { 0x0327, 0x0000800 },
1150     { 0x0328, 0x0001000 },
1151     { 0x0304, 0x0002000 },
1152     { 0x030d, 0x8004000 },
1153     { 0x030b, 0x0004000 },
1154     { 0x030b, 0x0008000 },
1155     { 0x030b, 0x0010000 },
1156     { 0x030b, 0x0020000 },
1157     { 0x030b, 0x0040000 },
1158     { 0x030b, 0x0080000 },
1159     { 0x030b, 0x0100000 },
1160     { 0x030b, 0x0200000 },
1161     { 0x030b, 0x0400000 },
1162     { 0x030b, 0x0800000 },
1163     { 0, 0 },
1164 };
1165 
1166 uint32 _gdraw_chrs_any=ANY, _gdraw_chrs_ctlmask=GREEK, _gdraw_chrs_metamask=0;
1167