]> Pileus Git - ~andy/gtk/blob - modules/input/imti-et.c
Change FSF Address
[~andy/gtk] / modules / input / imti-et.c
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2000 Red Hat Software
3  * Copyright (C) 2000 SuSE Linux Ltd
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * Original author: Owen Taylor <otaylor@redhat.com>
19  * 
20  * Modified for Inuktitut - Robert Brady <robert@suse.co.uk>
21  * 
22  * Modified for Tigrigna - Daniel Yacob <locales@geez.org>
23  *
24  */
25
26 #include "config.h"
27 #include <stdio.h>
28 #include <string.h>
29
30 #include "gtk/gtk.h"
31 #include "gdk/gdkkeysyms.h"
32
33 #include "gtk/gtkimmodule.h"
34 #include "gtk/gtkintl.h"
35
36 GType type_ti_et_translit = 0;
37
38 static void ti_et_class_init (GtkIMContextSimpleClass *class);
39 static void ti_et_init (GtkIMContextSimple *im_context);
40
41 static void
42 ti_et_register_type (GTypeModule *module)
43 {
44   const GTypeInfo object_info =
45   {
46     sizeof (GtkIMContextSimpleClass),
47     (GBaseInitFunc) NULL,
48     (GBaseFinalizeFunc) NULL,
49     (GClassInitFunc) ti_et_class_init,
50     NULL,           /* class_finalize */
51     NULL,           /* class_data */
52     sizeof (GtkIMContextSimple),
53     0,
54     (GInstanceInitFunc) ti_et_init,
55   };
56
57   type_ti_et_translit = 
58     g_type_module_register_type (module,
59                                  GTK_TYPE_IM_CONTEXT_SIMPLE,
60                                  "GtkIMContextTigrignaEthiopia",
61                                  &object_info, 0);
62 }
63
64 #define SYL(a,b) \
65   a,  0,  0, 0, 0, 0, b+5, \
66   a, 'A', 0, 0, 0, 0, b+3, \
67   a, 'E', 0, 0, 0, 0, b+4, \
68   a, 'I', 0, 0, 0, 0, b+2, \
69   a, 'O', 0, 0, 0, 0, b+6, \
70   a, 'U', 0, 0, 0, 0, b+1, \
71   a, 'a', 0, 0, 0, 0, b+3, \
72   a, 'e', 0, 0, 0, 0, b, \
73   a, 'e', 'e', 0, 0, 0, b+4, \
74   a, 'i', 0, 0, 0, 0, b+2, \
75   a, 'o', 0, 0, 0, 0, b+6, \
76   a, 'u', 0, 0, 0, 0, b+1,
77
78 #define SYLW1(a,b) \
79   a,  0,  0, 0, 0, 0, b+5, \
80   a, 'A', 0, 0, 0, 0, b+3, \
81   a, 'E', 0, 0, 0, 0, b+4, \
82   a, 'I', 0, 0, 0, 0, b+2, \
83   a, 'O', 0, 0, 0, 0, b+6, \
84   a, 'U', 0, 0, 0, 0, b+1, \
85   a, 'W', 0, 0, 0, 0, b+7, \
86   a, 'W', 'A', 0, 0, 0, b+7, \
87   a, 'W', 'a', 0, 0, 0, b+7,
88 #define SYLW2(a,b) \
89   a, 'a', 0, 0, 0, 0, b+3, \
90   a, 'e', 0, 0, 0, 0, b, \
91   a, 'e', 'e', 0, 0, 0, b+4, \
92   a, 'i', 0, 0, 0, 0, b+2, \
93   a, 'o', 0, 0, 0, 0, b+6, \
94   a, 'u', 0, 0, 0, 0, b+1, \
95   a, 'w', 'w',   0, 0, 0, b+7, \
96   a, 'w', 'w', 'a', 0, 0, b+7,
97
98 #define SYLW(a,b) \
99   SYLW1(a,b)\
100   SYLW2(a,b)
101
102 #define SYLWW(a,b) \
103   a,  0,  0, 0, 0, 0, b+5, \
104   a, 'A', 0, 0, 0, 0, b+3, \
105   a, 'E', 0, 0, 0, 0, b+4, \
106   a, 'I', 0, 0, 0, 0, b+2, \
107   a, 'O', 0, 0, 0, 0, b+6, \
108   a, 'O', 'O', 0, 0, 0, b+8, \
109   a, 'O', 'o', 0, 0, 0, b+8, \
110   a, 'U', 0, 0, 0, 0, b+1, \
111   a, 'W', 0, 0, 0, 0, b+11, \
112   a, 'W', '\'', 0, 0, 0, b+13, \
113   a, 'W', 'A', 0, 0, 0, b+11, \
114   a, 'W', 'E', 0, 0, 0, b+12, \
115   a, 'W', 'I', 0, 0, 0, b+10, \
116   a, 'W', 'U', 0, 0, 0, b+13, \
117   a, 'W', 'a', 0, 0, 0, b+11, \
118   a, 'W', 'e', 0, 0, 0, b+8, \
119   a, 'W', 'e', 'e', 0, 0, b+12, \
120   a, 'W', 'i', 0, 0, 0, b+10, \
121   a, 'W', 'u', 0, 0, 0, b+13, \
122   a, 'a', 0, 0, 0, 0, b+3, \
123   a, 'e', 0, 0, 0, 0, b, \
124   a, 'e', 'e', 0, 0, 0, b+4, \
125   a, 'i', 0, 0, 0, 0, b+2, \
126   a, 'o', 0, 0, 0, 0, b+6, \
127   a, 'o', 'o', 0, 0, 0, b+8, \
128   a, 'u', 0, 0, 0, 0, b+1, \
129   a, 'w', 'w', 0, 0, 0, b+11, \
130   a, 'w', 'w', '\'', 0, 0, b+13, \
131   a, 'w', 'w', 'E', 0, 0, b+12, \
132   a, 'w', 'w', 'a', 0, 0, b+11, \
133   a, 'w', 'w', 'e', 0, 0, b+8, \
134   a, 'w', 'w', 'e', 'e', 0, b+12, \
135   a, 'w', 'w', 'i', 0, 0, b+10, \
136   a, 'w', 'w', 'u', 0, 0, b+13,
137
138 static guint16 ti_et_compose_seqs[] = {
139   /* do punctuation and numerals here */
140
141   '\'',   0, 0, 0, 0, 0, GDK_KEY_dead_grave,  /* hopefully this has no side effects */
142   '\'', '\'', 0, 0, 0, 0, GDK_KEY_apostrophe,
143   '\'', '1', 0, 0, 0, 0, 0x1369,
144   '\'', '1', '0', 0, 0, 0, 0x1372,
145   '\'', '1', '0', '0', 0, 0, 0x137b,
146   '\'', '1', '0', 'k', 0, 0, 0x137c,
147   /* '\'', '1', '0', '0', '0',  0, 0x137b,
148   '\'', '1', '0', '0', '0', '0', 0, 0x137c, */
149   '\'', '2', 0, 0, 0, 0, 0x136a,
150   '\'', '2', '0', 0, 0, 0, 0x1373,
151   '\'', '3', 0, 0, 0, 0, 0x136b,
152   '\'', '3', '0', 0, 0, 0, 0x1374,
153   '\'', '4', 0, 0, 0, 0, 0x136c,
154   '\'', '4', '0', 0, 0, 0, 0x1375,
155   '\'', '5', 0, 0, 0, 0, 0x136d,
156   '\'', '5', '0', 0, 0, 0, 0x1376,
157   '\'', '6', 0, 0, 0, 0, 0x136e,
158   '\'', '6', '0', 0, 0, 0, 0x1377,
159   '\'', '7', 0, 0, 0, 0, 0x136f,
160   '\'', '7', '0', 0, 0, 0, 0x1378,
161   '\'', '8', 0, 0, 0, 0, 0x1370,
162   '\'', '8', '0', 0, 0, 0, 0x1379,
163   '\'', '9', 0, 0, 0, 0, 0x1371,
164   '\'', '9', '0', 0, 0, 0, 0x137a,
165   ',',  0,  0, 0, 0, 0, 0x1363,
166   ',',  ',',  0, 0, 0, 0, ',',
167   '-',  0,  0, 0, 0, 0, '-',
168   '-',  ':',  0, 0, 0, 0, 0x1365,
169   ':',  0,  0, 0, 0, 0, 0x1361,
170   ':',  '-',  0, 0, 0, 0, 0x1366,
171   ':',  ':',  0, 0, 0, 0, 0x1362,
172   ':',  ':',  ':', 0, 0, 0, ':',
173   ':',  '|',  ':', 0, 0, 0, 0x1368,
174   ';',  0,  0, 0, 0, 0, 0x1364,
175   ';',  ';',  0, 0, 0, 0, ';',
176   '<',  0,  0, 0, 0, 0, '<',
177   '<',  '<',  0, 0, 0, 0, 0x00AB,
178   '>',  0,  0, 0, 0, 0, '>',
179   '>',  '>',  0, 0, 0, 0, 0x00BB,
180   '?',  0,  0, 0, 0, 0, '?',
181   '?',  '?',  0, 0, 0, 0, 0x1367,
182   'A',  0,  0,  0,  0, 0, 0x12A0,
183   'A','A',  0,  0,  0, 0, 0x12D0,
184   SYLW('B', 0x1260)
185   SYLW('C', 0x1328)
186   SYLW('D', 0x12f8)
187   'E',  0,  0,  0,  0, 0, 0x12A4,
188   'E','E',  0,  0,  0, 0, 0x12D4,
189   SYLW1('F', 0x1348)
190   'F', 'Y',   0,  0,  0, 0, 0x135A,
191   'F', 'Y', 'A',  0,  0, 0, 0x135A,
192   'F', 'Y', 'a',  0,  0, 0, 0x135A,
193   SYLW2('F', 0x1348)
194   SYL('G', 0x1318)
195   SYLW('H', 0x1210)
196   'I',  0,  0,  0,  0, 0, 0x12A5,
197   'I','A',  0,  0,  0, 0, 0x12A3,
198   'I','E',  0,  0,  0, 0, 0x12A4,
199   'I','I',  0,  0,  0, 0, 0x12D5,
200   'I','I','E',  0,  0, 0, 0x12D4,
201   'I','I','a',  0,  0, 0, 0x12D3,
202   'I','I','e',  0,  0, 0, 0x12D0,
203   'I','I','i',  0,  0, 0, 0x12D2,
204   'I','I','o',  0,  0, 0, 0x12D6,
205   'I','I','u',  0,  0, 0, 0x12D1,
206   'I','O',  0,  0,  0, 0, 0x12A6,
207   'I','U',  0,  0,  0, 0, 0x12A1,
208   'I','W',  0,  0,  0, 0, 0x12A7,
209   'I','a',  0,  0,  0, 0, 0x12A3,
210   'I','e',  0,  0,  0, 0, 0x12A0,
211   'I','i',  0,  0,  0, 0, 0x12A2,
212   'I','o',  0,  0,  0, 0, 0x12A6,
213   'I','u',  0,  0,  0, 0, 0x12A1,
214   SYLWW('K', 0x12b8)
215   SYLW('L', 0x1208)
216   SYLW1('M', 0x1218)
217   'M', 'Y',   0,  0,  0, 0, 0x1359,
218   'M', 'Y', 'A',  0,  0, 0, 0x1359,
219   'M', 'Y', 'a',  0,  0, 0, 0x1359,
220   SYLW2('M', 0x1218)
221   SYLW('N', 0x1298)
222   'O',  0,  0,  0,  0, 0, 0x12A6,
223   'O','O',  0,  0,  0, 0, 0x12D6,
224   SYLW('P', 0x1330)
225   SYLWW('Q', 0x1250) 
226   SYLW1('R', 0x1228)
227   'R', 'Y',   0,  0,  0, 0, 0x1358,
228   'R', 'Y', 'A',  0,  0, 0, 0x1358,
229   'R', 'Y', 'a',  0,  0, 0, 0x1358,
230   SYLW2('R', 0x1228)
231   'S',  0,  0, 0, 0, 0, 0x1338+5,
232   'S', 'A', 0, 0, 0, 0, 0x1338+3,
233   'S', 'E', 0, 0, 0, 0, 0x1338+4,
234   'S', 'I', 0, 0, 0, 0, 0x1338+2,
235   'S', 'O', 0, 0, 0, 0, 0x1338+6,
236   'S', 'S', 0, 0, 0, 0, 0x1340+5,
237   'S', 'S', 'A', 0, 0, 0, 0x1340+3,
238   'S', 'S', 'E', 0, 0, 0, 0x1340+4,
239   'S', 'S', 'I', 0, 0, 0, 0x1340+2,
240   'S', 'S', 'O', 0, 0, 0, 0x1340+6,
241   'S', 'S', 'U', 0, 0, 0, 0x1340+1,
242   'S', 'S', 'a', 0, 0, 0, 0x1340+3,
243   'S', 'S', 'e', 0, 0, 0, 0x1340,
244   'S', 'S', 'e', 'e', 0, 0, 0x1340+4,
245   'S', 'S', 'i', 0, 0, 0, 0x1340+2,
246   'S', 'S', 'o', 0, 0, 0, 0x1340+6,
247   'S', 'S', 'u', 0, 0, 0, 0x1340+1,
248   'S', 'U', 0, 0, 0, 0, 0x1338+1,
249   'S', 'W', 0, 0, 0, 0, 0x1338+7,
250   'S', 'W', 'A', 0, 0, 0, 0x1338+7,
251   'S', 'W', 'a', 0, 0, 0, 0x1338+7,
252   'S', 'a', 0, 0, 0, 0, 0x1338+3,
253   'S', 'e', 0, 0, 0, 0, 0x1338,
254   'S', 'e', 'e', 0, 0, 0, 0x1338+4,
255   'S', 'i', 0, 0, 0, 0, 0x1338+2,
256   'S', 'o', 0, 0, 0, 0, 0x1338+6,
257   'S', 'u', 0, 0, 0, 0, 0x1338+1,
258   'S', 'w', 'w',   0, 0, 0, 0x1338+7,
259   'S', 'w', 'w', 'a', 0, 0, 0x1338+7,
260   SYLW('T', 0x1320)
261   'U',  0,  0,  0,  0, 0, 0x12A1,
262   'U','U',  0,  0,  0, 0, 0x12D1,
263   SYLW('V', 0x1268)
264   SYL('W', 0x12c8)
265   SYLW('X', 0x1238)
266   SYL('Y', 0x12e8)
267   SYLW('Z', 0x12e0)
268
269   /* much, much work to be done for lone vowels */
270   'a',  0,  0,  0,  0, 0, 0x12A3,
271   'a','a',  0,  0,  0, 0, 0x12D3,
272   'a','a','a',  0,  0, 0, 0x12D0,
273   'a','a','a','a',  0, 0, 0x12A0,
274   SYLW('b', 0x1260)
275   SYLW('c', 0x1278)
276   SYLW('d', 0x12f0)
277   'e',  0,  0,  0,  0, 0, 0x12A5,
278   'e','A',  0,  0,  0, 0, 0x12A3,
279   'e','E',  0,  0,  0, 0, 0x12A4,
280   'e','I',  0,  0,  0, 0, 0x12A2,
281   'e','O',  0,  0,  0, 0, 0x12A6,
282   'e','U',  0,  0,  0, 0, 0x12A1,
283   'e','W',  0,  0,  0, 0, 0x12A7,
284   'e','a',  0,  0,  0, 0, 0x12D0,
285   'e','e',  0,  0,  0, 0, 0x12D5,
286   'e','e','E',  0,  0, 0, 0x12D4,
287   'e','e','a',  0,  0, 0, 0x12D3,
288   'e','e','e',  0,  0, 0, 0x12D0,
289   'e','e','i',  0,  0, 0, 0x12D2,
290   'e','e','o',  0,  0, 0, 0x12D6,
291   'e','e','u',  0,  0, 0, 0x12D1,
292   'e','i',  0,  0,  0, 0, 0x12A2,
293   'e','o',  0,  0,  0, 0, 0x12A6,
294   'e','u',  0,  0,  0, 0, 0x12A1,
295   SYLW1('f', 0x1348)
296   'f', 'Y',   0,  0,  0, 0, 0x135A,
297   'f', 'Y', 'A',  0,  0, 0, 0x135A,
298   'f', 'Y', 'a',  0,  0, 0, 0x135A,
299   SYLW2('f', 0x1348)
300   SYLWW('g', 0x1308)
301   'h',  0,  0, 0, 0, 0, 0x1200+5,
302   'h', 'A', 0, 0, 0, 0, 0x1200+3,
303   'h', 'E', 0, 0, 0, 0, 0x1200+4,
304   'h', 'I', 0, 0, 0, 0, 0x1200+2,
305   'h', 'O', 0, 0, 0, 0, 0x1200+6,
306   'h', 'U', 0, 0, 0, 0, 0x1200+1,
307   'h', 'W', 0, 0, 0, 0, 0x1280+11,
308   'h', 'W', '\'', 0, 0, 0, 0x1280+13,
309   'h', 'W', 'A', 0, 0, 0, 0x1280+11,
310   'h', 'W', 'E', 0, 0, 0, 0x1280+12,
311   'h', 'W', 'I', 0, 0, 0, 0x1280+10,
312   'h', 'W', 'U', 0, 0, 0, 0x1280+13,
313   'h', 'W', 'a', 0, 0, 0, 0x1280+11,
314   'h', 'W', 'e', 0, 0, 0, 0x1280+8,
315   'h', 'W', 'e', 'e', 0, 0, 0x1280+12,
316   'h', 'W', 'i', 0, 0, 0, 0x1280+10,
317   'h', 'W', 'u', 0, 0, 0, 0x1280+13,
318   'h', 'a', 0, 0, 0, 0, 0x1200+3,
319   'h', 'e', 0, 0, 0, 0, 0x1200,
320   'h', 'e', 'e', 0, 0, 0, 0x1200+4,
321   'h', 'h', 0, 0, 0, 0, 0x1280+5,
322   'h', 'h', 'A', 0, 0, 0, 0x1280+3,
323   'h', 'h', 'E', 0, 0, 0, 0x1280+4,
324   'h', 'h', 'I', 0, 0, 0, 0x1280+2,
325   'h', 'h', 'O', 0, 0, 0, 0x1280+6,
326   'h', 'h', 'O', 'O', 0, 0, 0x1280+8,
327   'h', 'h', 'U', 0, 0, 0, 0x1280+1,
328   'h', 'h', 'W', 0, 0, 0, 0x1280+11,
329   'h', 'h', 'W', '\'', 0, 0, 0x1280+13,
330   'h', 'h', 'W', 'A', 0, 0, 0x1280+11,
331   'h', 'h', 'W', 'E', 0, 0, 0x1280+12,
332   'h', 'h', 'W', 'I', 0, 0, 0x1280+10,
333   'h', 'h', 'W', 'U', 0, 0, 0x1280+13,
334   'h', 'h', 'W', 'a', 0, 0, 0x1280+11,
335   'h', 'h', 'W', 'e', 0, 0, 0x1280+8,
336   'h', 'h', 'W', 'e', 'e', 0, 0x1280+12,
337   'h', 'h', 'W', 'i', 0, 0, 0x1280+10,
338   'h', 'h', 'W', 'u', 0, 0, 0x1280+13,
339   'h', 'h', 'a', 0, 0, 0, 0x1280+3,
340   'h', 'h', 'e', 0, 0, 0, 0x1280,
341   'h', 'h', 'e', 'e', 0, 0, 0x1280+4,
342   'h', 'h', 'i', 0, 0, 0, 0x1280+2,
343   'h', 'h', 'o', 0, 0, 0, 0x1280+6,
344   'h', 'h', 'o', 'o', 0, 0, 0x1280+8,
345   'h', 'h', 'u', 0, 0, 0, 0x1280+1,
346   'h', 'h', 'w', 'w',   0, 0, 0x1280+11,
347   'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
348   'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
349   'h', 'h', 'w', 'w', '\'', 0, 0x1280+13,
350   'h', 'h', 'w', 'w', 'E', 0, 0x1280+12,
351   'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
352   'h', 'h', 'w', 'w', 'e', 0, 0x1280+8,
353   /* 'h', 'h', 'w', 'w', 'e', 'e', 0, 0x1280+12,  too long for now */
354   'h', 'h', 'w', 'w', 'i', 0, 0x1280+10,
355   'h', 'h', 'w', 'w', 'u', 0, 0x1280+13,
356   'h', 'i', 0, 0, 0, 0, 0x1200+2,
357   'h', 'o', 0, 0, 0, 0, 0x1200+6,
358   'h', 'u', 0, 0, 0, 0, 0x1200+1,
359   'h', 'w', 'w',   0, 0, 0, 0x1280+11,
360   'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
361   'h', 'w', 'w', 0, 0, 0, 0x1280+11,
362   'h', 'w', 'w', '\'', 0, 0, 0x1280+13,
363   'h', 'w', 'w', 'E', 0, 0, 0x1280+12,
364   'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
365   'h', 'w', 'w', 'e', 0, 0, 0x1280+8,
366   'h', 'w', 'w', 'e', 'e', 0, 0x1280+12,
367   'h', 'w', 'w', 'i', 0, 0, 0x1280+10,
368   'h', 'w', 'w', 'u', 0, 0, 0x1280+13,
369   'i',  0,  0,  0,  0, 0, 0x12A2,
370   'i', 'i', 0,  0,  0, 0, 0x12D2,
371   SYLW('j', 0x1300)
372   SYLWW('k', 0x12a8)
373   SYLW('l', 0x1208)
374   SYLW1('m', 0x1218)
375   'm', 'Y',   0,  0,  0, 0, 0x1359,
376   'm', 'Y', 'A',  0,  0, 0, 0x1359,
377   'm', 'Y', 'a',  0,  0, 0, 0x1359,
378   SYLW2('m', 0x1218)
379   SYLW('n', 0x1290)
380   'o',  0,  0,  0,  0, 0, 0x12A6,
381   'o','o',  0,  0,  0, 0, 0x12D6,
382   SYLW('p', 0x1350)
383   SYLWW('q', 0x1240)
384   SYLW1('r', 0x1228)
385   'r', 'Y',   0,  0,  0, 0, 0x1358,
386   'r', 'Y', 'A',  0,  0, 0, 0x1358,
387   'r', 'Y', 'a',  0,  0, 0, 0x1358,
388   SYLW2('r', 0x1228)
389   's',  0,  0, 0, 0, 0, 0x1230+5,
390   's', 'A', 0, 0, 0, 0, 0x1230+3,
391   's', 'E', 0, 0, 0, 0, 0x1230+4,
392   's', 'I', 0, 0, 0, 0, 0x1230+2,
393   's', 'O', 0, 0, 0, 0, 0x1230+6,
394   's', 'U', 0, 0, 0, 0, 0x1230+1,
395   's', 'W', 0, 0, 0, 0, 0x1230+7,
396   's', 'W', 'A', 0, 0, 0, 0x1230+7,
397   's', 'W', 'a', 0, 0, 0, 0x1230+7,
398   's', 'a', 0, 0, 0, 0, 0x1230+3,
399   's', 'e', 0, 0, 0, 0, 0x1230,
400   's', 'e', 'e', 0, 0, 0, 0x1230+4,
401   's', 'i', 0, 0, 0, 0, 0x1230+2,
402   's', 'o', 0, 0, 0, 0, 0x1230+6,
403   's', 's', 0, 0, 0, 0, 0x1220+5,
404   's', 's', 'A', 0, 0, 0, 0x1220+3,
405   's', 's', 'E', 0, 0, 0, 0x1220+4,
406   's', 's', 'I', 0, 0, 0, 0x1220+2,
407   's', 's', 'O', 0, 0, 0, 0x1220+6,
408   's', 's', 'U', 0, 0, 0, 0x1220+1,
409   's', 's', 'W', 0, 0, 0, 0x1220+7,
410   's', 's', 'W', 'A', 0, 0, 0x1220+7,
411   's', 's', 'W', 'a', 0, 0, 0x1220+7,
412   's', 's', 'a', 0, 0, 0, 0x1220+3,
413   's', 's', 'e', 0, 0, 0, 0x1220,
414   's', 's', 'e', 'e', 0, 0, 0x1220+4,
415   's', 's', 'i', 0, 0, 0, 0x1220+2,
416   's', 's', 'o', 0, 0, 0, 0x1220+6,
417   's', 's', 'u', 0, 0, 0, 0x1220+1,
418   's', 's', 'w', 'w', 0, 0, 0x1220+7,
419   's', 's', 'w', 'w', 'a', 0, 0x1220+7,
420   's', 'u', 0, 0, 0, 0, 0x1230+1,
421   's', 'w', 'w',   0, 0, 0, 0x1230+7,
422   's', 'w', 'w', 'a', 0, 0, 0x1230+7,
423   SYLW('t', 0x1270)
424   'u',  0,  0,  0,  0, 0, 0x12A1,
425   'u','u',  0,  0,  0, 0, 0x12D1,
426   SYLW('v', 0x1268)
427   SYL('w', 0x12c8)
428   SYLW('x', 0x1238)
429   SYL('y', 0x12e8)
430   SYLW('z', 0x12d8)
431   GDK_KEY_Shift_L, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
432   GDK_KEY_Shift_R, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
433 };
434
435 static void
436 ti_et_class_init (GtkIMContextSimpleClass *class)
437 {
438 }
439
440 static void
441 ti_et_init (GtkIMContextSimple *im_context)
442 {
443   gtk_im_context_simple_add_table (im_context,
444                                    ti_et_compose_seqs,
445                                    5,
446                                    G_N_ELEMENTS (ti_et_compose_seqs) / (5 + 2));
447 }
448
449 static const GtkIMContextInfo ti_et_info = { 
450   "ti_et",                 /* ID */
451   N_("Tigrigna-Ethiopian (EZ+)"),         /* Human readable name */
452   GETTEXT_PACKAGE,         /* Translation domain */
453    GTK_LOCALEDIR,          /* Dir for bindtextdomain (not strictly needed for "gtk+") */
454   "ti"                     /* Languages for which this module is the default */
455 };
456
457 static const GtkIMContextInfo *info_list[] = {
458   &ti_et_info
459 };
460
461 #ifndef INCLUDE_IM_ti_et
462 #define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
463 #else
464 #define MODULE_ENTRY(type, function) type _gtk_immodule_ti_et_ ## function
465 #endif
466
467 MODULE_ENTRY (void, init) (GTypeModule *module)
468 {
469   ti_et_register_type (module);
470 }
471
472 MODULE_ENTRY (void, exit) (void)
473 {
474 }
475
476 MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
477                            int                      *n_contexts)
478 {
479   *contexts = info_list;
480   *n_contexts = G_N_ELEMENTS (info_list);
481 }
482
483 MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
484 {
485   if (strcmp (context_id, "ti_et") == 0)
486     return g_object_new (type_ti_et_translit, NULL);
487   else
488     return NULL;
489 }