tamilgtk2im-src-2.2/0040755000175000017500000000000007741271612013707 5ustar dineshdineshtamilgtk2im-src-2.2/README0100644000175000017500000000720107741272272014567 0ustar dineshdinesh Tamil99 Keyboard Input module for GTK2 ====================================== The following is a short instruction for installation/compilation and usage of the Tamill99 keyboard input module for GTK2. There are two encoding supported - TSCII and Unicode. Source Compilation & Installation --------------------------------- NOTE: Please be adviced that a development system with development libraries are required for compiling the source code. gtk-dev, libtool, gcc, g++, etc. are some of the required tools. To compile just run: ./compile-gtk2im.sh Once the compilation is completed (which should be pretty fast), run the installation script. You must be 'root' to run the script. The install should work fine on most standard distributions (RH, MDK, Debian, etc.). If this fails then take a look at the install script to see if they match with you system directory settings. PLEASE MAKE SURE YOU MODIFY THE PATHS IN THE INSTALLATION SCRIPT TO SUIT YOUR DISTRIBUTION/VERSION. ./install-gtk2im.sh Once the install script is done, you are ready to use the Tamil99 input module with any GTK2 application. See the usage section below. Also see Note-2 below. Usage ----- Once the installation is complete, you are ready to use the GTK2 input module for the Tamil99 Keyboard. The installation installed modules supporting the TSCII and UNICODE encodings for TamilVP, Tamil99, and Anjal (only Unicode) layouts. Before you start using the keyboard modules, you have to set the default IM Module using the environment variable GTK_IM_MODULE. Valid entries for this variable are: tamil99-uni tamil99-tsc tamilvp-uni tamilvp-tsc anjal-uni Example: In bash shell one would set the default input module as follows: export GTK_IM_MODULE=tamilvp-uni This would set the default input module to Tamil Visaippalakai (UNICODE). After installation is completed, close any of the GTK2/Gnome2 applications and relaunch them. When you right click on any text field (i.e. Text entry, file name entry, any thing you can enter text on - not the terminal), you will see a pop-up menu. Select 'Input Methods'. There you should see four entries - 'Tamil99 (TSCII)' , 'Tamil99 (UNICODE)', 'TamilVP (TSCII)', 'TamilVP (UNICODE)', and 'Tamil-Anjal (UNICODE)'. Select either one depending on your encoding. Both input modules have built-in standard ASCII module also. This is so that you don't have to keep right clicking the mouse everytime you want to toggle between English as Tamil. When the input module is selected the language mode is 'English'. To toggle beteen Tamil & English, use the Double-Shift keys (see Note-1). i.e. press both the shift keys at the same time. Now you can type. Comments -------- If you have any questions or comments please post to the tamillinux mailing list at tamillinux-user@lists.sourceforge.net or email me directly at dinesh_list@sbcglobal.net. Notes ----- Note-1: I had to use the double shift keys since many of the newer window managers are using most of the other standard keys. The keys that can be used in x86 keyboards are not available accross other platforms for portability. Note-2: The installation script assumes you have a standard Gnome 2.2 distribution.If there is any problem or you don't see the input modules when you double clicked, you probably have not installed the libraries in the correct directory. To correct this, first type 'gtk-query-immodules-2.0' command in the command line. This should display the search path at the top and all registered Im modules. Make sure you copy all *.so and *.la into that directory and then execute 'gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules'. Now relaunch the application. tamilgtk2im-src-2.2/compile-gtk2im.sh0100755000175000017500000000401107741271565017071 0ustar dineshdinesh#!/bin/sh /bin/sh libtool --mode=compile gcc -DHAVE_CONFIG_H \ `pkg-config --cflags gtk+-2.0` \ -g -O2 -Wall -D_GNU_SOURCE -D_REENTRANT -DDEBUG -c \ -o tamil99-tsc.lo tamil99-tsc.c /bin/sh libtool --mode=link gcc -g -O2 -Wall -D_GNU_SOURCE \ -D_REENTRANT -DDEBUG \ -o tamil99-tsc.la -rpath ~/.gtk-2.0/immodules \ -rpath ~/.gtk-2.0/immodules -avoid-version -module \ tamil99-tsc.lo `pkg-config --libs gtk+-2.0` /bin/sh libtool --mode=compile gcc -DHAVE_CONFIG_H \ `pkg-config --cflags gtk+-2.0` \ -g -O2 -Wall -D_GNU_SOURCE -D_REENTRANT -DDEBUG -c \ -o tamil99-uni.lo tamil99-uni.c /bin/sh libtool --mode=link gcc -g -O2 -Wall -D_GNU_SOURCE \ -D_REENTRANT -DDEBUG \ -o tamil99-uni.la -rpath ~/.gtk-2.0/immodules \ -rpath ~/.gtk-2.0/immodules -avoid-version -module \ tamil99-uni.lo `pkg-config --libs gtk+-2.0` /bin/sh libtool --mode=compile gcc -DHAVE_CONFIG_H \ `pkg-config --cflags gtk+-2.0` \ -g -O2 -Wall -D_GNU_SOURCE -D_REENTRANT -DDEBUG -c \ -o tavpim-tsc.lo tavpim-tsc.c /bin/sh libtool --mode=link gcc -g -O2 -Wall -D_GNU_SOURCE \ -D_REENTRANT -DDEBUG \ -o tavpim-tsc.la -rpath ~/.gtk-2.0/immodules \ -rpath ~/.gtk-2.0/immodules -avoid-version -module \ tavpim-tsc.lo `pkg-config --libs gtk+-2.0` /bin/sh libtool --mode=compile gcc -DHAVE_CONFIG_H \ `pkg-config --cflags gtk+-2.0` \ -g -O2 -Wall -D_GNU_SOURCE -D_REENTRANT -DDEBUG -c \ -o tavpim-uni.lo tavpim-uni.c /bin/sh libtool --mode=link gcc -g -O2 -Wall -D_GNU_SOURCE \ -D_REENTRANT -DDEBUG \ -o tavpim-uni.la -rpath ~/.gtk-2.0/immodules \ -rpath ~/.gtk-2.0/immodules -avoid-version -module \ tavpim-uni.lo `pkg-config --libs gtk+-2.0` /bin/sh libtool --mode=compile gcc -DHAVE_CONFIG_H \ `pkg-config --cflags gtk+-2.0` \ -g -O2 -Wall -D_GNU_SOURCE -D_REENTRANT -DDEBUG -c \ -o anjal-uni.lo anjal-uni.c /bin/sh libtool --mode=link gcc -g -O2 -Wall -D_GNU_SOURCE \ -D_REENTRANT -DDEBUG \ -o anjal-uni.la -rpath ~/.gtk-2.0/immodules \ -rpath ~/.gtk-2.0/immodules -avoid-version -module \ anjal-uni.lo `pkg-config --libs gtk+-2.0` tamilgtk2im-src-2.2/install-gtk2im.sh0100755000175000017500000000143307741271565017114 0ustar dineshdinesh#!/bin/sh cp ./.libs/tamil99-tsc.la /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tamil99-tsc.so /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tamil99-uni.la /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tamil99-uni.so /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tavpim-tsc.la /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tavpim-tsc.so /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tavpim-uni.la /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/tavpim-uni.so /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/anjal-uni.la /usr/lib/gtk-2.0/2.2.0/immodules cp ./.libs/anjal-uni.so /usr/lib/gtk-2.0/2.2.0/immodules chmod 755 /usr/lib/gtk-2.0/2.2.0/immodules chmod 755 /usr/lib/gtk-2.0/2.2.0/immodules cp /etc/gtk-2.0/gtk.immodules /etc/gtk-2.0/gtk.immodules.bak gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules tamilgtk2im-src-2.2/anjal-uni.c0100644000175000017500000005013407741271604015732 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "anjal-uni.h" #include static const GtkIMContextInfo tavp_uni_xim_info = { "anjal-uni", /* ID */ N_("Tamil-Anjal (UNICODE)"), /* Human readable name */ "gtk+", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "gtk+") */ "" /* Languages for which this module is the default */ }; gint language = ENGLISH; gint last_sent_keysym = 0; guint32 last_sent_unicode = 0; guint32 last_sent_base = 0; guint32 last_sent_modi = 0; gint soft_n = 0; static const GtkIMContextInfo *info_list[] = { &tavp_uni_xim_info }; GType type_tavp_uni = 0; //----------------------------------------------------------- void im_module_init (GTypeModule *type_module) { gtk_im_context_tavp_uni_xim_register_type (type_module); } //----------------------------------------------------------- void im_module_exit (void) { gtk_im_context_tavp_uni_xim_shutdown (); } //----------------------------------------------------------- void im_module_list (const GtkIMContextInfo ***contexts, int *n_contexts) { *contexts = info_list; *n_contexts = G_N_ELEMENTS (info_list); } //----------------------------------------------------------- GtkIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "anjal-uni") == 0) return GTK_IM_CONTEXT(g_object_new (type_tavp_uni, NULL)); else return NULL; } //----------------------------------------------------------- void gtk_im_context_tavp_uni_xim_shutdown (void) { } //------------------------------------------------------------ void gtk_im_context_tavp_uni_xim_register_type (GTypeModule *type_module) { static const GTypeInfo im_context_tavp_uni_xim_info = { sizeof (GtkIMContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_im_context_tavp_uni_xim_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkIMContext), 0, (GtkObjectInitFunc) gtk_im_context_tavp_uni_xim_init, }; type_tavp_uni = g_type_module_register_type (type_module, GTK_TYPE_IM_CONTEXT, "GtkIMContextTAVPUNI", &im_context_tavp_uni_xim_info, 0); } //------------------------------------------------------------ void gtk_im_context_tavp_uni_xim_class_init (GtkIMContextClass *class) { GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS (class); //GObjectClass *gobject_class = G_OBJECT_CLASS (class); //parent_class = g_type_class_peek_parent (class); //im_context_class->set_client_window = gtk_im_context_xim_set_client_window; im_context_class->filter_keypress = gtk_im_context_tavp_uni_xim_filter_keypress; //im_context_class->reset = gtk_im_context_xim_reset; //im_context_class->get_preedit_string = gtk_im_context_xim_get_preedit_string; //im_context_class->focus_in = gtk_im_context_xim_focus_in; //im_context_class->focus_out = gtk_im_context_xim_focus_out; //im_context_class->set_cursor_location = gtk_im_context_xim_set_cursor_location; //im_context_class->set_use_preedit = gtk_im_context_xim_set_use_preedit; //gobject_class->finalize = gtk_im_context_xim_finalize; } //------------------------------------------------------------ void gtk_im_context_tavp_uni_xim_init (GtkIMContext *im_context_xim) { //im_context_xim->use_preedit = FALSE; gtk_im_context_set_use_preedit(im_context_xim, FALSE); } //------------------------------------------------------------ gboolean gtk_im_context_tavp_uni_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event) { if (event->type == GDK_KEY_PRESS) { if (event->keyval == GDK_BackSpace) set_state(0, 0); if ((event->state & GDK_SHIFT_MASK) && (event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R)) { // switch language codes language = !language; set_state(0, 0); return TRUE; } else if ((language == TAMIL && event->keyval >= GDK_A && event->keyval <= GDK_z) || event->keyval == GDK_minus) { return process_unicode_tamilanjal(context, event); } else { guint32 u; guchar utf8[16]; set_state(event->keyval, 0); u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } utf8[g_unichar_to_utf8(u, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); last_sent_keysym = event->keyval; last_sent_unicode = u; return TRUE; } } return FALSE; } //---------------------------------------------------------------- void send_1_unicode_value(GtkIMContext *context, guint32 u1) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_4_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3, guint32 u4) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u4, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- gboolean process_unicode_tamilanjal(GtkIMContext *context, GdkEventKey *event) { guint32 u; switch (event->keyval) { case GDK_a: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); set_state(last_sent_base, 0); } else if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbbe); set_state(last_sent_base, 0xbbe); } else if (last_sent_base == 0xb85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb86); set_state(0xb86, 0); } else { send_1_unicode_value(context, 0xb85); set_state(0xb85, 0); } break; case GDK_A: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbbe); set_state(last_sent_base, 0xbbe); } else { send_1_unicode_value(context, 0xb86); set_state(0xb86, 0); } break; case GDK_i: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbbf); set_state(last_sent_base, 0xbbf); } else if (is_last_base_meyi() && last_sent_modi == 0xbbf) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc0); set_state(last_sent_base, 0xbc0); } else if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc8); set_state(last_sent_base, 0xbc8); } else if (last_sent_base == 0xb87) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb88); set_state(0xb88, 0); } else if (last_sent_base == 0xb85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb90); set_state(0xb90, 0); } else { send_1_unicode_value(context, 0xb87); set_state(0xb87, 0); } break; case GDK_I: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc0); set_state(last_sent_base, 0xbc0); } else { send_1_unicode_value(context, 0xb88); set_state(0xb88, 0); } break; case GDK_e: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc6); set_state(last_sent_base, 0xbc6); } else if (is_last_base_meyi() && last_sent_modi == 0xbc6) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc7); set_state(last_sent_base, 0xbc7); } else if (last_sent_base == 0xb8e) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb8f); set_state(0xb8f, 0); } else { send_1_unicode_value(context, 0xb8e); set_state(0xb8e, 0); } break; case GDK_E: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc7); set_state(last_sent_base, 0xbc7); } else { send_1_unicode_value(context, 0xb8f); set_state(0xb8f, 0); } break; case GDK_o: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbca); set_state(last_sent_base, 0xbca); } else if (is_last_base_meyi() && last_sent_modi == 0xbca) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbcb); set_state(last_sent_base, 0xbcb); } else if (last_sent_base == 0xb92) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb93); set_state(0xb93, 0); } else { send_1_unicode_value(context, 0xb92); set_state(0xb92, 0); } break; case GDK_O: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbcb); set_state(last_sent_base, 0xbcb); } else { send_1_unicode_value(context, 0xb93); set_state(0xb93, 0); } break; case GDK_u: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc1); set_state(last_sent_base, 0xbc1); } else if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbcc); set_state(last_sent_base, 0xbcc); } else if (is_last_base_meyi() && last_sent_modi == 0xbc1) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc2); set_state(last_sent_base, 0xbc2); } else if (last_sent_base == 0xb85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb94); set_state(0xb94, 0); } else if (last_sent_base == 0xb89) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb8a); set_state(0xb8a, 0); } else { send_1_unicode_value(context, 0xb89); set_state(0xb89, 0); } break; case GDK_U: if (is_last_base_meyi() && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc2); set_state(last_sent_base, 0xbc2); } else { send_1_unicode_value(context, 0xb8a); set_state(0xb8a, 0); } break; case GDK_w: send_2_unicode_value(context, 0xba8, 0xbcd); set_state(0xba8, 0xbcd); break; case GDK_q: send_1_unicode_value(context, 0xb83); set_state(0xb83, 0); break; case GDK_k: send_2_unicode_value(context, 0xb95, 0xbcd); set_state(0xb95, 0xbcd); break; case GDK_g: if (last_sent_base == 0xba9 && last_sent_modi == 0xbcd) gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xb99, 0xbcd); set_state(0xb99, 0xbcd); break; case GDK_c: send_2_unicode_value(context, 0xb9a, 0xbcd); set_state(0xb9a, 0xbcd); break; case GDK_t: send_2_unicode_value(context, 0xb9f, 0xbcd); set_state(0xb9f, 0xbcd); break; case GDK_N: send_2_unicode_value(context, 0xba3, 0xbcd); set_state(0xba3, 0xbcd); break; case GDK_d: send_2_unicode_value(context, 0xb9f, 0xbcd); set_state(0xb9f, 0xbcd); break; case GDK_b: send_2_unicode_value(context, 0xbaa, 0xbcd); set_state(0xbaa, 0xbcd); break; case GDK_p: send_2_unicode_value(context, 0xbaa, 0xbcd); set_state(0xbaa, 0xbcd); break; case GDK_m: send_2_unicode_value(context, 0xbae, 0xbcd); set_state(0xbae, 0xbcd); break; case GDK_y: send_2_unicode_value(context, 0xbaf, 0xbcd); set_state(0xbaf, 0xbcd); break; case GDK_r: if (last_sent_base == 0xb9a && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -2, 2); send_4_unicode_value(context, 0xbb8, 0xbcd, 0xbb0, 0xbc0); set_state(U_SHRI, 0); } else { send_2_unicode_value(context, 0xbb0, 0xbcd); set_state(0xbb0, 0xbcd); } break; case GDK_l: send_2_unicode_value(context, 0xbb2, 0xbcd); set_state(0xbb2, 0xbcd); break; case GDK_v: send_2_unicode_value(context, 0xbb5, 0xbcd); set_state(0xbb5, 0xbcd); break; case GDK_z: send_2_unicode_value(context, 0xbb4, 0xbcd); set_state(0xbb4, 0xbcd); break; case GDK_L: send_2_unicode_value(context, 0xbb3, 0xbcd); set_state(0xbb3, 0xbcd); break; case GDK_R: send_2_unicode_value(context, 0xbb1, 0xbcd); set_state(0xbb1, 0xbcd); break; case GDK_n: send_2_unicode_value(context, 0xba9, 0xbcd); set_state(0xba9, 0xbcd); break; case GDK_x: send_4_unicode_value(context, 0xb95, 0xbcd, 0xbb7, 0xbcd); set_state(U_KSH, 0xbcd); break; case GDK_j: if (last_sent_base == 0xba9 && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xb9e, 0xbcd); set_state(0xb9e, 0xbcd); } else { send_2_unicode_value(context, 0xb9c, 0xbcd); set_state(0xb9c, 0xbcd); } break; case GDK_S: send_2_unicode_value(context, 0xbb8, 0xbcd); set_state(0xbb8, 0xbcd); break; case GDK_s: send_2_unicode_value(context, 0xb9a, 0xbcd); set_state(0xb9a, 0xbcd); break; case GDK_minus: if (last_sent_base == 0xba9 && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xba8, 0xbcd); set_state(0xba8, 0xbcd); } else { u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } send_1_unicode_value(context, u); last_sent_keysym = event->keyval; last_sent_unicode = u; set_state(event->keyval, 0); } break; case GDK_h: if (last_sent_base == 0xb9a && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xbb7, 0xbcd); set_state(0xbb7, 0xbcd); } else if (last_sent_base == 0xb9f && last_sent_modi == 0xbcd) { gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xba4, 0xbcd); set_state(0xba4, 0xbcd); } else { send_2_unicode_value(context, 0xbb9, 0xbcd); set_state(0xbb9, 0xbcd); } break; default: u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } send_1_unicode_value(context, u); last_sent_keysym = event->keyval; last_sent_unicode = u; set_state(event->keyval, 0); break; } return TRUE; } void set_state(guint32 base, guint32 modi) { last_sent_base = base; last_sent_modi = modi; } gboolean is_last_base_meyi(void) { if (last_sent_base >= 0xb95 && last_sent_base <= 0xbb9) { return TRUE; } else return FALSE; } void send_u(GtkIMContext *context) { send_1_unicode_value(context, 0xbc1); return; } tamilgtk2im-src-2.2/tamil99-tsc.c0100644000175000017500000006226607741271604016144 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "taxim.h" static const GtkIMContextInfo ta_tsc_xim_info = { "tamil99-tsc", /* ID */ N_("Tamil99 (TSCII)"), /* Human readable name */ "gtk+", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "gtk+") */ "" /* Languages for which this module is the default */ }; gint language = ENGLISH; gint last_sent_keysym = 0; guint32 last_sent_unicode = 0; static const GtkIMContextInfo *info_list[] = { &ta_tsc_xim_info }; GType type_ta_tsc = 0; //----------------------------------------------------------- void im_module_init (GTypeModule *type_module) { gtk_im_context_ta_tsc_xim_register_type (type_module); } //----------------------------------------------------------- void im_module_exit (void) { gtk_im_context_ta_tsc_xim_shutdown (); } //----------------------------------------------------------- void im_module_list (const GtkIMContextInfo ***contexts, int *n_contexts) { *contexts = info_list; *n_contexts = G_N_ELEMENTS (info_list); } //----------------------------------------------------------- GtkIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "tamil99-tsc") == 0) return GTK_IM_CONTEXT(g_object_new (type_ta_tsc, NULL)); else return NULL; } //----------------------------------------------------------- void gtk_im_context_ta_tsc_xim_shutdown (void) { } //------------------------------------------------------------ void gtk_im_context_ta_tsc_xim_register_type (GTypeModule *type_module) { static const GTypeInfo im_context_ta_tsc_xim_info = { sizeof (GtkIMContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_im_context_ta_tsc_xim_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkIMContext), 0, (GtkObjectInitFunc) gtk_im_context_ta_tsc_xim_init, }; type_ta_tsc = g_type_module_register_type (type_module, GTK_TYPE_IM_CONTEXT, "GtkIMContextTA99TSC", &im_context_ta_tsc_xim_info, 0); } //------------------------------------------------------------ void gtk_im_context_ta_tsc_xim_class_init (GtkIMContextClass *class) { GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS (class); //GObjectClass *gobject_class = G_OBJECT_CLASS (class); //parent_class = g_type_class_peek_parent (class); //im_context_class->set_client_window = gtk_im_context_xim_set_client_window; im_context_class->filter_keypress = gtk_im_context_ta_tsc_xim_filter_keypress; //im_context_class->reset = gtk_im_context_xim_reset; //im_context_class->get_preedit_string = gtk_im_context_xim_get_preedit_string; //im_context_class->focus_in = gtk_im_context_xim_focus_in; //im_context_class->focus_out = gtk_im_context_xim_focus_out; //im_context_class->set_cursor_location = gtk_im_context_xim_set_cursor_location; //im_context_class->set_use_preedit = gtk_im_context_xim_set_use_preedit; //gobject_class->finalize = gtk_im_context_xim_finalize; } //------------------------------------------------------------ void gtk_im_context_ta_tsc_xim_init (GtkIMContext *im_context_xim) { //im_context_xim->use_preedit = FALSE; gtk_im_context_set_use_preedit(im_context_xim, FALSE); } //------------------------------------------------------------ gboolean gtk_im_context_ta_tsc_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event) { if (event->type == GDK_KEY_PRESS) { if (event->keyval == GDK_BackSpace) last_sent_unicode = 0; if ((event->state & GDK_SHIFT_MASK) && (event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R)) { // switch language codes language = !language; return TRUE; } else if (language == TAMIL && event->keyval >= GDK_space && event->keyval <= GDK_asciitilde) { return process_tscii_tamil99(context, event); } else { guint32 u; guchar utf8[16]; u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } utf8[g_unichar_to_utf8(u, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); last_sent_keysym = event->keyval; last_sent_unicode = u; return TRUE; } } return FALSE; } //---------------------------------------------------------------- void send_1_unicode_value(GtkIMContext *context, guint32 u1) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- gboolean process_tscii_tamil99(GtkIMContext *context, GdkEventKey *event) { guint32 u; switch (event->keyval) { case GDK_y: if (last_sent_unicode == 0xc7) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xfb); last_sent_unicode = 0xfb; } else { send_1_unicode_value(context, 0xc7); last_sent_unicode = 0xc7; } break; case GDK_u: if (last_sent_unicode == 0xc8) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xfc); last_sent_unicode = 0xfc; } else { send_1_unicode_value(context, 0xc8); last_sent_unicode = 0xc8; } break; case GDK_i: if (last_sent_unicode == 0xc9) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xfd); last_sent_unicode = 0xfd; } else { send_1_unicode_value(context, 0xc9); last_sent_unicode = 0xc9; } break; case GDK_o: if (last_sent_unicode == 0xbc) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf0); last_sent_unicode = 0xf0; } else { send_1_unicode_value(context, 0xbc); last_sent_unicode = 0xbc; } break; case GDK_p: if (last_sent_unicode == 0xbd) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf1); last_sent_unicode = 0xf1; } else { send_1_unicode_value(context, 0xbd); last_sent_unicode = 0xbd; } break; case GDK_bracketleft: if (last_sent_unicode == 0xba) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xee); last_sent_unicode = 0xee; } else { send_1_unicode_value(context, 0xba); last_sent_unicode = 0xba; } break; case GDK_bracketright: if (last_sent_unicode == 0xbb) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xef); last_sent_unicode = 0xef; } else { send_1_unicode_value(context, 0xbb); last_sent_unicode = 0xbb; } break; case GDK_h: if (last_sent_unicode == 0xb8) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xec); last_sent_unicode = 0xec; } else { send_1_unicode_value(context, 0xb8); last_sent_unicode = 0xb8; } break; case GDK_j: if (last_sent_unicode == 0xc0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf4); last_sent_unicode = 0xf4; } else { send_1_unicode_value(context, 0xc0); last_sent_unicode = 0xc0; } break; case GDK_k: if (last_sent_unicode == 0xc1) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf5); last_sent_unicode = 0xf5; } else { send_1_unicode_value(context, 0xc1); last_sent_unicode = 0xc1; } break; case GDK_l: if (last_sent_unicode == 0xbe) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf2); last_sent_unicode = 0xf2; } else { send_1_unicode_value(context, 0xbe); last_sent_unicode = 0xbe; } break; case GDK_semicolon: if (last_sent_unicode == 0xbf) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf3); last_sent_unicode = 0xf3; } else { send_1_unicode_value(context, 0xbf); last_sent_unicode = 0xbf; } break; case GDK_apostrophe: if (last_sent_unicode == 0xc2) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf6); last_sent_unicode = 0xf6; } else { send_1_unicode_value(context, 0xc2); last_sent_unicode = 0xc2; } break; case GDK_v: if (last_sent_unicode == 0xc5) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf9); last_sent_unicode = 0xf9; } else { send_1_unicode_value(context, 0xc5); last_sent_unicode = 0xc5; } break; case GDK_b: if (last_sent_unicode == 0xb9) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xed); last_sent_unicode = 0xed; } else { send_1_unicode_value(context, 0xb9); last_sent_unicode = 0xb9; } break; case GDK_n: if (last_sent_unicode == 0xc4) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf8); last_sent_unicode = 0xf8; } else { send_1_unicode_value(context, 0xc4); last_sent_unicode = 0xc4; } break; case GDK_m: if (last_sent_unicode == 0xc3) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xf7); last_sent_unicode = 0xf7; } else { send_1_unicode_value(context, 0xc3); last_sent_unicode = 0xc3; } break; case GDK_slash: if (last_sent_unicode == 0xc6) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xfa); last_sent_unicode = 0xfa; } else { send_1_unicode_value(context, 0xc6); last_sent_unicode = 0xc6; } break; case GDK_Q: if (last_sent_unicode == 0x85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x8a); last_sent_unicode = 0x8a; } else { send_1_unicode_value(context, 0x85); last_sent_unicode = 0x85; } break; case GDK_W: if (last_sent_unicode == 0x84) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x89); last_sent_unicode = 0x89; } else { send_1_unicode_value(context, 0x84); last_sent_unicode = 0x84; } break; case GDK_E: if (last_sent_unicode == 0x83) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x88); last_sent_unicode = 0x88; } else { send_1_unicode_value(context, 0x83); last_sent_unicode = 0x83; } break; case GDK_R: if (last_sent_unicode == 0x86) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x8b); last_sent_unicode = 0x8b; } else { send_1_unicode_value(context, 0x86); last_sent_unicode = 0x86; } break; case GDK_T: if (last_sent_unicode == 0x87) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x8c); last_sent_unicode = 0x8c; } else { send_1_unicode_value(context, 0x87); last_sent_unicode = 0x87; } break; case GDK_Y: send_1_unicode_value(context, 0x82); last_sent_unicode = 0x82; break; case GDK_a: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { last_sent_unicode = 0; } else { send_1_unicode_value(context, 0xab); last_sent_unicode = 0xab; } break; case GDK_q: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { send_1_unicode_value(context, 0xa1); last_sent_unicode = 0xa1; } else { send_1_unicode_value(context, 0xac); last_sent_unicode = 0xac; } break; case GDK_s: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { if (last_sent_unicode == 0xbc) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xca); last_sent_unicode = 0xca; } else { send_1_unicode_value(context, 0xa2); last_sent_unicode = 0xa2; } } else { send_1_unicode_value(context, 0xfe); last_sent_unicode = 0xfe; } break; case GDK_w: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { if (last_sent_unicode == 0xbc) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xcb); last_sent_unicode = 0xcb; } else { send_1_unicode_value(context, 0xa3); last_sent_unicode = 0xa3; } } else { send_1_unicode_value(context, 0xae); last_sent_unicode = 0xae; } break; case GDK_r: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_2_unicode_value(context, 0xa8, last_sent_unicode); last_sent_unicode = 0xa8; } else { send_1_unicode_value(context, 0xb3); last_sent_unicode = 0xb3; } break; case GDK_g: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_2_unicode_value(context, 0xa6, last_sent_unicode); last_sent_unicode = 0xa6; } else { send_1_unicode_value(context, 0xb1); last_sent_unicode = 0xb1; } break; case GDK_t: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_2_unicode_value(context, 0xa7, last_sent_unicode); last_sent_unicode = 0xa7; } else { send_1_unicode_value(context, 0xb2); last_sent_unicode = 0xb2; } break; case GDK_c: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa6, last_sent_unicode, 0xa1); last_sent_unicode = 0xa6; } else { send_1_unicode_value(context, 0xb4); last_sent_unicode = 0xb4; } break; case GDK_x: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa7, last_sent_unicode, 0xa1); last_sent_unicode = 0xa7; } else { send_1_unicode_value(context, 0xb5); last_sent_unicode = 0xb5; } break; case GDK_z: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9) || (last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa6, last_sent_unicode, 0xaa); last_sent_unicode = 0xaa; } else { send_1_unicode_value(context, 0xb6); last_sent_unicode = 0xb6; } break; case GDK_f: if ((last_sent_unicode >= 0xb8 && last_sent_unicode <= 0xc9)) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, last_sent_unicode + 52); last_sent_unicode = last_sent_unicode + 52; } else if ((last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, last_sent_unicode + 5); last_sent_unicode = last_sent_unicode + 5; } else { send_1_unicode_value(context, 0xb7); last_sent_unicode = 0xb7; } break; case GDK_d: if (last_sent_unicode == 0xb8) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xcc); last_sent_unicode = 0xcc; } else if (last_sent_unicode == 0xb9) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x99); last_sent_unicode = 0x99; } else if (last_sent_unicode == 0xba) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xcd); last_sent_unicode = 0xcd; } else if (last_sent_unicode == 0xbb) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x9a); last_sent_unicode = 0x9a; } else if ((last_sent_unicode >= 0xbc && last_sent_unicode <= 0xc9)) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, last_sent_unicode + 18); last_sent_unicode = last_sent_unicode + 18; } else if ((last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { send_1_unicode_value(context, 0xa4); last_sent_unicode = 0xa4; } else { send_1_unicode_value(context, 0xaf); last_sent_unicode = 0xaf; } break; case GDK_e: if (last_sent_unicode == 0xb8) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xdc); last_sent_unicode = 0xdc; } else if (last_sent_unicode == 0xb9) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x9b); last_sent_unicode = 0x9b; } else if (last_sent_unicode == 0xba) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xdd); last_sent_unicode = 0xdd; } else if (last_sent_unicode == 0xbb) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x9c); last_sent_unicode = 0x9c; } else if ((last_sent_unicode >= 0xbc && last_sent_unicode <= 0xc9)) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, last_sent_unicode + 34); last_sent_unicode = last_sent_unicode + 34; } else if ((last_sent_unicode >= 0x83 && last_sent_unicode <= 0x87)) { send_1_unicode_value(context, 0xa5); last_sent_unicode = 0xa5; } else { send_1_unicode_value(context, 0xb0); last_sent_unicode = 0xb0; } break; case GDK_O: send_1_unicode_value(context, 0x5b); last_sent_unicode = 0x5b; break; case GDK_P: send_1_unicode_value(context, 0x5d); last_sent_unicode = 0x5d; break; case GDK_M: send_1_unicode_value(context, 0x2f); last_sent_unicode = 0x2f; break; case GDK_K: send_1_unicode_value(context, 0x22); last_sent_unicode = 0x22; break; case GDK_L: send_1_unicode_value(context, 0x3a); last_sent_unicode = 0x3a; break; case GDK_colon: send_1_unicode_value(context, 0x3b); last_sent_unicode = 0x3b; break; case GDK_quotedbl: send_1_unicode_value(context, 0x27); last_sent_unicode = 0x27; break; default: u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } send_1_unicode_value(context, u); last_sent_keysym = event->keyval; last_sent_unicode = u; break; } return TRUE; } tamilgtk2im-src-2.2/tamil99-uni.c0100644000175000017500000004671607741271604016150 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "taxim-uni.h" static const GtkIMContextInfo ta_uni_xim_info = { "tamil99-uni", /* ID */ N_("Tamil99 (UNICODE)"), /* Human readable name */ "gtk+", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "gtk+") */ "" /* Languages for which this module is the default */ }; gint language = ENGLISH; gint last_sent_keysym = 0; guint32 last_sent_unicode = 0; static const GtkIMContextInfo *info_list[] = { &ta_uni_xim_info }; GType type_ta_uni = 0; //----------------------------------------------------------- void im_module_init (GTypeModule *type_module) { gtk_im_context_ta_uni_xim_register_type (type_module); } //----------------------------------------------------------- void im_module_exit (void) { gtk_im_context_ta_uni_xim_shutdown (); } //----------------------------------------------------------- void im_module_list (const GtkIMContextInfo ***contexts, int *n_contexts) { *contexts = info_list; *n_contexts = G_N_ELEMENTS (info_list); } //----------------------------------------------------------- GtkIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "tamil99-uni") == 0) return GTK_IM_CONTEXT(g_object_new (type_ta_uni, NULL)); else return NULL; } //----------------------------------------------------------- void gtk_im_context_ta_uni_xim_shutdown (void) { } //------------------------------------------------------------ void gtk_im_context_ta_uni_xim_register_type (GTypeModule *type_module) { static const GTypeInfo im_context_ta_uni_xim_info = { sizeof (GtkIMContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_im_context_ta_uni_xim_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkIMContext), 0, (GtkObjectInitFunc) gtk_im_context_ta_uni_xim_init, }; type_ta_uni = g_type_module_register_type (type_module, GTK_TYPE_IM_CONTEXT, "GtkIMContextTA99UNI", &im_context_ta_uni_xim_info, 0); } //------------------------------------------------------------ void gtk_im_context_ta_uni_xim_class_init (GtkIMContextClass *class) { GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS (class); im_context_class->filter_keypress = gtk_im_context_ta_uni_xim_filter_keypress; } //------------------------------------------------------------ void gtk_im_context_ta_uni_xim_init (GtkIMContext *im_context_xim) { gtk_im_context_set_use_preedit(im_context_xim, FALSE); } //------------------------------------------------------------ gboolean gtk_im_context_ta_uni_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event) { if (event->type == GDK_KEY_PRESS) { if (event->keyval == GDK_BackSpace) last_sent_unicode = 0; if ((event->state & GDK_SHIFT_MASK) && (event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R)) { // switch language codes language = !language; return TRUE; } else if (language == TAMIL && event->keyval >= GDK_space && event->keyval <= GDK_asciitilde) { return process_unicode_tamil99(context, event); } else { guint32 u; guchar utf8[16]; u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } utf8[g_unichar_to_utf8(u, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); last_sent_keysym = event->keyval; last_sent_unicode = u; return TRUE; } } return FALSE; } //---------------------------------------------------------------- void send_1_unicode_value(GtkIMContext *context, guint32 u1) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_4_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3, guint32 u4) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u4, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- gboolean process_unicode_tamil99(GtkIMContext *context, GdkEventKey *event) { guint32 u; switch (event->keyval) { case GDK_y: if (last_sent_unicode == 0xbb3) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb3); last_sent_unicode = 0xbb3; } break; case GDK_u: if (last_sent_unicode == 0xbb1) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb1); last_sent_unicode = 0xbb1; } break; case GDK_i: if (last_sent_unicode == 0xba9) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xba9); last_sent_unicode = 0xba9; } break; case GDK_o: if (last_sent_unicode == 0xb9f) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb9f); last_sent_unicode = 0xb9f; } break; case GDK_p: if (last_sent_unicode == 0xba3) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xba3); last_sent_unicode = 0xba3; } break; case GDK_bracketleft: if (last_sent_unicode == 0xb9a) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb9a); last_sent_unicode = 0xb9a; } break; case GDK_bracketright: if (last_sent_unicode == 0xb9e) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb9e); last_sent_unicode = 0xb9e; } break; case GDK_h: if (last_sent_unicode == 0xb95) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb95); last_sent_unicode = 0xb95; } break; case GDK_j: if (last_sent_unicode == 0xbaa) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbaa); last_sent_unicode = 0xbaa; } break; case GDK_k: if (last_sent_unicode == 0xbae) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbae); last_sent_unicode = 0xbae; } break; case GDK_l: if (last_sent_unicode == 0xba4) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xba4); last_sent_unicode = 0xba4; } break; case GDK_semicolon: if (last_sent_unicode == 0xba8) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xba8); last_sent_unicode = 0xba8; } break; case GDK_apostrophe: if (last_sent_unicode == 0xbaf) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbaf); last_sent_unicode = 0xbaf; } break; case GDK_v: if (last_sent_unicode == 0xbb5) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb5); last_sent_unicode = 0xbb5; } break; case GDK_b: if (last_sent_unicode == 0xb99) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb99); last_sent_unicode = 0xb99; } break; case GDK_n: if (last_sent_unicode == 0xbb2) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb2); last_sent_unicode = 0xbb2; } break; case GDK_m: if (last_sent_unicode == 0xbb0) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb0); last_sent_unicode = 0xbb0; } break; case GDK_slash: if (last_sent_unicode == 0xbb4) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb4); last_sent_unicode = 0xbb4; } break; case GDK_Q: if (last_sent_unicode == 0xbb8) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb8); last_sent_unicode = 0xbb8; } break; case GDK_W: if (last_sent_unicode == 0xbb7) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb7); last_sent_unicode = 0xbb7; } break; case GDK_E: if (last_sent_unicode == 0xb9c) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb9c); last_sent_unicode = 0xb9c; } break; case GDK_R: if (last_sent_unicode == 0xbb9) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xbb9); last_sent_unicode = 0xbb9; } break; case GDK_T: if (last_sent_unicode == 0x87) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x8c); last_sent_unicode = 0x8c; } else { send_1_unicode_value(context, 0x87); last_sent_unicode = 0x87; } break; case GDK_Y: send_4_unicode_value(context, 0xbb8, 0xbcd, 0xbb0, 0xbc0); last_sent_unicode = 0xbc0; break; case GDK_a: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { last_sent_unicode = 0; } else { send_1_unicode_value(context, 0xb85); last_sent_unicode = 0xb85; } break; case GDK_q: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbbe); last_sent_unicode = 0xbbe; } else { send_1_unicode_value(context, 0xb86); last_sent_unicode = 0xb86; } break; case GDK_s: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbbf); last_sent_unicode = 0xbbf; } else { send_1_unicode_value(context, 0xb87); last_sent_unicode = 0xb87; } break; case GDK_w: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbc0); last_sent_unicode = 0xbc0; } else { send_1_unicode_value(context, 0xb88); last_sent_unicode = 0xb88; } break; case GDK_r: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbc8); last_sent_unicode = 0xbc8; } else { send_1_unicode_value(context, 0xb90); last_sent_unicode = 0xb90; } break; case GDK_g: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbc6); last_sent_unicode = 0xbc6; } else { send_1_unicode_value(context, 0xb8e); last_sent_unicode = 0xb8e; } break; case GDK_t: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbc7); last_sent_unicode = 0xbc7; } else { send_1_unicode_value(context, 0xb8f); last_sent_unicode = 0xb8f; } break; case GDK_c: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbca); last_sent_unicode = 0xbca; } else { send_1_unicode_value(context, 0xb92); last_sent_unicode = 0xb92; } break; case GDK_x: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbcb); last_sent_unicode = 0xbcb; } else { send_1_unicode_value(context, 0xb93); last_sent_unicode = 0xb93; } break; case GDK_z: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbcc); last_sent_unicode = 0xbcc; } else { send_1_unicode_value(context, 0xb94); last_sent_unicode = 0xb94; } break; case GDK_f: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbcd); last_sent_unicode = 0xbcd; } else { send_1_unicode_value(context, 0xb83); last_sent_unicode = 0xb83; } break; case GDK_d: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbc1); last_sent_unicode = 0xbc1; } else { send_1_unicode_value(context, 0xb89); last_sent_unicode = 0xb89; } break; case GDK_e: if (last_sent_unicode >= 0xb95 && last_sent_unicode <= 0xbb9) { send_1_unicode_value(context, 0xbc2); last_sent_unicode = 0xbc2; } else { send_1_unicode_value(context, 0xb8a); last_sent_unicode = 0xb8a; } break; case GDK_O: send_1_unicode_value(context, 0x5b); last_sent_unicode = 0x5b; break; case GDK_P: send_1_unicode_value(context, 0x5d); last_sent_unicode = 0x5d; break; case GDK_M: send_1_unicode_value(context, 0x2f); last_sent_unicode = 0x2f; break; case GDK_K: send_1_unicode_value(context, 0x22); last_sent_unicode = 0x22; break; case GDK_L: send_1_unicode_value(context, 0x3a); last_sent_unicode = 0x3a; break; case GDK_colon: send_1_unicode_value(context, 0x3b); last_sent_unicode = 0x3b; break; case GDK_quotedbl: send_1_unicode_value(context, 0x27); last_sent_unicode = 0x27; break; default: u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } send_1_unicode_value(context, u); last_sent_keysym = event->keyval; last_sent_unicode = u; break; } return TRUE; } tamilgtk2im-src-2.2/tavpim-tsc.c0100644000175000017500000005277407741271604016157 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "tavpim-tsc.h" static const GtkIMContextInfo tavp_tsc_xim_info = { "tamilvp-tsc", /* ID */ N_("TamilVP (TSCII)"), /* Human readable name */ "gtk+", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "gtk+") */ "" /* Languages for which this module is the default */ }; gint language = ENGLISH; gint last_sent_keysym = 0; guint32 last_sent_unicode = 0; guint32 last_sent_base = 0; guint32 last_sent_modi = 0; static const GtkIMContextInfo *info_list[] = { &tavp_tsc_xim_info }; GType type_tavp_tsc = 0; //----------------------------------------------------------- void im_module_init (GTypeModule *type_module) { gtk_im_context_tavp_tsc_xim_register_type (type_module); } //----------------------------------------------------------- void im_module_exit (void) { gtk_im_context_tavp_tsc_xim_shutdown (); } //----------------------------------------------------------- void im_module_list (const GtkIMContextInfo ***contexts, int *n_contexts) { *contexts = info_list; *n_contexts = G_N_ELEMENTS (info_list); } //----------------------------------------------------------- GtkIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "tamilvp-tsc") == 0) return GTK_IM_CONTEXT(g_object_new (type_tavp_tsc, NULL)); else return NULL; } //----------------------------------------------------------- void gtk_im_context_tavp_tsc_xim_shutdown (void) { } //------------------------------------------------------------ void gtk_im_context_tavp_tsc_xim_register_type (GTypeModule *type_module) { static const GTypeInfo im_context_tavp_tsc_xim_info = { sizeof (GtkIMContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_im_context_tavp_tsc_xim_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkIMContext), 0, (GtkObjectInitFunc) gtk_im_context_tavp_tsc_xim_init, }; type_tavp_tsc = g_type_module_register_type (type_module, GTK_TYPE_IM_CONTEXT, "GtkIMContextTAVPTSC", &im_context_tavp_tsc_xim_info, 0); } //------------------------------------------------------------ void gtk_im_context_tavp_tsc_xim_class_init (GtkIMContextClass *class) { GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS (class); //GObjectClass *gobject_class = G_OBJECT_CLASS (class); //parent_class = g_type_class_peek_parent (class); //im_context_class->set_client_window = gtk_im_context_xim_set_client_window; im_context_class->filter_keypress = gtk_im_context_tavp_tsc_xim_filter_keypress; //im_context_class->reset = gtk_im_context_xim_reset; //im_context_class->get_preedit_string = gtk_im_context_xim_get_preedit_string; //im_context_class->focus_in = gtk_im_context_xim_focus_in; //im_context_class->focus_out = gtk_im_context_xim_focus_out; //im_context_class->set_cursor_location = gtk_im_context_xim_set_cursor_location; //im_context_class->set_use_preedit = gtk_im_context_xim_set_use_preedit; //gobject_class->finalize = gtk_im_context_xim_finalize; } //------------------------------------------------------------ void gtk_im_context_tavp_tsc_xim_init (GtkIMContext *im_context_xim) { //im_context_xim->use_preedit = FALSE; gtk_im_context_set_use_preedit(im_context_xim, FALSE); } //------------------------------------------------------------ gboolean gtk_im_context_tavp_tsc_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event) { if (event->type == GDK_KEY_PRESS) { if (event->keyval == GDK_BackSpace) set_state(0, 0); if ((event->state & GDK_SHIFT_MASK) && (event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R)) { // switch language codes language = !language; set_state(0, 0); return TRUE; } else if (language == TAMIL && event->keyval >= GDK_A && event->keyval <= GDK_z) { return process_tscii_tamilvp(context, event); } else { guint32 u; guchar utf8[16]; set_state(event->keyval, 0); u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } utf8[g_unichar_to_utf8(u, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); last_sent_keysym = event->keyval; last_sent_unicode = u; return TRUE; } } return FALSE; } //---------------------------------------------------------------- void send_1_unicode_value(GtkIMContext *context, guint32 u1) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- gboolean process_tscii_tamilvp(GtkIMContext *context, GdkEventKey *event) { guint32 u; switch (event->keyval) { case GDK_a: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xa1); set_state(last_sent_base, 0xa1); } else if (last_sent_base == 0xab) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xac); set_state(0xac, 0); } else { send_1_unicode_value(context, 0xab); set_state(0xab, 0); } break; case GDK_A: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xa1); set_state(last_sent_base, 0xa1); } else { send_1_unicode_value(context, 0xac); set_state(0xac, 0); } break; case GDK_i: if (is_last_base_meyi() && !last_sent_modi) { if (last_sent_base == 0xbc) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xca); } else send_1_unicode_value(context, 0xa2); set_state(last_sent_base, 0xa2); } else if (is_last_base_meyi() && last_sent_modi == 0xa2) { gtk_im_context_delete_surrounding (context, -1, 1); if (last_sent_base == 0xbc) send_1_unicode_value(context, 0xcb); else send_1_unicode_value(context, 0xa3); set_state(last_sent_base, 0xa3); } else if (is_last_base_meyi() && last_sent_modi == 0xa1) { gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xa8, last_sent_base); set_state(last_sent_base, 0xa8); } else if (last_sent_base == 0xad) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xae); set_state(0xae, 0); } else if (last_sent_base == 0xab) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb3); set_state(0xb3, 0); } else { send_1_unicode_value(context, 0xad); set_state(0xad, 0); } break; case GDK_I: if (is_last_base_meyi() && !last_sent_modi) { if (last_sent_base == 0xbc) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xcb); } else send_1_unicode_value(context, 0xa3); set_state(last_sent_base, 0xa3); } else { send_1_unicode_value(context, 0xae); set_state(0xae, 0); } break; case GDK_e: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_2_unicode_value(context, 0xa6, last_sent_base); set_state(last_sent_base, 0xa6); } else if (is_last_base_meyi() && last_sent_modi == 0xa6) { gtk_im_context_delete_surrounding (context, -2, 2); send_2_unicode_value(context, 0xa7, last_sent_base); set_state(last_sent_base, 0xa7); } else if (last_sent_base == 0xb1) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb2); set_state(0xb2, 0); } else { send_1_unicode_value(context, 0xb1); set_state(0xb1, 0); } break; case GDK_E: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_2_unicode_value(context, 0xa7, last_sent_base); set_state(last_sent_base, 0xa7); } else { send_1_unicode_value(context, 0xb2); set_state(0xb2, 0); } break; case GDK_o: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa6, last_sent_base, 0xa1); set_state(last_sent_base, M_O); } else if (is_last_base_meyi() && last_sent_modi == M_O) { gtk_im_context_delete_surrounding (context, -3, 3); send_3_unicode_value(context, 0xa7, last_sent_base, 0xa1); set_state(last_sent_base, M_OO); } else if (last_sent_base == 0xb4) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb5); set_state(0xb5, 0); } else { send_1_unicode_value(context, 0xb4); set_state(0xb4, 0); } break; case GDK_O: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa7, last_sent_base, 0xa1); set_state(last_sent_base, M_OO); } else { send_1_unicode_value(context, 0xb5); set_state(0xb5, 0); } break; case GDK_u: if (is_last_base_meyi() && !last_sent_modi) { send_u(context); set_state(last_sent_base, 0xa4); } else if (is_last_base_meyi() && last_sent_modi == 0xa1) { gtk_im_context_delete_surrounding (context, -2, 2); send_3_unicode_value(context, 0xa6, last_sent_base, 0xaa); set_state(last_sent_base, 0xaa); } else if (is_last_base_meyi() && last_sent_modi == 0xa4) { send_uu(context); set_state(last_sent_base, 0xa5); } else if (last_sent_base == 0xab) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb6); set_state(0xb6, 0); } else if (last_sent_base == 0xaf) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb0); set_state(0xb0, 0); } else { send_1_unicode_value(context, 0xaf); set_state(0xaf, 0); } break; case GDK_U: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa7, last_sent_base, 0xa1); set_state(last_sent_base, M_OO); } else { send_1_unicode_value(context, 0xb0); set_state(0xb0, 0); } break; case GDK_w: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_2_unicode_value(context, 0xa8, last_sent_base); set_state(last_sent_base, 0xa8); } else { send_1_unicode_value(context, 0xb3); set_state(0xb3, 0); } break; case GDK_q: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_pulli(context); set_state(last_sent_base, M_PUL); } else { send_1_unicode_value(context, 0xb7); set_state(0xb7, 0); } break; case GDK_Q: if (is_last_base_meyi() && !last_sent_modi) { gtk_im_context_delete_surrounding (context, -1, 1); send_3_unicode_value(context, 0xa6, last_sent_base, 0xaa); set_state(last_sent_base, 0xaa); } else { send_1_unicode_value(context, 0xb6); set_state(0xb6, 0); } break; case GDK_k: send_1_unicode_value(context, 0xb8); set_state(0xb8, 0); break; case GDK_g: if (last_sent_base == 0xc9 && last_sent_modi == 0) gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb9); set_state(0xb9, 0); break; case GDK_c: send_1_unicode_value(context, 0xba); set_state(0xba, 0); break; case GDK_C: send_1_unicode_value(context, 0xbb); set_state(0xbb, 0); break; case GDK_t: send_1_unicode_value(context, 0xbc); set_state(0xbc, 0); break; case GDK_N: send_1_unicode_value(context, 0xbd); set_state(0xbd, 0); break; case GDK_d: send_1_unicode_value(context, 0xbe); set_state(0xbe, 0); break; case GDK_b: send_1_unicode_value(context, 0xbf); set_state(0xbf, 0); break; case GDK_p: send_1_unicode_value(context, 0xc0); set_state(0xc0, 0); break; case GDK_m: send_1_unicode_value(context, 0xc1); set_state(0xc1, 0); break; case GDK_y: send_1_unicode_value(context, 0xc2); set_state(0xc2, 0); break; case GDK_r: if (last_sent_base == 0x85 && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x82); set_state(0x82, 0); } else { send_1_unicode_value(context, 0xc3); set_state(0xc3, 0); } break; case GDK_l: send_1_unicode_value(context, 0xc4); set_state(0xc4, 0); break; case GDK_v: send_1_unicode_value(context, 0xc5); set_state(0xc5, 0); break; case GDK_z: send_1_unicode_value(context, 0xc6); set_state(0xc6, 0); break; case GDK_L: send_1_unicode_value(context, 0xc7); set_state(0xc7, 0); break; case GDK_R: send_1_unicode_value(context, 0xc8); set_state(0xc8, 0); break; case GDK_n: send_1_unicode_value(context, 0xc9); set_state(0xc9, 0); break; case GDK_X: send_1_unicode_value(context, 0x82); set_state(0x82, 0); break; case GDK_j: if (last_sent_base == 0xc9 && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbb); set_state(0xbb, 0); } else { send_1_unicode_value(context, 0x83); set_state(0x83, 0); } break; case GDK_S: send_1_unicode_value(context, 0x84); set_state(0x84, 0); break; case GDK_s: send_1_unicode_value(context, 0x85); set_state(0x85, 0); break; case GDK_h: if (last_sent_base == 0x85 && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x84); set_state(0x84, 0); } else if (last_sent_base == 0xbc && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbe); set_state(0xbe, 0); } else { send_1_unicode_value(context, 0x86); set_state(0x86, 0); } break; case GDK_x: send_1_unicode_value(context, 0x87); set_state(0x87, 0); break; default: u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } send_1_unicode_value(context, u); last_sent_keysym = event->keyval; last_sent_unicode = u; set_state(event->keyval, 0); break; } return TRUE; } void set_state(guint32 base, guint32 modi) { last_sent_base = base; last_sent_modi = modi; } gboolean is_last_base_meyi(void) { if ((last_sent_base >= 0xb8 && last_sent_base <= 0xc9) || (last_sent_base >= 0x83 && last_sent_base <= 0x87)) { return TRUE; } else return FALSE; } void send_pulli(GtkIMContext *context) { if (last_sent_base >= 0x83 && last_sent_base <= 0x87) send_1_unicode_value(context, (last_sent_base+5)); else send_1_unicode_value(context, (last_sent_base+52)); return; } void send_u(GtkIMContext *context) { if (last_sent_base >= 0x83 && last_sent_base <= 0x87) send_1_unicode_value(context, 0xa4); else if (last_sent_base == 0xb9) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x99); } else if (last_sent_base == 0xbb) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0x9a); } else if (last_sent_base == 0xb8) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xcc); } else if (last_sent_base == 0xba) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xcd); } else { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, (last_sent_base+18)); } return; } void send_uu(GtkIMContext *context) { if (last_sent_modi == 0xa4) gtk_im_context_delete_surrounding (context, -1, 1); if (last_sent_base >= 0x83 && last_sent_base <= 0x87) send_1_unicode_value(context, 0xa5); else if (last_sent_base == 0xb9) { send_1_unicode_value(context, 0x9b); } else if (last_sent_base == 0xbb) { send_1_unicode_value(context, 0x9c); } else if (last_sent_base == 0xb8) { send_1_unicode_value(context, 0xdc); } else if (last_sent_base == 0xba) { send_1_unicode_value(context, 0xdd); } else { send_1_unicode_value(context, (last_sent_base+34)); } return; } tamilgtk2im-src-2.2/tavpim-uni.c0100644000175000017500000004661407741271604016155 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "tavpim-uni.h" static const GtkIMContextInfo tavp_uni_xim_info = { "tamilvp-uni", /* ID */ N_("TamilVP (UNICODE)"), /* Human readable name */ "gtk+", /* Translation domain */ "", /* Dir for bindtextdomain (not strictly needed for "gtk+") */ "" /* Languages for which this module is the default */ }; gint language = ENGLISH; gint last_sent_keysym = 0; guint32 last_sent_unicode = 0; guint32 last_sent_base = 0; guint32 last_sent_modi = 0; static const GtkIMContextInfo *info_list[] = { &tavp_uni_xim_info }; GType type_tavp_uni = 0; //----------------------------------------------------------- void im_module_init (GTypeModule *type_module) { gtk_im_context_tavp_uni_xim_register_type (type_module); } //----------------------------------------------------------- void im_module_exit (void) { gtk_im_context_tavp_uni_xim_shutdown (); } //----------------------------------------------------------- void im_module_list (const GtkIMContextInfo ***contexts, int *n_contexts) { *contexts = info_list; *n_contexts = G_N_ELEMENTS (info_list); } //----------------------------------------------------------- GtkIMContext *im_module_create (const gchar *context_id) { if (strcmp (context_id, "tamilvp-uni") == 0) return GTK_IM_CONTEXT(g_object_new (type_tavp_uni, NULL)); else return NULL; } //----------------------------------------------------------- void gtk_im_context_tavp_uni_xim_shutdown (void) { } //------------------------------------------------------------ void gtk_im_context_tavp_uni_xim_register_type (GTypeModule *type_module) { static const GTypeInfo im_context_tavp_uni_xim_info = { sizeof (GtkIMContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_im_context_tavp_uni_xim_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkIMContext), 0, (GtkObjectInitFunc) gtk_im_context_tavp_uni_xim_init, }; type_tavp_uni = g_type_module_register_type (type_module, GTK_TYPE_IM_CONTEXT, "GtkIMContextTAVPUNI", &im_context_tavp_uni_xim_info, 0); } //------------------------------------------------------------ void gtk_im_context_tavp_uni_xim_class_init (GtkIMContextClass *class) { GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS (class); //GObjectClass *gobject_class = G_OBJECT_CLASS (class); //parent_class = g_type_class_peek_parent (class); //im_context_class->set_client_window = gtk_im_context_xim_set_client_window; im_context_class->filter_keypress = gtk_im_context_tavp_uni_xim_filter_keypress; //im_context_class->reset = gtk_im_context_xim_reset; //im_context_class->get_preedit_string = gtk_im_context_xim_get_preedit_string; //im_context_class->focus_in = gtk_im_context_xim_focus_in; //im_context_class->focus_out = gtk_im_context_xim_focus_out; //im_context_class->set_cursor_location = gtk_im_context_xim_set_cursor_location; //im_context_class->set_use_preedit = gtk_im_context_xim_set_use_preedit; //gobject_class->finalize = gtk_im_context_xim_finalize; } //------------------------------------------------------------ void gtk_im_context_tavp_uni_xim_init (GtkIMContext *im_context_xim) { //im_context_xim->use_preedit = FALSE; gtk_im_context_set_use_preedit(im_context_xim, FALSE); } //------------------------------------------------------------ gboolean gtk_im_context_tavp_uni_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event) { if (event->type == GDK_KEY_PRESS) { if (event->keyval == GDK_BackSpace) set_state(0, 0); if ((event->state & GDK_SHIFT_MASK) && (event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R)) { // switch language codes language = !language; set_state(0, 0); return TRUE; } else if (language == TAMIL && event->keyval >= GDK_A && event->keyval <= GDK_z) { return process_unicode_tamilvp(context, event); } else { guint32 u; guchar utf8[16]; set_state(event->keyval, 0); u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } utf8[g_unichar_to_utf8(u, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); last_sent_keysym = event->keyval; last_sent_unicode = u; return TRUE; } } return FALSE; } //---------------------------------------------------------------- void send_1_unicode_value(GtkIMContext *context, guint32 u1) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- void send_4_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3, guint32 u4) { guchar utf8[16]; utf8[g_unichar_to_utf8(u1, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u2, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u3, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); utf8[g_unichar_to_utf8(u4, utf8)] = '\0'; g_signal_emit_by_name(context, "commit", utf8); } //---------------------------------------------------------------- gboolean process_unicode_tamilvp(GtkIMContext *context, GdkEventKey *event) { guint32 u; switch (event->keyval) { case GDK_a: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbbe); set_state(last_sent_base, 0xbbe); } else if (last_sent_base == 0xb85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb86); set_state(0xb86, 0); } else { send_1_unicode_value(context, 0xb85); set_state(0xb85, 0); } break; case GDK_A: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbbe); set_state(last_sent_base, 0xbbe); } else { send_1_unicode_value(context, 0xb86); set_state(0xb86, 0); } break; case GDK_i: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbbf); set_state(last_sent_base, 0xbbf); } else if (is_last_base_meyi() && last_sent_modi == 0xbbf) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc0); set_state(last_sent_base, 0xbc0); } else if (is_last_base_meyi() && last_sent_modi == 0xbbe) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc8); set_state(last_sent_base, 0xbc8); } else if (last_sent_base == 0xb87) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb88); set_state(0xb88, 0); } else if (last_sent_base == 0xb85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb90); set_state(0xb90, 0); } else { send_1_unicode_value(context, 0xb87); set_state(0xb87, 0); } break; case GDK_I: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc0); set_state(last_sent_base, 0xbc0); } else { send_1_unicode_value(context, 0xb88); set_state(0xb88, 0); } break; case GDK_e: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc6); set_state(last_sent_base, 0xbc6); } else if (is_last_base_meyi() && last_sent_modi == 0xbc6) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc7); set_state(last_sent_base, 0xbc7); } else if (last_sent_base == 0xb8e) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb8f); set_state(0xb8f, 0); } else { send_1_unicode_value(context, 0xb8e); set_state(0xb8e, 0); } break; case GDK_E: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc7); set_state(last_sent_base, 0xbc7); } else { send_1_unicode_value(context, 0xb8f); set_state(0xb8f, 0); } break; case GDK_o: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbca); set_state(last_sent_base, 0xbca); } else if (is_last_base_meyi() && last_sent_modi == 0xbca) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbcb); set_state(last_sent_base, 0xbcb); } else if (last_sent_base == 0xb92) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb93); set_state(0xb93, 0); } else { send_1_unicode_value(context, 0xb92); set_state(0xb92, 0); } break; case GDK_O: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbcb); set_state(last_sent_base, 0xbcb); } else { send_1_unicode_value(context, 0xb93); set_state(0xb93, 0); } break; case GDK_u: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc1); set_state(last_sent_base, 0xbc1); } else if (is_last_base_meyi() && last_sent_modi == 0xbbe) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbcc); set_state(last_sent_base, 0xbcc); } else if (is_last_base_meyi() && last_sent_modi == 0xbc1) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbc2); set_state(last_sent_base, 0xbc2); } else if (last_sent_base == 0xb85) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb94); set_state(0xb94, 0); } else if (last_sent_base == 0xb89) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb8a); set_state(0xb8a, 0); } else { send_1_unicode_value(context, 0xb89); set_state(0xb89, 0); } break; case GDK_U: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc2); set_state(last_sent_base, 0xbc2); } else { send_1_unicode_value(context, 0xb8a); set_state(0xb8a, 0); } break; case GDK_w: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbc8); set_state(last_sent_base, 0xbc8); } else { send_1_unicode_value(context, 0xb90); set_state(0xb90, 0); } break; case GDK_q: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbcd); set_state(last_sent_base, 0xbcd); } else { send_1_unicode_value(context, 0xb83); set_state(0xb83, 0); } break; case GDK_Q: if (is_last_base_meyi() && !last_sent_modi) { send_1_unicode_value(context, 0xbcc); set_state(last_sent_base, 0xbcc); } else { send_1_unicode_value(context, 0xb94); set_state(0xb94, 0); } break; case GDK_k: send_1_unicode_value(context, 0xb95); set_state(0xb95, 0); break; case GDK_g: if (last_sent_base == 0xba9 && last_sent_modi == 0) gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb99); set_state(0xb99, 0); break; case GDK_c: send_1_unicode_value(context, 0xb9a); set_state(0xb9a, 0); break; case GDK_C: send_1_unicode_value(context, 0xb9e); set_state(0xb9e, 0); break; case GDK_t: send_1_unicode_value(context, 0xb9f); set_state(0xb9f, 0); break; case GDK_N: send_1_unicode_value(context, 0xba3); set_state(0xba3, 0); break; case GDK_d: send_1_unicode_value(context, 0xba4); set_state(0xba4, 0); break; case GDK_b: send_1_unicode_value(context, 0xba8); set_state(0xba8, 0); break; case GDK_p: send_1_unicode_value(context, 0xbaa); set_state(0xbaa, 0); break; case GDK_m: send_1_unicode_value(context, 0xbae); set_state(0xbae, 0); break; case GDK_y: send_1_unicode_value(context, 0xbaf); set_state(0xbaf, 0); break; case GDK_r: if (last_sent_base == 0xbb8 && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_4_unicode_value(context, 0xbb8, 0xbcd, 0xbb0, 0xbc0); set_state(U_SHRI, 0); } else { send_1_unicode_value(context, 0xbb0); set_state(0xbb0, 0); } break; case GDK_l: send_1_unicode_value(context, 0xbb2); set_state(0xbb2, 0); break; case GDK_v: send_1_unicode_value(context, 0xbb5); set_state(0xbb5, 0); break; case GDK_z: send_1_unicode_value(context, 0xbb4); set_state(0xbb4, 0); break; case GDK_L: send_1_unicode_value(context, 0xbb3); set_state(0xbb3, 0); break; case GDK_R: send_1_unicode_value(context, 0xbb1); set_state(0xbb1, 0); break; case GDK_n: send_1_unicode_value(context, 0xba9); set_state(0xba9, 0); break; case GDK_X: send_4_unicode_value(context, 0xbb8, 0xbcd, 0xbb0, 0xbc0); set_state(U_SHRI, 0); break; case GDK_j: if (last_sent_base == 0xba9 && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xb9e); set_state(0xb9e, 0); } else { send_1_unicode_value(context, 0xb9c); set_state(0xb9c, 0); } break; case GDK_S: send_1_unicode_value(context, 0xbb7); set_state(0xbb7, 0); break; case GDK_s: send_1_unicode_value(context, 0xbb8); set_state(0xbb8, 0); break; case GDK_h: if (last_sent_base == 0xbb8 && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xbb7); set_state(0xbb7, 0); } else if (last_sent_base == 0xb9f && last_sent_modi == 0) { gtk_im_context_delete_surrounding (context, -1, 1); send_1_unicode_value(context, 0xba4); set_state(0xba4, 0); } else { send_1_unicode_value(context, 0xbb9); set_state(0xbb9, 0); } break; case GDK_x: send_3_unicode_value(context, 0xb95, 0xbcd, 0xbb7); set_state(U_KSH, 0); break; default: u = gdk_keyval_to_unicode(event->keyval); if (u == 0) { return FALSE; } send_1_unicode_value(context, u); last_sent_keysym = event->keyval; last_sent_unicode = u; set_state(event->keyval, 0); break; } return TRUE; } void set_state(guint32 base, guint32 modi) { last_sent_base = base; last_sent_modi = modi; } gboolean is_last_base_meyi(void) { if (last_sent_base >= 0xb95 && last_sent_base <= 0xbb9) { return TRUE; } else return FALSE; } void send_u(GtkIMContext *context) { send_1_unicode_value(context, 0xbc1); return; } tamilgtk2im-src-2.2/anjal-uni.h0100644000175000017500000000526007741271612015736 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __TAVPIM_TSC_H__ #define __TAVPIM_TSC_H__ #include "gtkintl.h" #include #include #include #define TAMIL 1 #define ENGLISH 0 #define M_O 55 #define M_OO 56 #define M_PUL 57 #define U_KSH 0xBB6 #define U_SHRI 0xbba void gtk_im_context_tavp_uni_xim_register_type (GTypeModule *type_module); void gtk_im_context_tavp_uni_xim_shutdown (void); void gtk_im_context_tavp_uni_xim_class_init (GtkIMContextClass *class); void gtk_im_context_tavp_uni_xim_init (GtkIMContext *im_context_xim); gboolean gtk_im_context_tavp_uni_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event); gboolean process_unicode_tamilanjal(GtkIMContext *context, GdkEventKey *event); void send_1_unicode_value(GtkIMContext *context, guint32 u1); void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2); void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3); void send_4_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3, guint32 u4); void set_state(guint32 base, guint32 modi); gboolean is_last_base_meyi(void); void send_u(GtkIMContext *context); #endif tamilgtk2im-src-2.2/gtkintl.h0100644000175000017500000000106407741271612015532 0ustar dineshdinesh#ifndef __GTKINTL_H__ #define __GTKINTL_H__ //#include "config.h" #ifdef ENABLE_NLS #include #define _(String) dgettext(GETTEXT_PACKAGE,String) #ifdef gettext_noop #define N_(String) gettext_noop(String) #else #define N_(String) (String) #endif #else /* NLS is disabled */ #define _(String) (String) #define N_(String) (String) #define textdomain(String) (String) #define gettext(String) (String) #define dgettext(Domain,String) (String) #define dcgettext(Domain,String,Type) (String) #define bindtextdomain(Domain,Directory) (Domain) #endif #endif tamilgtk2im-src-2.2/tavpim-tsc.h0100644000175000017500000000515107741271612016146 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __TAVPIM_TSC_H__ #define __TAVPIM_TSC_H__ #include "gtkintl.h" #include #include #include #define TAMIL 1 #define ENGLISH 0 #define M_O 55 #define M_OO 56 #define M_PUL 57 void gtk_im_context_tavp_tsc_xim_register_type (GTypeModule *type_module); void gtk_im_context_tavp_tsc_xim_shutdown (void); void gtk_im_context_tavp_tsc_xim_class_init (GtkIMContextClass *class); void gtk_im_context_tavp_tsc_xim_init (GtkIMContext *im_context_xim); gboolean gtk_im_context_tavp_tsc_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event); gboolean process_tscii_tamilvp(GtkIMContext *context, GdkEventKey *event); void send_1_unicode_value(GtkIMContext *context, guint32 u1); void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2); void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3); void set_state(guint32 base, guint32 modi); gboolean is_last_base_meyi(void); void send_pulli(GtkIMContext *context); void send_u(GtkIMContext *context); void send_uu(GtkIMContext *context); #endif tamilgtk2im-src-2.2/tavpim-uni.h0100644000175000017500000000525507741271612016155 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __TAVPIM_TSC_H__ #define __TAVPIM_TSC_H__ #include "gtkintl.h" #include #include #include #define TAMIL 1 #define ENGLISH 0 #define M_O 55 #define M_OO 56 #define M_PUL 57 #define U_KSH 0xBB6 #define U_SHRI 0xbba void gtk_im_context_tavp_uni_xim_register_type (GTypeModule *type_module); void gtk_im_context_tavp_uni_xim_shutdown (void); void gtk_im_context_tavp_uni_xim_class_init (GtkIMContextClass *class); void gtk_im_context_tavp_uni_xim_init (GtkIMContext *im_context_xim); gboolean gtk_im_context_tavp_uni_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event); gboolean process_unicode_tamilvp(GtkIMContext *context, GdkEventKey *event); void send_1_unicode_value(GtkIMContext *context, guint32 u1); void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2); void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3); void send_4_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3, guint32 u4); void set_state(guint32 base, guint32 modi); gboolean is_last_base_meyi(void); void send_u(GtkIMContext *context); #endif tamilgtk2im-src-2.2/taxim-uni.h0100644000175000017500000000475107741271612015777 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __TA_XIMUNI_H__ #define __TA_XIMUNI_H__ #include "gtkintl.h" #include #include #include #define TAMIL 1 #define ENGLISH 0 void gtk_im_context_ta_uni_xim_register_type (GTypeModule *type_module); void gtk_im_context_ta_uni_xim_shutdown (void); void gtk_im_context_ta_uni_xim_class_init (GtkIMContextClass *class); void gtk_im_context_ta_uni_xim_init (GtkIMContext *im_context_xim); gboolean gtk_im_context_ta_uni_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event); gboolean process_unicode_tamil99(GtkIMContext *context, GdkEventKey *event); void send_1_unicode_value(GtkIMContext *context, guint32 u1); void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2); void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3); void send_4_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3, guint32 u4); #endif /* __TA_XIMUNI_H__ */ tamilgtk2im-src-2.2/taxim.h0100644000175000017500000000456707741271612015213 0ustar dineshdinesh/* Copyright (c) 2003, Dinesh Nadarajah All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __TA_XIM_H__ #define __TA_XIM_H__ #include "gtkintl.h" #include #include #include #define TAMIL 1 #define ENGLISH 0 void gtk_im_context_ta_tsc_xim_register_type (GTypeModule *type_module); void gtk_im_context_ta_tsc_xim_shutdown (void); void gtk_im_context_ta_tsc_xim_class_init (GtkIMContextClass *class); void gtk_im_context_ta_tsc_xim_init (GtkIMContext *im_context_xim); gboolean gtk_im_context_ta_tsc_xim_filter_keypress (GtkIMContext *context, GdkEventKey *event); gboolean process_tscii_tamil99(GtkIMContext *context, GdkEventKey *event); void send_1_unicode_value(GtkIMContext *context, guint32 u1); void send_2_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2); void send_3_unicode_value(GtkIMContext *context, guint32 u1, guint32 u2, guint32 u3); #endif /* __TA_XIM_H__ */