Compare commits
1 Commits
reverse-li
...
wip/matthi
Author | SHA1 | Date | |
---|---|---|---|
|
1ed919933d |
@@ -1,43 +0,0 @@
|
||||
*** Introduction
|
||||
|
||||
This is a GTK+ input method which allows text entry via the multi-press method,
|
||||
as on a mobile phone. When this has been installed, you can choose the "Multipress"
|
||||
menu item from the "Input Methods" submenu when right-clicking in a GTK+ text entry
|
||||
area.
|
||||
|
||||
For instance:
|
||||
- press a to get a, then wait 1 second for the character to be accepted.
|
||||
or
|
||||
- press dd to get e, then wait 1 second for the character to be accepted.
|
||||
or
|
||||
- press ad to get ad, then wait 1 second for the d character to be accepted.
|
||||
|
||||
|
||||
*** Configuration
|
||||
|
||||
Edit the im-multipress.conf to define the keypresses needed to input particular characters.
|
||||
This file is in GKeyFile-format, and contains explanatory comments.
|
||||
|
||||
|
||||
*** Per-widget deactivation
|
||||
|
||||
When the input method is active (either by choosing it from the context menu, or
|
||||
by defining the default language as "*" in immultipress.c), the multipress
|
||||
behaviour can be turned off for individual widgets, like so:
|
||||
|
||||
g_object_set_data(G_OBJECT(yourwidget), "multipress-passthrough-flag", GINT_TO_POINTER(1));
|
||||
|
||||
|
||||
For a C++ gtkmm project, you could make a convenience function to do this. For instance:
|
||||
|
||||
void multipress_deactivate(Gtk::Widget& widget)
|
||||
{
|
||||
static const Glib::Quark quark ("multipress-passthrough-flag");
|
||||
widget.set_data(quark, GINT_TO_POINTER(1));
|
||||
}
|
||||
|
||||
*** Contact
|
||||
|
||||
Please contact Openismus for assistance with this input method. You can email murrayc@openismus.com
|
||||
|
||||
Copyright 2006-2007, Openismus GmbH
|
@@ -1,446 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2009 Openismus GmbH
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkimcontextmultipress.h"
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <gtk/gtkimmodule.h>
|
||||
|
||||
#define AUTOMATIC_COMPOSE_TIMEOUT 1 /* seconds */
|
||||
#define CONFIGURATION_FILENAME MULTIPRESS_CONFDIR G_DIR_SEPARATOR_S "im-multipress.conf"
|
||||
|
||||
/* This contains rows of characters that can be entered by pressing
|
||||
* a particular key repeatedly. Each row has one key (such as GDK_a),
|
||||
* and an array of character strings, such as "a".
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
gchar **characters; /* array of strings */
|
||||
gsize n_characters; /* number of strings in the array */
|
||||
}
|
||||
KeySequence;
|
||||
|
||||
static GObjectClass *im_context_multipress_parent_class = NULL;
|
||||
static GType im_context_multipress_type = 0;
|
||||
|
||||
static void im_context_multipress_class_init (GtkImContextMultipressClass *klass);
|
||||
static void im_context_multipress_init (GtkImContextMultipress *self);
|
||||
static void im_context_multipress_finalize (GObject *obj);
|
||||
|
||||
static void load_config (GtkImContextMultipress *self);
|
||||
|
||||
static gboolean vfunc_filter_keypress (GtkIMContext *context,
|
||||
GdkEventKey *event);
|
||||
static void vfunc_reset (GtkIMContext *context);
|
||||
static void vfunc_get_preedit_string (GtkIMContext *context,
|
||||
gchar **str,
|
||||
PangoAttrList **attrs,
|
||||
gint *cursor_pos);
|
||||
|
||||
/* Notice that we have a *_register_type(GTypeModule*) function instead of a
|
||||
* *_get_type() function, because we must use g_type_module_register_type(),
|
||||
* providing the GTypeModule* that was provided to im_context_init(). That
|
||||
* is also why we are not using G_DEFINE_TYPE().
|
||||
*/
|
||||
void
|
||||
gtk_im_context_multipress_register_type (GTypeModule* type_module)
|
||||
{
|
||||
const GTypeInfo im_context_multipress_info =
|
||||
{
|
||||
sizeof (GtkImContextMultipressClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) &im_context_multipress_class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof (GtkImContextMultipress),
|
||||
0,
|
||||
(GInstanceInitFunc) &im_context_multipress_init,
|
||||
0,
|
||||
};
|
||||
|
||||
im_context_multipress_type =
|
||||
g_type_module_register_type (type_module,
|
||||
GTK_TYPE_IM_CONTEXT,
|
||||
"GtkImContextMultipress",
|
||||
&im_context_multipress_info, 0);
|
||||
}
|
||||
|
||||
GType
|
||||
gtk_im_context_multipress_get_type (void)
|
||||
{
|
||||
g_assert (im_context_multipress_type != 0);
|
||||
|
||||
return im_context_multipress_type;
|
||||
}
|
||||
|
||||
static void
|
||||
key_sequence_free (gpointer value)
|
||||
{
|
||||
KeySequence *seq = value;
|
||||
|
||||
if (seq != NULL)
|
||||
{
|
||||
g_strfreev (seq->characters);
|
||||
g_slice_free (KeySequence, seq);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
im_context_multipress_class_init (GtkImContextMultipressClass *klass)
|
||||
{
|
||||
GtkIMContextClass *im_context_class;
|
||||
|
||||
/* Set this so we can use it later: */
|
||||
im_context_multipress_parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
/* Specify our vfunc implementations: */
|
||||
im_context_class = GTK_IM_CONTEXT_CLASS (klass);
|
||||
im_context_class->filter_keypress = &vfunc_filter_keypress;
|
||||
im_context_class->reset = &vfunc_reset;
|
||||
im_context_class->get_preedit_string = &vfunc_get_preedit_string;
|
||||
|
||||
G_OBJECT_CLASS (klass)->finalize = &im_context_multipress_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
im_context_multipress_init (GtkImContextMultipress *self)
|
||||
{
|
||||
self->key_sequences = g_hash_table_new_full (&g_direct_hash, &g_direct_equal,
|
||||
NULL, &key_sequence_free);
|
||||
load_config (self);
|
||||
}
|
||||
|
||||
static void
|
||||
im_context_multipress_finalize (GObject *obj)
|
||||
{
|
||||
GtkImContextMultipress *self;
|
||||
|
||||
self = GTK_IM_CONTEXT_MULTIPRESS (obj);
|
||||
|
||||
/* Release the configuration data: */
|
||||
if (self->key_sequences != NULL)
|
||||
{
|
||||
g_hash_table_destroy (self->key_sequences);
|
||||
self->key_sequences = NULL;
|
||||
}
|
||||
|
||||
(*im_context_multipress_parent_class->finalize) (obj);
|
||||
}
|
||||
|
||||
|
||||
GtkIMContext *
|
||||
gtk_im_context_multipress_new (void)
|
||||
{
|
||||
return (GtkIMContext *)g_object_new (GTK_TYPE_IM_CONTEXT_MULTIPRESS, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
cancel_automatic_timeout_commit (GtkImContextMultipress *multipress_context)
|
||||
{
|
||||
if (multipress_context->timeout_id)
|
||||
g_source_remove (multipress_context->timeout_id);
|
||||
|
||||
multipress_context->timeout_id = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Clear the compose buffer, so we are ready to compose the next character.
|
||||
*/
|
||||
static void
|
||||
clear_compose_buffer (GtkImContextMultipress *multipress_context)
|
||||
{
|
||||
multipress_context->key_last_entered = 0;
|
||||
multipress_context->compose_count = 0;
|
||||
|
||||
cancel_automatic_timeout_commit (multipress_context);
|
||||
|
||||
if (multipress_context->tentative_match)
|
||||
{
|
||||
multipress_context->tentative_match = NULL;
|
||||
g_signal_emit_by_name (multipress_context, "preedit-changed");
|
||||
g_signal_emit_by_name (multipress_context, "preedit-end");
|
||||
}
|
||||
}
|
||||
|
||||
/* Finish composing, provide the character, and clear our compose buffer.
|
||||
*/
|
||||
static void
|
||||
accept_character (GtkImContextMultipress *multipress_context, const gchar *characters)
|
||||
{
|
||||
/* Clear the compose buffer, so we are ready to compose the next character.
|
||||
* Note that if we emit "preedit-changed" after "commit", there's a segfault/
|
||||
* invalid-write with GtkTextView in gtk_text_layout_free_line_display(), when
|
||||
* destroying a PangoLayout (this can also be avoided by not using any Pango
|
||||
* attributes in get_preedit_string(). */
|
||||
clear_compose_buffer (multipress_context);
|
||||
|
||||
/* Provide the character to GTK+ */
|
||||
g_signal_emit_by_name (multipress_context, "commit", characters);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
on_timeout (gpointer data)
|
||||
{
|
||||
GtkImContextMultipress *multipress_context;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
multipress_context = GTK_IM_CONTEXT_MULTIPRESS (data);
|
||||
|
||||
/* A certain amount of time has passed, so we will assume that the user
|
||||
* really wants the currently chosen character */
|
||||
accept_character (multipress_context, multipress_context->tentative_match);
|
||||
|
||||
multipress_context->timeout_id = 0;
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
return G_SOURCE_REMOVE; /* don't call me again */
|
||||
}
|
||||
|
||||
static gboolean
|
||||
vfunc_filter_keypress (GtkIMContext *context, GdkEventKey *event)
|
||||
{
|
||||
GtkIMContextClass *parent;
|
||||
GtkImContextMultipress *multipress_context;
|
||||
|
||||
multipress_context = GTK_IM_CONTEXT_MULTIPRESS (context);
|
||||
|
||||
if (gdk_event_get_event_type ((GdkEvent *) event) == GDK_KEY_PRESS)
|
||||
{
|
||||
KeySequence *possible;
|
||||
guint keyval;
|
||||
|
||||
gdk_event_get_keyval ((GdkEvent *) event, &keyval);
|
||||
|
||||
/* Check whether the current key is the same as previously entered, because
|
||||
* if it is not then we should accept the previous one, and start a new
|
||||
* character. */
|
||||
if (multipress_context->compose_count > 0
|
||||
&& multipress_context->key_last_entered != keyval
|
||||
&& multipress_context->tentative_match != NULL)
|
||||
{
|
||||
/* Accept the previously chosen character. This wipes
|
||||
* the compose_count and key_last_entered. */
|
||||
accept_character (multipress_context,
|
||||
multipress_context->tentative_match);
|
||||
}
|
||||
|
||||
/* Decide what character this key press would choose: */
|
||||
possible = g_hash_table_lookup (multipress_context->key_sequences,
|
||||
GUINT_TO_POINTER (keyval));
|
||||
if (possible != NULL)
|
||||
{
|
||||
if (multipress_context->compose_count == 0)
|
||||
g_signal_emit_by_name (multipress_context, "preedit-start");
|
||||
|
||||
/* Check whether we are at the end of a compose sequence, with no more
|
||||
* possible characters. Cycle back to the start if necessary. */
|
||||
if (multipress_context->compose_count >= possible->n_characters)
|
||||
multipress_context->compose_count = 0;
|
||||
|
||||
/* Store the last key pressed in the compose sequence. */
|
||||
multipress_context->key_last_entered = keyval;
|
||||
|
||||
/* Get the possible match for this number of presses of the key.
|
||||
* compose_count starts at 1, so that 0 can mean not composing. */
|
||||
multipress_context->tentative_match =
|
||||
possible->characters[multipress_context->compose_count++];
|
||||
|
||||
/* Indicate the current possible character. This will cause our
|
||||
* vfunc_get_preedit_string() vfunc to be called, which will provide
|
||||
* the current possible character for the user to see. */
|
||||
g_signal_emit_by_name (multipress_context, "preedit-changed");
|
||||
|
||||
/* Cancel any outstanding timeout, so we can start the timer again: */
|
||||
cancel_automatic_timeout_commit (multipress_context);
|
||||
|
||||
/* Create a timeout that will cause the currently chosen character to
|
||||
* be committed, if nothing happens for a certain amount of time: */
|
||||
multipress_context->timeout_id =
|
||||
g_timeout_add_seconds (AUTOMATIC_COMPOSE_TIMEOUT,
|
||||
&on_timeout, multipress_context);
|
||||
g_source_set_name_by_id (multipress_context->timeout_id, "[gtk+] on_timeout");
|
||||
|
||||
return TRUE; /* key handled */
|
||||
}
|
||||
else
|
||||
{
|
||||
guint32 keyval_uchar;
|
||||
|
||||
/* Just accept all other keypresses directly, but commit the
|
||||
* current preedit content first. */
|
||||
if (multipress_context->compose_count > 0
|
||||
&& multipress_context->tentative_match != NULL)
|
||||
{
|
||||
accept_character (multipress_context,
|
||||
multipress_context->tentative_match);
|
||||
}
|
||||
keyval_uchar = gdk_keyval_to_unicode (keyval);
|
||||
|
||||
/* Convert to a string for accept_character(). */
|
||||
if (keyval_uchar != 0)
|
||||
{
|
||||
/* max length of UTF-8 sequence = 6 + 1 for NUL termination */
|
||||
gchar keyval_utf8[7];
|
||||
gint length;
|
||||
|
||||
length = g_unichar_to_utf8 (keyval_uchar, keyval_utf8);
|
||||
keyval_utf8[length] = '\0';
|
||||
|
||||
accept_character (multipress_context, keyval_utf8);
|
||||
|
||||
return TRUE; /* key handled */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
parent = (GtkIMContextClass *)im_context_multipress_parent_class;
|
||||
|
||||
/* The default implementation just returns FALSE, but it is generally
|
||||
* a good idea to call the base class implementation: */
|
||||
if (parent->filter_keypress)
|
||||
return (*parent->filter_keypress) (context, event);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
vfunc_reset (GtkIMContext *context)
|
||||
{
|
||||
clear_compose_buffer (GTK_IM_CONTEXT_MULTIPRESS (context));
|
||||
}
|
||||
|
||||
static void
|
||||
vfunc_get_preedit_string (GtkIMContext *context,
|
||||
gchar **str,
|
||||
PangoAttrList **attrs,
|
||||
gint *cursor_pos)
|
||||
{
|
||||
gsize len_bytes = 0;
|
||||
gsize len_utf8_chars = 0;
|
||||
|
||||
/* Show the user what character he will get if he accepts: */
|
||||
if (str != NULL)
|
||||
{
|
||||
const gchar *match;
|
||||
|
||||
match = GTK_IM_CONTEXT_MULTIPRESS (context)->tentative_match;
|
||||
|
||||
if (match == NULL)
|
||||
match = ""; /* *str must not be NUL */
|
||||
|
||||
len_bytes = strlen (match); /* byte count */
|
||||
len_utf8_chars = g_utf8_strlen (match, len_bytes); /* character count */
|
||||
|
||||
*str = g_strndup (match, len_bytes);
|
||||
}
|
||||
|
||||
/* Underline it, to show the user that he is in compose mode: */
|
||||
if (attrs != NULL)
|
||||
{
|
||||
*attrs = pango_attr_list_new ();
|
||||
|
||||
if (len_bytes > 0)
|
||||
{
|
||||
PangoAttribute *attr;
|
||||
|
||||
attr = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
|
||||
attr->start_index = 0;
|
||||
attr->end_index = len_bytes;
|
||||
pango_attr_list_insert (*attrs, attr);
|
||||
}
|
||||
}
|
||||
|
||||
if (cursor_pos)
|
||||
*cursor_pos = len_utf8_chars;
|
||||
}
|
||||
|
||||
/* Open the configuration file and fill in the key_sequences hash table
|
||||
* with key/character-list pairs taken from the [keys] group of the file.
|
||||
*/
|
||||
static void
|
||||
load_config (GtkImContextMultipress *self)
|
||||
{
|
||||
GKeyFile *key_file;
|
||||
GError *error = NULL;
|
||||
gchar **keys;
|
||||
gsize n_keys = 0;
|
||||
gsize i;
|
||||
|
||||
key_file = g_key_file_new ();
|
||||
|
||||
if (!g_key_file_load_from_file (key_file, CONFIGURATION_FILENAME,
|
||||
G_KEY_FILE_NONE, &error))
|
||||
{
|
||||
g_warning ("Error while trying to open the %s configuration file: %s",
|
||||
CONFIGURATION_FILENAME, error->message);
|
||||
g_error_free (error);
|
||||
g_key_file_free (key_file);
|
||||
return;
|
||||
}
|
||||
|
||||
keys = g_key_file_get_keys (key_file, "keys", &n_keys, &error);
|
||||
|
||||
if (error != NULL)
|
||||
{
|
||||
g_warning ("Error while trying to read the %s configuration file: %s",
|
||||
CONFIGURATION_FILENAME, error->message);
|
||||
g_error_free (error);
|
||||
g_key_file_free (key_file);
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < n_keys; ++i)
|
||||
{
|
||||
KeySequence *seq;
|
||||
guint keyval;
|
||||
|
||||
keyval = gdk_keyval_from_name (keys[i]);
|
||||
|
||||
if (keyval == GDK_KEY_VoidSymbol)
|
||||
{
|
||||
g_warning ("Error while trying to read the %s configuration file: "
|
||||
"invalid key name \"%s\"",
|
||||
CONFIGURATION_FILENAME, keys[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
seq = g_slice_new (KeySequence);
|
||||
seq->characters = g_key_file_get_string_list (key_file, "keys", keys[i],
|
||||
&seq->n_characters, &error);
|
||||
if (error != NULL)
|
||||
{
|
||||
g_warning ("Error while trying to read the %s configuration file: %s",
|
||||
CONFIGURATION_FILENAME, error->message);
|
||||
g_error_free (error);
|
||||
error = NULL;
|
||||
g_slice_free (KeySequence, seq);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Ownership of the KeySequence is taken over by the hash table */
|
||||
g_hash_table_insert (self->key_sequences, GUINT_TO_POINTER (keyval), seq);
|
||||
}
|
||||
|
||||
g_strfreev (keys);
|
||||
g_key_file_free (key_file);
|
||||
}
|
@@ -1,80 +0,0 @@
|
||||
/* Copyright (C) 2006 Openismus GmbH
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_IM_CONTEXT_MULTIPRESS_H__
|
||||
#define __GTK_IM_CONTEXT_MULTIPRESS_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GTK_TYPE_IM_CONTEXT_MULTIPRESS (gtk_im_context_multipress_get_type ())
|
||||
#define GTK_IM_CONTEXT_MULTIPRESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_IM_CONTEXT_MULTIPRESS, GtkImContextMultipress))
|
||||
#define GTK_IM_CONTEXT_MULTIPRESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_IM_CONTEXT_MULTIPRESS, GtkImContextMultipressClass))
|
||||
#define GTK_IS_IM_CONTEXT_MULTIPRESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_IM_CONTEXT_MULTIPRESS))
|
||||
#define GTK_IS_IM_CONTEXT_MULTIPRESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IM_CONTEXT_MULTIPRESS))
|
||||
#define GTK_IM_CONTEXT_MULTIPRESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_IM_CONTEXT_MULTIPRESS, GtkImContextMultipressClass))
|
||||
|
||||
typedef struct _GtkImContextMultipress GtkImContextMultipress;
|
||||
|
||||
/* This input method allows multi-press character input, like that found on
|
||||
* mobile phones.
|
||||
*
|
||||
* This is based on GtkImContextSimple, which allows "compose" based on
|
||||
* sequences of characters. But instead the character sequences are defined
|
||||
* by lists of characters for a key, so that repeated pressing of the same key
|
||||
* can cycle through the possible output characters, with automatic choosing
|
||||
* of the character after a time delay.
|
||||
*/
|
||||
struct _GtkImContextMultipress
|
||||
{
|
||||
/*< private >*/
|
||||
GtkIMContext parent;
|
||||
|
||||
/* Sequence information, loaded from the configuration file: */
|
||||
GHashTable* key_sequences;
|
||||
gsize dummy; /* ABI-preserving placeholder */
|
||||
|
||||
/* The last character entered so far during a compose.
|
||||
* If this is NULL then we are not composing yet.
|
||||
*/
|
||||
guint key_last_entered;
|
||||
|
||||
/* The position of the compose in the possible sequence.
|
||||
* For instance, this is 2 if aa has been pressed to show b (from abc0).
|
||||
*/
|
||||
guint compose_count;
|
||||
guint timeout_id;
|
||||
|
||||
/* The character(s) that will be used if it the current character(s) is accepted: */
|
||||
const gchar *tentative_match;
|
||||
};
|
||||
|
||||
|
||||
typedef struct _GtkImContextMultipressClass GtkImContextMultipressClass;
|
||||
|
||||
struct _GtkImContextMultipressClass
|
||||
{
|
||||
GtkIMContextClass parent_class;
|
||||
};
|
||||
|
||||
void gtk_im_context_multipress_register_type (GTypeModule* type_module);
|
||||
GType gtk_im_context_multipress_get_type (void);
|
||||
GtkIMContext *gtk_im_context_multipress_new (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_IM_CONTEXT_MULTIPRESS_H__ */
|
@@ -1,347 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include "gtkimcontextthai.h"
|
||||
#include "thai-charprop.h"
|
||||
|
||||
static void gtk_im_context_thai_class_init (GtkIMContextThaiClass *class);
|
||||
static void gtk_im_context_thai_init (GtkIMContextThai *im_context_thai);
|
||||
static gboolean gtk_im_context_thai_filter_keypress (GtkIMContext *context,
|
||||
GdkEventKey *key);
|
||||
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
static void forget_previous_chars (GtkIMContextThai *context_thai);
|
||||
static void remember_previous_char (GtkIMContextThai *context_thai,
|
||||
gunichar new_char);
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
|
||||
static GObjectClass *parent_class;
|
||||
|
||||
GType gtk_type_im_context_thai = 0;
|
||||
|
||||
void
|
||||
gtk_im_context_thai_register_type (GTypeModule *type_module)
|
||||
{
|
||||
const GTypeInfo im_context_thai_info =
|
||||
{
|
||||
sizeof (GtkIMContextThaiClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) gtk_im_context_thai_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextThai),
|
||||
0,
|
||||
(GInstanceInitFunc) gtk_im_context_thai_init,
|
||||
};
|
||||
|
||||
gtk_type_im_context_thai =
|
||||
g_type_module_register_type (type_module,
|
||||
GTK_TYPE_IM_CONTEXT,
|
||||
"GtkIMContextThai",
|
||||
&im_context_thai_info, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_im_context_thai_class_init (GtkIMContextThaiClass *class)
|
||||
{
|
||||
GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS (class);
|
||||
|
||||
parent_class = g_type_class_peek_parent (class);
|
||||
|
||||
im_context_class->filter_keypress = gtk_im_context_thai_filter_keypress;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_im_context_thai_init (GtkIMContextThai *context_thai)
|
||||
{
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
forget_previous_chars (context_thai);
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
context_thai->isc_mode = ISC_BASICCHECK;
|
||||
}
|
||||
|
||||
GtkIMContext *
|
||||
gtk_im_context_thai_new (void)
|
||||
{
|
||||
GtkIMContextThai *result;
|
||||
|
||||
result = GTK_IM_CONTEXT_THAI (g_object_new (GTK_TYPE_IM_CONTEXT_THAI, NULL));
|
||||
|
||||
return GTK_IM_CONTEXT (result);
|
||||
}
|
||||
|
||||
GtkIMContextThaiISCMode
|
||||
gtk_im_context_thai_get_isc_mode (GtkIMContextThai *context_thai)
|
||||
{
|
||||
return context_thai->isc_mode;
|
||||
}
|
||||
|
||||
GtkIMContextThaiISCMode
|
||||
gtk_im_context_thai_set_isc_mode (GtkIMContextThai *context_thai,
|
||||
GtkIMContextThaiISCMode mode)
|
||||
{
|
||||
GtkIMContextThaiISCMode prev_mode = context_thai->isc_mode;
|
||||
context_thai->isc_mode = mode;
|
||||
return prev_mode;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_context_lost_key(guint keyval)
|
||||
{
|
||||
return ((keyval & 0xFF00) == 0xFF00) &&
|
||||
(keyval == GDK_KEY_BackSpace ||
|
||||
keyval == GDK_KEY_Tab ||
|
||||
keyval == GDK_KEY_Linefeed ||
|
||||
keyval == GDK_KEY_Clear ||
|
||||
keyval == GDK_KEY_Return ||
|
||||
keyval == GDK_KEY_Pause ||
|
||||
keyval == GDK_KEY_Scroll_Lock ||
|
||||
keyval == GDK_KEY_Sys_Req ||
|
||||
keyval == GDK_KEY_Escape ||
|
||||
keyval == GDK_KEY_Delete ||
|
||||
(GDK_KEY_Home <= keyval && keyval <= GDK_KEY_Begin) || /* IsCursorkey */
|
||||
(GDK_KEY_KP_Space <= keyval && keyval <= GDK_KEY_KP_Delete) || /* IsKeypadKey, non-chars only */
|
||||
(GDK_KEY_Select <= keyval && keyval <= GDK_KEY_Break) || /* IsMiscFunctionKey */
|
||||
(GDK_KEY_F1 <= keyval && keyval <= GDK_KEY_F35)); /* IsFunctionKey */
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_context_intact_key(guint keyval)
|
||||
{
|
||||
return (((keyval & 0xFF00) == 0xFF00) &&
|
||||
((GDK_KEY_Shift_L <= keyval && keyval <= GDK_KEY_Hyper_R) || /* IsModifierKey */
|
||||
(keyval == GDK_KEY_Mode_switch) ||
|
||||
(keyval == GDK_KEY_Num_Lock))) ||
|
||||
(((keyval & 0xFE00) == 0xFE00) &&
|
||||
(GDK_KEY_ISO_Lock <= keyval && keyval <= GDK_KEY_ISO_Last_Group_Lock));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
thai_is_accept (gunichar new_char, gunichar prev_char, gint isc_mode)
|
||||
{
|
||||
switch (isc_mode)
|
||||
{
|
||||
case ISC_PASSTHROUGH:
|
||||
return TRUE;
|
||||
|
||||
case ISC_BASICCHECK:
|
||||
return TAC_compose_input (prev_char, new_char) != 'R';
|
||||
|
||||
case ISC_STRICT:
|
||||
{
|
||||
int op = TAC_compose_input (prev_char, new_char);
|
||||
return op != 'R' && op != 'S';
|
||||
}
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#define thai_is_composible(n,p) (TAC_compose_input ((p), (n)) == 'C')
|
||||
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
static void
|
||||
forget_previous_chars (GtkIMContextThai *context_thai)
|
||||
{
|
||||
memset (context_thai->char_buff, 0, sizeof (context_thai->char_buff));
|
||||
}
|
||||
|
||||
static void
|
||||
remember_previous_char (GtkIMContextThai *context_thai, gunichar new_char)
|
||||
{
|
||||
memmove (context_thai->char_buff + 1, context_thai->char_buff,
|
||||
(GTK_IM_CONTEXT_THAI_BUFF_SIZE - 1) * sizeof (context_thai->char_buff[0]));
|
||||
context_thai->char_buff[0] = new_char;
|
||||
}
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
|
||||
static gunichar
|
||||
get_previous_char (GtkIMContextThai *context_thai, gint offset)
|
||||
{
|
||||
gchar *surrounding;
|
||||
gint cursor_index;
|
||||
|
||||
if (gtk_im_context_get_surrounding ((GtkIMContext *)context_thai,
|
||||
&surrounding, &cursor_index))
|
||||
{
|
||||
gunichar prev_char;
|
||||
gchar *p, *q;
|
||||
|
||||
prev_char = 0;
|
||||
p = surrounding + cursor_index;
|
||||
for (q = p; offset < 0 && q > surrounding; ++offset)
|
||||
q = g_utf8_prev_char (q);
|
||||
if (offset == 0)
|
||||
{
|
||||
prev_char = g_utf8_get_char_validated (q, p - q);
|
||||
if (prev_char == (gunichar)-1 || prev_char == (gunichar)-2)
|
||||
prev_char = 0;
|
||||
}
|
||||
g_free (surrounding);
|
||||
return prev_char;
|
||||
}
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
else
|
||||
{
|
||||
offset = -offset - 1;
|
||||
if (0 <= offset && offset < GTK_IM_CONTEXT_THAI_BUFF_SIZE)
|
||||
return context_thai->char_buff[offset];
|
||||
}
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_im_context_thai_commit_chars (GtkIMContextThai *context_thai,
|
||||
gunichar *s, gsize len)
|
||||
{
|
||||
gchar *utf8;
|
||||
|
||||
utf8 = g_ucs4_to_utf8 (s, len, NULL, NULL, NULL);
|
||||
if (!utf8)
|
||||
return FALSE;
|
||||
|
||||
g_signal_emit_by_name (context_thai, "commit", utf8);
|
||||
|
||||
g_free (utf8);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
accept_input (GtkIMContextThai *context_thai, gunichar new_char)
|
||||
{
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
remember_previous_char (context_thai, new_char);
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
|
||||
return gtk_im_context_thai_commit_chars (context_thai, &new_char, 1);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
reorder_input (GtkIMContextThai *context_thai,
|
||||
gunichar prev_char, gunichar new_char)
|
||||
{
|
||||
gunichar buf[2];
|
||||
|
||||
if (!gtk_im_context_delete_surrounding (GTK_IM_CONTEXT (context_thai), -1, 1))
|
||||
return FALSE;
|
||||
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
forget_previous_chars (context_thai);
|
||||
remember_previous_char (context_thai, new_char);
|
||||
remember_previous_char (context_thai, prev_char);
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
|
||||
buf[0] = new_char;
|
||||
buf[1] = prev_char;
|
||||
return gtk_im_context_thai_commit_chars (context_thai, buf, 2);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
replace_input (GtkIMContextThai *context_thai, gunichar new_char)
|
||||
{
|
||||
if (!gtk_im_context_delete_surrounding (GTK_IM_CONTEXT (context_thai), -1, 1))
|
||||
return FALSE;
|
||||
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
forget_previous_chars (context_thai);
|
||||
remember_previous_char (context_thai, new_char);
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
|
||||
return gtk_im_context_thai_commit_chars (context_thai, &new_char, 1);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_im_context_thai_filter_keypress (GtkIMContext *context,
|
||||
GdkEventKey *event)
|
||||
{
|
||||
GtkIMContextThai *context_thai = GTK_IM_CONTEXT_THAI (context);
|
||||
gunichar prev_char, new_char;
|
||||
gboolean is_reject;
|
||||
GtkIMContextThaiISCMode isc_mode;
|
||||
GdkModifierType state;
|
||||
guint keyval;
|
||||
|
||||
if (gdk_event_get_event_type ((GdkEvent *) event) != GDK_KEY_PRESS ||
|
||||
!gdk_event_get_state ((GdkEvent *) event, &state) ||
|
||||
!gdk_event_get_keyval ((GdkEvent *) event, &keyval))
|
||||
return FALSE;
|
||||
|
||||
if (state & (GDK_MODIFIER_MASK
|
||||
& ~(GDK_SHIFT_MASK | GDK_LOCK_MASK | GDK_MOD2_MASK)) ||
|
||||
is_context_lost_key (keyval))
|
||||
{
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
forget_previous_chars (context_thai);
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
return FALSE;
|
||||
}
|
||||
if (keyval == 0 || is_context_intact_key (keyval))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
prev_char = get_previous_char (context_thai, -1);
|
||||
if (!prev_char)
|
||||
prev_char = ' ';
|
||||
new_char = gdk_keyval_to_unicode (keyval);
|
||||
is_reject = TRUE;
|
||||
isc_mode = gtk_im_context_thai_get_isc_mode (context_thai);
|
||||
if (thai_is_accept (new_char, prev_char, isc_mode))
|
||||
{
|
||||
accept_input (context_thai, new_char);
|
||||
is_reject = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gunichar context_char;
|
||||
|
||||
/* rejected, trying to correct */
|
||||
context_char = get_previous_char (context_thai, -2);
|
||||
if (context_char)
|
||||
{
|
||||
if (thai_is_composible (new_char, context_char))
|
||||
{
|
||||
if (thai_is_composible (prev_char, new_char))
|
||||
is_reject = !reorder_input (context_thai, prev_char, new_char);
|
||||
else if (thai_is_composible (prev_char, context_char))
|
||||
is_reject = !replace_input (context_thai, new_char);
|
||||
else if ((TAC_char_class (prev_char) == FV1
|
||||
|| TAC_char_class (prev_char) == AM)
|
||||
&& TAC_char_class (new_char) == TONE)
|
||||
is_reject = !reorder_input (context_thai, prev_char, new_char);
|
||||
}
|
||||
else if (thai_is_accept (new_char, context_char, isc_mode))
|
||||
is_reject = !replace_input (context_thai, new_char);
|
||||
}
|
||||
}
|
||||
if (is_reject)
|
||||
{
|
||||
/* reject character */
|
||||
gdk_beep ();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@@ -1,75 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GTK_IM_CONTEXT_THAI_H__
|
||||
#define __GTK_IM_CONTEXT_THAI_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
extern GType gtk_type_im_context_thai;
|
||||
|
||||
#define GTK_TYPE_IM_CONTEXT_THAI (gtk_type_im_context_thai)
|
||||
#define GTK_IM_CONTEXT_THAI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_IM_CONTEXT_THAI, GtkIMContextThai))
|
||||
#define GTK_IM_CONTEXT_THAI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_IM_CONTEXT_THAI, GtkIMContextThaiClass))
|
||||
#define GTK_IS_IM_CONTEXT_THAI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_IM_CONTEXT_THAI))
|
||||
#define GTK_IS_IM_CONTEXT_THAI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IM_CONTEXT_THAI))
|
||||
#define GTK_IM_CONTEXT_THAI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_IM_CONTEXT_THAI, GtkIMContextThaiClass))
|
||||
|
||||
|
||||
typedef struct _GtkIMContextThai GtkIMContextThai;
|
||||
typedef struct _GtkIMContextThaiClass GtkIMContextThaiClass;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ISC_PASSTHROUGH,
|
||||
ISC_BASICCHECK,
|
||||
ISC_STRICT
|
||||
} GtkIMContextThaiISCMode;
|
||||
#define GTK_IM_CONTEXT_THAI_BUFF_SIZE 2
|
||||
|
||||
struct _GtkIMContextThai
|
||||
{
|
||||
GtkIMContext object;
|
||||
|
||||
#ifndef GTK_IM_CONTEXT_THAI_NO_FALLBACK
|
||||
gunichar char_buff[GTK_IM_CONTEXT_THAI_BUFF_SIZE];
|
||||
#endif /* !GTK_IM_CONTEXT_THAI_NO_FALLBACK */
|
||||
GtkIMContextThaiISCMode isc_mode;
|
||||
};
|
||||
|
||||
struct _GtkIMContextThaiClass
|
||||
{
|
||||
GtkIMContextClass parent_class;
|
||||
};
|
||||
|
||||
void gtk_im_context_thai_register_type (GTypeModule *type_module);
|
||||
GtkIMContext *gtk_im_context_thai_new (void);
|
||||
|
||||
GtkIMContextThaiISCMode
|
||||
gtk_im_context_thai_get_isc_mode (GtkIMContextThai *context_thai);
|
||||
|
||||
GtkIMContextThaiISCMode
|
||||
gtk_im_context_thai_set_isc_mode (GtkIMContextThai *context_thai,
|
||||
GtkIMContextThaiISCMode mode);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_IM_CONTEXT_THAI_H__ */
|
@@ -1,22 +0,0 @@
|
||||
# Example configuration file for the GTK+ Multipress Input Method
|
||||
# Authored by Openismus GmbH, 2009.
|
||||
#
|
||||
# This file follows the GKeyFile format. On the left of the equal sign goes
|
||||
# the key that you press repeatedly to iterate through the text items listed
|
||||
# on the right-hand side. The list items are separated by semicolons ";" and
|
||||
# consist of one or more characters each. The backslash "\" is used to escape
|
||||
# characters; for instance "\;" for a literal semicolon.
|
||||
#
|
||||
# The example configuration below imitates the behavior of a standard mobile
|
||||
# phone by a major manufacturer, with German language setting.
|
||||
[keys]
|
||||
KP_1 = .;,;?;!;';";1;-;(;);@;/;:;_
|
||||
KP_2 = a;b;c;2;ä;à;á;ã;â;å;æ;ç
|
||||
KP_3 = d;e;f;3;è;é;ë;ê;ð
|
||||
KP_4 = g;h;i;4;ì;í;î;ï
|
||||
KP_5 = j;k;l;5;£
|
||||
KP_6 = m;n;o;6;ö;ò;ó;ô;õ;ø;ñ
|
||||
KP_7 = p;q;r;s;7;ß;$
|
||||
KP_8 = t;u;v;8;ü;ù;ú;û
|
||||
KP_9 = w;x;y;z;9;ý;þ
|
||||
KP_0 = \s;0
|
@@ -1,490 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
* Copyright (C) 2000 SuSE Linux Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Original author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
* Modified for Inuktitut - Robert Brady <robert@suse.co.uk>
|
||||
*
|
||||
* Modified for Amharic - Daniel Yacob <locales@geez.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_am_et_translit = 0;
|
||||
|
||||
static void am_et_class_init (GtkIMContextSimpleClass *class);
|
||||
static void am_et_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
am_et_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) am_et_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) am_et_init,
|
||||
};
|
||||
|
||||
type_am_et_translit =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextAmharicEthiopia",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
#define SYL(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'u', 0, 0, 0, 0, b+1,
|
||||
|
||||
#define SYLW1(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'W', 0, 0, 0, 0, b+7, \
|
||||
a, 'W', 'A', 0, 0, 0, b+7, \
|
||||
a, 'W', 'a', 0, 0, 0, b+7,
|
||||
#define SYLW2(a,b) \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'u', 0, 0, 0, 0, b+1, \
|
||||
a, 'w', 'w', 0, 0, 0, b+7, \
|
||||
a, 'w', 'w', 'a', 0, 0, b+7,
|
||||
|
||||
#define SYLW(a,b) \
|
||||
SYLW1(a,b)\
|
||||
SYLW2(a,b)
|
||||
|
||||
#define SYLWW(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'O', 'O', 0, 0, 0, b+8, \
|
||||
a, 'O', 'o', 0, 0, 0, b+8, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'W', 0, 0, 0, 0, b+11, \
|
||||
a, 'W', '\'', 0, 0, 0, b+13, \
|
||||
a, 'W', 'A', 0, 0, 0, b+11, \
|
||||
a, 'W', 'E', 0, 0, 0, b+12, \
|
||||
a, 'W', 'I', 0, 0, 0, b+10, \
|
||||
a, 'W', 'U', 0, 0, 0, b+13, \
|
||||
a, 'W', 'a', 0, 0, 0, b+11, \
|
||||
a, 'W', 'e', 0, 0, 0, b+8, \
|
||||
a, 'W', 'e', 'e', 0, 0, b+12, \
|
||||
a, 'W', 'i', 0, 0, 0, b+10, \
|
||||
a, 'W', 'u', 0, 0, 0, b+13, \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'o', 'o', 0, 0, 0, b+8, \
|
||||
a, 'u', 0, 0, 0, 0, b+1, \
|
||||
a, 'w', 'w', 0, 0, 0, b+11, \
|
||||
a, 'w', 'w', '\'', 0, 0, b+13, \
|
||||
a, 'w', 'w', 'E', 0, 0, b+12, \
|
||||
a, 'w', 'w', 'a', 0, 0, b+11, \
|
||||
a, 'w', 'w', 'e', 0, 0, b+8, \
|
||||
a, 'w', 'w', 'e', 'e', 0, b+12, \
|
||||
a, 'w', 'w', 'i', 0, 0, b+10, \
|
||||
a, 'w', 'w', 'u', 0, 0, b+13,
|
||||
|
||||
static guint16 am_et_compose_seqs[] = {
|
||||
/* do punctuation and numerals here */
|
||||
|
||||
'\'', 0, 0, 0, 0, 0, GDK_KEY_dead_grave, /* hopefully this has no side effects */
|
||||
'\'', '\'', 0, 0, 0, 0, GDK_KEY_apostrophe,
|
||||
'\'', '1', 0, 0, 0, 0, 0x1369,
|
||||
'\'', '1', '0', 0, 0, 0, 0x1372,
|
||||
'\'', '1', '0', '0', 0, 0, 0x137b,
|
||||
'\'', '1', '0', 'k', 0, 0, 0x137c,
|
||||
/* '\'', '1', '0', '0', '0', 0, 0x137b,
|
||||
'\'', '1', '0', '0', '0', '0', 0, 0x137c, */
|
||||
'\'', '2', 0, 0, 0, 0, 0x136a,
|
||||
'\'', '2', '0', 0, 0, 0, 0x1373,
|
||||
'\'', '3', 0, 0, 0, 0, 0x136b,
|
||||
'\'', '3', '0', 0, 0, 0, 0x1374,
|
||||
'\'', '4', 0, 0, 0, 0, 0x136c,
|
||||
'\'', '4', '0', 0, 0, 0, 0x1375,
|
||||
'\'', '5', 0, 0, 0, 0, 0x136d,
|
||||
'\'', '5', '0', 0, 0, 0, 0x1376,
|
||||
'\'', '6', 0, 0, 0, 0, 0x136e,
|
||||
'\'', '6', '0', 0, 0, 0, 0x1377,
|
||||
'\'', '7', 0, 0, 0, 0, 0x136f,
|
||||
'\'', '7', '0', 0, 0, 0, 0x1378,
|
||||
'\'', '8', 0, 0, 0, 0, 0x1370,
|
||||
'\'', '8', '0', 0, 0, 0, 0x1379,
|
||||
'\'', '9', 0, 0, 0, 0, 0x1371,
|
||||
'\'', '9', '0', 0, 0, 0, 0x137a,
|
||||
',', 0, 0, 0, 0, 0, 0x1363,
|
||||
',', ',', 0, 0, 0, 0, ',',
|
||||
'-', 0, 0, 0, 0, 0, '-',
|
||||
'-', ':', 0, 0, 0, 0, 0x1365,
|
||||
':', 0, 0, 0, 0, 0, 0x1361,
|
||||
':', '-', 0, 0, 0, 0, 0x1366,
|
||||
':', ':', 0, 0, 0, 0, 0x1362,
|
||||
':', ':', ':', 0, 0, 0, ':',
|
||||
':', '|', ':', 0, 0, 0, 0x1368,
|
||||
';', 0, 0, 0, 0, 0, 0x1364,
|
||||
';', ';', 0, 0, 0, 0, ';',
|
||||
'<', 0, 0, 0, 0, 0, '<',
|
||||
'<', '<', 0, 0, 0, 0, 0x00AB,
|
||||
'>', 0, 0, 0, 0, 0, '>',
|
||||
'>', '>', 0, 0, 0, 0, 0x00BB,
|
||||
'?', 0, 0, 0, 0, 0, '?',
|
||||
'?', '?', 0, 0, 0, 0, 0x1367,
|
||||
'A', 0, 0, 0, 0, 0, 0x12A3,
|
||||
'A','A', 0, 0, 0, 0, 0x12D3,
|
||||
SYLW('B', 0x1260)
|
||||
SYLW('C', 0x1328)
|
||||
SYLW('D', 0x12f8)
|
||||
'E', 0, 0, 0, 0, 0, 0x12A4,
|
||||
'E','E', 0, 0, 0, 0, 0x12D4,
|
||||
SYLW1('F', 0x1348)
|
||||
'F', 'Y', 0, 0, 0, 0, 0x135A,
|
||||
'F', 'Y', 'A', 0, 0, 0, 0x135A,
|
||||
'F', 'Y', 'a', 0, 0, 0, 0x135A,
|
||||
SYLW2('F', 0x1348)
|
||||
SYL('G', 0x1318)
|
||||
SYLW('H', 0x1210)
|
||||
'I', 0, 0, 0, 0, 0, 0x12A5,
|
||||
'I','A', 0, 0, 0, 0, 0x12A3,
|
||||
'I','E', 0, 0, 0, 0, 0x12A4,
|
||||
'I','I', 0, 0, 0, 0, 0x12D5,
|
||||
'I','I','E', 0, 0, 0, 0x12D4,
|
||||
'I','I','a', 0, 0, 0, 0x12D3,
|
||||
'I','I','e', 0, 0, 0, 0x12D0,
|
||||
'I','I','i', 0, 0, 0, 0x12D2,
|
||||
'I','I','o', 0, 0, 0, 0x12D6,
|
||||
'I','I','u', 0, 0, 0, 0x12D1,
|
||||
'I','O', 0, 0, 0, 0, 0x12A6,
|
||||
'I','U', 0, 0, 0, 0, 0x12A1,
|
||||
'I','W', 0, 0, 0, 0, 0x12A7,
|
||||
'I','a', 0, 0, 0, 0, 0x12A3,
|
||||
'I','e', 0, 0, 0, 0, 0x12A0,
|
||||
'I','i', 0, 0, 0, 0, 0x12A2,
|
||||
'I','o', 0, 0, 0, 0, 0x12A6,
|
||||
'I','u', 0, 0, 0, 0, 0x12A1,
|
||||
SYLWW('K', 0x12b8)
|
||||
SYLW('L', 0x1208)
|
||||
SYLW1('M', 0x1218)
|
||||
'M', 'Y', 0, 0, 0, 0, 0x1359,
|
||||
'M', 'Y', 'A', 0, 0, 0, 0x1359,
|
||||
'M', 'Y', 'a', 0, 0, 0, 0x1359,
|
||||
SYLW2('M', 0x1218)
|
||||
SYLW('N', 0x1298)
|
||||
'O', 0, 0, 0, 0, 0, 0x12A6,
|
||||
'O','O', 0, 0, 0, 0, 0x12D6,
|
||||
SYLW('P', 0x1330)
|
||||
SYLWW('Q', 0x1250)
|
||||
SYLW1('R', 0x1228)
|
||||
'R', 'Y', 0, 0, 0, 0, 0x1358,
|
||||
'R', 'Y', 'A', 0, 0, 0, 0x1358,
|
||||
'R', 'Y', 'a', 0, 0, 0, 0x1358,
|
||||
SYLW2('R', 0x1228)
|
||||
'S', 0, 0, 0, 0, 0, 0x1338+5,
|
||||
'S', 'A', 0, 0, 0, 0, 0x1338+3,
|
||||
'S', 'E', 0, 0, 0, 0, 0x1338+4,
|
||||
'S', 'I', 0, 0, 0, 0, 0x1338+2,
|
||||
'S', 'O', 0, 0, 0, 0, 0x1338+6,
|
||||
'S', 'S', 0, 0, 0, 0, 0x1340+5,
|
||||
'S', 'S', 'A', 0, 0, 0, 0x1340+3,
|
||||
'S', 'S', 'E', 0, 0, 0, 0x1340+4,
|
||||
'S', 'S', 'I', 0, 0, 0, 0x1340+2,
|
||||
'S', 'S', 'O', 0, 0, 0, 0x1340+6,
|
||||
'S', 'S', 'U', 0, 0, 0, 0x1340+1,
|
||||
'S', 'S', 'a', 0, 0, 0, 0x1340+3,
|
||||
'S', 'S', 'e', 0, 0, 0, 0x1340,
|
||||
'S', 'S', 'e', 'e', 0, 0, 0x1340+4,
|
||||
'S', 'S', 'i', 0, 0, 0, 0x1340+2,
|
||||
'S', 'S', 'o', 0, 0, 0, 0x1340+6,
|
||||
'S', 'S', 'u', 0, 0, 0, 0x1340+1,
|
||||
'S', 'U', 0, 0, 0, 0, 0x1338+1,
|
||||
'S', 'W', 0, 0, 0, 0, 0x1338+7,
|
||||
'S', 'W', 'A', 0, 0, 0, 0x1338+7,
|
||||
'S', 'W', 'a', 0, 0, 0, 0x1338+7,
|
||||
'S', 'a', 0, 0, 0, 0, 0x1338+3,
|
||||
'S', 'e', 0, 0, 0, 0, 0x1338,
|
||||
'S', 'e', 'e', 0, 0, 0, 0x1338+4,
|
||||
'S', 'i', 0, 0, 0, 0, 0x1338+2,
|
||||
'S', 'o', 0, 0, 0, 0, 0x1338+6,
|
||||
'S', 'u', 0, 0, 0, 0, 0x1338+1,
|
||||
'S', 'w', 'w', 0, 0, 0, 0x1338+7,
|
||||
'S', 'w', 'w', 'a', 0, 0, 0x1338+7,
|
||||
SYLW('T', 0x1320)
|
||||
'U', 0, 0, 0, 0, 0, 0x12A1,
|
||||
'U','U', 0, 0, 0, 0, 0x12D1,
|
||||
SYLW('V', 0x1268)
|
||||
SYL('W', 0x12c8)
|
||||
SYLW('X', 0x1238)
|
||||
SYL('Y', 0x12e8)
|
||||
SYLW('Z', 0x12e0)
|
||||
|
||||
/* much, much work to be done for lone vowels */
|
||||
'a', 0, 0, 0, 0, 0, 0x12A0,
|
||||
'a','a', 0, 0, 0, 0, 0x12D3,
|
||||
'a','a','a', 0, 0, 0, 0x12D0,
|
||||
'a','a','a','a', 0, 0, 0x12A3,
|
||||
'a','a','a','a','a', 0, 0x12A0,
|
||||
SYLW('b', 0x1260)
|
||||
SYLW('c', 0x1278)
|
||||
SYLW('d', 0x12f0)
|
||||
'e', 0, 0, 0, 0, 0, 0x12A5,
|
||||
'e','A', 0, 0, 0, 0, 0x12A3,
|
||||
'e','E', 0, 0, 0, 0, 0x12A4,
|
||||
'e','I', 0, 0, 0, 0, 0x12A2,
|
||||
'e','O', 0, 0, 0, 0, 0x12A6,
|
||||
'e','U', 0, 0, 0, 0, 0x12A1,
|
||||
'e','W', 0, 0, 0, 0, 0x12A7,
|
||||
'e','a', 0, 0, 0, 0, 0x12D0,
|
||||
'e','e', 0, 0, 0, 0, 0x12D5,
|
||||
'e','e','E', 0, 0, 0, 0x12D4,
|
||||
'e','e','a', 0, 0, 0, 0x12D3,
|
||||
'e','e','e', 0, 0, 0, 0x12D0,
|
||||
'e','e','i', 0, 0, 0, 0x12D2,
|
||||
'e','e','o', 0, 0, 0, 0x12D6,
|
||||
'e','e','u', 0, 0, 0, 0x12D1,
|
||||
'e','i', 0, 0, 0, 0, 0x12A2,
|
||||
'e','o', 0, 0, 0, 0, 0x12A6,
|
||||
'e','u', 0, 0, 0, 0, 0x12A1,
|
||||
SYLW1('f', 0x1348)
|
||||
'f', 'Y', 0, 0, 0, 0, 0x135A,
|
||||
'f', 'Y', 'A', 0, 0, 0, 0x135A,
|
||||
'f', 'Y', 'a', 0, 0, 0, 0x135A,
|
||||
SYLW2('f', 0x1348)
|
||||
SYLWW('g', 0x1308)
|
||||
'h', 0, 0, 0, 0, 0, 0x1200+5,
|
||||
'h', 'A', 0, 0, 0, 0, 0x1200+3,
|
||||
'h', 'E', 0, 0, 0, 0, 0x1200+4,
|
||||
'h', 'I', 0, 0, 0, 0, 0x1200+2,
|
||||
'h', 'O', 0, 0, 0, 0, 0x1200+6,
|
||||
'h', 'U', 0, 0, 0, 0, 0x1200+1,
|
||||
'h', 'W', 0, 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', '\'', 0, 0, 0, 0x1280+13,
|
||||
'h', 'W', 'A', 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', 'E', 0, 0, 0, 0x1280+12,
|
||||
'h', 'W', 'I', 0, 0, 0, 0x1280+10,
|
||||
'h', 'W', 'U', 0, 0, 0, 0x1280+13,
|
||||
'h', 'W', 'a', 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', 'e', 0, 0, 0, 0x1280+8,
|
||||
'h', 'W', 'e', 'e', 0, 0, 0x1280+12,
|
||||
'h', 'W', 'i', 0, 0, 0, 0x1280+10,
|
||||
'h', 'W', 'u', 0, 0, 0, 0x1280+13,
|
||||
'h', 'a', 0, 0, 0, 0, 0x1200+3,
|
||||
'h', 'e', 0, 0, 0, 0, 0x1200,
|
||||
'h', 'e', 'e', 0, 0, 0, 0x1200+4,
|
||||
'h', 'h', 0, 0, 0, 0, 0x1280+5,
|
||||
'h', 'h', 'A', 0, 0, 0, 0x1280+3,
|
||||
'h', 'h', 'E', 0, 0, 0, 0x1280+4,
|
||||
'h', 'h', 'I', 0, 0, 0, 0x1280+2,
|
||||
'h', 'h', 'O', 0, 0, 0, 0x1280+6,
|
||||
'h', 'h', 'O', 'O', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'U', 0, 0, 0, 0x1280+1,
|
||||
'h', 'h', 'W', 0, 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', '\'', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'W', 'A', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', 'E', 0, 0, 0x1280+12,
|
||||
'h', 'h', 'W', 'I', 0, 0, 0x1280+10,
|
||||
'h', 'h', 'W', 'U', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'W', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', 'e', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'W', 'e', 'e', 0, 0x1280+12,
|
||||
'h', 'h', 'W', 'i', 0, 0, 0x1280+10,
|
||||
'h', 'h', 'W', 'u', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'a', 0, 0, 0, 0x1280+3,
|
||||
'h', 'h', 'e', 0, 0, 0, 0x1280,
|
||||
'h', 'h', 'e', 'e', 0, 0, 0x1280+4,
|
||||
'h', 'h', 'i', 0, 0, 0, 0x1280+2,
|
||||
'h', 'h', 'o', 0, 0, 0, 0x1280+6,
|
||||
'h', 'h', 'o', 'o', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'u', 0, 0, 0, 0x1280+1,
|
||||
'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', '\'', 0, 0x1280+13,
|
||||
'h', 'h', 'w', 'w', 'E', 0, 0x1280+12,
|
||||
'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 'e', 0, 0x1280+8,
|
||||
/* 'h', 'h', 'w', 'w', 'e', 'e', 0, 0x1280+12, too long for now */
|
||||
'h', 'h', 'w', 'w', 'i', 0, 0x1280+10,
|
||||
'h', 'h', 'w', 'w', 'u', 0, 0x1280+13,
|
||||
'h', 'i', 0, 0, 0, 0, 0x1200+2,
|
||||
'h', 'o', 0, 0, 0, 0, 0x1200+6,
|
||||
'h', 'u', 0, 0, 0, 0, 0x1200+1,
|
||||
'h', 'w', 'w', 0, 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 0, 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', '\'', 0, 0, 0x1280+13,
|
||||
'h', 'w', 'w', 'E', 0, 0, 0x1280+12,
|
||||
'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 'e', 0, 0, 0x1280+8,
|
||||
'h', 'w', 'w', 'e', 'e', 0, 0x1280+12,
|
||||
'h', 'w', 'w', 'i', 0, 0, 0x1280+10,
|
||||
'h', 'w', 'w', 'u', 0, 0, 0x1280+13,
|
||||
'i', 0, 0, 0, 0, 0, 0x12A2,
|
||||
'i', 'i', 0, 0, 0, 0, 0x12D2,
|
||||
SYLW('j', 0x1300)
|
||||
SYLWW('k', 0x12a8)
|
||||
SYLW('l', 0x1208)
|
||||
SYLW1('m', 0x1218)
|
||||
'm', 'Y', 0, 0, 0, 0, 0x1359,
|
||||
'm', 'Y', 'A', 0, 0, 0, 0x1359,
|
||||
'm', 'Y', 'a', 0, 0, 0, 0x1359,
|
||||
SYLW2('m', 0x1218)
|
||||
SYLW('n', 0x1290)
|
||||
'o', 0, 0, 0, 0, 0, 0x12A6,
|
||||
'o','o', 0, 0, 0, 0, 0x12D6,
|
||||
SYLW('p', 0x1350)
|
||||
SYLWW('q', 0x1240)
|
||||
SYLW1('r', 0x1228)
|
||||
'r', 'Y', 0, 0, 0, 0, 0x1358,
|
||||
'r', 'Y', 'A', 0, 0, 0, 0x1358,
|
||||
'r', 'Y', 'a', 0, 0, 0, 0x1358,
|
||||
SYLW2('r', 0x1228)
|
||||
's', 0, 0, 0, 0, 0, 0x1230+5,
|
||||
's', 'A', 0, 0, 0, 0, 0x1230+3,
|
||||
's', 'E', 0, 0, 0, 0, 0x1230+4,
|
||||
's', 'I', 0, 0, 0, 0, 0x1230+2,
|
||||
's', 'O', 0, 0, 0, 0, 0x1230+6,
|
||||
's', 'U', 0, 0, 0, 0, 0x1230+1,
|
||||
's', 'W', 0, 0, 0, 0, 0x1230+7,
|
||||
's', 'W', 'A', 0, 0, 0, 0x1230+7,
|
||||
's', 'W', 'a', 0, 0, 0, 0x1230+7,
|
||||
's', 'a', 0, 0, 0, 0, 0x1230+3,
|
||||
's', 'e', 0, 0, 0, 0, 0x1230,
|
||||
's', 'e', 'e', 0, 0, 0, 0x1230+4,
|
||||
's', 'i', 0, 0, 0, 0, 0x1230+2,
|
||||
's', 'o', 0, 0, 0, 0, 0x1230+6,
|
||||
's', 's', 0, 0, 0, 0, 0x1220+5,
|
||||
's', 's', 'A', 0, 0, 0, 0x1220+3,
|
||||
's', 's', 'E', 0, 0, 0, 0x1220+4,
|
||||
's', 's', 'I', 0, 0, 0, 0x1220+2,
|
||||
's', 's', 'O', 0, 0, 0, 0x1220+6,
|
||||
's', 's', 'U', 0, 0, 0, 0x1220+1,
|
||||
's', 's', 'W', 0, 0, 0, 0x1220+7,
|
||||
's', 's', 'W', 'A', 0, 0, 0x1220+7,
|
||||
's', 's', 'W', 'a', 0, 0, 0x1220+7,
|
||||
's', 's', 'a', 0, 0, 0, 0x1220+3,
|
||||
's', 's', 'e', 0, 0, 0, 0x1220,
|
||||
's', 's', 'e', 'e', 0, 0, 0x1220+4,
|
||||
's', 's', 'i', 0, 0, 0, 0x1220+2,
|
||||
's', 's', 'o', 0, 0, 0, 0x1220+6,
|
||||
's', 's', 'u', 0, 0, 0, 0x1220+1,
|
||||
's', 's', 'w', 'w', 0, 0, 0x1220+7,
|
||||
's', 's', 'w', 'w', 'a', 0, 0x1220+7,
|
||||
's', 'u', 0, 0, 0, 0, 0x1230+1,
|
||||
's', 'w', 'w', 0, 0, 0, 0x1230+7,
|
||||
's', 'w', 'w', 'a', 0, 0, 0x1230+7,
|
||||
SYLW('t', 0x1270)
|
||||
'u', 0, 0, 0, 0, 0, 0x12A1,
|
||||
'u','u', 0, 0, 0, 0, 0x12D1,
|
||||
SYLW('v', 0x1268)
|
||||
SYL('w', 0x12c8)
|
||||
SYLW('x', 0x1238)
|
||||
SYL('y', 0x12e8)
|
||||
SYLW('z', 0x12d8)
|
||||
GDK_KEY_Shift_L, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
|
||||
GDK_KEY_Shift_R, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
|
||||
};
|
||||
|
||||
static void
|
||||
am_et_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
am_et_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
am_et_compose_seqs,
|
||||
5,
|
||||
G_N_ELEMENTS (am_et_compose_seqs) / (5 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo am_et_info = {
|
||||
"am_et", /* ID */
|
||||
NC_("input method menu", "Amharic (EZ+)"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"am" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&am_et_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_am_et
|
||||
#define MODULE_ENTRY(type,function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_am_et_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
am_et_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "am_et") == 0)
|
||||
return g_object_new (type_am_et_translit, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,128 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
|
||||
GType type_cedilla = 0;
|
||||
|
||||
static void cedilla_class_init (GtkIMContextSimpleClass *class);
|
||||
static void cedilla_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
cedilla_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) cedilla_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) cedilla_init,
|
||||
};
|
||||
|
||||
type_cedilla =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextCedillaTranslit",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
/* The difference between this and the default input method is the handling
|
||||
* of C+acute - this method produces C WITH CEDILLA rather than C WITH ACUTE.
|
||||
* For languages that use CCedilla and not acute, this is the preferred mapping,
|
||||
* and is particularly important for pt_BR, where the us-intl keyboard is
|
||||
* used extensively.
|
||||
*/
|
||||
static guint16 cedilla_compose_seqs[] = {
|
||||
GDK_KEY_dead_acute, GDK_KEY_C, 0, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_KEY_dead_acute, GDK_KEY_c, 0, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_KEY_Multi_key, GDK_KEY_apostrophe, GDK_KEY_C, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_KEY_Multi_key, GDK_KEY_apostrophe, GDK_KEY_c, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_KEY_Multi_key, GDK_KEY_C, GDK_KEY_apostrophe, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_KEY_Multi_key, GDK_KEY_c, GDK_KEY_apostrophe, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
|
||||
};
|
||||
|
||||
static void
|
||||
cedilla_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
cedilla_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
cedilla_compose_seqs,
|
||||
4,
|
||||
G_N_ELEMENTS (cedilla_compose_seqs) / (4 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo cedilla_info = {
|
||||
"cedilla", /* ID */
|
||||
NC_("input method menu", "Cedilla"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain */
|
||||
"az:ca:co:fr:gv:oc:pt:sq:tr:wa" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
¸la_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_cedilla
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_cedilla_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
cedilla_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "cedilla") == 0)
|
||||
return g_object_new (type_cedilla, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,253 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_cyrillic_translit = 0;
|
||||
|
||||
static void cyrillic_translit_class_init (GtkIMContextSimpleClass *class);
|
||||
static void cyrillic_translit_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
cyrillic_translit_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) cyrillic_translit_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) cyrillic_translit_init,
|
||||
};
|
||||
|
||||
type_cyrillic_translit =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextCyrillicTranslit",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
/* The sequences here match the sequences used in the emacs quail
|
||||
* mode cryllic-translit; they allow entering all characters
|
||||
* in iso-8859-5
|
||||
*/
|
||||
static guint16 cyrillic_compose_seqs[] = {
|
||||
GDK_KEY_apostrophe, 0, 0, 0, 0, 0x44C, /* CYRILLIC SMALL LETTER SOFT SIGN */
|
||||
GDK_KEY_apostrophe, GDK_KEY_apostrophe, 0, 0, 0, 0x42C, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
|
||||
GDK_KEY_slash, GDK_KEY_C, GDK_KEY_H, 0, 0, 0x040B, /* CYRILLIC CAPITAL LETTER TSHE */
|
||||
GDK_KEY_slash, GDK_KEY_C, GDK_KEY_h, 0, 0, 0x040B, /* CYRILLIC CAPITAL LETTER TSHE */
|
||||
GDK_KEY_slash, GDK_KEY_D, 0, 0, 0, 0x0402, /* CYRILLIC CAPITAL LETTER DJE */
|
||||
GDK_KEY_slash, GDK_KEY_E, 0, 0, 0, 0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */
|
||||
GDK_KEY_slash, GDK_KEY_G, 0, 0, 0, 0x0403, /* CYRILLIC CAPITAL LETTER GJE */
|
||||
GDK_KEY_slash, GDK_KEY_I, 0, 0, 0, 0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
|
||||
GDK_KEY_slash, GDK_KEY_J, 0, 0, 0, 0x0408, /* CYRILLIC CAPITAL LETTER JE */
|
||||
GDK_KEY_slash, GDK_KEY_K, 0, 0, 0, 0x040C, /* CYRILLIC CAPITAL LETTER KJE */
|
||||
GDK_KEY_slash, GDK_KEY_L, 0, 0, 0, 0x0409, /* CYRILLIC CAPITAL LETTER LJE */
|
||||
GDK_KEY_slash, GDK_KEY_N, 0, 0, 0, 0x040A, /* CYRILLIC CAPITAL LETTER NJE */
|
||||
GDK_KEY_slash, GDK_KEY_S, 0, 0, 0, 0x0405, /* CYRILLIC CAPITAL LETTER DZE */
|
||||
GDK_KEY_slash, GDK_KEY_S, GDK_KEY_H, GDK_KEY_T, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
|
||||
GDK_KEY_slash, GDK_KEY_S, GDK_KEY_H, GDK_KEY_t, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
|
||||
GDK_KEY_slash, GDK_KEY_S, GDK_KEY_h, GDK_KEY_t, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
|
||||
GDK_KEY_slash, GDK_KEY_T, 0, 0, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCH */
|
||||
GDK_KEY_slash, GDK_KEY_Z, 0, 0, 0, 0x040F, /* CYRILLIC CAPITAL LETTER DZHE */
|
||||
GDK_KEY_slash, GDK_KEY_c, GDK_KEY_h, 0, 0, 0x045B, /* CYRILLIC SMALL LETTER TSHE */
|
||||
GDK_KEY_slash, GDK_KEY_d, 0, 0, 0, 0x0452, /* CYRILLIC SMALL LETTER DJE */
|
||||
GDK_KEY_slash, GDK_KEY_e, 0, 0, 0, 0x0454, /* CYRILLIC SMALL LETTER UKRAINIAN IE */
|
||||
GDK_KEY_slash, GDK_KEY_g, 0, 0, 0, 0x0453, /* CYRILLIC SMALL LETTER GJE */
|
||||
GDK_KEY_slash, GDK_KEY_i, 0, 0, 0, 0x0456, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
|
||||
GDK_KEY_slash, GDK_KEY_j, 0, 0, 0, 0x0458, /* CYRILLIC SMALL LETTER JE */
|
||||
GDK_KEY_slash, GDK_KEY_k, 0, 0, 0, 0x045C, /* CYRILLIC SMALL LETTER KJE */
|
||||
GDK_KEY_slash, GDK_KEY_l, 0, 0, 0, 0x0459, /* CYRILLIC SMALL LETTER LJE */
|
||||
GDK_KEY_slash, GDK_KEY_n, 0, 0, 0, 0x045A, /* CYRILLIC SMALL LETTER NJE */
|
||||
GDK_KEY_slash, GDK_KEY_s, 0, 0, 0, 0x0455, /* CYRILLIC SMALL LETTER DZE */
|
||||
GDK_KEY_slash, GDK_KEY_s, GDK_KEY_h, GDK_KEY_t, 0, 0x0449, /* CYRILLIC SMALL LETTER SHCH */
|
||||
GDK_KEY_slash, GDK_KEY_t, 0, 0, 0, 0x0449, /* CYRILLIC SMALL LETTER SHCH */
|
||||
GDK_KEY_slash, GDK_KEY_z, 0, 0, 0, 0x045F, /* CYRILLIC SMALL LETTER DZHE */
|
||||
GDK_KEY_A, 0, 0, 0, 0, 0x0410, /* CYRILLIC CAPITAL LETTER A */
|
||||
GDK_KEY_B, 0, 0, 0, 0, 0x0411, /* CYRILLIC CAPITAL LETTER BE */
|
||||
GDK_KEY_C, 0, 0, 0, 0, 0x0426, /* CYRILLIC CAPITAL LETTER TSE */
|
||||
GDK_KEY_C, GDK_KEY_H, 0, 0, 0, 0x0427, /* CYRILLIC CAPITAL LETTER CHE */
|
||||
GDK_KEY_C, GDK_KEY_h, 0, 0, 0, 0x0427, /* CYRILLIC CAPITAL LETTER CHE */
|
||||
GDK_KEY_D, 0, 0, 0, 0, 0x0414, /* CYRILLIC CAPITAL LETTER DE */
|
||||
GDK_KEY_E, 0, 0, 0, 0, 0x0415, /* CYRILLIC CAPITAL LETTER IE */
|
||||
GDK_KEY_E, GDK_KEY_apostrophe, 0, 0, 0, 0x042D, /* CYRILLIC CAPITAL LETTER E */
|
||||
GDK_KEY_F, 0, 0, 0, 0, 0x0424, /* CYRILLIC CAPITAL LETTER EF */
|
||||
GDK_KEY_G, 0, 0, 0, 0, 0x0413, /* CYRILLIC CAPITAL LETTER GE */
|
||||
GDK_KEY_H, 0, 0, 0, 0, 0x0425, /* CYRILLIC CAPITAL LETTER HA */
|
||||
GDK_KEY_I, 0, 0, 0, 0, 0x0418, /* CYRILLIC CAPITAL LETTER I */
|
||||
GDK_KEY_J, 0, 0, 0, 0, 0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
|
||||
GDK_KEY_J, GDK_KEY_apostrophe, 0, 0, 0, 0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
|
||||
GDK_KEY_J, GDK_KEY_A, 0, 0, 0, 0x042F, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_J, GDK_KEY_I, 0, 0, 0, 0x0407, /* CYRILLIC CAPITAL LETTER YI */
|
||||
GDK_KEY_J, GDK_KEY_O, 0, 0, 0, 0x0401, /* CYRILLIC CAPITAL LETTER YO */
|
||||
GDK_KEY_J, GDK_KEY_U, 0, 0, 0, 0x042E, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_J, GDK_KEY_a, 0, 0, 0, 0x042F, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_J, GDK_KEY_i, 0, 0, 0, 0x0407, /* CYRILLIC CAPITAL LETTER YI */
|
||||
GDK_KEY_J, GDK_KEY_o, 0, 0, 0, 0x0401, /* CYRILLIC CAPITAL LETTER YO */
|
||||
GDK_KEY_J, GDK_KEY_u, 0, 0, 0, 0x042E, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_K, 0, 0, 0, 0, 0x041A, /* CYRILLIC CAPITAL LETTER KA */
|
||||
GDK_KEY_K, GDK_KEY_H, 0, 0, 0, 0x0425, /* CYRILLIC CAPITAL LETTER HA */
|
||||
GDK_KEY_L, 0, 0, 0, 0, 0x041B, /* CYRILLIC CAPITAL LETTER EL */
|
||||
GDK_KEY_M, 0, 0, 0, 0, 0x041C, /* CYRILLIC CAPITAL LETTER EM */
|
||||
GDK_KEY_N, 0, 0, 0, 0, 0x041D, /* CYRILLIC CAPITAL LETTER EN */
|
||||
GDK_KEY_O, 0, 0, 0, 0, 0x041E, /* CYRILLIC CAPITAL LETTER O */
|
||||
GDK_KEY_P, 0, 0, 0, 0, 0x041F, /* CYRILLIC CAPITAL LETTER PE */
|
||||
GDK_KEY_Q, 0, 0, 0, 0, 0x042F, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_R, 0, 0, 0, 0, 0x0420, /* CYRILLIC CAPITAL LETTER ER */
|
||||
GDK_KEY_S, 0, 0, 0, 0, 0x0421, /* CYRILLIC CAPITAL LETTER ES */
|
||||
GDK_KEY_S, GDK_KEY_H, 0, 0, 0, 0x0428, /* CYRILLIC CAPITAL LETTER SHA */
|
||||
GDK_KEY_S, GDK_KEY_H, GDK_KEY_C, GDK_KEY_H, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
|
||||
GDK_KEY_S, GDK_KEY_H, GDK_KEY_C, GDK_KEY_h, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
|
||||
GDK_KEY_S, GDK_KEY_H, GDK_KEY_c, GDK_KEY_h, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
|
||||
GDK_KEY_S, GDK_KEY_H, GDK_KEY_c, GDK_KEY_h, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
|
||||
GDK_KEY_S, GDK_KEY_J, 0, 0, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
|
||||
GDK_KEY_S, GDK_KEY_h, 0, 0, 0, 0x0428, /* CYRILLIC CAPITAL LETTER SHA */
|
||||
GDK_KEY_S, GDK_KEY_j, 0, 0, 0, 0x0429, /* CYRILLIC CAPITAL LETTER SHCA */
|
||||
GDK_KEY_T, 0, 0, 0, 0, 0x0422, /* CYRILLIC CAPITAL LETTER TE */
|
||||
GDK_KEY_U, 0, 0, 0, 0, 0x0423, /* CYRILLIC CAPITAL LETTER U */
|
||||
GDK_KEY_U, GDK_KEY_apostrophe, 0, 0, 0, 0x040E, /* CYRILLIC CAPITAL LETTER SHORT */
|
||||
GDK_KEY_V, 0, 0, 0, 0, 0x0412, /* CYRILLIC CAPITAL LETTER VE */
|
||||
GDK_KEY_W, 0, 0, 0, 0, 0x0412, /* CYRILLIC CAPITAL LETTER VE */
|
||||
GDK_KEY_X, 0, 0, 0, 0, 0x0425, /* CYRILLIC CAPITAL LETTER HA */
|
||||
GDK_KEY_Y, 0, 0, 0, 0, 0x042B, /* CYRILLIC CAPITAL LETTER YERU */
|
||||
GDK_KEY_Y, GDK_KEY_A, 0, 0, 0, 0x042F, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_Y, GDK_KEY_I, 0, 0, 0, 0x0407, /* CYRILLIC CAPITAL LETTER YI */
|
||||
GDK_KEY_Y, GDK_KEY_O, 0, 0, 0, 0x0401, /* CYRILLIC CAPITAL LETTER YO */
|
||||
GDK_KEY_Y, GDK_KEY_U, 0, 0, 0, 0x042E, /* CYRILLIC CAPITAL LETTER YU */
|
||||
GDK_KEY_Y, GDK_KEY_a, 0, 0, 0, 0x042F, /* CYRILLIC CAPITAL LETTER YA */
|
||||
GDK_KEY_Y, GDK_KEY_i, 0, 0, 0, 0x0407, /* CYRILLIC CAPITAL LETTER YI */
|
||||
GDK_KEY_Y, GDK_KEY_o, 0, 0, 0, 0x0401, /* CYRILLIC CAPITAL LETTER YO */
|
||||
GDK_KEY_Y, GDK_KEY_u, 0, 0, 0, 0x042E, /* CYRILLIC CAPITAL LETTER YU */
|
||||
GDK_KEY_Z, 0, 0, 0, 0, 0x0417, /* CYRILLIC CAPITAL LETTER ZE */
|
||||
GDK_KEY_Z, GDK_KEY_H, 0, 0, 0, 0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
|
||||
GDK_KEY_Z, GDK_KEY_h, 0, 0, 0, 0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
|
||||
GDK_KEY_a, 0, 0, 0, 0, 0x0430, /* CYRILLIC SMALL LETTER A */
|
||||
GDK_KEY_b, 0, 0, 0, 0, 0x0431, /* CYRILLIC SMALL LETTER BE */
|
||||
GDK_KEY_c, 0, 0, 0, 0, 0x0446, /* CYRILLIC SMALL LETTER TSE */
|
||||
GDK_KEY_c, GDK_KEY_h, 0, 0, 0, 0x0447, /* CYRILLIC SMALL LETTER CHE */
|
||||
GDK_KEY_d, 0, 0, 0, 0, 0x0434, /* CYRILLIC SMALL LETTER DE */
|
||||
GDK_KEY_e, 0, 0, 0, 0, 0x0435, /* CYRILLIC SMALL LETTER IE */
|
||||
GDK_KEY_e, GDK_KEY_apostrophe, 0, 0, 0, 0x044D, /* CYRILLIC SMALL LETTER E */
|
||||
GDK_KEY_f, 0, 0, 0, 0, 0x0444, /* CYRILLIC SMALL LETTER EF */
|
||||
GDK_KEY_g, 0, 0, 0, 0, 0x0433, /* CYRILLIC SMALL LETTER GE */
|
||||
GDK_KEY_h, 0, 0, 0, 0, 0x0445, /* CYRILLIC SMALL LETTER HA */
|
||||
GDK_KEY_i, 0, 0, 0, 0, 0x0438, /* CYRILLIC SMALL LETTER I */
|
||||
GDK_KEY_j, 0, 0, 0, 0, 0x0439, /* CYRILLIC SMALL LETTER SHORT I */
|
||||
GDK_KEY_j, GDK_KEY_apostrophe, 0, 0, 0, 0x0439, /* CYRILLIC SMALL LETTER SHORT I */
|
||||
GDK_KEY_j, GDK_KEY_a, 0, 0, 0, 0x044F, /* CYRILLIC SMALL LETTER YU */
|
||||
GDK_KEY_j, GDK_KEY_i, 0, 0, 0, 0x0457, /* CYRILLIC SMALL LETTER YI */
|
||||
GDK_KEY_j, GDK_KEY_o, 0, 0, 0, 0x0451, /* CYRILLIC SMALL LETTER YO */
|
||||
GDK_KEY_j, GDK_KEY_u, 0, 0, 0, 0x044E, /* CYRILLIC SMALL LETTER YA */
|
||||
GDK_KEY_k, 0, 0, 0, 0, 0x043A, /* CYRILLIC SMALL LETTER KA */
|
||||
GDK_KEY_k, GDK_KEY_h, 0, 0, 0, 0x0445, /* CYRILLIC SMALL LETTER HA */
|
||||
GDK_KEY_l, 0, 0, 0, 0, 0x043B, /* CYRILLIC SMALL LETTER EL */
|
||||
GDK_KEY_m, 0, 0, 0, 0, 0x043C, /* CYRILLIC SMALL LETTER EM */
|
||||
GDK_KEY_n, 0, 0, 0, 0, 0x043D, /* CYRILLIC SMALL LETTER EN */
|
||||
GDK_KEY_o, 0, 0, 0, 0, 0x043E, /* CYRILLIC SMALL LETTER O */
|
||||
GDK_KEY_p, 0, 0, 0, 0, 0x043F, /* CYRILLIC SMALL LETTER PE */
|
||||
GDK_KEY_q, 0, 0, 0, 0, 0x044F, /* CYRILLIC SMALL LETTER YA */
|
||||
GDK_KEY_r, 0, 0, 0, 0, 0x0440, /* CYRILLIC SMALL LETTER ER */
|
||||
GDK_KEY_s, 0, 0, 0, 0, 0x0441, /* CYRILLIC SMALL LETTER ES */
|
||||
GDK_KEY_s, GDK_KEY_h, 0, 0, 0, 0x0448, /* CYRILLIC SMALL LETTER SHA */
|
||||
GDK_KEY_s, GDK_KEY_h, GDK_KEY_c, GDK_KEY_h, 0, 0x0449, /* CYRILLIC SMALL LETTER SHCA */
|
||||
GDK_KEY_s, GDK_KEY_j, 0, 0, 0, 0x0449, /* CYRILLIC SMALL LETTER SHCA */
|
||||
GDK_KEY_t, 0, 0, 0, 0, 0x0442, /* CYRILLIC SMALL LETTER TE */
|
||||
GDK_KEY_u, 0, 0, 0, 0, 0x0443, /* CYRILLIC SMALL LETTER U */
|
||||
GDK_KEY_u, GDK_KEY_apostrophe, 0, 0, 0, 0x045E, /* CYRILLIC SMALL LETTER SHORT */
|
||||
GDK_KEY_v, 0, 0, 0, 0, 0x0432, /* CYRILLIC SMALL LETTER VE */
|
||||
GDK_KEY_w, 0, 0, 0, 0, 0x0432, /* CYRILLIC SMALL LETTER VE */
|
||||
GDK_KEY_x, 0, 0, 0, 0, 0x0445, /* CYRILLIC SMALL LETTER HA */
|
||||
GDK_KEY_y, 0, 0, 0, 0, 0x044B, /* CYRILLIC SMALL LETTER YERU */
|
||||
GDK_KEY_y, GDK_KEY_a, 0, 0, 0, 0x044F, /* CYRILLIC SMALL LETTER YU */
|
||||
GDK_KEY_y, GDK_KEY_i, 0, 0, 0, 0x0457, /* CYRILLIC SMALL LETTER YI */
|
||||
GDK_KEY_y, GDK_KEY_o, 0, 0, 0, 0x0451, /* CYRILLIC SMALL LETTER YO */
|
||||
GDK_KEY_y, GDK_KEY_u, 0, 0, 0, 0x044E, /* CYRILLIC SMALL LETTER YA */
|
||||
GDK_KEY_z, 0, 0, 0, 0, 0x0437, /* CYRILLIC SMALL LETTER ZE */
|
||||
GDK_KEY_z, GDK_KEY_h, 0, 0, 0, 0x0436, /* CYRILLIC SMALL LETTER ZHE */
|
||||
GDK_KEY_asciitilde, 0, 0, 0, 0, 0x44A, /* CYRILLIC SMALL LETTER HARD SIGN */
|
||||
GDK_KEY_asciitilde, GDK_KEY_asciitilde, 0, 0, 0, 0x42A, /* CYRILLIC CAPITAL LETTER HARD SIGN */
|
||||
};
|
||||
|
||||
static void
|
||||
cyrillic_translit_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
cyrillic_translit_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
cyrillic_compose_seqs,
|
||||
4,
|
||||
G_N_ELEMENTS (cyrillic_compose_seqs) / (4 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo cyrillic_translit_info = {
|
||||
"cyrillic_translit", /* ID */
|
||||
NC_("input menthod menu", "Cyrillic (Transliterated)"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&cyrillic_translit_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_cyrillic_translit
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_cyrillic_translit_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
cyrillic_translit_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "cyrillic_translit") == 0)
|
||||
return g_object_new (type_cyrillic_translit, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,163 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
* Copyright (C) 2000 SuSE Linux Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Original author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
* Modified for Inuktitut - Robert Brady <robert@suse.co.uk>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_inuktitut_translit = 0;
|
||||
|
||||
static void inuktitut_class_init (GtkIMContextSimpleClass *class);
|
||||
static void inuktitut_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
inuktitut_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) inuktitut_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) inuktitut_init,
|
||||
};
|
||||
|
||||
type_inuktitut_translit =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextInuktitut",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
#define SYL(a,b,c,d) \
|
||||
a, 0, 0, 0, 0, c, \
|
||||
a, 'a', 0, 0, 0, b+7-d, \
|
||||
a, 'a','a',0, 0, b+8-d, \
|
||||
a, 'i', 0, 0, 0, b, \
|
||||
a, 'i','i',0, 0, b+1, \
|
||||
a, 'o', 0, 0, 0, b+2, \
|
||||
a, 'o','o',0, 0, b+3, \
|
||||
a, 'u', 0, 0, 0, b+2, \
|
||||
a, 'u','u',0, 0, b+3,
|
||||
|
||||
static guint16 inuktitut_compose_seqs[] = {
|
||||
'a', 0, 0, 0 , 0, 0x140a,
|
||||
'a', 'a', 0, 0, 0, 0x140b,
|
||||
|
||||
SYL('c', 0x148b, 0x14a1, 2) /* As g */
|
||||
SYL('f', 0x1555, 0x155d, 2)
|
||||
SYL('g', 0x148b, 0x14a1, 2)
|
||||
SYL('h', 0x14ef, 0x1505, 2)
|
||||
|
||||
'i', 0, 0, 0 , 0, 0x1403,
|
||||
'i', 'i', 0, 0, 0, 0x1404,
|
||||
|
||||
SYL('j', 0x1528, 0x153e, 2)
|
||||
SYL('k', 0x146d, 0x1483, 2)
|
||||
SYL('l', 0x14d5, 0x14ea, 2)
|
||||
SYL('m', 0x14a5, 0x14bb, 2)
|
||||
SYL('n', 0x14c2, 0x14d0, 2)
|
||||
|
||||
'o', 0, 0, 0 , 0, 0x1405, /* as u */
|
||||
'o', 'o', 0, 0, 0, 0x1406,
|
||||
|
||||
SYL('p', 0x1431, 0x1449, 0)
|
||||
SYL('q', 0x157f, 0x1585, 3)
|
||||
SYL('r', 0x1546, 0x1550, 2)
|
||||
SYL('s', 0x14ef, 0x1505, 2) /* As h */
|
||||
SYL('t', 0x144e, 0x1466, 0)
|
||||
|
||||
'u', 0, 0, 0 , 0, 0x1405,
|
||||
'u', 'u', 0, 0, 0, 0x1406,
|
||||
|
||||
SYL('v', 0x1555, 0x155d, 2) /* as f */
|
||||
SYL('y', 0x1528, 0x153e, 2) /* As j */
|
||||
|
||||
SYL(GDK_KEY_lstroke, 0x15a0, 0x15a6, 3) /* l- */
|
||||
SYL(GDK_KEY_eng, 0x158f, 0x1595, 3) /* ng */
|
||||
};
|
||||
|
||||
static void
|
||||
inuktitut_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
inuktitut_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
inuktitut_compose_seqs,
|
||||
4,
|
||||
G_N_ELEMENTS (inuktitut_compose_seqs) / (4 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo inuktitut_info = {
|
||||
"inuktitut", /* ID */
|
||||
NC_("input method menu", "Inuktitut (Transliterated)"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"iu" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&inuktitut_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_inuktitut
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_inuktitut_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
inuktitut_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "inuktitut") == 0)
|
||||
return g_object_new (type_inuktitut_translit, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,181 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_ipa = 0;
|
||||
|
||||
static void ipa_class_init (GtkIMContextSimpleClass *class);
|
||||
static void ipa_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
ipa_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) ipa_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) ipa_init,
|
||||
};
|
||||
|
||||
type_ipa =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextIpa",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
/* The sequences here match the sequences used in the emacs quail
|
||||
* mode cryllic-translit; they allow entering all characters
|
||||
* in iso-8859-5
|
||||
*/
|
||||
static guint16 ipa_compose_seqs[] = {
|
||||
GDK_KEY_ampersand, 0, 0, 0, 0, 0x263, /* LATIN SMALL LETTER GAMMA */
|
||||
GDK_KEY_apostrophe, 0, 0, 0, 0, 0x2C8, /* MODIFIER LETTER VERTICAL LINE */
|
||||
GDK_KEY_slash, GDK_KEY_apostrophe, 0, 0, 0, 0x2CA, /* MODIFIER LETTER ACUTE ACCENT */
|
||||
GDK_KEY_slash, GDK_KEY_slash, 0, 0, 0, 0x02F, /* SOLIDUS */
|
||||
GDK_KEY_slash, GDK_KEY_3, 0, 0, 0, 0x25B, /* LATIN SMALL LETTER OPEN E */
|
||||
GDK_KEY_slash, GDK_KEY_A, 0, 0, 0, 0x252, /* LATIN LETTER TURNED ALPHA */
|
||||
GDK_KEY_slash, GDK_KEY_R, 0, 0, 0, 0x281, /* LATIN LETTER SMALL CAPITAL INVERTED R */
|
||||
GDK_KEY_slash, GDK_KEY_a, 0, 0, 0, 0x250, /* LATIN SMALL LETTER TURNED A */
|
||||
GDK_KEY_slash, GDK_KEY_c, 0, 0, 0, 0x254, /* LATIN SMALL LETTER OPEN O */
|
||||
GDK_KEY_slash, GDK_KEY_e, 0, 0, 0, 0x259, /* LATIN SMALL LETTER SCHWA */
|
||||
GDK_KEY_slash, GDK_KEY_h, 0, 0, 0, 0x265, /* LATIN SMALL LETTER TURNED H */
|
||||
GDK_KEY_slash, GDK_KEY_m, 0, 0, 0, 0x26F, /* LATIN SMALL LETTER TURNED M */
|
||||
GDK_KEY_slash, GDK_KEY_r, 0, 0, 0, 0x279, /* LATIN SMALL LETTER TURNED R */
|
||||
GDK_KEY_slash, GDK_KEY_v, 0, 0, 0, 0x28C, /* LATIN SMALL LETTER TURNED V */
|
||||
GDK_KEY_slash, GDK_KEY_w, 0, 0, 0, 0x28D, /* LATIN SMALL LETTER TURNED W */
|
||||
GDK_KEY_slash, GDK_KEY_y, 0, 0, 0, 0x28E, /* LATIN SMALL LETTER TRUEND Y*/
|
||||
GDK_KEY_3, 0, 0, 0, 0, 0x292, /* LATIN SMALL LETTER EZH */
|
||||
GDK_KEY_colon, 0, 0, 0, 0, 0x2D0, /* MODIFIER LETTER TRIANGULAR COLON */
|
||||
GDK_KEY_A, 0, 0, 0, 0, 0x251, /* LATIN SMALL LETTER ALPHA */
|
||||
GDK_KEY_E, 0, 0, 0, 0, 0x25B, /* LATIN SMALL LETTER OPEN E */
|
||||
GDK_KEY_I, 0, 0, 0, 0, 0x26A, /* LATIN LETTER SMALL CAPITAL I */
|
||||
GDK_KEY_L, 0, 0, 0, 0, 0x29F, /* LATIN LETTER SMALL CAPITAL L */
|
||||
GDK_KEY_M, 0, 0, 0, 0, 0x28D, /* LATIN SMALL LETTER TURNED W */
|
||||
GDK_KEY_O, 0, 0, 0, 0, 0x04F, /* LATIN LETTER SMALL CAPITAL OE */
|
||||
GDK_KEY_O, GDK_KEY_E, 0, 0, 0, 0x276, /* LATIN LETTER SMALL CAPITAL OE */
|
||||
GDK_KEY_R, 0, 0, 0, 0, 0x280, /* LATIN LETTER SMALL CAPITAL R */
|
||||
GDK_KEY_U, 0, 0, 0, 0, 0x28A, /* LATIN SMALL LETTER UPSILON */
|
||||
GDK_KEY_Y, 0, 0, 0, 0, 0x28F, /* LATIN LETTER SMALL CAPITAL Y */
|
||||
GDK_KEY_grave, 0, 0, 0, 0, 0x2CC, /* MODIFIER LETTER LOW VERTICAL LINE */
|
||||
GDK_KEY_a, 0, 0, 0, 0, 0x061, /* LATIN SMALL LETTER A */
|
||||
GDK_KEY_a, GDK_KEY_e, 0, 0, 0, 0x0E6, /* LATIN SMALL LETTER AE */
|
||||
GDK_KEY_c, 0, 0, 0, 0, 0x063, /* LATIN SMALL LETTER C */
|
||||
GDK_KEY_c, GDK_KEY_comma, 0, 0, 0, 0x0E7, /* LATIN SMALL LETTER C WITH CEDILLA */
|
||||
GDK_KEY_d, 0, 0, 0, 0, 0x064, /* LATIN SMALL LETTER E */
|
||||
GDK_KEY_d, GDK_KEY_apostrophe, 0, 0, 0, 0x064, /* LATIN SMALL LETTER D */
|
||||
GDK_KEY_d, GDK_KEY_h, 0, 0, 0, 0x0F0, /* LATIN SMALL LETTER ETH */
|
||||
GDK_KEY_e, 0, 0, 0, 0, 0x065, /* LATIN SMALL LETTER E */
|
||||
GDK_KEY_e, GDK_KEY_minus, 0, 0, 0, 0x25A, /* LATIN SMALL LETTER SCHWA WITH HOOK */
|
||||
GDK_KEY_e, GDK_KEY_bar, 0, 0, 0, 0x25A, /* LATIN SMALL LETTER SCHWA WITH HOOK */
|
||||
GDK_KEY_g, 0, 0, 0, 0, 0x067, /* LATIN SMALL LETTER G */
|
||||
GDK_KEY_g, GDK_KEY_n, 0, 0, 0, 0x272, /* LATIN SMALL LETTER N WITH LEFT HOOK */
|
||||
GDK_KEY_i, 0, 0, 0, 0, 0x069, /* LATIN SMALL LETTER I */
|
||||
GDK_KEY_i, GDK_KEY_minus, 0, 0, 0, 0x268, /* LATIN SMALL LETTER I WITH STROKE */
|
||||
GDK_KEY_n, 0, 0, 0, 0, 0x06e, /* LATIN SMALL LETTER N */
|
||||
GDK_KEY_n, GDK_KEY_g, 0, 0, 0, 0x14B, /* LATIN SMALL LETTER ENG */
|
||||
GDK_KEY_o, 0, 0, 0, 0, 0x06f, /* LATIN SMALL LETTER O */
|
||||
GDK_KEY_o, GDK_KEY_minus, 0, 0, 0, 0x275, /* LATIN LETTER BARRED O */
|
||||
GDK_KEY_o, GDK_KEY_slash, 0, 0, 0, 0x0F8, /* LATIN SMALL LETTER O WITH STROKE */
|
||||
GDK_KEY_o, GDK_KEY_e, 0, 0, 0, 0x153, /* LATIN SMALL LIGATURE OE */
|
||||
GDK_KEY_o, GDK_KEY_bar, 0, 0, 0, 0x251, /* LATIN SMALL LETTER ALPHA */
|
||||
GDK_KEY_s, 0, 0, 0, 0, 0x073, /* LATIN SMALL LETTER_ESH */
|
||||
GDK_KEY_s, GDK_KEY_h, 0, 0, 0, 0x283, /* LATIN SMALL LETTER_ESH */
|
||||
GDK_KEY_t, 0, 0, 0, 0, 0x074, /* LATIN SMALL LETTER T */
|
||||
GDK_KEY_t, GDK_KEY_h, 0, 0, 0, 0x3B8, /* GREEK SMALL LETTER THETA */
|
||||
GDK_KEY_u, 0, 0, 0, 0, 0x075, /* LATIN SMALL LETTER U */
|
||||
GDK_KEY_u, GDK_KEY_minus, 0, 0, 0, 0x289, /* LATIN LETTER U BAR */
|
||||
GDK_KEY_z, 0, 0, 0, 0, 0x07A, /* LATIN SMALL LETTER Z */
|
||||
GDK_KEY_z, GDK_KEY_h, 0, 0, 0, 0x292, /* LATIN SMALL LETTER EZH */
|
||||
GDK_KEY_bar, GDK_KEY_o, 0, 0, 0, 0x252, /* LATIN LETTER TURNED ALPHA */
|
||||
|
||||
GDK_KEY_asciitilde, 0, 0, 0, 0, 0x303, /* COMBINING TILDE */
|
||||
|
||||
};
|
||||
|
||||
static void
|
||||
ipa_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
ipa_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
ipa_compose_seqs,
|
||||
4,
|
||||
G_N_ELEMENTS (ipa_compose_seqs) / (4 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo ipa_info = {
|
||||
"ipa", /* ID */
|
||||
NC_("input method menu", "IPA"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&ipa_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_ipa
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_ipa_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
ipa_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "ipa") == 0)
|
||||
return g_object_new (type_ipa, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,71 +0,0 @@
|
||||
/* Copyright (C) 2006 Openismus GmbH
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkimcontextmultipress.h"
|
||||
#include <gtk/gtkimmodule.h> /* For GtkIMContextInfo */
|
||||
#include <glib/gi18n.h>
|
||||
#include <string.h> /* For strcmp() */
|
||||
|
||||
#define CONTEXT_ID "multipress"
|
||||
|
||||
/** NOTE: Change the default language from "" to "*" to enable this input method by default for all locales.
|
||||
*/
|
||||
static const GtkIMContextInfo info = {
|
||||
CONTEXT_ID, /* ID */
|
||||
NC_("input method menu", "Multipress"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain. Defined in configure.ac */
|
||||
MULTIPRESS_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+"). Defined in the Makefile.am */
|
||||
"" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_multipress
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_multipress_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
gtk_im_context_multipress_register_type(module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, CONTEXT_ID) == 0)
|
||||
{
|
||||
GtkIMContext* imcontext = GTK_IM_CONTEXT(g_object_new (GTK_TYPE_IM_CONTEXT_MULTIPRESS, NULL));
|
||||
return imcontext;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,71 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
#include "gtk/gtkintl.h"
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtkimcontextthai.h"
|
||||
|
||||
GType type_thai = 0;
|
||||
|
||||
static const GtkIMContextInfo thai_info = {
|
||||
"thai", /* ID */
|
||||
NC_("input method menu", "Thai-Lao"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"lo:th" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&thai_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_thai
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_thai_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
gtk_im_context_thai_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "thai") == 0)
|
||||
return gtk_im_context_thai_new ();
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,489 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
* Copyright (C) 2000 SuSE Linux Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Original author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
* Modified for Inuktitut - Robert Brady <robert@suse.co.uk>
|
||||
*
|
||||
* Modified for Tigrigna - Daniel Yacob <locales@geez.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_ti_er_translit = 0;
|
||||
|
||||
static void ti_er_class_init (GtkIMContextSimpleClass *class);
|
||||
static void ti_er_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
ti_er_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) ti_er_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) ti_er_init,
|
||||
};
|
||||
|
||||
type_ti_er_translit =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextTigrignaEritrea",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
#define SYL(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'u', 0, 0, 0, 0, b+1,
|
||||
|
||||
#define SYLW1(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'W', 0, 0, 0, 0, b+7, \
|
||||
a, 'W', 'A', 0, 0, 0, b+7, \
|
||||
a, 'W', 'a', 0, 0, 0, b+7,
|
||||
#define SYLW2(a,b) \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'u', 0, 0, 0, 0, b+1, \
|
||||
a, 'w', 'w', 0, 0, 0, b+7, \
|
||||
a, 'w', 'w', 'a', 0, 0, b+7,
|
||||
|
||||
#define SYLW(a,b) \
|
||||
SYLW1(a,b)\
|
||||
SYLW2(a,b)
|
||||
|
||||
#define SYLWW(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'O', 'O', 0, 0, 0, b+8, \
|
||||
a, 'O', 'o', 0, 0, 0, b+8, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'W', 0, 0, 0, 0, b+11, \
|
||||
a, 'W', '\'', 0, 0, 0, b+13, \
|
||||
a, 'W', 'A', 0, 0, 0, b+11, \
|
||||
a, 'W', 'E', 0, 0, 0, b+12, \
|
||||
a, 'W', 'I', 0, 0, 0, b+10, \
|
||||
a, 'W', 'U', 0, 0, 0, b+13, \
|
||||
a, 'W', 'a', 0, 0, 0, b+11, \
|
||||
a, 'W', 'e', 0, 0, 0, b+8, \
|
||||
a, 'W', 'e', 'e', 0, 0, b+12, \
|
||||
a, 'W', 'i', 0, 0, 0, b+10, \
|
||||
a, 'W', 'u', 0, 0, 0, b+13, \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'o', 'o', 0, 0, 0, b+8, \
|
||||
a, 'u', 0, 0, 0, 0, b+1, \
|
||||
a, 'w', 'w', 0, 0, 0, b+11, \
|
||||
a, 'w', 'w', '\'', 0, 0, b+13, \
|
||||
a, 'w', 'w', 'E', 0, 0, b+12, \
|
||||
a, 'w', 'w', 'a', 0, 0, b+11, \
|
||||
a, 'w', 'w', 'e', 0, 0, b+8, \
|
||||
a, 'w', 'w', 'e', 'e', 0, b+12, \
|
||||
a, 'w', 'w', 'i', 0, 0, b+10, \
|
||||
a, 'w', 'w', 'u', 0, 0, b+13,
|
||||
|
||||
static guint16 ti_er_compose_seqs[] = {
|
||||
/* do punctuation and numerals here */
|
||||
|
||||
'\'', 0, 0, 0, 0, 0, GDK_KEY_dead_grave, /* hopefully this has no side effects */
|
||||
'\'', '\'', 0, 0, 0, 0, GDK_KEY_apostrophe,
|
||||
'\'', '1', 0, 0, 0, 0, 0x1369,
|
||||
'\'', '1', '0', 0, 0, 0, 0x1372,
|
||||
'\'', '1', '0', '0', 0, 0, 0x137b,
|
||||
'\'', '1', '0', 'k', 0, 0, 0x137c,
|
||||
/* '\'', '1', '0', '0', '0', 0, 0x137b,
|
||||
'\'', '1', '0', '0', '0', '0', 0, 0x137c, */
|
||||
'\'', '2', 0, 0, 0, 0, 0x136a,
|
||||
'\'', '2', '0', 0, 0, 0, 0x1373,
|
||||
'\'', '3', 0, 0, 0, 0, 0x136b,
|
||||
'\'', '3', '0', 0, 0, 0, 0x1374,
|
||||
'\'', '4', 0, 0, 0, 0, 0x136c,
|
||||
'\'', '4', '0', 0, 0, 0, 0x1375,
|
||||
'\'', '5', 0, 0, 0, 0, 0x136d,
|
||||
'\'', '5', '0', 0, 0, 0, 0x1376,
|
||||
'\'', '6', 0, 0, 0, 0, 0x136e,
|
||||
'\'', '6', '0', 0, 0, 0, 0x1377,
|
||||
'\'', '7', 0, 0, 0, 0, 0x136f,
|
||||
'\'', '7', '0', 0, 0, 0, 0x1378,
|
||||
'\'', '8', 0, 0, 0, 0, 0x1370,
|
||||
'\'', '8', '0', 0, 0, 0, 0x1379,
|
||||
'\'', '9', 0, 0, 0, 0, 0x1371,
|
||||
'\'', '9', '0', 0, 0, 0, 0x137a,
|
||||
',', 0, 0, 0, 0, 0, 0x1363,
|
||||
',', ',', 0, 0, 0, 0, ',',
|
||||
'-', 0, 0, 0, 0, 0, '-',
|
||||
'-', ':', 0, 0, 0, 0, 0x1365,
|
||||
':', 0, 0, 0, 0, 0, 0x1361,
|
||||
':', '-', 0, 0, 0, 0, 0x1366,
|
||||
':', ':', 0, 0, 0, 0, 0x1362,
|
||||
':', ':', ':', 0, 0, 0, ':',
|
||||
':', '|', ':', 0, 0, 0, 0x1368,
|
||||
';', 0, 0, 0, 0, 0, 0x1364,
|
||||
';', ';', 0, 0, 0, 0, ';',
|
||||
'<', 0, 0, 0, 0, 0, '<',
|
||||
'<', '<', 0, 0, 0, 0, 0x00AB,
|
||||
'>', 0, 0, 0, 0, 0, '>',
|
||||
'>', '>', 0, 0, 0, 0, 0x00BB,
|
||||
'?', 0, 0, 0, 0, 0, 0x1367,
|
||||
'?', '?', 0, 0, 0, 0, '?',
|
||||
'A', 0, 0, 0, 0, 0, 0x12A0,
|
||||
'A','A', 0, 0, 0, 0, 0x12D0,
|
||||
SYLW('B', 0x1260)
|
||||
SYLW('C', 0x1328)
|
||||
SYLW('D', 0x12f8)
|
||||
'E', 0, 0, 0, 0, 0, 0x12A4,
|
||||
'E','E', 0, 0, 0, 0, 0x12D4,
|
||||
SYLW1('F', 0x1348)
|
||||
'F', 'Y', 0, 0, 0, 0, 0x135A,
|
||||
'F', 'Y', 'A', 0, 0, 0, 0x135A,
|
||||
'F', 'Y', 'a', 0, 0, 0, 0x135A,
|
||||
SYLW2('F', 0x1348)
|
||||
SYL('G', 0x1318)
|
||||
SYLW('H', 0x1210)
|
||||
'I', 0, 0, 0, 0, 0, 0x12A5,
|
||||
'I','A', 0, 0, 0, 0, 0x12A3,
|
||||
'I','E', 0, 0, 0, 0, 0x12A4,
|
||||
'I','I', 0, 0, 0, 0, 0x12D5,
|
||||
'I','I','E', 0, 0, 0, 0x12D4,
|
||||
'I','I','a', 0, 0, 0, 0x12D3,
|
||||
'I','I','e', 0, 0, 0, 0x12D0,
|
||||
'I','I','i', 0, 0, 0, 0x12D2,
|
||||
'I','I','o', 0, 0, 0, 0x12D6,
|
||||
'I','I','u', 0, 0, 0, 0x12D1,
|
||||
'I','O', 0, 0, 0, 0, 0x12A6,
|
||||
'I','U', 0, 0, 0, 0, 0x12A1,
|
||||
'I','W', 0, 0, 0, 0, 0x12A7,
|
||||
'I','a', 0, 0, 0, 0, 0x12A3,
|
||||
'I','e', 0, 0, 0, 0, 0x12A0,
|
||||
'I','i', 0, 0, 0, 0, 0x12A2,
|
||||
'I','o', 0, 0, 0, 0, 0x12A6,
|
||||
'I','u', 0, 0, 0, 0, 0x12A1,
|
||||
SYLWW('K', 0x12b8)
|
||||
SYLW('L', 0x1208)
|
||||
SYLW1('M', 0x1218)
|
||||
'M', 'Y', 0, 0, 0, 0, 0x1359,
|
||||
'M', 'Y', 'A', 0, 0, 0, 0x1359,
|
||||
'M', 'Y', 'a', 0, 0, 0, 0x1359,
|
||||
SYLW2('M', 0x1218)
|
||||
SYLW('N', 0x1298)
|
||||
'O', 0, 0, 0, 0, 0, 0x12A6,
|
||||
'O','O', 0, 0, 0, 0, 0x12D6,
|
||||
SYLW('P', 0x1330)
|
||||
SYLWW('Q', 0x1250)
|
||||
SYLW1('R', 0x1228)
|
||||
'R', 'Y', 0, 0, 0, 0, 0x1358,
|
||||
'R', 'Y', 'A', 0, 0, 0, 0x1358,
|
||||
'R', 'Y', 'a', 0, 0, 0, 0x1358,
|
||||
SYLW2('R', 0x1228)
|
||||
'S', 0, 0, 0, 0, 0, 0x1338+5,
|
||||
'S', 'A', 0, 0, 0, 0, 0x1338+3,
|
||||
'S', 'E', 0, 0, 0, 0, 0x1338+4,
|
||||
'S', 'I', 0, 0, 0, 0, 0x1338+2,
|
||||
'S', 'O', 0, 0, 0, 0, 0x1338+6,
|
||||
'S', 'S', 0, 0, 0, 0, 0x1340+5,
|
||||
'S', 'S', 'A', 0, 0, 0, 0x1340+3,
|
||||
'S', 'S', 'E', 0, 0, 0, 0x1340+4,
|
||||
'S', 'S', 'I', 0, 0, 0, 0x1340+2,
|
||||
'S', 'S', 'O', 0, 0, 0, 0x1340+6,
|
||||
'S', 'S', 'U', 0, 0, 0, 0x1340+1,
|
||||
'S', 'S', 'a', 0, 0, 0, 0x1340+3,
|
||||
'S', 'S', 'e', 0, 0, 0, 0x1340,
|
||||
'S', 'S', 'e', 'e', 0, 0, 0x1340+4,
|
||||
'S', 'S', 'i', 0, 0, 0, 0x1340+2,
|
||||
'S', 'S', 'o', 0, 0, 0, 0x1340+6,
|
||||
'S', 'S', 'u', 0, 0, 0, 0x1340+1,
|
||||
'S', 'U', 0, 0, 0, 0, 0x1338+1,
|
||||
'S', 'W', 0, 0, 0, 0, 0x1338+7,
|
||||
'S', 'W', 'A', 0, 0, 0, 0x1338+7,
|
||||
'S', 'W', 'a', 0, 0, 0, 0x1338+7,
|
||||
'S', 'a', 0, 0, 0, 0, 0x1338+3,
|
||||
'S', 'e', 0, 0, 0, 0, 0x1338,
|
||||
'S', 'e', 'e', 0, 0, 0, 0x1338+4,
|
||||
'S', 'i', 0, 0, 0, 0, 0x1338+2,
|
||||
'S', 'o', 0, 0, 0, 0, 0x1338+6,
|
||||
'S', 'u', 0, 0, 0, 0, 0x1338+1,
|
||||
'S', 'w', 'w', 0, 0, 0, 0x1338+7,
|
||||
'S', 'w', 'w', 'a', 0, 0, 0x1338+7,
|
||||
SYLW('T', 0x1320)
|
||||
'U', 0, 0, 0, 0, 0, 0x12A1,
|
||||
'U','U', 0, 0, 0, 0, 0x12D1,
|
||||
SYLW('V', 0x1268)
|
||||
SYL('W', 0x12c8)
|
||||
SYLW('X', 0x1238)
|
||||
SYL('Y', 0x12e8)
|
||||
SYLW('Z', 0x12e0)
|
||||
|
||||
/* much, much work to be done for lone vowels */
|
||||
'a', 0, 0, 0, 0, 0, 0x12A3,
|
||||
'a','a', 0, 0, 0, 0, 0x12D3,
|
||||
'a','a','a', 0, 0, 0, 0x12D0,
|
||||
'a','a','a','a', 0, 0, 0x12A0,
|
||||
SYLW('b', 0x1260)
|
||||
SYLW('c', 0x1278)
|
||||
SYLW('d', 0x12f0)
|
||||
'e', 0, 0, 0, 0, 0, 0x12A5,
|
||||
'e','A', 0, 0, 0, 0, 0x12A3,
|
||||
'e','E', 0, 0, 0, 0, 0x12A4,
|
||||
'e','I', 0, 0, 0, 0, 0x12A2,
|
||||
'e','O', 0, 0, 0, 0, 0x12A6,
|
||||
'e','U', 0, 0, 0, 0, 0x12A1,
|
||||
'e','W', 0, 0, 0, 0, 0x12A7,
|
||||
'e','a', 0, 0, 0, 0, 0x12D0,
|
||||
'e','e', 0, 0, 0, 0, 0x12D5,
|
||||
'e','e','E', 0, 0, 0, 0x12D4,
|
||||
'e','e','a', 0, 0, 0, 0x12D3,
|
||||
'e','e','e', 0, 0, 0, 0x12D0,
|
||||
'e','e','i', 0, 0, 0, 0x12D2,
|
||||
'e','e','o', 0, 0, 0, 0x12D6,
|
||||
'e','e','u', 0, 0, 0, 0x12D1,
|
||||
'e','i', 0, 0, 0, 0, 0x12A2,
|
||||
'e','o', 0, 0, 0, 0, 0x12A6,
|
||||
'e','u', 0, 0, 0, 0, 0x12A1,
|
||||
SYLW1('f', 0x1348)
|
||||
'f', 'Y', 0, 0, 0, 0, 0x135A,
|
||||
'f', 'Y', 'A', 0, 0, 0, 0x135A,
|
||||
'f', 'Y', 'a', 0, 0, 0, 0x135A,
|
||||
SYLW2('f', 0x1348)
|
||||
SYLWW('g', 0x1308)
|
||||
'h', 0, 0, 0, 0, 0, 0x1200+5,
|
||||
'h', 'A', 0, 0, 0, 0, 0x1200+3,
|
||||
'h', 'E', 0, 0, 0, 0, 0x1200+4,
|
||||
'h', 'I', 0, 0, 0, 0, 0x1200+2,
|
||||
'h', 'O', 0, 0, 0, 0, 0x1200+6,
|
||||
'h', 'U', 0, 0, 0, 0, 0x1200+1,
|
||||
'h', 'W', 0, 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', '\'', 0, 0, 0, 0x1280+13,
|
||||
'h', 'W', 'A', 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', 'E', 0, 0, 0, 0x1280+12,
|
||||
'h', 'W', 'I', 0, 0, 0, 0x1280+10,
|
||||
'h', 'W', 'U', 0, 0, 0, 0x1280+13,
|
||||
'h', 'W', 'a', 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', 'e', 0, 0, 0, 0x1280+8,
|
||||
'h', 'W', 'e', 'e', 0, 0, 0x1280+12,
|
||||
'h', 'W', 'i', 0, 0, 0, 0x1280+10,
|
||||
'h', 'W', 'u', 0, 0, 0, 0x1280+13,
|
||||
'h', 'a', 0, 0, 0, 0, 0x1200+3,
|
||||
'h', 'e', 0, 0, 0, 0, 0x1200,
|
||||
'h', 'e', 'e', 0, 0, 0, 0x1200+4,
|
||||
'h', 'h', 0, 0, 0, 0, 0x1280+5,
|
||||
'h', 'h', 'A', 0, 0, 0, 0x1280+3,
|
||||
'h', 'h', 'E', 0, 0, 0, 0x1280+4,
|
||||
'h', 'h', 'I', 0, 0, 0, 0x1280+2,
|
||||
'h', 'h', 'O', 0, 0, 0, 0x1280+6,
|
||||
'h', 'h', 'O', 'O', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'U', 0, 0, 0, 0x1280+1,
|
||||
'h', 'h', 'W', 0, 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', '\'', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'W', 'A', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', 'E', 0, 0, 0x1280+12,
|
||||
'h', 'h', 'W', 'I', 0, 0, 0x1280+10,
|
||||
'h', 'h', 'W', 'U', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'W', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', 'e', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'W', 'e', 'e', 0, 0x1280+12,
|
||||
'h', 'h', 'W', 'i', 0, 0, 0x1280+10,
|
||||
'h', 'h', 'W', 'u', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'a', 0, 0, 0, 0x1280+3,
|
||||
'h', 'h', 'e', 0, 0, 0, 0x1280,
|
||||
'h', 'h', 'e', 'e', 0, 0, 0x1280+4,
|
||||
'h', 'h', 'i', 0, 0, 0, 0x1280+2,
|
||||
'h', 'h', 'o', 0, 0, 0, 0x1280+6,
|
||||
'h', 'h', 'o', 'o', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'u', 0, 0, 0, 0x1280+1,
|
||||
'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', '\'', 0, 0x1280+13,
|
||||
'h', 'h', 'w', 'w', 'E', 0, 0x1280+12,
|
||||
'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 'e', 0, 0x1280+8,
|
||||
/* 'h', 'h', 'w', 'w', 'e', 'e', 0, 0x1280+12, too long for now */
|
||||
'h', 'h', 'w', 'w', 'i', 0, 0x1280+10,
|
||||
'h', 'h', 'w', 'w', 'u', 0, 0x1280+13,
|
||||
'h', 'i', 0, 0, 0, 0, 0x1200+2,
|
||||
'h', 'o', 0, 0, 0, 0, 0x1200+6,
|
||||
'h', 'u', 0, 0, 0, 0, 0x1200+1,
|
||||
'h', 'w', 'w', 0, 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 0, 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', '\'', 0, 0, 0x1280+13,
|
||||
'h', 'w', 'w', 'E', 0, 0, 0x1280+12,
|
||||
'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 'e', 0, 0, 0x1280+8,
|
||||
'h', 'w', 'w', 'e', 'e', 0, 0x1280+12,
|
||||
'h', 'w', 'w', 'i', 0, 0, 0x1280+10,
|
||||
'h', 'w', 'w', 'u', 0, 0, 0x1280+13,
|
||||
'i', 0, 0, 0, 0, 0, 0x12A2,
|
||||
'i', 'i', 0, 0, 0, 0, 0x12D2,
|
||||
SYLW('j', 0x1300)
|
||||
SYLWW('k', 0x12a8)
|
||||
SYLW('l', 0x1208)
|
||||
SYLW1('m', 0x1218)
|
||||
'm', 'Y', 0, 0, 0, 0, 0x1359,
|
||||
'm', 'Y', 'A', 0, 0, 0, 0x1359,
|
||||
'm', 'Y', 'a', 0, 0, 0, 0x1359,
|
||||
SYLW2('m', 0x1218)
|
||||
SYLW('n', 0x1290)
|
||||
'o', 0, 0, 0, 0, 0, 0x12A6,
|
||||
'o','o', 0, 0, 0, 0, 0x12D6,
|
||||
SYLW('p', 0x1350)
|
||||
SYLWW('q', 0x1240)
|
||||
SYLW1('r', 0x1228)
|
||||
'r', 'Y', 0, 0, 0, 0, 0x1358,
|
||||
'r', 'Y', 'A', 0, 0, 0, 0x1358,
|
||||
'r', 'Y', 'a', 0, 0, 0, 0x1358,
|
||||
SYLW2('r', 0x1228)
|
||||
's', 0, 0, 0, 0, 0, 0x1230+5,
|
||||
's', 'A', 0, 0, 0, 0, 0x1230+3,
|
||||
's', 'E', 0, 0, 0, 0, 0x1230+4,
|
||||
's', 'I', 0, 0, 0, 0, 0x1230+2,
|
||||
's', 'O', 0, 0, 0, 0, 0x1230+6,
|
||||
's', 'U', 0, 0, 0, 0, 0x1230+1,
|
||||
's', 'W', 0, 0, 0, 0, 0x1230+7,
|
||||
's', 'W', 'A', 0, 0, 0, 0x1230+7,
|
||||
's', 'W', 'a', 0, 0, 0, 0x1230+7,
|
||||
's', 'a', 0, 0, 0, 0, 0x1230+3,
|
||||
's', 'e', 0, 0, 0, 0, 0x1230,
|
||||
's', 'e', 'e', 0, 0, 0, 0x1230+4,
|
||||
's', 'i', 0, 0, 0, 0, 0x1230+2,
|
||||
's', 'o', 0, 0, 0, 0, 0x1230+6,
|
||||
's', 's', 0, 0, 0, 0, 0x1220+5,
|
||||
's', 's', 'A', 0, 0, 0, 0x1220+3,
|
||||
's', 's', 'E', 0, 0, 0, 0x1220+4,
|
||||
's', 's', 'I', 0, 0, 0, 0x1220+2,
|
||||
's', 's', 'O', 0, 0, 0, 0x1220+6,
|
||||
's', 's', 'U', 0, 0, 0, 0x1220+1,
|
||||
's', 's', 'W', 0, 0, 0, 0x1220+7,
|
||||
's', 's', 'W', 'A', 0, 0, 0x1220+7,
|
||||
's', 's', 'W', 'a', 0, 0, 0x1220+7,
|
||||
's', 's', 'a', 0, 0, 0, 0x1220+3,
|
||||
's', 's', 'e', 0, 0, 0, 0x1220,
|
||||
's', 's', 'e', 'e', 0, 0, 0x1220+4,
|
||||
's', 's', 'i', 0, 0, 0, 0x1220+2,
|
||||
's', 's', 'o', 0, 0, 0, 0x1220+6,
|
||||
's', 's', 'u', 0, 0, 0, 0x1220+1,
|
||||
's', 's', 'w', 'w', 0, 0, 0x1220+7,
|
||||
's', 's', 'w', 'w', 'a', 0, 0x1220+7,
|
||||
's', 'u', 0, 0, 0, 0, 0x1230+1,
|
||||
's', 'w', 'w', 0, 0, 0, 0x1230+7,
|
||||
's', 'w', 'w', 'a', 0, 0, 0x1230+7,
|
||||
SYLW('t', 0x1270)
|
||||
'u', 0, 0, 0, 0, 0, 0x12A1,
|
||||
'u','u', 0, 0, 0, 0, 0x12D1,
|
||||
SYLW('v', 0x1268)
|
||||
SYL('w', 0x12c8)
|
||||
SYLW('x', 0x1238)
|
||||
SYL('y', 0x12e8)
|
||||
SYLW('z', 0x12d8)
|
||||
GDK_KEY_Shift_L, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
|
||||
GDK_KEY_Shift_R, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
|
||||
};
|
||||
|
||||
static void
|
||||
ti_er_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
ti_er_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
ti_er_compose_seqs,
|
||||
5,
|
||||
G_N_ELEMENTS (ti_er_compose_seqs) / (5 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo ti_er_info = {
|
||||
"ti_er", /* ID */
|
||||
NC_("input method menu", "Tigrigna-Eritrean (EZ+)"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"ti" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&ti_er_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_ti_er
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_ti_er_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
ti_er_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "ti_er") == 0)
|
||||
return g_object_new (type_ti_er_translit, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,489 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
* Copyright (C) 2000 SuSE Linux Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Original author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
* Modified for Inuktitut - Robert Brady <robert@suse.co.uk>
|
||||
*
|
||||
* Modified for Tigrigna - Daniel Yacob <locales@geez.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_ti_et_translit = 0;
|
||||
|
||||
static void ti_et_class_init (GtkIMContextSimpleClass *class);
|
||||
static void ti_et_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
ti_et_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) ti_et_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) ti_et_init,
|
||||
};
|
||||
|
||||
type_ti_et_translit =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextTigrignaEthiopia",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
#define SYL(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'u', 0, 0, 0, 0, b+1,
|
||||
|
||||
#define SYLW1(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'W', 0, 0, 0, 0, b+7, \
|
||||
a, 'W', 'A', 0, 0, 0, b+7, \
|
||||
a, 'W', 'a', 0, 0, 0, b+7,
|
||||
#define SYLW2(a,b) \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'u', 0, 0, 0, 0, b+1, \
|
||||
a, 'w', 'w', 0, 0, 0, b+7, \
|
||||
a, 'w', 'w', 'a', 0, 0, b+7,
|
||||
|
||||
#define SYLW(a,b) \
|
||||
SYLW1(a,b)\
|
||||
SYLW2(a,b)
|
||||
|
||||
#define SYLWW(a,b) \
|
||||
a, 0, 0, 0, 0, 0, b+5, \
|
||||
a, 'A', 0, 0, 0, 0, b+3, \
|
||||
a, 'E', 0, 0, 0, 0, b+4, \
|
||||
a, 'I', 0, 0, 0, 0, b+2, \
|
||||
a, 'O', 0, 0, 0, 0, b+6, \
|
||||
a, 'O', 'O', 0, 0, 0, b+8, \
|
||||
a, 'O', 'o', 0, 0, 0, b+8, \
|
||||
a, 'U', 0, 0, 0, 0, b+1, \
|
||||
a, 'W', 0, 0, 0, 0, b+11, \
|
||||
a, 'W', '\'', 0, 0, 0, b+13, \
|
||||
a, 'W', 'A', 0, 0, 0, b+11, \
|
||||
a, 'W', 'E', 0, 0, 0, b+12, \
|
||||
a, 'W', 'I', 0, 0, 0, b+10, \
|
||||
a, 'W', 'U', 0, 0, 0, b+13, \
|
||||
a, 'W', 'a', 0, 0, 0, b+11, \
|
||||
a, 'W', 'e', 0, 0, 0, b+8, \
|
||||
a, 'W', 'e', 'e', 0, 0, b+12, \
|
||||
a, 'W', 'i', 0, 0, 0, b+10, \
|
||||
a, 'W', 'u', 0, 0, 0, b+13, \
|
||||
a, 'a', 0, 0, 0, 0, b+3, \
|
||||
a, 'e', 0, 0, 0, 0, b, \
|
||||
a, 'e', 'e', 0, 0, 0, b+4, \
|
||||
a, 'i', 0, 0, 0, 0, b+2, \
|
||||
a, 'o', 0, 0, 0, 0, b+6, \
|
||||
a, 'o', 'o', 0, 0, 0, b+8, \
|
||||
a, 'u', 0, 0, 0, 0, b+1, \
|
||||
a, 'w', 'w', 0, 0, 0, b+11, \
|
||||
a, 'w', 'w', '\'', 0, 0, b+13, \
|
||||
a, 'w', 'w', 'E', 0, 0, b+12, \
|
||||
a, 'w', 'w', 'a', 0, 0, b+11, \
|
||||
a, 'w', 'w', 'e', 0, 0, b+8, \
|
||||
a, 'w', 'w', 'e', 'e', 0, b+12, \
|
||||
a, 'w', 'w', 'i', 0, 0, b+10, \
|
||||
a, 'w', 'w', 'u', 0, 0, b+13,
|
||||
|
||||
static guint16 ti_et_compose_seqs[] = {
|
||||
/* do punctuation and numerals here */
|
||||
|
||||
'\'', 0, 0, 0, 0, 0, GDK_KEY_dead_grave, /* hopefully this has no side effects */
|
||||
'\'', '\'', 0, 0, 0, 0, GDK_KEY_apostrophe,
|
||||
'\'', '1', 0, 0, 0, 0, 0x1369,
|
||||
'\'', '1', '0', 0, 0, 0, 0x1372,
|
||||
'\'', '1', '0', '0', 0, 0, 0x137b,
|
||||
'\'', '1', '0', 'k', 0, 0, 0x137c,
|
||||
/* '\'', '1', '0', '0', '0', 0, 0x137b,
|
||||
'\'', '1', '0', '0', '0', '0', 0, 0x137c, */
|
||||
'\'', '2', 0, 0, 0, 0, 0x136a,
|
||||
'\'', '2', '0', 0, 0, 0, 0x1373,
|
||||
'\'', '3', 0, 0, 0, 0, 0x136b,
|
||||
'\'', '3', '0', 0, 0, 0, 0x1374,
|
||||
'\'', '4', 0, 0, 0, 0, 0x136c,
|
||||
'\'', '4', '0', 0, 0, 0, 0x1375,
|
||||
'\'', '5', 0, 0, 0, 0, 0x136d,
|
||||
'\'', '5', '0', 0, 0, 0, 0x1376,
|
||||
'\'', '6', 0, 0, 0, 0, 0x136e,
|
||||
'\'', '6', '0', 0, 0, 0, 0x1377,
|
||||
'\'', '7', 0, 0, 0, 0, 0x136f,
|
||||
'\'', '7', '0', 0, 0, 0, 0x1378,
|
||||
'\'', '8', 0, 0, 0, 0, 0x1370,
|
||||
'\'', '8', '0', 0, 0, 0, 0x1379,
|
||||
'\'', '9', 0, 0, 0, 0, 0x1371,
|
||||
'\'', '9', '0', 0, 0, 0, 0x137a,
|
||||
',', 0, 0, 0, 0, 0, 0x1363,
|
||||
',', ',', 0, 0, 0, 0, ',',
|
||||
'-', 0, 0, 0, 0, 0, '-',
|
||||
'-', ':', 0, 0, 0, 0, 0x1365,
|
||||
':', 0, 0, 0, 0, 0, 0x1361,
|
||||
':', '-', 0, 0, 0, 0, 0x1366,
|
||||
':', ':', 0, 0, 0, 0, 0x1362,
|
||||
':', ':', ':', 0, 0, 0, ':',
|
||||
':', '|', ':', 0, 0, 0, 0x1368,
|
||||
';', 0, 0, 0, 0, 0, 0x1364,
|
||||
';', ';', 0, 0, 0, 0, ';',
|
||||
'<', 0, 0, 0, 0, 0, '<',
|
||||
'<', '<', 0, 0, 0, 0, 0x00AB,
|
||||
'>', 0, 0, 0, 0, 0, '>',
|
||||
'>', '>', 0, 0, 0, 0, 0x00BB,
|
||||
'?', 0, 0, 0, 0, 0, '?',
|
||||
'?', '?', 0, 0, 0, 0, 0x1367,
|
||||
'A', 0, 0, 0, 0, 0, 0x12A0,
|
||||
'A','A', 0, 0, 0, 0, 0x12D0,
|
||||
SYLW('B', 0x1260)
|
||||
SYLW('C', 0x1328)
|
||||
SYLW('D', 0x12f8)
|
||||
'E', 0, 0, 0, 0, 0, 0x12A4,
|
||||
'E','E', 0, 0, 0, 0, 0x12D4,
|
||||
SYLW1('F', 0x1348)
|
||||
'F', 'Y', 0, 0, 0, 0, 0x135A,
|
||||
'F', 'Y', 'A', 0, 0, 0, 0x135A,
|
||||
'F', 'Y', 'a', 0, 0, 0, 0x135A,
|
||||
SYLW2('F', 0x1348)
|
||||
SYL('G', 0x1318)
|
||||
SYLW('H', 0x1210)
|
||||
'I', 0, 0, 0, 0, 0, 0x12A5,
|
||||
'I','A', 0, 0, 0, 0, 0x12A3,
|
||||
'I','E', 0, 0, 0, 0, 0x12A4,
|
||||
'I','I', 0, 0, 0, 0, 0x12D5,
|
||||
'I','I','E', 0, 0, 0, 0x12D4,
|
||||
'I','I','a', 0, 0, 0, 0x12D3,
|
||||
'I','I','e', 0, 0, 0, 0x12D0,
|
||||
'I','I','i', 0, 0, 0, 0x12D2,
|
||||
'I','I','o', 0, 0, 0, 0x12D6,
|
||||
'I','I','u', 0, 0, 0, 0x12D1,
|
||||
'I','O', 0, 0, 0, 0, 0x12A6,
|
||||
'I','U', 0, 0, 0, 0, 0x12A1,
|
||||
'I','W', 0, 0, 0, 0, 0x12A7,
|
||||
'I','a', 0, 0, 0, 0, 0x12A3,
|
||||
'I','e', 0, 0, 0, 0, 0x12A0,
|
||||
'I','i', 0, 0, 0, 0, 0x12A2,
|
||||
'I','o', 0, 0, 0, 0, 0x12A6,
|
||||
'I','u', 0, 0, 0, 0, 0x12A1,
|
||||
SYLWW('K', 0x12b8)
|
||||
SYLW('L', 0x1208)
|
||||
SYLW1('M', 0x1218)
|
||||
'M', 'Y', 0, 0, 0, 0, 0x1359,
|
||||
'M', 'Y', 'A', 0, 0, 0, 0x1359,
|
||||
'M', 'Y', 'a', 0, 0, 0, 0x1359,
|
||||
SYLW2('M', 0x1218)
|
||||
SYLW('N', 0x1298)
|
||||
'O', 0, 0, 0, 0, 0, 0x12A6,
|
||||
'O','O', 0, 0, 0, 0, 0x12D6,
|
||||
SYLW('P', 0x1330)
|
||||
SYLWW('Q', 0x1250)
|
||||
SYLW1('R', 0x1228)
|
||||
'R', 'Y', 0, 0, 0, 0, 0x1358,
|
||||
'R', 'Y', 'A', 0, 0, 0, 0x1358,
|
||||
'R', 'Y', 'a', 0, 0, 0, 0x1358,
|
||||
SYLW2('R', 0x1228)
|
||||
'S', 0, 0, 0, 0, 0, 0x1338+5,
|
||||
'S', 'A', 0, 0, 0, 0, 0x1338+3,
|
||||
'S', 'E', 0, 0, 0, 0, 0x1338+4,
|
||||
'S', 'I', 0, 0, 0, 0, 0x1338+2,
|
||||
'S', 'O', 0, 0, 0, 0, 0x1338+6,
|
||||
'S', 'S', 0, 0, 0, 0, 0x1340+5,
|
||||
'S', 'S', 'A', 0, 0, 0, 0x1340+3,
|
||||
'S', 'S', 'E', 0, 0, 0, 0x1340+4,
|
||||
'S', 'S', 'I', 0, 0, 0, 0x1340+2,
|
||||
'S', 'S', 'O', 0, 0, 0, 0x1340+6,
|
||||
'S', 'S', 'U', 0, 0, 0, 0x1340+1,
|
||||
'S', 'S', 'a', 0, 0, 0, 0x1340+3,
|
||||
'S', 'S', 'e', 0, 0, 0, 0x1340,
|
||||
'S', 'S', 'e', 'e', 0, 0, 0x1340+4,
|
||||
'S', 'S', 'i', 0, 0, 0, 0x1340+2,
|
||||
'S', 'S', 'o', 0, 0, 0, 0x1340+6,
|
||||
'S', 'S', 'u', 0, 0, 0, 0x1340+1,
|
||||
'S', 'U', 0, 0, 0, 0, 0x1338+1,
|
||||
'S', 'W', 0, 0, 0, 0, 0x1338+7,
|
||||
'S', 'W', 'A', 0, 0, 0, 0x1338+7,
|
||||
'S', 'W', 'a', 0, 0, 0, 0x1338+7,
|
||||
'S', 'a', 0, 0, 0, 0, 0x1338+3,
|
||||
'S', 'e', 0, 0, 0, 0, 0x1338,
|
||||
'S', 'e', 'e', 0, 0, 0, 0x1338+4,
|
||||
'S', 'i', 0, 0, 0, 0, 0x1338+2,
|
||||
'S', 'o', 0, 0, 0, 0, 0x1338+6,
|
||||
'S', 'u', 0, 0, 0, 0, 0x1338+1,
|
||||
'S', 'w', 'w', 0, 0, 0, 0x1338+7,
|
||||
'S', 'w', 'w', 'a', 0, 0, 0x1338+7,
|
||||
SYLW('T', 0x1320)
|
||||
'U', 0, 0, 0, 0, 0, 0x12A1,
|
||||
'U','U', 0, 0, 0, 0, 0x12D1,
|
||||
SYLW('V', 0x1268)
|
||||
SYL('W', 0x12c8)
|
||||
SYLW('X', 0x1238)
|
||||
SYL('Y', 0x12e8)
|
||||
SYLW('Z', 0x12e0)
|
||||
|
||||
/* much, much work to be done for lone vowels */
|
||||
'a', 0, 0, 0, 0, 0, 0x12A3,
|
||||
'a','a', 0, 0, 0, 0, 0x12D3,
|
||||
'a','a','a', 0, 0, 0, 0x12D0,
|
||||
'a','a','a','a', 0, 0, 0x12A0,
|
||||
SYLW('b', 0x1260)
|
||||
SYLW('c', 0x1278)
|
||||
SYLW('d', 0x12f0)
|
||||
'e', 0, 0, 0, 0, 0, 0x12A5,
|
||||
'e','A', 0, 0, 0, 0, 0x12A3,
|
||||
'e','E', 0, 0, 0, 0, 0x12A4,
|
||||
'e','I', 0, 0, 0, 0, 0x12A2,
|
||||
'e','O', 0, 0, 0, 0, 0x12A6,
|
||||
'e','U', 0, 0, 0, 0, 0x12A1,
|
||||
'e','W', 0, 0, 0, 0, 0x12A7,
|
||||
'e','a', 0, 0, 0, 0, 0x12D0,
|
||||
'e','e', 0, 0, 0, 0, 0x12D5,
|
||||
'e','e','E', 0, 0, 0, 0x12D4,
|
||||
'e','e','a', 0, 0, 0, 0x12D3,
|
||||
'e','e','e', 0, 0, 0, 0x12D0,
|
||||
'e','e','i', 0, 0, 0, 0x12D2,
|
||||
'e','e','o', 0, 0, 0, 0x12D6,
|
||||
'e','e','u', 0, 0, 0, 0x12D1,
|
||||
'e','i', 0, 0, 0, 0, 0x12A2,
|
||||
'e','o', 0, 0, 0, 0, 0x12A6,
|
||||
'e','u', 0, 0, 0, 0, 0x12A1,
|
||||
SYLW1('f', 0x1348)
|
||||
'f', 'Y', 0, 0, 0, 0, 0x135A,
|
||||
'f', 'Y', 'A', 0, 0, 0, 0x135A,
|
||||
'f', 'Y', 'a', 0, 0, 0, 0x135A,
|
||||
SYLW2('f', 0x1348)
|
||||
SYLWW('g', 0x1308)
|
||||
'h', 0, 0, 0, 0, 0, 0x1200+5,
|
||||
'h', 'A', 0, 0, 0, 0, 0x1200+3,
|
||||
'h', 'E', 0, 0, 0, 0, 0x1200+4,
|
||||
'h', 'I', 0, 0, 0, 0, 0x1200+2,
|
||||
'h', 'O', 0, 0, 0, 0, 0x1200+6,
|
||||
'h', 'U', 0, 0, 0, 0, 0x1200+1,
|
||||
'h', 'W', 0, 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', '\'', 0, 0, 0, 0x1280+13,
|
||||
'h', 'W', 'A', 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', 'E', 0, 0, 0, 0x1280+12,
|
||||
'h', 'W', 'I', 0, 0, 0, 0x1280+10,
|
||||
'h', 'W', 'U', 0, 0, 0, 0x1280+13,
|
||||
'h', 'W', 'a', 0, 0, 0, 0x1280+11,
|
||||
'h', 'W', 'e', 0, 0, 0, 0x1280+8,
|
||||
'h', 'W', 'e', 'e', 0, 0, 0x1280+12,
|
||||
'h', 'W', 'i', 0, 0, 0, 0x1280+10,
|
||||
'h', 'W', 'u', 0, 0, 0, 0x1280+13,
|
||||
'h', 'a', 0, 0, 0, 0, 0x1200+3,
|
||||
'h', 'e', 0, 0, 0, 0, 0x1200,
|
||||
'h', 'e', 'e', 0, 0, 0, 0x1200+4,
|
||||
'h', 'h', 0, 0, 0, 0, 0x1280+5,
|
||||
'h', 'h', 'A', 0, 0, 0, 0x1280+3,
|
||||
'h', 'h', 'E', 0, 0, 0, 0x1280+4,
|
||||
'h', 'h', 'I', 0, 0, 0, 0x1280+2,
|
||||
'h', 'h', 'O', 0, 0, 0, 0x1280+6,
|
||||
'h', 'h', 'O', 'O', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'U', 0, 0, 0, 0x1280+1,
|
||||
'h', 'h', 'W', 0, 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', '\'', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'W', 'A', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', 'E', 0, 0, 0x1280+12,
|
||||
'h', 'h', 'W', 'I', 0, 0, 0x1280+10,
|
||||
'h', 'h', 'W', 'U', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'W', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'W', 'e', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'W', 'e', 'e', 0, 0x1280+12,
|
||||
'h', 'h', 'W', 'i', 0, 0, 0x1280+10,
|
||||
'h', 'h', 'W', 'u', 0, 0, 0x1280+13,
|
||||
'h', 'h', 'a', 0, 0, 0, 0x1280+3,
|
||||
'h', 'h', 'e', 0, 0, 0, 0x1280,
|
||||
'h', 'h', 'e', 'e', 0, 0, 0x1280+4,
|
||||
'h', 'h', 'i', 0, 0, 0, 0x1280+2,
|
||||
'h', 'h', 'o', 0, 0, 0, 0x1280+6,
|
||||
'h', 'h', 'o', 'o', 0, 0, 0x1280+8,
|
||||
'h', 'h', 'u', 0, 0, 0, 0x1280+1,
|
||||
'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 0, 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', '\'', 0, 0x1280+13,
|
||||
'h', 'h', 'w', 'w', 'E', 0, 0x1280+12,
|
||||
'h', 'h', 'w', 'w', 'a', 0, 0x1280+11,
|
||||
'h', 'h', 'w', 'w', 'e', 0, 0x1280+8,
|
||||
/* 'h', 'h', 'w', 'w', 'e', 'e', 0, 0x1280+12, too long for now */
|
||||
'h', 'h', 'w', 'w', 'i', 0, 0x1280+10,
|
||||
'h', 'h', 'w', 'w', 'u', 0, 0x1280+13,
|
||||
'h', 'i', 0, 0, 0, 0, 0x1200+2,
|
||||
'h', 'o', 0, 0, 0, 0, 0x1200+6,
|
||||
'h', 'u', 0, 0, 0, 0, 0x1200+1,
|
||||
'h', 'w', 'w', 0, 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 0, 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', '\'', 0, 0, 0x1280+13,
|
||||
'h', 'w', 'w', 'E', 0, 0, 0x1280+12,
|
||||
'h', 'w', 'w', 'a', 0, 0, 0x1280+11,
|
||||
'h', 'w', 'w', 'e', 0, 0, 0x1280+8,
|
||||
'h', 'w', 'w', 'e', 'e', 0, 0x1280+12,
|
||||
'h', 'w', 'w', 'i', 0, 0, 0x1280+10,
|
||||
'h', 'w', 'w', 'u', 0, 0, 0x1280+13,
|
||||
'i', 0, 0, 0, 0, 0, 0x12A2,
|
||||
'i', 'i', 0, 0, 0, 0, 0x12D2,
|
||||
SYLW('j', 0x1300)
|
||||
SYLWW('k', 0x12a8)
|
||||
SYLW('l', 0x1208)
|
||||
SYLW1('m', 0x1218)
|
||||
'm', 'Y', 0, 0, 0, 0, 0x1359,
|
||||
'm', 'Y', 'A', 0, 0, 0, 0x1359,
|
||||
'm', 'Y', 'a', 0, 0, 0, 0x1359,
|
||||
SYLW2('m', 0x1218)
|
||||
SYLW('n', 0x1290)
|
||||
'o', 0, 0, 0, 0, 0, 0x12A6,
|
||||
'o','o', 0, 0, 0, 0, 0x12D6,
|
||||
SYLW('p', 0x1350)
|
||||
SYLWW('q', 0x1240)
|
||||
SYLW1('r', 0x1228)
|
||||
'r', 'Y', 0, 0, 0, 0, 0x1358,
|
||||
'r', 'Y', 'A', 0, 0, 0, 0x1358,
|
||||
'r', 'Y', 'a', 0, 0, 0, 0x1358,
|
||||
SYLW2('r', 0x1228)
|
||||
's', 0, 0, 0, 0, 0, 0x1230+5,
|
||||
's', 'A', 0, 0, 0, 0, 0x1230+3,
|
||||
's', 'E', 0, 0, 0, 0, 0x1230+4,
|
||||
's', 'I', 0, 0, 0, 0, 0x1230+2,
|
||||
's', 'O', 0, 0, 0, 0, 0x1230+6,
|
||||
's', 'U', 0, 0, 0, 0, 0x1230+1,
|
||||
's', 'W', 0, 0, 0, 0, 0x1230+7,
|
||||
's', 'W', 'A', 0, 0, 0, 0x1230+7,
|
||||
's', 'W', 'a', 0, 0, 0, 0x1230+7,
|
||||
's', 'a', 0, 0, 0, 0, 0x1230+3,
|
||||
's', 'e', 0, 0, 0, 0, 0x1230,
|
||||
's', 'e', 'e', 0, 0, 0, 0x1230+4,
|
||||
's', 'i', 0, 0, 0, 0, 0x1230+2,
|
||||
's', 'o', 0, 0, 0, 0, 0x1230+6,
|
||||
's', 's', 0, 0, 0, 0, 0x1220+5,
|
||||
's', 's', 'A', 0, 0, 0, 0x1220+3,
|
||||
's', 's', 'E', 0, 0, 0, 0x1220+4,
|
||||
's', 's', 'I', 0, 0, 0, 0x1220+2,
|
||||
's', 's', 'O', 0, 0, 0, 0x1220+6,
|
||||
's', 's', 'U', 0, 0, 0, 0x1220+1,
|
||||
's', 's', 'W', 0, 0, 0, 0x1220+7,
|
||||
's', 's', 'W', 'A', 0, 0, 0x1220+7,
|
||||
's', 's', 'W', 'a', 0, 0, 0x1220+7,
|
||||
's', 's', 'a', 0, 0, 0, 0x1220+3,
|
||||
's', 's', 'e', 0, 0, 0, 0x1220,
|
||||
's', 's', 'e', 'e', 0, 0, 0x1220+4,
|
||||
's', 's', 'i', 0, 0, 0, 0x1220+2,
|
||||
's', 's', 'o', 0, 0, 0, 0x1220+6,
|
||||
's', 's', 'u', 0, 0, 0, 0x1220+1,
|
||||
's', 's', 'w', 'w', 0, 0, 0x1220+7,
|
||||
's', 's', 'w', 'w', 'a', 0, 0x1220+7,
|
||||
's', 'u', 0, 0, 0, 0, 0x1230+1,
|
||||
's', 'w', 'w', 0, 0, 0, 0x1230+7,
|
||||
's', 'w', 'w', 'a', 0, 0, 0x1230+7,
|
||||
SYLW('t', 0x1270)
|
||||
'u', 0, 0, 0, 0, 0, 0x12A1,
|
||||
'u','u', 0, 0, 0, 0, 0x12D1,
|
||||
SYLW('v', 0x1268)
|
||||
SYL('w', 0x12c8)
|
||||
SYLW('x', 0x1238)
|
||||
SYL('y', 0x12e8)
|
||||
SYLW('z', 0x12d8)
|
||||
GDK_KEY_Shift_L, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
|
||||
GDK_KEY_Shift_R, GDK_KEY_space, 0, 0, 0, 0, 0x1361,
|
||||
};
|
||||
|
||||
static void
|
||||
ti_et_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
ti_et_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
ti_et_compose_seqs,
|
||||
5,
|
||||
G_N_ELEMENTS (ti_et_compose_seqs) / (5 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo ti_et_info = {
|
||||
"ti_et", /* ID */
|
||||
NC_("input method menu", "Tigrigna-Ethiopian (EZ+)"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"ti" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&ti_et_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_ti_et
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_ti_et_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
ti_et_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "ti_et") == 0)
|
||||
return g_object_new (type_ti_et_translit, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -1,280 +0,0 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2000 Red Hat Software
|
||||
* Copyright (C) 2000 SuSE Linux Ltd
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Original author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
* Modified for VIQR - Robert Brady <robert@suse.co.uk>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtk/gtkimmodule.h"
|
||||
#include "gtk/gtkintl.h"
|
||||
|
||||
GType type_viqr_translit = 0;
|
||||
|
||||
static void viqr_class_init (GtkIMContextSimpleClass *class);
|
||||
static void viqr_init (GtkIMContextSimple *im_context);
|
||||
|
||||
static void
|
||||
viqr_register_type (GTypeModule *module)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GtkIMContextSimpleClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) viqr_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GtkIMContextSimple),
|
||||
0,
|
||||
(GInstanceInitFunc) viqr_init,
|
||||
};
|
||||
|
||||
type_viqr_translit =
|
||||
g_type_module_register_type (module,
|
||||
GTK_TYPE_IM_CONTEXT_SIMPLE,
|
||||
"GtkIMContextViqr",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
static guint16 viqr_compose_seqs[] = {
|
||||
GDK_KEY_A, 0, 0, 0, 0, 'A',
|
||||
GDK_KEY_A, GDK_KEY_apostrophe, 0, 0, 0, 0xc1,
|
||||
GDK_KEY_A, GDK_KEY_parenleft, 0, 0, 0, 0x102,
|
||||
GDK_KEY_A, GDK_KEY_parenleft, GDK_KEY_apostrophe, 0, 0, 0x1eae,
|
||||
GDK_KEY_A, GDK_KEY_parenleft, GDK_KEY_period, 0, 0, 0x1eb6,
|
||||
GDK_KEY_A, GDK_KEY_parenleft, GDK_KEY_question, 0, 0, 0x1eb2,
|
||||
GDK_KEY_A, GDK_KEY_parenleft, GDK_KEY_grave, 0, 0, 0x1eb0,
|
||||
GDK_KEY_A, GDK_KEY_parenleft, GDK_KEY_asciitilde, 0, 0, 0x1eb4,
|
||||
GDK_KEY_A, GDK_KEY_period, 0, 0, 0, 0x1ea0,
|
||||
GDK_KEY_A, GDK_KEY_question, 0, 0, 0, 0x1ea2,
|
||||
GDK_KEY_A, GDK_KEY_asciicircum, 0, 0, 0, 0xc2,
|
||||
GDK_KEY_A, GDK_KEY_asciicircum, GDK_KEY_apostrophe, 0, 0, 0x1ea4,
|
||||
GDK_KEY_A, GDK_KEY_asciicircum, GDK_KEY_period, 0, 0, 0x1eac,
|
||||
GDK_KEY_A, GDK_KEY_asciicircum, GDK_KEY_question, 0, 0, 0x1ea8,
|
||||
GDK_KEY_A, GDK_KEY_asciicircum, GDK_KEY_grave, 0, 0, 0x1ea6,
|
||||
GDK_KEY_A, GDK_KEY_asciicircum, GDK_KEY_asciitilde, 0, 0, 0x1eaa,
|
||||
GDK_KEY_A, GDK_KEY_grave, 0, 0, 0, 0xc0,
|
||||
GDK_KEY_A, GDK_KEY_asciitilde, 0, 0, 0, 0xc3,
|
||||
GDK_KEY_D, 0, 0, 0, 0, 'D',
|
||||
GDK_KEY_D, GDK_KEY_D, 0, 0, 0, 0x110,
|
||||
GDK_KEY_D, GDK_KEY_d, 0, 0, 0, 0x110,
|
||||
GDK_KEY_E, 0, 0, 0, 0, 'E',
|
||||
GDK_KEY_E, GDK_KEY_apostrophe, 0, 0, 0, 0xc9,
|
||||
GDK_KEY_E, GDK_KEY_period, 0, 0, 0, 0x1eb8,
|
||||
GDK_KEY_E, GDK_KEY_question, 0, 0, 0, 0x1eba,
|
||||
GDK_KEY_E, GDK_KEY_asciicircum, 0, 0, 0, 0xca,
|
||||
GDK_KEY_E, GDK_KEY_asciicircum, GDK_KEY_apostrophe, 0, 0, 0x1ebe,
|
||||
GDK_KEY_E, GDK_KEY_asciicircum, GDK_KEY_period, 0, 0, 0x1ec6,
|
||||
GDK_KEY_E, GDK_KEY_asciicircum, GDK_KEY_question, 0, 0, 0x1ec2,
|
||||
GDK_KEY_E, GDK_KEY_asciicircum, GDK_KEY_grave, 0, 0, 0x1ec0,
|
||||
GDK_KEY_E, GDK_KEY_asciicircum, GDK_KEY_asciitilde, 0, 0, 0x1ec4,
|
||||
GDK_KEY_E, GDK_KEY_grave, 0, 0, 0, 0xc8,
|
||||
GDK_KEY_E, GDK_KEY_asciitilde, 0, 0, 0, 0x1ebc,
|
||||
GDK_KEY_I, 0, 0, 0, 0, 'I',
|
||||
GDK_KEY_I, GDK_KEY_apostrophe, 0, 0, 0, 0xcd,
|
||||
GDK_KEY_I, GDK_KEY_period, 0, 0, 0, 0x1eca,
|
||||
GDK_KEY_I, GDK_KEY_question, 0, 0, 0, 0x1ec8,
|
||||
GDK_KEY_I, GDK_KEY_grave, 0, 0, 0, 0xcc,
|
||||
GDK_KEY_I, GDK_KEY_asciitilde, 0, 0, 0, 0x128,
|
||||
GDK_KEY_O, 0, 0, 0, 0, 'O',
|
||||
GDK_KEY_O, GDK_KEY_apostrophe, 0, 0, 0, 0xD3,
|
||||
GDK_KEY_O, GDK_KEY_plus, 0, 0, 0, 0x1a0,
|
||||
GDK_KEY_O, GDK_KEY_plus, GDK_KEY_apostrophe, 0, 0, 0x1eda,
|
||||
GDK_KEY_O, GDK_KEY_plus, GDK_KEY_period, 0, 0, 0x1ee2,
|
||||
GDK_KEY_O, GDK_KEY_plus, GDK_KEY_question, 0, 0, 0x1ede,
|
||||
GDK_KEY_O, GDK_KEY_plus, GDK_KEY_grave, 0, 0, 0x1edc,
|
||||
GDK_KEY_O, GDK_KEY_plus, GDK_KEY_asciitilde, 0, 0, 0x1ee0,
|
||||
GDK_KEY_O, GDK_KEY_period, 0, 0, 0, 0x1ecc,
|
||||
GDK_KEY_O, GDK_KEY_question, 0, 0, 0, 0x1ece,
|
||||
GDK_KEY_O, GDK_KEY_asciicircum, 0, 0, 0, 0xd4,
|
||||
GDK_KEY_O, GDK_KEY_asciicircum, GDK_KEY_apostrophe, 0, 0, 0x1ed0,
|
||||
GDK_KEY_O, GDK_KEY_asciicircum, GDK_KEY_period, 0, 0, 0x1ed8,
|
||||
GDK_KEY_O, GDK_KEY_asciicircum, GDK_KEY_question, 0, 0, 0x1ed4,
|
||||
GDK_KEY_O, GDK_KEY_asciicircum, GDK_KEY_grave, 0, 0, 0x1ed2,
|
||||
GDK_KEY_O, GDK_KEY_asciicircum, GDK_KEY_asciitilde, 0, 0, 0x1ed6,
|
||||
GDK_KEY_O, GDK_KEY_grave, 0, 0, 0, 0xD2,
|
||||
GDK_KEY_O, GDK_KEY_asciitilde, 0, 0, 0, 0xD5,
|
||||
GDK_KEY_U, 0, 0, 0, 0, 'U',
|
||||
GDK_KEY_U, GDK_KEY_apostrophe, 0, 0, 0, 0xDA,
|
||||
GDK_KEY_U, GDK_KEY_plus, 0, 0, 0, 0x1af,
|
||||
GDK_KEY_U, GDK_KEY_plus, GDK_KEY_apostrophe, 0, 0, 0x1ee8,
|
||||
GDK_KEY_U, GDK_KEY_plus, GDK_KEY_period, 0, 0, 0x1ef0,
|
||||
GDK_KEY_U, GDK_KEY_plus, GDK_KEY_question, 0, 0, 0x1eec,
|
||||
GDK_KEY_U, GDK_KEY_plus, GDK_KEY_grave, 0, 0, 0x1eea,
|
||||
GDK_KEY_U, GDK_KEY_plus, GDK_KEY_asciitilde, 0, 0, 0x1eee,
|
||||
GDK_KEY_U, GDK_KEY_period, 0, 0, 0, 0x1ee4,
|
||||
GDK_KEY_U, GDK_KEY_question, 0, 0, 0, 0x1ee6,
|
||||
GDK_KEY_U, GDK_KEY_grave, 0, 0, 0, 0xd9,
|
||||
GDK_KEY_U, GDK_KEY_asciitilde, 0, 0, 0, 0x168,
|
||||
GDK_KEY_Y, 0, 0, 0, 0, 'Y',
|
||||
GDK_KEY_Y, GDK_KEY_apostrophe, 0, 0, 0, 0xdd,
|
||||
GDK_KEY_Y, GDK_KEY_period, 0, 0, 0, 0x1ef4,
|
||||
GDK_KEY_Y, GDK_KEY_question, 0, 0, 0, 0x1ef6,
|
||||
GDK_KEY_Y, GDK_KEY_grave, 0, 0, 0, 0x1ef2,
|
||||
GDK_KEY_Y, GDK_KEY_asciitilde, 0, 0, 0, 0x1ef8,
|
||||
/* Do we need anything else here? */
|
||||
GDK_KEY_backslash, 0, 0, 0, 0, 0,
|
||||
GDK_KEY_backslash, GDK_KEY_apostrophe, 0, 0, 0, '\'',
|
||||
GDK_KEY_backslash, GDK_KEY_parenleft, 0, 0, 0, '(',
|
||||
GDK_KEY_backslash, GDK_KEY_plus, 0, 0, 0, '+',
|
||||
GDK_KEY_backslash, GDK_KEY_period, 0, 0, 0, '.',
|
||||
GDK_KEY_backslash, GDK_KEY_question, 0, 0, 0, '?',
|
||||
GDK_KEY_backslash, GDK_KEY_D, 0, 0, 0, 'D',
|
||||
GDK_KEY_backslash, GDK_KEY_backslash, 0, 0, 0, '\\',
|
||||
GDK_KEY_backslash, GDK_KEY_asciicircum, 0, 0, 0, '^',
|
||||
GDK_KEY_backslash, GDK_KEY_grave, 0, 0, 0, '`',
|
||||
GDK_KEY_backslash, GDK_KEY_d, 0, 0, 0, 'd',
|
||||
GDK_KEY_backslash, GDK_KEY_asciitilde, 0, 0, 0, '~',
|
||||
GDK_KEY_a, 0, 0, 0, 0, 'a',
|
||||
GDK_KEY_a, GDK_KEY_apostrophe, 0, 0, 0, 0xe1,
|
||||
GDK_KEY_a, GDK_KEY_parenleft, 0, 0, 0, 0x103,
|
||||
GDK_KEY_a, GDK_KEY_parenleft, GDK_KEY_apostrophe, 0, 0, 0x1eaf,
|
||||
GDK_KEY_a, GDK_KEY_parenleft, GDK_KEY_period, 0, 0, 0x1eb7,
|
||||
GDK_KEY_a, GDK_KEY_parenleft, GDK_KEY_question, 0, 0, 0x1eb3,
|
||||
GDK_KEY_a, GDK_KEY_parenleft, GDK_KEY_grave, 0, 0, 0x1eb1,
|
||||
GDK_KEY_a, GDK_KEY_parenleft, GDK_KEY_asciitilde, 0, 0, 0x1eb5,
|
||||
GDK_KEY_a, GDK_KEY_period, 0, 0, 0, 0x1ea1,
|
||||
GDK_KEY_a, GDK_KEY_question, 0, 0, 0, 0x1ea3,
|
||||
GDK_KEY_a, GDK_KEY_asciicircum, 0, 0, 0, 0xe2,
|
||||
GDK_KEY_a, GDK_KEY_asciicircum, GDK_KEY_apostrophe, 0, 0, 0x1ea5,
|
||||
GDK_KEY_a, GDK_KEY_asciicircum, GDK_KEY_period, 0, 0, 0x1ead,
|
||||
GDK_KEY_a, GDK_KEY_asciicircum, GDK_KEY_question, 0, 0, 0x1ea9,
|
||||
GDK_KEY_a, GDK_KEY_asciicircum, GDK_KEY_grave, 0, 0, 0x1ea7,
|
||||
GDK_KEY_a, GDK_KEY_asciicircum, GDK_KEY_asciitilde, 0, 0, 0x1eab,
|
||||
GDK_KEY_a, GDK_KEY_grave, 0, 0, 0, 0xe0,
|
||||
GDK_KEY_a, GDK_KEY_asciitilde, 0, 0, 0, 0xe3,
|
||||
GDK_KEY_d, 0, 0, 0, 0, 'd',
|
||||
GDK_KEY_d, GDK_KEY_d, 0, 0, 0, 0x111,
|
||||
GDK_KEY_e, 0, 0, 0, 0, 'e',
|
||||
GDK_KEY_e, GDK_KEY_apostrophe, 0, 0, 0, 0xe9,
|
||||
GDK_KEY_e, GDK_KEY_period, 0, 0, 0, 0x1eb9,
|
||||
GDK_KEY_e, GDK_KEY_question, 0, 0, 0, 0x1ebb,
|
||||
GDK_KEY_e, GDK_KEY_asciicircum, 0, 0, 0, 0xea,
|
||||
GDK_KEY_e, GDK_KEY_asciicircum, GDK_KEY_apostrophe, 0, 0, 0x1ebf,
|
||||
GDK_KEY_e, GDK_KEY_asciicircum, GDK_KEY_period, 0, 0, 0x1ec7,
|
||||
GDK_KEY_e, GDK_KEY_asciicircum, GDK_KEY_question, 0, 0, 0x1ec3,
|
||||
GDK_KEY_e, GDK_KEY_asciicircum, GDK_KEY_grave, 0, 0, 0x1ec1,
|
||||
GDK_KEY_e, GDK_KEY_asciicircum, GDK_KEY_asciitilde, 0, 0, 0x1ec5,
|
||||
GDK_KEY_e, GDK_KEY_grave, 0, 0, 0, 0xe8,
|
||||
GDK_KEY_e, GDK_KEY_asciitilde, 0, 0, 0, 0x1ebd,
|
||||
GDK_KEY_i, 0, 0, 0, 0, 'i',
|
||||
GDK_KEY_i, GDK_KEY_apostrophe, 0, 0, 0, 0xed,
|
||||
GDK_KEY_i, GDK_KEY_period, 0, 0, 0, 0x1ecb,
|
||||
GDK_KEY_i, GDK_KEY_question, 0, 0, 0, 0x1ec9,
|
||||
GDK_KEY_i, GDK_KEY_grave, 0, 0, 0, 0xec,
|
||||
GDK_KEY_i, GDK_KEY_asciitilde, 0, 0, 0, 0x129,
|
||||
GDK_KEY_o, 0, 0, 0, 0, 'o',
|
||||
GDK_KEY_o, GDK_KEY_apostrophe, 0, 0, 0, 0xF3,
|
||||
GDK_KEY_o, GDK_KEY_plus, 0, 0, 0, 0x1a1,
|
||||
GDK_KEY_o, GDK_KEY_plus, GDK_KEY_apostrophe, 0, 0, 0x1edb,
|
||||
GDK_KEY_o, GDK_KEY_plus, GDK_KEY_period, 0, 0, 0x1ee3,
|
||||
GDK_KEY_o, GDK_KEY_plus, GDK_KEY_question, 0, 0, 0x1edf,
|
||||
GDK_KEY_o, GDK_KEY_plus, GDK_KEY_grave, 0, 0, 0x1edd,
|
||||
GDK_KEY_o, GDK_KEY_plus, GDK_KEY_asciitilde, 0, 0, 0x1ee1,
|
||||
GDK_KEY_o, GDK_KEY_period, 0, 0, 0, 0x1ecd,
|
||||
GDK_KEY_o, GDK_KEY_question, 0, 0, 0, 0x1ecf,
|
||||
GDK_KEY_o, GDK_KEY_asciicircum, 0, 0, 0, 0xf4,
|
||||
GDK_KEY_o, GDK_KEY_asciicircum, GDK_KEY_apostrophe, 0, 0, 0x1ed1,
|
||||
GDK_KEY_o, GDK_KEY_asciicircum, GDK_KEY_period, 0, 0, 0x1ed9,
|
||||
GDK_KEY_o, GDK_KEY_asciicircum, GDK_KEY_question, 0, 0, 0x1ed5,
|
||||
GDK_KEY_o, GDK_KEY_asciicircum, GDK_KEY_grave, 0, 0, 0x1ed3,
|
||||
GDK_KEY_o, GDK_KEY_asciicircum, GDK_KEY_asciitilde, 0, 0, 0x1ed7,
|
||||
GDK_KEY_o, GDK_KEY_grave, 0, 0, 0, 0xF2,
|
||||
GDK_KEY_o, GDK_KEY_asciitilde, 0, 0, 0, 0xF5,
|
||||
GDK_KEY_u, 0, 0, 0, 0, 'u',
|
||||
GDK_KEY_u, GDK_KEY_apostrophe, 0, 0, 0, 0xFA,
|
||||
GDK_KEY_u, GDK_KEY_plus, 0, 0, 0, 0x1b0,
|
||||
GDK_KEY_u, GDK_KEY_plus, GDK_KEY_apostrophe, 0, 0, 0x1ee9,
|
||||
GDK_KEY_u, GDK_KEY_plus, GDK_KEY_period, 0, 0, 0x1ef1,
|
||||
GDK_KEY_u, GDK_KEY_plus, GDK_KEY_question, 0, 0, 0x1eed,
|
||||
GDK_KEY_u, GDK_KEY_plus, GDK_KEY_grave, 0, 0, 0x1eeb,
|
||||
GDK_KEY_u, GDK_KEY_plus, GDK_KEY_asciitilde, 0, 0, 0x1eef,
|
||||
GDK_KEY_u, GDK_KEY_period, 0, 0, 0, 0x1ee5,
|
||||
GDK_KEY_u, GDK_KEY_question, 0, 0, 0, 0x1ee7,
|
||||
GDK_KEY_u, GDK_KEY_grave, 0, 0, 0, 0xf9,
|
||||
GDK_KEY_u, GDK_KEY_asciitilde, 0, 0, 0, 0x169,
|
||||
GDK_KEY_y, 0, 0, 0, 0, 'y',
|
||||
GDK_KEY_y, GDK_KEY_apostrophe, 0, 0, 0, 0xfd,
|
||||
GDK_KEY_y, GDK_KEY_period, 0, 0, 0, 0x1ef5,
|
||||
GDK_KEY_y, GDK_KEY_question, 0, 0, 0, 0x1ef7,
|
||||
GDK_KEY_y, GDK_KEY_grave, 0, 0, 0, 0x1ef3,
|
||||
GDK_KEY_y, GDK_KEY_asciitilde, 0, 0, 0, 0x1ef9,
|
||||
};
|
||||
|
||||
static void
|
||||
viqr_class_init (GtkIMContextSimpleClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
viqr_init (GtkIMContextSimple *im_context)
|
||||
{
|
||||
gtk_im_context_simple_add_table (im_context,
|
||||
viqr_compose_seqs,
|
||||
4,
|
||||
G_N_ELEMENTS (viqr_compose_seqs) / (4 + 2));
|
||||
}
|
||||
|
||||
static const GtkIMContextInfo viqr_info = {
|
||||
"viqr", /* ID */
|
||||
NC_("input method menu", "Vietnamese (VIQR)"), /* Human readable name */
|
||||
GETTEXT_PACKAGE, /* Translation domain */
|
||||
GTK_LOCALEDIR, /* Dir for bindtextdomain (not strictly needed for "gtk+") */
|
||||
"vi" /* Languages for which this module is the default */
|
||||
};
|
||||
|
||||
static const GtkIMContextInfo *info_list[] = {
|
||||
&viqr_info
|
||||
};
|
||||
|
||||
#ifndef INCLUDE_IM_viqr
|
||||
#define MODULE_ENTRY(type, function) G_MODULE_EXPORT type im_module_ ## function
|
||||
#else
|
||||
#define MODULE_ENTRY(type, function) type _gtk_immodule_viqr_ ## function
|
||||
#endif
|
||||
|
||||
MODULE_ENTRY (void, init) (GTypeModule *module)
|
||||
{
|
||||
viqr_register_type (module);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, exit) (void)
|
||||
{
|
||||
}
|
||||
|
||||
MODULE_ENTRY (void, list) (const GtkIMContextInfo ***contexts,
|
||||
int *n_contexts)
|
||||
{
|
||||
*contexts = info_list;
|
||||
*n_contexts = G_N_ELEMENTS (info_list);
|
||||
}
|
||||
|
||||
MODULE_ENTRY (GtkIMContext *, create) (const gchar *context_id)
|
||||
{
|
||||
if (strcmp (context_id, "viqr") == 0)
|
||||
return g_object_new (type_viqr_translit, NULL);
|
||||
else
|
||||
return NULL;
|
||||
}
|
@@ -16,20 +16,7 @@ if not disable_modules
|
||||
endif
|
||||
endif
|
||||
|
||||
all_immodules = [
|
||||
'am-et',
|
||||
'cedilla',
|
||||
'cyrillic-translit',
|
||||
'inuktitut',
|
||||
'ipa',
|
||||
'multipress',
|
||||
'thai',
|
||||
'ti-er',
|
||||
'ti-et',
|
||||
'viqr',
|
||||
]
|
||||
|
||||
all_immodules += backend_immodules
|
||||
all_immodules = backend_immodules
|
||||
|
||||
# Allow building some or all immodules included
|
||||
included_immodules = get_option('with-included-immodules')
|
||||
@@ -56,28 +43,8 @@ endforeach
|
||||
immodules_subdir = 'gtk-4.0/@0@/immodules'.format(gtk_binary_version)
|
||||
immodules_install_dir = join_paths(gtk_libdir, immodules_subdir)
|
||||
|
||||
mp_confdir = join_paths(gtk_sysconfdir, 'gtk-4.0')
|
||||
mp_cargs = [
|
||||
'-DMULTIPRESS_LOCALEDIR=""', # FIXME: where is $(mplocaledir) ever set?
|
||||
'-DMULTIPRESS_CONFDIR="@0@"'.format(mp_confdir),
|
||||
'-DGDK_DISABLE_DEPRECATION_WARNINGS',
|
||||
]
|
||||
|
||||
install_data('im-multipress.conf', install_dir : mp_confdir)
|
||||
|
||||
method_defs = [
|
||||
['am-et', files('imam-et.c')],
|
||||
['cedilla', files('imcedilla.c')],
|
||||
['cyrillic-translit', files('imcyrillic-translit.c')],
|
||||
['ti-er', files('imti-er.c')],
|
||||
['ti-et', files('imti-et.c')],
|
||||
['thai', files('thai-charprop.c', 'gtkimcontextthai.c', 'imthai.c')],
|
||||
['viqr', files('imviqr.c')],
|
||||
['inuktitut', files('iminuktitut.c')],
|
||||
['ipa', files('imipa.c')],
|
||||
# backend modules
|
||||
['broadway', files('imbroadway.c')],
|
||||
['multipress', files('gtkimcontextmultipress.c', 'immultipress.c'), [], mp_cargs],
|
||||
['quartz', ('imquartz.c'), [], ('-xobjective-c')],
|
||||
['xim', files('gtkimcontextxim.c', 'imxim.c')],
|
||||
['ime', files('gtkimcontextime.c', 'imime.c'), ['imm32']],
|
||||
|
@@ -1,138 +0,0 @@
|
||||
#include "thai-charprop.h"
|
||||
|
||||
const gshort thai_char_type[256] = {
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7,
|
||||
8, 9, A, B, C, D, E, F */
|
||||
|
||||
/* CL1 */
|
||||
/*00*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
_ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
/*10*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
_ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
|
||||
/* Lao zone: [U+0E80..U+0EDF] */
|
||||
/*20*/ _ND, _NC, _NC, _ND, _NC, _ND, _ND, _NC,
|
||||
_NC, _ND, _NC, _ND, _ND, _NC, _ND, _ND,
|
||||
/*30*/ _ND, _ND, _ND, _ND, _NC, _NC, _NC, _NC,
|
||||
_ND, _NC, _NC, _UC, _NC, _UC, _NC, _UC,
|
||||
/*40*/ _ND, _NC, _UC, _NC, _ND, _NC, _ND, _NC,
|
||||
_ND, _ND, _NC, _NC, _ND, _NC, _NC, _ND,
|
||||
/*50*/ _ND, _AV, _ND, _AM, _AV, _AV, _AV, _AV,
|
||||
_BV, _BV, _ND, _AV, _BD, _NC, _ND, _ND,
|
||||
/*60*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _AD,
|
||||
_TN, _TN, _TN, _TN, _AD, _AD, _ND, _ND,
|
||||
/*70*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
_ND, _ND, _ND, _ND, _NC, _NC, _ND, _ND,
|
||||
|
||||
/* CL2 */
|
||||
/*80*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
_ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
/*90*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
_ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
|
||||
/* Thai zone: [U+0E00..U+0E5F] */
|
||||
/*A0*/ _ND, _NC, _NC, _NC, _NC, _NC, _NC, _NC,
|
||||
_NC, _NC, _NC, _NC, _NC, _SC, _BC, _BC,
|
||||
/*B0*/ _SC, _NC, _NC, _NC, _NC, _NC, _NC, _NC,
|
||||
_NC, _NC, _NC, _UC, _NC, _UC, _NC, _UC,
|
||||
/*C0*/ _NC, _NC, _NC, _NC, _ND, _NC, _ND, _NC,
|
||||
_NC, _NC, _NC, _NC, _UC, _NC, _NC, _ND,
|
||||
/*D0*/ _ND, _AV, _ND, _AM, _AV, _AV, _AV, _AV,
|
||||
_BV, _BV, _BD, _ND, _ND, _ND, _ND, _ND,
|
||||
/*E0*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _AD,
|
||||
_TN, _TN, _TN, _TN, _AD, _AD, _AD, _ND,
|
||||
/*F0*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
_ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
|
||||
};
|
||||
|
||||
const gshort thai_TAC_char_class[256] = {
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7,
|
||||
8, 9, A, B, C, D, E, F */
|
||||
|
||||
/* CL1 */
|
||||
/*00*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
/*10*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
|
||||
/* Lao zone: [U+0E80..U+0EDF] */
|
||||
/*20*/ NON,CONS,CONS, NON,CONS, NON, NON,CONS,
|
||||
CONS, NON,CONS, NON, NON,CONS, NON, NON,
|
||||
/*30*/ NON, NON, NON, NON,CONS,CONS,CONS,CONS,
|
||||
NON,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
|
||||
/*40*/ NON,CONS,CONS,CONS, NON,CONS, NON,CONS,
|
||||
NON, NON,CONS,CONS, NON,CONS,CONS, NON,
|
||||
/*50*/ FV1, AV2, FV1, AM, AV1, AV3, AV2, AV3,
|
||||
BV1, BV2, NON, AV2,BCON, FV3, NON, NON,
|
||||
/*60*/ LV, LV, LV, LV, LV, NON, NON, NON,
|
||||
TONE,TONE,TONE,TONE, AD1, AD4, NON, NON,
|
||||
/*70*/ NON, NON, NON, NON, NON, NON, NON, NON,
|
||||
NON, NON, NON, NON,CONS,CONS, NON,CTRL,
|
||||
|
||||
/* CL2 */
|
||||
/*80*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
/*90*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
|
||||
|
||||
/* Thai zone: [U+0E00..U+0E5F] */
|
||||
/*A0*/ NON,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
|
||||
CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
|
||||
/*B0*/ CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
|
||||
CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
|
||||
/*C0*/ CONS,CONS,CONS,CONS, FV3,CONS, FV3,CONS,
|
||||
CONS,CONS,CONS,CONS,CONS,CONS,CONS, NON,
|
||||
/*D0*/ FV1, AV2, FV1, AM, AV1, AV3, AV2, AV3,
|
||||
BV1, BV2, BD, NON, NON, NON, NON, NON,
|
||||
/*E0*/ LV, LV, LV, LV, LV, FV2, NON, AD2,
|
||||
TONE,TONE,TONE,TONE, AD1, AD4, AD3, NON,
|
||||
/*F0*/ NON, NON, NON, NON, NON, NON, NON, NON,
|
||||
NON, NON, NON, NON, NON, NON, NON,CTRL,
|
||||
};
|
||||
|
||||
const gchar thai_TAC_compose_input[20][20] = {
|
||||
/* row: Cn-1, column: Cn */
|
||||
/*CTRL NON CONS LV FV1 FV2 FV3 AM BV1 BV2
|
||||
* BD TONE AD1 AD2 AD3 AD4 AV1 AV2 AV3 BCON*/
|
||||
/*CTRL*/{'X','A','A','A','A','A','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*NON */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*CONS*/{'X','A','A','A','A','S','A','C','C','C',
|
||||
'C','C','C','C','C','C','C','C','C','C'},
|
||||
/*LV */{'X','S','A','S','S','S','S','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*FV1 */{'X','A','A','A','A','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*FV2 */{'X','A','A','A','A','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*FV3 */{'X','A','A','A','S','A','S','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*AM */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*BV1 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','C','C','R','R','C','R','R','R','R'},
|
||||
/*BV2 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','C','R','R','R','R','R','R','R','R'},
|
||||
/*BD */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*TONE*/{'X','A','A','A','A','A','A','C','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*AD1 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*AD2 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*AD3 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','R','R','R','R','R','R','R','R','R'},
|
||||
/*AD4 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','C','R','R','R','R','R','R','R','R'},
|
||||
/*AV1 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','C','C','R','R','C','R','R','R','R'},
|
||||
/*AV2 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','C','R','R','R','R','R','R','R','R'},
|
||||
/*AV3 */{'X','A','A','A','S','S','A','R','R','R',
|
||||
'R','C','R','C','R','R','R','R','R','R'},
|
||||
/*BCON*/{'X','A','A','A','A','S','A','C','C','C',
|
||||
'R','C','R','R','R','C','C','C','C','R'},
|
||||
};
|
||||
|
@@ -1,96 +0,0 @@
|
||||
/* Pango
|
||||
* thai-charprop.h:
|
||||
*
|
||||
* Copyright (C) 1999 Red Hat Software
|
||||
* Author: Owen Taylor <otaylor@redhat.com>
|
||||
*
|
||||
* Software and Language Engineering Laboratory, NECTEC
|
||||
* Author: Theppitak Karoonboonyanan <thep@links.nectec.or.th>
|
||||
*
|
||||
* Copyright (c) 1996-2000 by Sun Microsystems, Inc.
|
||||
* Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __THAI_CHARPROP_H__
|
||||
#define __THAI_CHARPROP_H__
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#define isthai(wc) (0x0E00 <= (wc) && (wc) < 0x0E60)
|
||||
#define islao(wc) (0x0E80 <= (wc) && (wc) < 0x0EE0)
|
||||
/* ucs2tis()
|
||||
* Lao: [0x0E80..0x0EDF] -> [0x20..0x7F]
|
||||
* Thai: [0x0E00..0x0E5F] -> [0xA0..0xFF]
|
||||
*/
|
||||
#define ucs2tis(wc) (((wc) - 0x0E00 + 0x20)^0x80)
|
||||
|
||||
/* Define TACTIS character classes */
|
||||
#define CTRL 0
|
||||
#define NON 1
|
||||
#define CONS 2
|
||||
#define LV 3
|
||||
#define FV1 4
|
||||
#define FV2 5
|
||||
#define FV3 6
|
||||
#define AM 7
|
||||
#define BV1 8
|
||||
#define BV2 9
|
||||
#define BD 10
|
||||
#define TONE 11
|
||||
#define AD1 12
|
||||
#define AD2 13
|
||||
#define AD3 14
|
||||
#define AD4 15
|
||||
#define AV1 16
|
||||
#define AV2 17
|
||||
#define AV3 18
|
||||
#define BCON 19
|
||||
|
||||
#define _ND 0
|
||||
#define _NC 1
|
||||
#define _UC (1<<1)
|
||||
#define _BC (1<<2)
|
||||
#define _SC (1<<3)
|
||||
#define _AV (1<<4)
|
||||
#define _BV (1<<5)
|
||||
#define _TN (1<<6)
|
||||
#define _AD (1<<7)
|
||||
#define _BD (1<<8)
|
||||
#define _AM (1<<9)
|
||||
|
||||
#define NoTailCons _NC
|
||||
#define UpTailCons _UC
|
||||
#define BotTailCons _BC
|
||||
#define SpltTailCons _SC
|
||||
#define Cons (NoTailCons|UpTailCons|BotTailCons|SpltTailCons)
|
||||
#define AboveVowel _AV
|
||||
#define BelowVowel _BV
|
||||
#define Tone _TN
|
||||
#define AboveDiac _AD
|
||||
#define BelowDiac _BD
|
||||
#define SaraAm _AM
|
||||
|
||||
#define is_char_type(wc, mask) (thai_char_type[ucs2tis ((wc))] & (mask))
|
||||
#define TAC_char_class(wc) \
|
||||
(isthai(wc)||islao(wc) ? thai_TAC_char_class[ucs2tis (wc)] : NON)
|
||||
#define TAC_compose_input(wc1,wc2) \
|
||||
thai_TAC_compose_input[TAC_char_class(wc1)][TAC_char_class(wc2)]
|
||||
|
||||
extern const gshort thai_char_type[256];
|
||||
extern const gshort thai_TAC_char_class[256];
|
||||
extern const gchar thai_TAC_compose_input[20][20];
|
||||
|
||||
#endif /* __THAI_CHARPROP_H__ */
|
Reference in New Issue
Block a user