]> Pileus Git - ~andy/gtk/blob - modules/input/imcyrillic-translit.c
Include "config.h" instead of <config.h> Command used: find -name
[~andy/gtk] / modules / input / imcyrillic-translit.c
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2000 Red Hat Software
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  *
19  * Author: Owen Taylor <otaylor@redhat.com>
20  *
21  */
22
23 #include "config.h"
24 #include <string.h>
25
26 #include "gtk/gtk.h"
27 #include "gdk/gdkkeysyms.h"
28
29 #include "gtk/gtkimmodule.h"
30 #include "gtk/gtkintl.h"
31
32 GType type_cyrillic_translit = 0;
33
34 static void cyrillic_translit_class_init (GtkIMContextSimpleClass *class);
35 static void cyrillic_translit_init (GtkIMContextSimple *im_context);
36
37 static void
38 cyrillic_translit_register_type (GTypeModule *module)
39 {
40   static const GTypeInfo object_info =
41   {
42     sizeof (GtkIMContextSimpleClass),
43     (GBaseInitFunc) NULL,
44     (GBaseFinalizeFunc) NULL,
45     (GClassInitFunc) cyrillic_translit_class_init,
46     NULL,           /* class_finalize */
47     NULL,           /* class_data */
48     sizeof (GtkIMContextSimple),
49     0,
50     (GInstanceInitFunc) cyrillic_translit_init,
51   };
52
53   type_cyrillic_translit = 
54     g_type_module_register_type (module,
55                                  GTK_TYPE_IM_CONTEXT_SIMPLE,
56                                  "GtkIMContextCyrillicTranslit",
57                                  &object_info, 0);
58 }
59
60 /* The sequences here match the sequences used in the emacs quail
61  * mode cryllic-translit; they allow entering all characters
62  * in iso-8859-5
63  */
64 static guint16 cyrillic_compose_seqs[] = {
65   GDK_apostrophe,    0,      0,      0,      0,      0x44C,     /* CYRILLIC SMALL LETTER SOFT SIGN */
66   GDK_apostrophe,    GDK_apostrophe,      0,      0,      0,      0x42C,        /* CYRILLIC CAPITAL LETTER SOFT SIGN */
67   GDK_slash,    GDK_C,  GDK_H,      0,      0,      0x040B, /* CYRILLIC CAPITAL LETTER TSHE */
68   GDK_slash,    GDK_C,  GDK_h,      0,      0,      0x040B, /* CYRILLIC CAPITAL LETTER TSHE */
69   GDK_slash,    GDK_D,  0,      0,      0,      0x0402, /* CYRILLIC CAPITAL LETTER DJE */
70   GDK_slash,    GDK_E,  0,      0,      0,      0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */
71   GDK_slash,    GDK_G,  0,      0,      0,      0x0403, /* CYRILLIC CAPITAL LETTER GJE */
72   GDK_slash,    GDK_I,  0,      0,      0,      0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
73   GDK_slash,    GDK_J,  0,      0,      0,      0x0408, /* CYRILLIC CAPITAL LETTER JE */
74   GDK_slash,    GDK_K,  0,      0,      0,      0x040C, /* CYRILLIC CAPITAL LETTER KJE */
75   GDK_slash,    GDK_L,  0,      0,      0,      0x0409, /* CYRILLIC CAPITAL LETTER LJE */
76   GDK_slash,    GDK_N,  0,      0,      0,      0x040A, /* CYRILLIC CAPITAL LETTER NJE */
77   GDK_slash,    GDK_S,  0,      0,      0,      0x0405, /* CYRILLIC CAPITAL LETTER DZE */
78   GDK_slash,    GDK_S,  GDK_H,  GDK_T,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
79   GDK_slash,    GDK_S,  GDK_H,  GDK_t,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
80   GDK_slash,    GDK_S,  GDK_h,  GDK_t,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
81   GDK_slash,    GDK_T,  0,      0,      0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
82   GDK_slash,    GDK_Z,  0,      0,      0,      0x040F, /* CYRILLIC CAPITAL LETTER DZHE */
83   GDK_slash,    GDK_c,  GDK_h,      0,      0,      0x045B, /* CYRILLIC SMALL LETTER TSHE */
84   GDK_slash,    GDK_d,  0,      0,      0,      0x0452, /* CYRILLIC SMALL LETTER DJE */
85   GDK_slash,    GDK_e,  0,      0,      0,      0x0454, /* CYRILLIC SMALL LETTER UKRAINIAN IE */
86   GDK_slash,    GDK_g,  0,      0,      0,      0x0453, /* CYRILLIC SMALL LETTER GJE */
87   GDK_slash,    GDK_i,  0,      0,      0,      0x0456, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
88   GDK_slash,    GDK_j,  0,      0,      0,      0x0458, /* CYRILLIC SMALL LETTER JE */
89   GDK_slash,    GDK_k,  0,      0,      0,      0x045C, /* CYRILLIC SMALL LETTER KJE */
90   GDK_slash,    GDK_l,  0,      0,      0,      0x0459, /* CYRILLIC SMALL LETTER LJE */
91   GDK_slash,    GDK_n,  0,      0,      0,      0x045A, /* CYRILLIC SMALL LETTER NJE */
92   GDK_slash,    GDK_s,  0,      0,      0,      0x0455, /* CYRILLIC SMALL LETTER DZE */
93   GDK_slash,    GDK_s,  GDK_h,  GDK_t,  0,      0x0449, /* CYRILLIC SMALL LETTER SHCH */
94   GDK_slash,    GDK_t,  0,      0,      0,      0x0449, /* CYRILLIC SMALL LETTER SHCH */
95   GDK_slash,    GDK_z,  0,      0,      0,      0x045F, /* CYRILLIC SMALL LETTER DZHE */
96   GDK_A,        0,      0,      0,      0,      0x0410, /* CYRILLIC CAPITAL LETTER A */
97   GDK_B,        0,      0,      0,      0,      0x0411, /* CYRILLIC CAPITAL LETTER BE */
98   GDK_C,        0,      0,      0,      0,      0x0426, /* CYRILLIC CAPITAL LETTER TSE */
99   GDK_C,        GDK_H,  0,      0,      0,      0x0427, /* CYRILLIC CAPITAL LETTER CHE */
100   GDK_C,        GDK_h,  0,      0,      0,      0x0427, /* CYRILLIC CAPITAL LETTER CHE */
101   GDK_D,        0,      0,      0,      0,      0x0414, /* CYRILLIC CAPITAL LETTER DE */
102   GDK_E,        0,      0,      0,      0,      0x0415, /* CYRILLIC CAPITAL LETTER IE */
103   GDK_E,        GDK_apostrophe, 0,      0,      0,      0x042D, /* CYRILLIC CAPITAL LETTER E */
104   GDK_F,        0,      0,      0,      0,      0x0424, /* CYRILLIC CAPITAL LETTER EF */
105   GDK_G,        0,      0,      0,      0,      0x0413, /* CYRILLIC CAPITAL LETTER GE */
106   GDK_H,        0,      0,      0,      0,      0x0425, /* CYRILLIC CAPITAL LETTER HA */
107   GDK_I,        0,      0,      0,      0,      0x0418, /* CYRILLIC CAPITAL LETTER I */
108   GDK_J,        0,      0,      0,      0,      0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
109   GDK_J,        GDK_apostrophe, 0,      0,      0,      0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
110   GDK_J,        GDK_A,  0,      0,      0,      0x042F, /* CYRILLIC CAPITAL LETTER YA */
111   GDK_J,        GDK_I,  0,      0,      0,      0x0407, /* CYRILLIC CAPITAL LETTER YI */
112   GDK_J,        GDK_O,  0,      0,      0,      0x0401, /* CYRILLIC CAPITAL LETTER YO */
113   GDK_J,        GDK_U,  0,      0,      0,      0x042E, /* CYRILLIC CAPITAL LETTER YA */
114   GDK_J,        GDK_a,  0,      0,      0,      0x042F, /* CYRILLIC CAPITAL LETTER YA */
115   GDK_J,        GDK_i,  0,      0,      0,      0x0407, /* CYRILLIC CAPITAL LETTER YI */
116   GDK_J,        GDK_o,  0,      0,      0,      0x0401, /* CYRILLIC CAPITAL LETTER YO */
117   GDK_J,        GDK_u,  0,      0,      0,      0x042E, /* CYRILLIC CAPITAL LETTER YA */
118   GDK_K,        0,      0,      0,      0,      0x041A, /* CYRILLIC CAPITAL LETTER KA */
119   GDK_K,        GDK_H,  0,      0,      0,      0x0425, /* CYRILLIC CAPITAL LETTER HA */
120   GDK_L,        0,      0,      0,      0,      0x041B, /* CYRILLIC CAPITAL LETTER EL */
121   GDK_M,        0,      0,      0,      0,      0x041C, /* CYRILLIC CAPITAL LETTER EM */
122   GDK_N,        0,      0,      0,      0,      0x041D, /* CYRILLIC CAPITAL LETTER EN */
123   GDK_O,        0,      0,      0,      0,      0x041E, /* CYRILLIC CAPITAL LETTER O */
124   GDK_P,        0,      0,      0,      0,      0x041F, /* CYRILLIC CAPITAL LETTER PE */
125   GDK_Q,        0,      0,      0,      0,      0x042F, /* CYRILLIC CAPITAL LETTER YA */
126   GDK_R,        0,      0,      0,      0,      0x0420, /* CYRILLIC CAPITAL LETTER ER */
127   GDK_S,        0,      0,      0,      0,      0x0421, /* CYRILLIC CAPITAL LETTER ES */
128   GDK_S,        GDK_H,  0,      0,      0,      0x0428, /* CYRILLIC CAPITAL LETTER SHA */
129   GDK_S,        GDK_H,  GDK_C,  GDK_H,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
130   GDK_S,        GDK_H,  GDK_C,  GDK_h,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
131   GDK_S,        GDK_H,  GDK_c,  GDK_h,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
132   GDK_S,        GDK_H,  GDK_c,  GDK_h,  0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
133   GDK_S,        GDK_J,  0,      0,      0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
134   GDK_S,        GDK_h,  0,      0,      0,      0x0428, /* CYRILLIC CAPITAL LETTER SHA */
135   GDK_S,        GDK_j,  0,      0,      0,      0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
136   GDK_T,        0,      0,      0,      0,      0x0422, /* CYRILLIC CAPITAL LETTER TE */
137   GDK_U,        0,      0,      0,      0,      0x0423, /* CYRILLIC CAPITAL LETTER U */
138   GDK_U,        GDK_apostrophe, 0,      0,      0,      0x040E, /* CYRILLIC CAPITAL LETTER SHORT */
139   GDK_V,        0,      0,      0,      0,      0x0412, /* CYRILLIC CAPITAL LETTER VE */
140   GDK_W,        0,      0,      0,      0,      0x0412, /* CYRILLIC CAPITAL LETTER VE */
141   GDK_X,        0,      0,      0,      0,      0x0425, /* CYRILLIC CAPITAL LETTER HA */
142   GDK_Y,        0,      0,      0,      0,      0x042B, /* CYRILLIC CAPITAL LETTER YERU */
143   GDK_Y,        GDK_A,  0,      0,      0,      0x042F, /* CYRILLIC CAPITAL LETTER YA */
144   GDK_Y,        GDK_I,  0,      0,      0,      0x0407, /* CYRILLIC CAPITAL LETTER YI */
145   GDK_Y,        GDK_O,  0,      0,      0,      0x0401, /* CYRILLIC CAPITAL LETTER YO */
146   GDK_Y,        GDK_U,  0,      0,      0,      0x042E, /* CYRILLIC CAPITAL LETTER YU */
147   GDK_Y,        GDK_a,  0,      0,      0,      0x042F, /* CYRILLIC CAPITAL LETTER YA */
148   GDK_Y,        GDK_i,  0,      0,      0,      0x0407, /* CYRILLIC CAPITAL LETTER YI */
149   GDK_Y,        GDK_o,  0,      0,      0,      0x0401, /* CYRILLIC CAPITAL LETTER YO */
150   GDK_Y,        GDK_u,  0,      0,      0,      0x042E, /* CYRILLIC CAPITAL LETTER YU */
151   GDK_Z,        0,      0,      0,      0,      0x0417, /* CYRILLIC CAPITAL LETTER ZE */
152   GDK_Z,        GDK_H,  0,      0,      0,      0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
153   GDK_Z,        GDK_h,  0,      0,      0,      0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
154   GDK_a,        0,      0,      0,      0,      0x0430, /* CYRILLIC SMALL LETTER A */
155   GDK_b,        0,      0,      0,      0,      0x0431, /* CYRILLIC SMALL LETTER BE */
156   GDK_c,        0,      0,      0,      0,      0x0446, /* CYRILLIC SMALL LETTER TSE */
157   GDK_c,        GDK_h,  0,      0,      0,      0x0447, /* CYRILLIC SMALL LETTER CHE */
158   GDK_d,        0,      0,      0,      0,      0x0434, /* CYRILLIC SMALL LETTER DE */
159   GDK_e,        0,      0,      0,      0,      0x0435, /* CYRILLIC SMALL LETTER IE */
160   GDK_e,        GDK_apostrophe, 0,      0,      0,      0x044D, /* CYRILLIC SMALL LETTER E */
161   GDK_f,        0,      0,      0,      0,      0x0444, /* CYRILLIC SMALL LETTER EF */
162   GDK_g,        0,      0,      0,      0,      0x0433, /* CYRILLIC SMALL LETTER GE */
163   GDK_h,        0,      0,      0,      0,      0x0445, /* CYRILLIC SMALL LETTER HA */
164   GDK_i,        0,      0,      0,      0,      0x0438, /* CYRILLIC SMALL LETTER I */
165   GDK_j,        0,      0,      0,      0,      0x0439, /* CYRILLIC SMALL LETTER SHORT I */
166   GDK_j,        GDK_apostrophe, 0,      0,      0,      0x0439, /* CYRILLIC SMALL LETTER SHORT I */
167   GDK_j,        GDK_a,  0,      0,      0,      0x044F, /* CYRILLIC SMALL LETTER YU */
168   GDK_j,        GDK_i,  0,      0,      0,      0x0457, /* CYRILLIC SMALL LETTER YI */
169   GDK_j,        GDK_o,  0,      0,      0,      0x0451, /* CYRILLIC SMALL LETTER YO */
170   GDK_j,        GDK_u,  0,      0,      0,      0x044E, /* CYRILLIC SMALL LETTER YA */
171   GDK_k,        0,      0,      0,      0,      0x043A, /* CYRILLIC SMALL LETTER KA */
172   GDK_k,        GDK_h,  0,      0,      0,      0x0445, /* CYRILLIC SMALL LETTER HA */
173   GDK_l,        0,      0,      0,      0,      0x043B, /* CYRILLIC SMALL LETTER EL */
174   GDK_m,        0,      0,      0,      0,      0x043C, /* CYRILLIC SMALL LETTER EM */
175   GDK_n,        0,      0,      0,      0,      0x043D, /* CYRILLIC SMALL LETTER EN */
176   GDK_o,        0,      0,      0,      0,      0x043E, /* CYRILLIC SMALL LETTER O */
177   GDK_p,        0,      0,      0,      0,      0x043F, /* CYRILLIC SMALL LETTER PE */
178   GDK_q,        0,      0,      0,      0,      0x044F, /* CYRILLIC SMALL LETTER YA */
179   GDK_r,        0,      0,      0,      0,      0x0440, /* CYRILLIC SMALL LETTER ER */
180   GDK_s,        0,      0,      0,      0,      0x0441, /* CYRILLIC SMALL LETTER ES */
181   GDK_s,        GDK_h,  0,      0,      0,      0x0448, /* CYRILLIC SMALL LETTER SHA */
182   GDK_s,        GDK_h,  GDK_c,  GDK_h,  0,      0x0449, /* CYRILLIC SMALL LETTER SHCA */
183   GDK_s,        GDK_j,  0,      0,      0,      0x0449, /* CYRILLIC SMALL LETTER SHCA */
184   GDK_t,        0,      0,      0,      0,      0x0442, /* CYRILLIC SMALL LETTER TE */
185   GDK_u,        0,      0,      0,      0,      0x0443, /* CYRILLIC SMALL LETTER U */
186   GDK_u,        GDK_apostrophe, 0,      0,      0,      0x045E, /* CYRILLIC SMALL LETTER SHORT */
187   GDK_v,        0,      0,      0,      0,      0x0432, /* CYRILLIC SMALL LETTER VE */
188   GDK_w,        0,      0,      0,      0,      0x0432, /* CYRILLIC SMALL LETTER VE */
189   GDK_x,        0,      0,      0,      0,      0x0445, /* CYRILLIC SMALL LETTER HA */
190   GDK_y,        0,      0,      0,      0,      0x044B, /* CYRILLIC SMALL LETTER YERU */
191   GDK_y,        GDK_a,  0,      0,      0,      0x044F, /* CYRILLIC SMALL LETTER YU */
192   GDK_y,        GDK_i,  0,      0,      0,      0x0457, /* CYRILLIC SMALL LETTER YI */
193   GDK_y,        GDK_o,  0,      0,      0,      0x0451, /* CYRILLIC SMALL LETTER YO */
194   GDK_y,        GDK_u,  0,      0,      0,      0x044E, /* CYRILLIC SMALL LETTER YA */
195   GDK_z,        0,      0,      0,      0,      0x0437, /* CYRILLIC SMALL LETTER ZE */
196   GDK_z,        GDK_h,  0,      0,      0,      0x0436, /* CYRILLIC SMALL LETTER ZHE */
197   GDK_asciitilde,    0,      0,      0,      0,      0x44A,     /* CYRILLIC SMALL LETTER HARD SIGN */
198   GDK_asciitilde,    GDK_asciitilde,      0,      0,      0,      0x42A,        /* CYRILLIC CAPITAL LETTER HARD SIGN */
199 };
200
201 static void
202 cyrillic_translit_class_init (GtkIMContextSimpleClass *class)
203 {
204 }
205
206 static void
207 cyrillic_translit_init (GtkIMContextSimple *im_context)
208 {
209   gtk_im_context_simple_add_table (im_context,
210                                    cyrillic_compose_seqs,
211                                    4,
212                                    G_N_ELEMENTS (cyrillic_compose_seqs) / (4 + 2));
213 }
214
215 static const GtkIMContextInfo cyrillic_translit_info = { 
216   "cyrillic_translit",             /* ID */
217   N_("Cyrillic (Transliterated)"), /* Human readable name */
218   GETTEXT_PACKAGE,                 /* Translation domain */
219    GTK_LOCALEDIR,                  /* Dir for bindtextdomain (not strictly needed for "gtk+") */
220   ""                               /* Languages for which this module is the default */
221 };
222
223 static const GtkIMContextInfo *info_list[] = {
224   &cyrillic_translit_info
225 };
226
227 #ifndef INCLUDE_IM_cyrillic_translit
228 #define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
229 #else
230 #define MODULE_ENTRY(type, function) type _gtk_immodule_cyrillic_translit_ ## function
231 #endif
232
233 MODULE_ENTRY (void, init) (GTypeModule *module)
234 {
235   cyrillic_translit_register_type (module);
236 }
237
238 MODULE_ENTRY (void, exit) (void)
239 {
240 }
241
242 MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
243                            int                      *n_contexts)
244 {
245   *contexts = info_list;
246   *n_contexts = G_N_ELEMENTS (info_list);
247 }
248
249 MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
250 {
251   if (strcmp (context_id, "cyrillic_translit") == 0)
252     return g_object_new (type_cyrillic_translit, NULL);
253   else
254     return NULL;
255 }