[uim-commit] r1180 - in branches/r5rs: . doc fep gtk helper scm
test uim xim
tkng at freedesktop.org
tkng at freedesktop.org
Thu Aug 11 05:34:45 EST 2005
Author: tkng
Date: 2005-08-10 12:34:32 -0700 (Wed, 10 Aug 2005)
New Revision: 1180
Modified:
branches/r5rs/
branches/r5rs/doc/COMPATIBILITY
branches/r5rs/doc/HELPER-CANDWIN
branches/r5rs/doc/HELPER-PROTOCOL
branches/r5rs/fep/README.ja
branches/r5rs/fep/uim-fep.c
branches/r5rs/gtk/caret-state-indicator.c
branches/r5rs/gtk/gtk-im-uim.c
branches/r5rs/gtk/uim-cand-win-gtk.c
branches/r5rs/helper/pref-gtk.c
branches/r5rs/scm/custom-rt.scm
branches/r5rs/scm/custom.scm
branches/r5rs/scm/latin.scm
branches/r5rs/test/test-custom-rt.scm
branches/r5rs/test/test-custom.scm
branches/r5rs/uim/uim-custom.c
branches/r5rs/uim/uim-custom.h
branches/r5rs/uim/uim-helper-server.c
branches/r5rs/uim/uim-util.c
branches/r5rs/uim/uim.c
branches/r5rs/uim/uim.h
branches/r5rs/xim/helper.cpp
Log:
r2810 at t42 (orig r1159): tkng | 2005-08-08 05:42:12 +0900
* uim/uim-helper-server.c: This commit aims to refactoring to improve readability.
-(close_client): Renamed from free_client. close(fd) is also processed here.
-(write_message): New function.
-(read_message): New function.
-(uim_helper_server_process_connection): Simplified with calling write_message
and read_message.
r2811 at t42 (orig r1160): tkng | 2005-08-09 04:48:47 +0900
* uim/uim.c, uim/uim.h
-(uim_prop_reload_configs): New function to reload configrations.
* uim/uim-custom.c
-(uim_custom_broadcast): Send custom_reload_notify instead of
prop_update_custom. This would be faster than prop_update_custom.
* doc/HELPER=PROTOCOL
- Added description for custom_reload_notify.
r2812 at t42 (orig r1161): tkng | 2005-08-09 04:50:42 +0900
* gtk/gtk-im-uim.c:
-(im_uim_parse_helper_str): Corresponded to custom_reload_notify.
* xim/helper.cpp:
-(helper_str_parse): Corresponded to custom_reload_notify.
r2813 at t42 (orig r1162): yamaken | 2005-08-09 05:56:11 +0900
* This commit reverts the removal of the prop_update_custom message
functionality committed in r1160 and r1161 because:
- The new message custom_reload_notify cannot replace some
functionality of the prop_update_custom listed in below:
* alter custom variables without saving files
* alter a single custom variable
- It's broken since the Scheme procedure custom-reload-configs is
still lacking
Please be conservertive when removing or alter an
API functionality. Suggestion before such change at the mailinglist
makes us happy.
* uim/uim-custom.h
- (uim_custom_broadcast_reload_request): New API function
* uim/uim-custom.c
- (uim_custom_broadcast_reload_request): New function
- (uim_custom_broadcast): Revert the prop_update_custom
functionality
* gtk/gtk-im-uim.c
- (im_uim_parse_helper_str): Ditto
* xim/helper.cpp
- (helper_str_parse): Ditto
* doc/COMPATIBILITY
- Add a new section "An experimental custom variable reloading API"
r2814 at t42 (orig r1163): tkng | 2005-08-09 06:37:42 +0900
* scm/custom-rt.scm:
-(custom-reload-configs): New procedure.
r2815 at t42 (orig r1164): tkng | 2005-08-09 08:52:37 +0900
* uim/uim-custom.c: This commit aims to stop saving config file if nothing
changed. As a result, we'll be able to avoid needless reloading of config files.
-(file_content_is_same): New internal function.
-(uim_custom_save_group): Don't change mtime of the file if nothing has
been changed.
r2816 at t42 (orig r1165): tkng | 2005-08-09 09:04:50 +0900
* scm/custom-rt.scm: This commit aims avoid needless reloading of config files.
If a config file is not updated, then it would not be loaded while config reloading.
-(custom-reload-group-syms): Now this list is an alist. Spec of each element
is: (symbol-for-config-file . mtime-of-config-file)
We should rename this variable with more proper name.
-(prepend-new-reload-group-syms): New procedure.
-(update-gsym-mtime): New procedure.
-(custom-load-group-conf, custom-reload-configs): All function which used
custom-reload-group-syms somewhile are modified.
s/custom-reload-group-syms/(map car custom-reload-group-syms)/;
r2817 at t42 (orig r1166): tkng | 2005-08-09 09:07:30 +0900
* helper/pref-gtk.c:
-(ok_button_clicked, apply_button_clicked): Use uim_custom_broadcast_reload_request()
instead of uim_custom_broadcast();
r2818 at t42 (orig r1167): yamaken | 2005-08-09 09:19:45 +0900
* uim/uim-custom.c
- (uim_custom_broadcast_reload_request): Add the description
* doc/HELPER-PROTOCOL
- set-fill-column to 78
r2819 at t42 (orig r1168): tkng | 2005-08-09 09:28:25 +0900
* uim/uim-util.c: Oops, forgotten to commit this file.
-(get_file_mtime): New function.
r2820 at t42 (orig r1169): yamaken | 2005-08-09 10:27:02 +0900
* This commit reverts the changes of r1163 and replace the procedure
custom-reload-configs with preexisting custom-reload-configs which
has same functionality
* scm/custom.scm
- (custom-call-all-hook-procs, custom-reload-customs): Move to
custom-rt.scm
* scm/custom-rt.scm
- (custom-call-all-hook-procs, custom-reload-customs): Moved from
custom.scm
- (custom-file-path): New procedure
- (custom-load-group-conf):
* Move currently defined procedure to
custom-load-updated-group-conf
* Revert to r1162
* Simplify with custom-file-path
* Add a comment
- (custom-load-updated-group-conf):
* Renamed from custom-load-group-conf
* Simplify with custom-file-path
- (custom-reload-configs):
* Make definition switcheable between 2 procedures
* Make custom-reload-customs default
* Replace custom-load-group-conf with custom-load-updated-group-conf
* Add a comment about it
* test/test-custom-rt.scm
* test/test-custom.scm
- Modify comments
r2821 at t42 (orig r1170): yamaken | 2005-08-09 10:34:51 +0900
* uim/uim-util.c
- (get_file_mtime): Rename to file_mtime() to be consistent with
other preexisting file-related function names
- (file_mtime): Renamed from get_file_mtime()
- (uim_init_util_subrs): Rename get-file-mtime with file-mtime to be
consistent with other preexisting file-related procedure names
* scm/custom-rt.scm
- (update-gsym-mtime, custom-load-updated-group-conf): Replace
get-file-mtime with file-mtime
r2822 at t42 (orig r1171): yamaken | 2005-08-09 11:00:21 +0900
* uim/uim-custom.c
- (UIM_CUSTOM_EXPERIMENTAL_MTIME_SENSING): New macro
- (file_content_is_same): Enclose by #ifdef
UIM_CUSTOM_EXPERIMENTAL_MTIME_SENSING
- (uim_custom_save_group):
* Enclose the experimental code added in r1164
* Add a comment about the code
r2823 at t42 (orig r1172): ekato | 2005-08-09 15:21:02 +0900
* doc/HELPER-CANDWIN : Add description about "hide_caret_state".
r2824 at t42 (orig r1173): ekato | 2005-08-09 15:22:24 +0900
* doc/HELPER-PROTOCOL : Fix typo.
r2825 at t42 (orig r1174): yamamoto | 2005-08-10 01:06:48 +0900
* fep/uim-fep.c (main) :
change the values of UIM_FEP_SETMODE and UIM_FEP_GETMODE
r2826 at t42 (orig r1175): tkng | 2005-08-10 07:05:23 +0900
* gtk/caret-state-indicator.c: Improved the appearance of state-indicator.
-(caret_state_indicator_paint_window): New callback function to paint
to dwaw square frame.
-(caret_state_indicator_new): Connect above callback function.
r2827 at t42 (orig r1176): tkng | 2005-08-10 07:46:01 +0900
* gtk/caret-state-indicator.c: This commit aims to handle timout properly.
-(get_current_time): New function.
-(caret_state_indicator_timeout): Hide indicator only when time passes enough
from the recent calling of timeout setting function.
-(caret_state_indicator_set_timeout): Record called time.
r2828 at t42 (orig r1177): tkng | 2005-08-10 09:52:47 +0900
* gtk/uim-cand-win-gtk.c:
-(uim_cand_win_gtk_init): Frame appended.
r2829 at t42 (orig r1178): tkng | 2005-08-10 19:51:38 +0900
* gtk/uim-cand-win-gtk.c:
-(uim_cand_win_gtk_init): Fontsize has been adjusted to 1.2 times.
(Scale factor should be configrable in a few days.)
r2830 at t42 (orig r1179): tkng | 2005-08-11 04:17:46 +0900
* scm/latin.scm: Implemented Multi key support.
-(latin-backspace-key?, latin-commit-key?, latin-multi-key?): New key definitions.
-(latin-compose-rule): Removed needless "\\".
-(latin-context-new, latin-context-flush, latin-update-preedit,
latin-commit-raw, latin-commit, latin-proc-composing-state,
latin-proc-raw-state, latin-press-key-handler, latin-release-key-handler,
latin-reset-handler,latin-get-candidate-handler, latin-set-candidate-index-handler):
New functions.
Property changes on: branches/r5rs
___________________________________________________________________
Name: svk:merge
- fb73e508-85ea-0310-95c3-a85c473e0941:/trunk:1154
+ fb73e508-85ea-0310-95c3-a85c473e0941:/trunk:1179
Modified: branches/r5rs/doc/COMPATIBILITY
===================================================================
--- branches/r5rs/doc/COMPATIBILITY 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/doc/COMPATIBILITY 2005-08-10 19:34:32 UTC (rev 1180)
@@ -58,6 +58,19 @@
The changes are described below in most recently updated order.
------------------------------------------------------------------------------
+Summary: An experimental custom variable reloading API
+Affects: Helper program developers, Bridge developers
+Updates: C API, Helper protocol
+Version: 0.5
+Revision: ac1160, ac1161, ac1162
+Date: 2005-08-09
+Modifier: TOKUNAGA Hiroyuki, YamaKen
+Related: bug #3620
+URL:
+Changes:
+ (new) uim_custom_broadcast_reload_request()
+Description:
+------------------------------------------------------------------------------
Summary: default IM switching responsibility separation from uim_switch_im()
Affects: Bridge developers
Updates: C API
Modified: branches/r5rs/doc/HELPER-CANDWIN
===================================================================
--- branches/r5rs/doc/HELPER-CANDWIN 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/doc/HELPER-CANDWIN 2005-08-10 19:34:32 UTC (rev 1180)
@@ -22,7 +22,8 @@
hide |
deactivate |
show_caret_state |
- update_caret_state) "\n"
+ update_caret_state |
+ hide_caret_state) "\n"
charset_specifier = "charset=" charset "\n"
charset = "UTF-8" | "EUC-JP" | "GB18030" |
<or any name that can be specified as iconv_open(3) argument>
@@ -82,6 +83,11 @@
update_caret_state = "update_caret_state" "\n"
+ 9. hide_caret_state
+ Hide caret state of the input mode
+
+ hide_caret_state = "hide_caret_state" "\n"
+
Sending Message format BNF
session = messages
messages = messages message | message
Modified: branches/r5rs/doc/HELPER-PROTOCOL
===================================================================
--- branches/r5rs/doc/HELPER-PROTOCOL 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/doc/HELPER-PROTOCOL 2005-08-10 19:34:32 UTC (rev 1180)
@@ -92,6 +92,7 @@
im_change_whole_desktop |
im_change_this_application_only |
prop_update_custom |
+ custom_reload_notify |
commit_string) "\n"
charset_specifier = "charset=" charset "\n"
@@ -328,6 +329,14 @@
custom_sym = /^[-\?a-zA-Z0-9]+$/
custom_value = <valid S-expression>
+ - custom_reload_notify
+
+ This is a notification message to reload configrations. If a process
+ receive this message, the process should reload configrations
+ somehow. This message maybe needless in the future.
+
+ custom_reload_notify = "custom_reload_notify\n"
+
- commit_string
This message commits a string to currently focused context. See also
@@ -335,3 +344,9 @@
commit_string = "commit_string\n" str_to_commit "\n"
str_to_commit = /^[^\n]+$/
+
+
+Local Variables:
+mode: indented-text
+fill-column: 78
+End:
Modified: branches/r5rs/fep/README.ja
===================================================================
--- branches/r5rs/fep/README.ja 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/fep/README.ja 2005-08-10 19:34:32 UTC (rev 1180)
@@ -159,13 +159,23 @@
o -S
GNU screen¤Ç¥Õ¥£¥ë¥¿¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£(GNU screen 4.0.2°Ê¹ß)
Î㤨¤Ð¡¢~/.screenrc¤Ë
+
bind J exec | uim-fep -S
bind K eval 'exec cat' kill redisplay
+
¤³¤Î¤è¤¦¤Ë½ñ¤±¤Ð¡¢C-a J¤Çuim-fep¤ò¥Õ¥£¥ë¥¿¤È¤·¤Æµ¯Æ°¤·¡¢C-a K
¤Ç½ªÎ»¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
+
-s¥ª¥×¥·¥ç¥ó¤Ë¤«¤«¤ï¤é¤º¥â¡¼¥Éɽ¼¨¤Ë¤Ï
backtick¤¬»È¤ï¤ì¤Þ¤¹¡£
+ UIM_FEP_SETMODE, UIM_FEP_GETMODE¤ÎÃͤÏ
+ $TMP/uim-fep-setmode-$STY-$WINDOW
+ $TMP/uim-fep-getmode-$STY-$WINDOW
+ ¤Ë¤Ê¤ê¤Þ¤¹¡£
+ ($TMP¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï/tmp¤¬»È¤ï¤ì¤ë)
+
+
o -d
¸õÊä°ìÍ÷¤Îɽ¼¨¥¹¥¿¥¤¥ë¤òddskk¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
Modified: branches/r5rs/fep/uim-fep.c
===================================================================
--- branches/r5rs/fep/uim-fep.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/fep/uim-fep.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -224,6 +224,9 @@
UNDEFINED /* background */
};
FILE *fp;
+ const char *tmp_dir;
+ const char *sty_str;
+ const char *win_str;
int op;
@@ -371,18 +374,24 @@
tcgetattr(g_win_in, &s_save_tios);
setupterm(NULL, g_win_out, NULL);
- if (getenv("TMP")) {
- struct passwd *pw = getpwuid(getuid());
- /* Generate get mode filepath */
- snprintf(s_path_getmode, sizeof(s_path_getmode), "%s/uim-fep-%s-%d-getmode", getenv("TMP"), pw->pw_name, getpid());
- /* Generate set mode filepath */
- snprintf(s_path_setmode, sizeof(s_path_setmode), "%s/uim-fep-%s-%d-setmode", getenv("TMP"), pw->pw_name, getpid());
+ if ((tmp_dir = getenv("TMP")) == NULL) {
+ tmp_dir = "/tmp";
+ }
+
+ if (gnu_screen && (sty_str = getenv("STY")) != NULL && (win_str = getenv("WINDOW")) != NULL) {
+ snprintf(s_path_getmode, sizeof(s_path_getmode), "%s/uim-fep-getmode-%s-%s", tmp_dir, sty_str, win_str);
+ snprintf(s_path_setmode, sizeof(s_path_setmode), "%s/uim-fep-setmode-%s-%s", tmp_dir, sty_str, win_str);
} else {
- struct passwd *pw = getpwuid(getuid());
- /* Generate get mode filepath */
- snprintf(s_path_getmode, sizeof(s_path_getmode), "/tmp/uim-fep-%s-%d-getmode", pw->pw_name, getpid());
- /* Generate set mode filepath */
- snprintf(s_path_setmode, sizeof(s_path_setmode), "/tmp/uim-fep-%s-%d-setmode", pw->pw_name, getpid());
+ struct stat stat_buf;
+ int file_suffix = 1;
+
+ snprintf(s_path_getmode, sizeof(s_path_getmode), "%s/uim-fep-getmode-%d", tmp_dir, getpid());
+ snprintf(s_path_setmode, sizeof(s_path_setmode), "%s/uim-fep-setmode-%d", tmp_dir, getpid());
+ while (stat(s_path_getmode, &stat_buf) == 0 && stat(s_path_setmode, &stat_buf) == 0) {
+ snprintf(s_path_getmode, sizeof(s_path_getmode), "%s/uim-fep-getmode-%d-%d", tmp_dir, getpid(), file_suffix);
+ snprintf(s_path_setmode, sizeof(s_path_setmode), "%s/uim-fep-setmode-%d-%d", tmp_dir, getpid(), file_suffix);
+ file_suffix++;
+ }
}
env_buf = malloc(30);
@@ -882,6 +891,10 @@
if (g_opt.status_type == LASTLINE) {
win->ws_row--;
}
+#ifdef PTY_TEST
+ win->ws_col = 140;
+ win->ws_row = 50;
+#endif
return win;
}
Modified: branches/r5rs/gtk/caret-state-indicator.c
===================================================================
--- branches/r5rs/gtk/caret-state-indicator.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/gtk/caret-state-indicator.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -42,9 +42,50 @@
* caret state indicator is a state indicator nearby the caret.
*/
+#define DEFAULT_WINDOW_WIDTH 20
+#define DEFAULT_WINDOW_HEIGHT 20
+
static gint
+get_current_time(void);
+static gint
caret_state_indicator_timeout(gpointer data);
+/* This function is not correct, size of tv_sec is glong, not gint */
+static gint
+get_current_time(void)
+{
+ GTimeVal result;
+ g_get_current_time(&result);
+ return result.tv_sec;
+}
+
+static gint
+caret_state_indicator_timeout(gpointer data)
+{
+ GtkWidget *window = GTK_WIDGET(data);
+ gint timeout = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(window), "timeout"));
+ gint called_time = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(window), "called_time"));
+ gint current_time = get_current_time();
+ if((current_time - called_time)*1000 >= timeout) {
+ gtk_widget_hide(window);
+ }
+ return 0;
+}
+
+static gint
+caret_state_indicator_paint_window (GtkWidget *window)
+{
+ GtkRequisition req;
+
+ gtk_widget_size_request (window, &req);
+ gtk_paint_flat_box (window->style, window->window,
+ GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ NULL, GTK_WIDGET(window), "tooltip",
+ 0, 0, DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT);
+
+ return FALSE;
+}
+
GtkWidget *
caret_state_indicator_new(void)
{
@@ -55,9 +96,19 @@
label = gtk_label_new("");
gtk_container_add(GTK_CONTAINER(window), label);
- gtk_window_set_default_size(GTK_WINDOW(window), 20, 20);
+ gtk_window_set_default_size(GTK_WINDOW(window),
+ DEFAULT_WINDOW_WIDTH,
+ DEFAULT_WINDOW_HEIGHT);
+ gtk_widget_set_app_paintable (window, TRUE);
+ g_signal_connect(window, "expose_event",
+ G_CALLBACK (caret_state_indicator_paint_window),
+ NULL);
+
+ gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
+
g_object_set_data(G_OBJECT(window), "label", label);
+
return window;
}
@@ -92,13 +143,10 @@
void
caret_state_indicator_set_timeout(GtkWidget *window, gint timeout)
{
+ gint current_time = get_current_time();
+
g_timeout_add(timeout, caret_state_indicator_timeout, (gpointer)window);
+ g_object_set_data(G_OBJECT(window), "timeout", GINT_TO_POINTER(timeout));
+ g_object_set_data(G_OBJECT(window), "called_time", GINT_TO_POINTER(current_time));
+ /* "called_time" stores the time of last calling of this function */
}
-
-static gint
-caret_state_indicator_timeout(gpointer data)
-{
- GtkWidget *window = GTK_WIDGET(data);
- gtk_widget_hide(window);
- return 0;
-}
Modified: branches/r5rs/gtk/gtk-im-uim.c
===================================================================
--- branches/r5rs/gtk/gtk-im-uim.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/gtk/gtk-im-uim.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -995,6 +995,8 @@
}
g_strfreev(lines);
}
+ } else if (g_str_has_prefix(str, "custom_reload_notify") == TRUE) {
+ uim_prop_reload_configs();
} else if (focused_context && !disable_focused_context) {
if (g_str_has_prefix(str, "prop_list_get") == TRUE) {
uim_prop_list_update(focused_context->uc);
Modified: branches/r5rs/gtk/uim-cand-win-gtk.c
===================================================================
--- branches/r5rs/gtk/uim-cand-win-gtk.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/gtk/uim-cand-win-gtk.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -139,6 +139,7 @@
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
+ GtkWidget *frame;
GtkWidget *vbox;
GtkTreeSelection *selection;
@@ -173,9 +174,12 @@
gtk_container_add(GTK_CONTAINER(cwin->scrolled_window), cwin->view);
gtk_box_pack_start(GTK_BOX(vbox), cwin->num_label, FALSE, FALSE, 0);
- gtk_container_add(GTK_CONTAINER(cwin), vbox);
- gtk_container_set_border_width(GTK_CONTAINER(cwin), 1);
+ frame = gtk_frame_new(NULL);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+ gtk_container_add(GTK_CONTAINER(cwin), frame);
+ gtk_container_set_border_width(GTK_CONTAINER(cwin), 0);
+
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(cwin->view));
gtk_tree_selection_set_select_function(selection,
@@ -186,6 +190,8 @@
G_CALLBACK(tree_selection_changed), cwin);
renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "scale", 1.2, NULL);
+
column = gtk_tree_view_column_new_with_attributes("No",
renderer,
"text", COLUMN_HEADING,
@@ -194,6 +200,8 @@
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "scale", 1.2, NULL);
+ /* g_object_set(renderer, "size-points", 20.0, NULL); */
column = gtk_tree_view_column_new_with_attributes("Text",
renderer,
"text", COLUMN_CANDIDATE,
@@ -214,6 +222,7 @@
gtk_widget_show(cwin->view);
gtk_widget_show(cwin->num_label);
gtk_widget_show(vbox);
+ gtk_widget_show(frame);
gtk_widget_set_size_request(cwin->num_label, DEFAULT_MIN_WINDOW_WIDTH, -1);
gtk_window_set_default_size(GTK_WINDOW(cwin), DEFAULT_MIN_WINDOW_WIDTH, -1);
Modified: branches/r5rs/helper/pref-gtk.c
===================================================================
--- branches/r5rs/helper/pref-gtk.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/helper/pref-gtk.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -269,7 +269,7 @@
if (uim_pref_gtk_value_changed) {
uim_custom_save();
- uim_custom_broadcast();
+ uim_custom_broadcast_reload_request();
uim_pref_gtk_value_changed = FALSE;
}
@@ -283,7 +283,7 @@
if (uim_pref_gtk_value_changed) {
uim_custom_save();
- uim_custom_broadcast();
+ uim_custom_broadcast_reload_request();
uim_pref_gtk_value_changed = FALSE;
}
}
@@ -443,7 +443,7 @@
pref_window = window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- icon = gdk_pixbuf_new_from_file(UIM_PIXMAPSDIR "/uim-icon.png", NULL);
+ icon = gdk_pixbuf_new_from_file(UIM_PIXMAPSDIR"/uim-icon.png", NULL);
gtk_window_set_icon(GTK_WINDOW(pref_window), icon);
g_signal_connect(G_OBJECT (window), "delete_event",
Modified: branches/r5rs/scm/custom-rt.scm
===================================================================
--- branches/r5rs/scm/custom-rt.scm 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/scm/custom-rt.scm 2005-08-10 19:34:32 UTC (rev 1180)
@@ -51,20 +51,53 @@
(desc "")))
(define custom-required-custom-files ())
+(define custom-reload-group-syms ())
(define custom-rt-primary-groups ())
(define custom-set-hooks ())
-;; full implementation
-(define custom-load-group-conf
+(define custom-file-path
(lambda (gsym)
(let* ((group-name (symbol->string gsym))
(path (string-append (getenv "HOME")
"/.uim.d/customs/custom-"
group-name
".scm")))
- (try-load path))))
+ path)))
+(define prepend-new-reload-group-syms
+ (lambda (gsym path)
+ (set! custom-reload-group-syms
+ (cons (cons gsym 0) custom-reload-group-syms))))
+
+(define update-gsym-mtime
+ (lambda (gsym path)
+ (set-cdr! (assq gsym custom-reload-group-syms)
+ (file-mtime path))
+ #t))
+
+(define custom-load-updated-group-conf
+ (lambda (gsym)
+ (let ((path (custom-file-path gsym)))
+ (if (not (memq gsym (map (lambda (x) (car x)) custom-reload-group-syms)))
+ (prepend-new-reload-group-syms gsym path))
+ (if (= (file-mtime path)
+ (cdr (assq gsym custom-reload-group-syms)))
+ #t ; File isn't modified, no need to reload.
+ (if (try-load path)
+ (update-gsym-mtime gsym path)
+ #f)))))
+
;; full implementation
+;; This proc is existing for DUMB loading. No more processing such as
+;; mtime comparation or history recording must not be added. Please
+;; keep in mind responsibility separation, and don't alter an API
+;; specification previously stabilized without discussion.
+;; -- YamaKen 2005-08-09
+(define custom-load-group-conf
+ (lambda (gsym)
+ (try-load (custom-file-path gsym))))
+
+;; full implementation
(define require-custom
(lambda (filename)
(let ((pre-groups (custom-list-primary-groups)))
@@ -79,6 +112,12 @@
(reverse new-groups)))))))
;; full implementation
+(define custom-reload-customs
+ (lambda ()
+ (for-each load (reverse custom-required-custom-files))
+ (custom-call-all-hook-procs custom-set-hooks)))
+
+;; full implementation
(define custom-modify-key-predicate-names
(lambda (keys)
(map (lambda (key)
@@ -122,6 +161,14 @@
(if proc
((cdr proc))))))
+;; TODO: write test
+;; full implementation
+(define custom-call-all-hook-procs
+ (lambda (hook)
+ (for-each (lambda (pair)
+ ((cdr pair)))
+ hook)))
+
;; lightweight implementation
(define define-custom-group
(lambda (gsym label desc)
@@ -195,3 +242,26 @@
(define custom-prop-update-custom-handler
(lambda (context custom-sym val)
(custom-set-value! custom-sym val)))
+
+;; custom-reload-configs can switch its procedure definition from 2
+;; implementations. custom-reload-customs is selectable since the
+;; latter new code breaks the semantics of custom variable
+;; broadcasting.
+;;
+;; For example, an arbitrary uim-enabled process can update a custom
+;; variable by its own code without any helper message passing. In
+;; such case, the previously defined broadcasting behavior overwrites
+;; the variable locally modified even if the corresponding custom file
+;; is not updated.
+;;
+;; To make the latter code default, a discussion is required.
+;; -- YamaKen 2005-08-09
+(define custom-reload-configs
+ (if #f
+ custom-reload-customs ;; original behavior
+ (lambda ()
+ (let ((group-syms (map (lambda (x) (car x)) custom-reload-group-syms)))
+ (if (null? group-syms)
+ #f ;; No file should be loaded.
+ (for-each custom-load-updated-group-conf
+ (reverse group-syms)))))))
Modified: branches/r5rs/scm/custom.scm
===================================================================
--- branches/r5rs/scm/custom.scm 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/scm/custom.scm 2005-08-10 19:34:32 UTC (rev 1180)
@@ -481,13 +481,6 @@
(proc))
procs))))
-;; TODO: write test
-(define custom-call-all-hook-procs
- (lambda (hook)
- (for-each (lambda (pair)
- ((cdr pair)))
- hook)))
-
(define-record 'custom-rec
'((sym #f)
(default #f)
@@ -744,11 +737,6 @@
(let ((cb (lambda () (gate-func func ptr custom-sym))))
(custom-add-hook custom-sym hook cb)))))
-(define custom-reload-customs
- (lambda ()
- (for-each load (reverse custom-required-custom-files))
- (custom-call-all-hook-procs custom-set-hooks)))
-
(define-custom-group 'main
(_ "-")
(_ "Main settings of this group"))
Modified: branches/r5rs/scm/latin.scm
===================================================================
--- branches/r5rs/scm/latin.scm 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/scm/latin.scm 2005-08-10 19:34:32 UTC (rev 1180)
@@ -30,540 +30,547 @@
;; Charset of this file is UTF-8
+(require "util.scm")
+(require "rk.scm")
(require "generic.scm")
+(define-key latin-backspace-key? '("backspace" "<Control>h"))
+(define-key latin-commit-key? "return" 32) ; 32 = space
+(define-key latin-multi-key? '("Multi_key"))
+
(define latin-compose-rule '(
-((("\\" " " " " ))("Â "))
-((("\\" " " "'" ))("'"))
-((("\\" " " "(" ))("Ë"))
-((("\\" " " "-" ))("~"))
-((("\\" " " "<" ))("Ë"))
-((("\\" " " ">" ))("^"))
-((("\\" " " "^" ))("^"))
-((("\\" " " "`" ))("`"))
-((("\\" " " "~" ))("~"))
-((("\\" "!" "!" ))("¡"))
-((("\\" "!" "P" ))("¶"))
-((("\\" "!" "S" ))("§"))
-((("\\" "!" "p" ))("¶"))
-((("\\" "!" "s" ))("§"))
-((("\\" "\"" "\"" ))("¨"))
-((("\\" "\"" "A" ))("Ã"))
-((("\\" "\"" "E" ))("Ã"))
-((("\\" "\"" "I" ))("Ã"))
-((("\\" "\"" "O" ))("Ã"))
-((("\\" "\"" "U" ))("Ã"))
-((("\\" "\"" "Y" ))("Ÿ"))
-((("\\" "\"" "a" ))("ä"))
-((("\\" "\"" "e" ))("ë"))
-((("\\" "\"" "i" ))("ï"))
-((("\\" "\"" "o" ))("ö"))
-((("\\" "\"" "u" ))("ü"))
-((("\\" "\"" "y" ))("ÿ"))
-((("\\" "'" " " ))("'"))
-((("\\" "'" "'" ))("´"))
-((("\\" "'" "A" ))("Ã"))
-((("\\" "'" "C" ))("Ä"))
-((("\\" "'" "E" ))("Ã"))
-((("\\" "'" "I" ))("Ã"))
-((("\\" "'" "L" ))("Ĺ"))
-((("\\" "'" "N" ))("Å"))
-((("\\" "'" "O" ))("Ã"))
-((("\\" "'" "R" ))("Å"))
-((("\\" "'" "S" ))("Å"))
-((("\\" "'" "U" ))("Ã"))
-((("\\" "'" "Y" ))("Ã"))
-((("\\" "'" "Z" ))("Ź"))
-((("\\" "'" "a" ))("á"))
-((("\\" "'" "c" ))("Ä"))
-((("\\" "'" "e" ))("é"))
-((("\\" "'" "i" ))("Ã"))
-((("\\" "'" "l" ))("ĺ"))
-((("\\" "'" "n" ))("Å"))
-((("\\" "'" "o" ))("ó"))
-((("\\" "'" "r" ))("Å"))
-((("\\" "'" "s" ))("Å"))
-((("\\" "'" "u" ))("ú"))
-((("\\" "'" "y" ))("ý"))
-((("\\" "'" "z" ))("ź"))
-((("\\" "(" " " ))("Ë"))
-((("\\" "(" "(" ))("["))
-((("\\" "(" "-" ))("{"))
-((("\\" "(" "A" ))("Ä"))
-((("\\" "(" "G" ))("Ä"))
-((("\\" "(" "c" ))("©"))
-((("\\" "(" "a" ))("Ä"))
-((("\\" "(" "g" ))("Ä"))
-((("\\" "(" "r" ))("®"))
-((("\\" ")" ")" ))("]"))
-((("\\" ")" "-" ))("}"))
-((("\\" "*" "0" ))("°"))
-((("\\" "*" "A" ))("Ã
"))
-((("\\" "*" "U" ))("Å®"))
-((("\\" "*" "a" ))("Ã¥"))
-((("\\" "*" "u" ))("ů"))
-((("\\" "+" "+" ))("#"))
-((("\\" "+" "-" ))("±"))
-((("\\" "," "," ))("¸"))
-((("\\" "," "-" ))("¬"))
-((("\\" "," "A" ))("Ä"))
-((("\\" "," "C" ))("Ã"))
-((("\\" "," "E" ))("Ä"))
-((("\\" "," "G" ))("Ä¢"))
-((("\\" "," "I" ))("Ä®"))
-((("\\" "," "K" ))("Ķ"))
-((("\\" "," "L" ))("Ä»"))
-((("\\" "," "N" ))("Å
"))
-((("\\" "," "R" ))("Å"))
-((("\\" "," "S" ))("Å"))
-((("\\" "," "U" ))("Ų"))
-((("\\" "," "a" ))("Ä
"))
-((("\\" "," "c" ))("ç"))
-((("\\" "," "e" ))("Ä"))
-((("\\" "," "g" ))("Ä£"))
-((("\\" "," "i" ))("į"))
-((("\\" "," "k" ))("Ä·"))
-((("\\" "," "l" ))("ļ"))
-((("\\" "," "n" ))("Å"))
-((("\\" "," "r" ))("Å"))
-((("\\" "," "s" ))("Å"))
-((("\\" "," "u" ))("ų"))
-((("\\" "-" " " ))("~"))
-((("\\" "-" "(" ))("{"))
-((("\\" "-" ")" ))("}"))
-((("\\" "-" "+" ))("±"))
-((("\\" "-" "," ))("¬"))
-((("\\" "-" "-" ))("Â"))
-((("\\" "-" ":" ))("÷"))
-((("\\" "-" "A" ))("Ã"))
-((("\\" "-" "D" ))("Ä"))
-((("\\" "-" "E" ))("Ä"))
-((("\\" "-" "I" ))("Ī"))
-((("\\" "-" "L" ))("£"))
-((("\\" "-" "N" ))("Ã"))
-((("\\" "-" "O" ))("Ã"))
-((("\\" "-" "U" ))("Ū"))
-((("\\" "-" "Y" ))("Â¥"))
-((("\\" "-" "^" ))("¯"))
-((("\\" "-" "a" ))("ã"))
-((("\\" "-" "d" ))("Ä"))
-((("\\" "-" "e" ))("Ä"))
-((("\\" "-" "i" ))("Ä«"))
-((("\\" "-" "l" ))("£"))
-((("\\" "-" "n" ))("ñ"))
-((("\\" "-" "o" ))("õ"))
-((("\\" "-" "u" ))("Å«"))
-((("\\" "-" "y" ))("Â¥"))
-((("\\" "." "." ))("Ë"))
-((("\\" "." "B" ))("á¸"))
-((("\\" "." "C" ))("Ä"))
-((("\\" "." "D" ))("á¸"))
-((("\\" "." "E" ))("Ä"))
-((("\\" "." "F" ))("á¸"))
-((("\\" "." "G" ))("Ä "))
-((("\\" "." "I" ))("Ä°"))
-((("\\" "." "M" ))("á¹"))
-((("\\" "." "P" ))("á¹"))
-((("\\" "." "S" ))("á¹ "))
-((("\\" "." "T" ))("Ṫ"))
-((("\\" "." "Z" ))("Å»"))
-((("\\" "." "^" ))("·"))
-((("\\" "." "b" ))("á¸"))
-((("\\" "." "c" ))("Ä"))
-((("\\" "." "d" ))("á¸"))
-((("\\" "." "e" ))("Ä"))
-((("\\" "." "f" ))("á¸"))
-((("\\" "." "g" ))("Ä¡"))
-((("\\" "." "i" ))("ı"))
-((("\\" "." "m" ))("á¹"))
-((("\\" "." "p" ))("á¹"))
-((("\\" "." "s" ))("ṡ"))
-((("\\" "." "t" ))("ṫ"))
-((("\\" "." "z" ))("ż"))
-((("\\" "/" "/" ))("\\"))
-((("\\" "/" "<" ))("\\"))
-((("\\" "/" "C" ))("¢"))
-((("\\" "/" "O" ))("Ã"))
-((("\\" "/" "T" ))("Ŧ"))
-((("\\" "/" "U" ))("µ"))
-((("\\" "/" "^" ))("|"))
-((("\\" "/" "c" ))("¢"))
-((("\\" "/" "o" ))("ø"))
-((("\\" "/" "t" ))("ŧ"))
-((("\\" "/" "u" ))("µ"))
-((("\\" "0" "*" ))("°"))
-((("\\" "0" "C" ))("©"))
-((("\\" "0" "S" ))("§"))
-((("\\" "0" "X" ))("¤"))
-((("\\" "0" "^" ))("°"))
-((("\\" "0" "c" ))("©"))
-((("\\" "0" "s" ))("§"))
-((("\\" "0" "x" ))("¤"))
-((("\\" "1" "S" ))("¹"))
-((("\\" "1" "^" ))("¹"))
-((("\\" "1" "s" ))("¹"))
-((("\\" "2" "S" ))("²"))
-((("\\" "2" "^" ))("²"))
-((("\\" "2" "s" ))("²"))
-((("\\" "3" "S" ))("³"))
-((("\\" "3" "^" ))("³"))
-((("\\" "3" "s" ))("³"))
-((("\\" ":" "-" ))("÷"))
-((("\\" "<" " " ))("Ë"))
-((("\\" "<" "/" ))("\\"))
-((("\\" "<" "<" ))("«"))
-((("\\" "<" "C" ))("Ä"))
-((("\\" "<" "D" ))("Ä"))
-((("\\" "<" "E" ))("Ä"))
-((("\\" "<" "L" ))("Ľ"))
-((("\\" "<" "N" ))("Å"))
-((("\\" "<" "R" ))("Å"))
-((("\\" "<" "S" ))("Å "))
-((("\\" "<" "T" ))("Ť"))
-((("\\" "<" "Z" ))("Ž"))
-((("\\" "<" "c" ))("Ä"))
-((("\\" "<" "d" ))("Ä"))
-((("\\" "<" "e" ))("Ä"))
-((("\\" "<" "l" ))("ľ"))
-((("\\" "<" "n" ))("Å"))
-((("\\" "<" "r" ))("Å"))
-((("\\" "<" "s" ))("Å¡"))
-((("\\" "<" "t" ))("Å¥"))
-((("\\" "<" "z" ))("ž"))
-((("\\" "=" "C" ))("â¬"))
-((("\\" "=" "L" ))("£"))
-((("\\" "=" "Y" ))("Â¥"))
-((("\\" "=" "e" ))("â¬"))
-((("\\" "=" "l" ))("£"))
-((("\\" "=" "y" ))("Â¥"))
-((("\\" ">" " " ))("^"))
-((("\\" ">" ">" ))("»"))
-((("\\" ">" "A" ))("Ã"))
-((("\\" ">" "E" ))("Ã"))
-((("\\" ">" "I" ))("Ã"))
-((("\\" ">" "O" ))("Ã"))
-((("\\" ">" "U" ))("Ã"))
-((("\\" ">" "a" ))("â"))
-((("\\" ">" "e" ))("ê"))
-((("\\" ">" "i" ))("î"))
-((("\\" ">" "o" ))("ô"))
-((("\\" ">" "u" ))("û"))
-((("\\" "?" "?" ))("¿"))
-((("\\" "A" "\"" ))("Ã"))
-((("\\" "A" "'" ))("Ã"))
-((("\\" "A" "(" ))("Ä"))
-((("\\" "A" "*" ))("Ã
"))
-((("\\" "A" "," ))("Ä"))
-((("\\" "A" "-" ))("Ã"))
-((("\\" "A" ">" ))("Ã"))
-((("\\" "A" "A" ))("Ã
"))
-((("\\" "A" "E" ))("Ã"))
-((("\\" "A" "^" ))("Ã"))
-((("\\" "A" "_" ))("ª"))
-((("\\" "A" "`" ))("Ã"))
-((("\\" "A" "~" ))("Ã"))
-((("\\" "B" "." ))("á¸"))
-((("\\" "C" "'" ))("Ä"))
-((("\\" "C" "," ))("Ã"))
-((("\\" "C" "." ))("Ä"))
-((("\\" "C" "/" ))("¢"))
-((("\\" "C" "<" ))("Ä"))
-((("\\" "C" "=" ))("â¬"))
-((("\\" "C" "0" ))("©"))
-((("\\" "C" "O" ))("©"))
-((("\\" "C" "o" ))("©"))
-((("\\" "C" "|" ))("¢"))
-((("\\" "D" "-" ))("Ä"))
-((("\\" "D" "." ))("á¸"))
-((("\\" "D" "<" ))("Ä"))
-((("\\" "E" "\"" ))("Ã"))
-((("\\" "E" "'" ))("Ã"))
-((("\\" "E" "," ))("Ä"))
-((("\\" "E" "-" ))("Ä"))
-((("\\" "E" "." ))("Ä"))
-((("\\" "E" "<" ))("Ä"))
-((("\\" "E" ">" ))("Ã"))
-((("\\" "E" "^" ))("Ã"))
-((("\\" "E" "_" ))("Ä"))
-((("\\" "E" "`" ))("Ã"))
-((("\\" "F" "." ))("á¸"))
-((("\\" "G" "(" ))("Ä"))
-((("\\" "G" "," ))("Ä¢"))
-((("\\" "G" "." ))("Ä "))
-((("\\" "G" "U" ))("Ä"))
-((("\\" "I" "\"" ))("Ã"))
-((("\\" "I" "'" ))("Ã"))
-((("\\" "I" "," ))("Ä®"))
-((("\\" "I" "-" ))("Ī"))
-((("\\" "I" "." ))("Ä°"))
-((("\\" "I" ">" ))("Ã"))
-((("\\" "I" "^" ))("Ã"))
-((("\\" "I" "_" ))("Ī"))
-((("\\" "I" "`" ))("Ã"))
-((("\\" "I" "~" ))("Ĩ"))
-((("\\" "K" "," ))("Ķ"))
-((("\\" "L" "'" ))("Ĺ"))
-((("\\" "L" "," ))("Ä»"))
-((("\\" "L" "-" ))("£"))
-((("\\" "L" "<" ))("Ľ"))
-((("\\" "L" "=" ))("£"))
-((("\\" "L" "V" ))("|"))
-((("\\" "M" "." ))("á¹"))
-((("\\" "N" "'" ))("Å"))
-((("\\" "N" "," ))("Å
"))
-((("\\" "N" "-" ))("Ã"))
-((("\\" "N" "<" ))("Å"))
-((("\\" "N" "G" ))("Å"))
-((("\\" "N" "~" ))("Ã"))
-((("\\" "O" "\"" ))("Ã"))
-((("\\" "O" "'" ))("Ã"))
-((("\\" "O" "-" ))("Ã"))
-((("\\" "O" "/" ))("Ã"))
-((("\\" "O" ">" ))("Ã"))
-((("\\" "O" "C" ))("©"))
-((("\\" "O" "E" ))("Å"))
-((("\\" "O" "R" ))("®"))
-((("\\" "O" "S" ))("§"))
-((("\\" "O" "X" ))("¤"))
-((("\\" "O" "^" ))("Ã"))
-((("\\" "O" "_" ))("º"))
-((("\\" "O" "`" ))("Ã"))
-((("\\" "O" "c" ))("©"))
-((("\\" "O" "x" ))("¤"))
-((("\\" "O" "~" ))("Ã"))
-((("\\" "P" "!" ))("¶"))
-((("\\" "P" "." ))("á¹"))
-((("\\" "R" "'" ))("Å"))
-((("\\" "R" "," ))("Å"))
-((("\\" "R" "<" ))("Å"))
-((("\\" "R" "O" ))("®"))
-((("\\" "S" "!" ))("§"))
-((("\\" "S" "'" ))("Å"))
-((("\\" "S" "," ))("Å"))
-((("\\" "S" "." ))("á¹ "))
-((("\\" "S" "0" ))("§"))
-((("\\" "S" "1" ))("¹"))
-((("\\" "S" "2" ))("²"))
-((("\\" "S" "3" ))("³"))
-((("\\" "S" "<" ))("Å "))
-((("\\" "S" "O" ))("§"))
-((("\\" "T" "-" ))("Ŧ"))
-((("\\" "T" "." ))("Ṫ"))
-((("\\" "T" "/" ))("Ŧ"))
-((("\\" "t" "<" ))("Å¥"))
-((("\\" "T" "H" ))("Ã"))
-((("\\" "U" "\"" ))("Ã"))
-((("\\" "U" "'" ))("Ã"))
-((("\\" "U" "*" ))("Å®"))
-((("\\" "U" "," ))("Ų"))
-((("\\" "U" "-" ))("Å«"))
-((("\\" "U" "/" ))("µ"))
-((("\\" "U" ">" ))("Ã"))
-((("\\" "U" "^" ))("Ã"))
-((("\\" "U" "_" ))("Å«"))
-((("\\" "U" "`" ))("Ã"))
-((("\\" "U" "~" ))("Ũ"))
-((("\\" "V" "L" ))("|"))
-((("\\" "W" "^" ))("Å´"))
-((("\\" "X" "0" ))("¤"))
-((("\\" "X" "O" ))("¤"))
-((("\\" "X" "o" ))("¤"))
-((("\\" "Y" "\"" ))("Ÿ"))
-((("\\" "Y" "'" ))("Ã"))
-((("\\" "Y" "-" ))("Â¥"))
-((("\\" "Y" "=" ))("Â¥"))
-((("\\" "Y" "^" ))("Ŷ"))
-((("\\" "Z" "'" ))("Ź"))
-((("\\" "Z" "." ))("Å»"))
-((("\\" "Z" "<" ))("Ž"))
-((("\\" "^" " " ))("^"))
-((("\\" "^" "-" ))("¯"))
-((("\\" "^" "." ))("·"))
-((("\\" "^" "/" ))("|"))
-((("\\" "^" "0" ))("°"))
-((("\\" "^" "1" ))("¹"))
-((("\\" "^" "2" ))("²"))
-((("\\" "^" "3" ))("³"))
-((("\\" "^" "A" ))("Ã"))
-((("\\" "^" "E" ))("Ã"))
-((("\\" "^" "I" ))("Ã"))
-((("\\" "^" "O" ))("Ã"))
-((("\\" "^" "U" ))("Ã"))
-((("\\" "^" "W" ))("Å´"))
-((("\\" "^" "Y" ))("Ŷ"))
-((("\\" "^" "_" ))("¯"))
-((("\\" "^" "a" ))("â"))
-((("\\" "^" "e" ))("ê"))
-((("\\" "^" "i" ))("î"))
-((("\\" "^" "o" ))("ô"))
-((("\\" "^" "u" ))("û"))
-((("\\" "^" "w" ))("ŵ"))
-((("\\" "^" "y" ))("Å·"))
-((("\\" "_" "A" ))("ª"))
-((("\\" "_" "E" ))("Ä"))
-((("\\" "_" "I" ))("Ī"))
-((("\\" "_" "O" ))("º"))
-((("\\" "_" "U" ))("Ū"))
-((("\\" "_" "^" ))("¯"))
-((("\\" "_" "_" ))("¯"))
-((("\\" "_" "a" ))("ª"))
-((("\\" "_" "e" ))("Ä"))
-((("\\" "_" "i" ))("Ä«"))
-((("\\" "_" "o" ))("º"))
-((("\\" "_" "u" ))("Å«"))
-((("\\" "`" " " ))("`"))
-((("\\" "`" "A" ))("Ã"))
-((("\\" "`" "E" ))("Ã"))
-((("\\" "`" "I" ))("Ã"))
-((("\\" "`" "O" ))("Ã"))
-((("\\" "`" "U" ))("Ã"))
-((("\\" "`" "a" ))("Ã "))
-((("\\" "`" "e" ))("è"))
-((("\\" "`" "i" ))("ì"))
-((("\\" "`" "o" ))("ò"))
-((("\\" "`" "u" ))("ù"))
-((("\\" "a" "\"" ))("ä"))
-((("\\" "a" "'" ))("á"))
-((("\\" "a" "(" ))("Ä"))
-((("\\" "a" "*" ))("Ã¥"))
-((("\\" "a" "," ))("Ä
"))
-((("\\" "a" "-" ))("ã"))
-((("\\" "a" ">" ))("â"))
-((("\\" "a" "^" ))("â"))
-((("\\" "a" "_" ))("ª"))
-((("\\" "a" "`" ))("Ã "))
-((("\\" "a" "a" ))("Ã¥"))
-((("\\" "a" "e" ))("æ"))
-((("\\" "a" "~" ))("ã"))
-((("\\" "b" "." ))("á¸"))
-((("\\" "c" "," ))("ç"))
-((("\\" "c" "." ))("Ä"))
-((("\\" "c" "/" ))("¢"))
-((("\\" "c" "0" ))("©"))
-((("\\" "c" "<" ))("Ä"))
-((("\\" "c" "O" ))("©"))
-((("\\" "c" "o" ))("©"))
-((("\\" "c" "|" ))("¢"))
-((("\\" "d" "-" ))("Ä"))
-((("\\" "d" "." ))("á¸"))
-((("\\" "d" "<" ))("Ä"))
-((("\\" "e" "\"" ))("ë"))
-((("\\" "e" "'" ))("é"))
-((("\\" "e" "," ))("Ä"))
-((("\\" "e" "-" ))("Ä"))
-((("\\" "e" "." ))("Ä"))
-((("\\" "e" "=" ))("â¬"))
-((("\\" "e" "<" ))("Ä"))
-((("\\" "e" ">" ))("ê"))
-((("\\" "e" "^" ))("ê"))
-((("\\" "e" "_" ))("Ä"))
-((("\\" "e" "`" ))("è"))
-((("\\" "f" "." ))("á¸"))
-((("\\" "g" "(" ))("Ä"))
-((("\\" "g" "," ))("Ä£"))
-((("\\" "g" "." ))("Ä¡"))
-((("\\" "g" "U" ))("Ä"))
-((("\\" "i" "\"" ))("ï"))
-((("\\" "i" "'" ))("Ã"))
-((("\\" "i" "," ))("į"))
-((("\\" "i" "-" ))("Ä«"))
-((("\\" "i" "." ))("ı"))
-((("\\" "i" ">" ))("î"))
-((("\\" "i" "^" ))("î"))
-((("\\" "i" "_" ))("Ä«"))
-((("\\" "i" "`" ))("ì"))
-((("\\" "i" "~" ))("Ä©"))
-((("\\" "k" "," ))("Ä·"))
-((("\\" "k" "k" ))("ĸ"))
-((("\\" "l" "'" ))("ĺ"))
-((("\\" "l" "," ))("ļ"))
-((("\\" "l" "-" ))("£"))
-((("\\" "l" "<" ))("ľ"))
-((("\\" "l" "=" ))("£"))
-((("\\" "l" "v" ))("|"))
-((("\\" "m" "." ))("á¹"))
-((("\\" "n" "'" ))("Å"))
-((("\\" "n" "," ))("Å"))
-((("\\" "n" "-" ))("ñ"))
-((("\\" "n" "<" ))("Å"))
-((("\\" "n" "g" ))("Å"))
-((("\\" "n" "~" ))("ñ"))
-((("\\" "o" "\"" ))("ö"))
-((("\\" "o" "'" ))("ó"))
-((("\\" "o" "-" ))("õ"))
-((("\\" "o" "/" ))("ø"))
-((("\\" "o" ">" ))("ô"))
-((("\\" "o" "C" ))("©"))
-((("\\" "o" "X" ))("¤"))
-((("\\" "o" "^" ))("ô"))
-((("\\" "o" "_" ))("º"))
-((("\\" "o" "`" ))("ò"))
-((("\\" "o" "c" ))("©"))
-((("\\" "o" "e" ))("Å"))
-((("\\" "o" "s" ))("§"))
-((("\\" "o" "x" ))("¤"))
-((("\\" "o" "~" ))("õ"))
-((("\\" "p" "!" ))("¶"))
-((("\\" "p" "." ))("á¹"))
-((("\\" "r" "'" ))("Å"))
-((("\\" "r" "," ))("Å"))
-((("\\" "r" "<" ))("Å"))
-((("\\" "s" "!" ))("§"))
-((("\\" "s" "'" ))("Å"))
-((("\\" "s" "," ))("Å"))
-((("\\" "s" "." ))("ṡ"))
-((("\\" "s" "0" ))("§"))
-((("\\" "s" "1" ))("¹"))
-((("\\" "s" "2" ))("²"))
-((("\\" "s" "3" ))("³"))
-((("\\" "s" "<" ))("Å¡"))
-((("\\" "s" "o" ))("§"))
-((("\\" "s" "s" ))("Ã"))
-((("\\" "t" "-" ))("ŧ"))
-((("\\" "t" "." ))("ṫ"))
-((("\\" "t" "/" ))("ŧ"))
-((("\\" "t" "<" ))("Å¥"))
-((("\\" "t" "h" ))("þ"))
-((("\\" "u" "\"" ))("ü"))
-((("\\" "u" "'" ))("ú"))
-((("\\" "u" "*" ))("ů"))
-((("\\" "u" "," ))("ų"))
-((("\\" "u" "-" ))("Å«"))
-((("\\" "u" "/" ))("µ"))
-((("\\" "u" ">" ))("û"))
-((("\\" "u" "^" ))("û"))
-((("\\" "u" "_" ))("Å«"))
-((("\\" "u" "`" ))("ù"))
-((("\\" "u" "~" ))("Å©"))
-((("\\" "v" "Z" ))("Ž"))
-((("\\" "v" "l" ))("|"))
-((("\\" "v" "z" ))("ž"))
-((("\\" "w" "^" ))("ŵ"))
-((("\\" "x" "0" ))("¤"))
-((("\\" "x" "O" ))("¤"))
-((("\\" "x" "o" ))("¤"))
-((("\\" "x" "x" ))("Ã"))
-((("\\" "y" "\"" ))("ÿ"))
-((("\\" "y" "'" ))("ý"))
-((("\\" "y" "-" ))("Â¥"))
-((("\\" "y" "=" ))("Â¥"))
-((("\\" "y" "^" ))("Å·"))
-((("\\" "z" "'" ))("ź"))
-((("\\" "z" "." ))("ż"))
-((("\\" "z" "<" ))("ž"))
-((("\\" "|" "C" ))("¢"))
-((("\\" "|" "c" ))("¢"))
-((("\\" "~" " " ))("~"))
-((("\\" "~" "A" ))("Ã"))
-((("\\" "~" "I" ))("Ĩ"))
-((("\\" "~" "N" ))("Ã"))
-((("\\" "~" "O" ))("Ã"))
-((("\\" "~" "U" ))("Ũ"))
-((("\\" "~" "a" ))("ã"))
-((("\\" "~" "i" ))("Ä©"))
-((("\\" "~" "n" ))("ñ"))
-((("\\" "~" "o" ))("õ"))
-((("\\" "~" "u" ))("Å©"))
+((("\\" "\\"))("\\"))
+(((" " " "))("Â "))
+(((" " "'"))("'"))
+(((" " "("))("Ë"))
+(((" " "-"))("~"))
+(((" " "<"))("Ë"))
+(((" " ">"))("^"))
+(((" " "^"))("^"))
+(((" " "`"))("`"))
+(((" " "~"))("~"))
+((("!" "!"))("¡"))
+((("!" "P"))("¶"))
+((("!" "S"))("§"))
+((("!" "p"))("¶"))
+((("!" "s"))("§"))
+((("\"" "\""))("¨"))
+((("\"" "A"))("Ã"))
+((("\"" "E"))("Ã"))
+((("\"" "I"))("Ã"))
+((("\"" "O"))("Ã"))
+((("\"" "U"))("Ã"))
+((("\"" "Y"))("Ÿ"))
+((("\"" "a"))("ä"))
+((("\"" "e"))("ë"))
+((("\"" "i"))("ï"))
+((("\"" "o"))("ö"))
+((("\"" "u"))("ü"))
+((("\"" "y"))("ÿ"))
+((("'" " " ))("'"))
+((("'" "'" ))("´"))
+((("'" "A" ))("Ã"))
+((("'" "C" ))("Ä"))
+((("'" "E" ))("Ã"))
+((("'" "I" ))("Ã"))
+((("'" "L" ))("Ĺ"))
+((("'" "N" ))("Å"))
+((("'" "O" ))("Ã"))
+((("'" "R" ))("Å"))
+((("'" "S" ))("Å"))
+((("'" "U" ))("Ã"))
+((("'" "Y" ))("Ã"))
+((("'" "Z" ))("Ź"))
+((("'" "a" ))("á"))
+((("'" "c" ))("Ä"))
+((("'" "e" ))("é"))
+((("'" "i" ))("Ã"))
+((("'" "l" ))("ĺ"))
+((("'" "n" ))("Å"))
+((("'" "o" ))("ó"))
+((("'" "r" ))("Å"))
+((("'" "s" ))("Å"))
+((("'" "u" ))("ú"))
+((("'" "y" ))("ý"))
+((("'" "z" ))("ź"))
+((("(" " " ))("Ë"))
+((("(" "(" ))("["))
+((("(" "-" ))("{"))
+((("(" "A" ))("Ä"))
+((("(" "G" ))("Ä"))
+((("(" "c" ))("©"))
+((("(" "a" ))("Ä"))
+((("(" "g" ))("Ä"))
+((("(" "r" ))("®"))
+(((")" ")" ))("]"))
+(((")" "-" ))("}"))
+((("*" "0" ))("°"))
+((("*" "A" ))("Ã
"))
+((("*" "U" ))("Å®"))
+((("*" "a" ))("Ã¥"))
+((("*" "u" ))("ů"))
+((("+" "+" ))("#"))
+((("+" "-" ))("±"))
+((("," "," ))("¸"))
+((("," "-" ))("¬"))
+((("," "A" ))("Ä"))
+((("," "C" ))("Ã"))
+((("," "E" ))("Ä"))
+((("," "G" ))("Ä¢"))
+((("," "I" ))("Ä®"))
+((("," "K" ))("Ķ"))
+((("," "L" ))("Ä»"))
+((("," "N" ))("Å
"))
+((("," "R" ))("Å"))
+((("," "S" ))("Å"))
+((("," "U" ))("Ų"))
+((("," "a" ))("Ä
"))
+((("," "c" ))("ç"))
+((("," "e" ))("Ä"))
+((("," "g" ))("Ä£"))
+((("," "i" ))("į"))
+((("," "k" ))("Ä·"))
+((("," "l" ))("ļ"))
+((("," "n" ))("Å"))
+((("," "r" ))("Å"))
+((("," "s" ))("Å"))
+((("," "u" ))("ų"))
+((("-" " " ))("~"))
+((("-" "(" ))("{"))
+((("-" ")" ))("}"))
+((("-" "+" ))("±"))
+((("-" "," ))("¬"))
+((("-" "-" ))("Â"))
+((("-" ":" ))("÷"))
+((("-" "A" ))("Ã"))
+((("-" "D" ))("Ä"))
+((("-" "E" ))("Ä"))
+((("-" "I" ))("Ī"))
+((("-" "L" ))("£"))
+((("-" "N" ))("Ã"))
+((("-" "O" ))("Ã"))
+((("-" "U" ))("Ū"))
+((("-" "Y" ))("Â¥"))
+((("-" "^" ))("¯"))
+((("-" "a" ))("ã"))
+((("-" "d" ))("Ä"))
+((("-" "e" ))("Ä"))
+((("-" "i" ))("Ä«"))
+((("-" "l" ))("£"))
+((("-" "n" ))("ñ"))
+((("-" "o" ))("õ"))
+((("-" "u" ))("Å«"))
+((("-" "y" ))("Â¥"))
+((("." "." ))("Ë"))
+((("." "B" ))("á¸"))
+((("." "C" ))("Ä"))
+((("." "D" ))("á¸"))
+((("." "E" ))("Ä"))
+((("." "F" ))("á¸"))
+((("." "G" ))("Ä "))
+((("." "I" ))("Ä°"))
+((("." "M" ))("á¹"))
+((("." "P" ))("á¹"))
+((("." "S" ))("á¹ "))
+((("." "T" ))("Ṫ"))
+((("." "Z" ))("Å»"))
+((("." "^" ))("·"))
+((("." "b" ))("á¸"))
+((("." "c" ))("Ä"))
+((("." "d" ))("á¸"))
+((("." "e" ))("Ä"))
+((("." "f" ))("á¸"))
+((("." "g" ))("Ä¡"))
+((("." "i" ))("ı"))
+((("." "m" ))("á¹"))
+((("." "p" ))("á¹"))
+((("." "s" ))("ṡ"))
+((("." "t" ))("ṫ"))
+((("." "z" ))("ż"))
+((("/" "/" ))("\\"))
+((("/" "<" ))("\\"))
+((("/" "C" ))("¢"))
+((("/" "O" ))("Ã"))
+((("/" "T" ))("Ŧ"))
+((("/" "U" ))("µ"))
+((("/" "^" ))("|"))
+((("/" "c" ))("¢"))
+((("/" "o" ))("ø"))
+((("/" "t" ))("ŧ"))
+((("/" "u" ))("µ"))
+((("0" "*" ))("°"))
+((("0" "C" ))("©"))
+((("0" "S" ))("§"))
+((("0" "X" ))("¤"))
+((("0" "^" ))("°"))
+((("0" "c" ))("©"))
+((("0" "s" ))("§"))
+((("0" "x" ))("¤"))
+((("1" "S" ))("¹"))
+((("1" "^" ))("¹"))
+((("1" "s" ))("¹"))
+((("2" "S" ))("²"))
+((("2" "^" ))("²"))
+((("2" "s" ))("²"))
+((("3" "S" ))("³"))
+((("3" "^" ))("³"))
+((("3" "s" ))("³"))
+(((":" "-" ))("÷"))
+((("<" " " ))("Ë"))
+((("<" "/" ))("\\"))
+((("<" "<" ))("«"))
+((("<" "C" ))("Ä"))
+((("<" "D" ))("Ä"))
+((("<" "E" ))("Ä"))
+((("<" "L" ))("Ľ"))
+((("<" "N" ))("Å"))
+((("<" "R" ))("Å"))
+((("<" "S" ))("Å "))
+((("<" "T" ))("Ť"))
+((("<" "Z" ))("Ž"))
+((("<" "c" ))("Ä"))
+((("<" "d" ))("Ä"))
+((("<" "e" ))("Ä"))
+((("<" "l" ))("ľ"))
+((("<" "n" ))("Å"))
+((("<" "r" ))("Å"))
+((("<" "s" ))("Å¡"))
+((("<" "t" ))("Å¥"))
+((("<" "z" ))("ž"))
+((("=" "C" ))("â¬"))
+((("=" "L" ))("£"))
+((("=" "Y" ))("Â¥"))
+((("=" "e" ))("â¬"))
+((("=" "l" ))("£"))
+((("=" "y" ))("Â¥"))
+(((">" " " ))("^"))
+(((">" ">" ))("»"))
+(((">" "A" ))("Ã"))
+(((">" "E" ))("Ã"))
+(((">" "I" ))("Ã"))
+(((">" "O" ))("Ã"))
+(((">" "U" ))("Ã"))
+(((">" "a" ))("â"))
+(((">" "e" ))("ê"))
+(((">" "i" ))("î"))
+(((">" "o" ))("ô"))
+(((">" "u" ))("û"))
+((("?" "?" ))("¿"))
+((("A" "\"" ))("Ã"))
+((("A" "'" ))("Ã"))
+((("A" "(" ))("Ä"))
+((("A" "*" ))("Ã
"))
+((("A" "," ))("Ä"))
+((("A" "-" ))("Ã"))
+((("A" ">" ))("Ã"))
+((("A" "A" ))("Ã
"))
+((("A" "E" ))("Ã"))
+((("A" "^" ))("Ã"))
+((("A" "_" ))("ª"))
+((("A" "`" ))("Ã"))
+((("A" "~" ))("Ã"))
+((("B" "." ))("á¸"))
+((("C" "'" ))("Ä"))
+((("C" "," ))("Ã"))
+((("C" "." ))("Ä"))
+((("C" "/" ))("¢"))
+((("C" "<" ))("Ä"))
+((("C" "=" ))("â¬"))
+((("C" "0" ))("©"))
+((("C" "O" ))("©"))
+((("C" "o" ))("©"))
+((("C" "|" ))("¢"))
+((("D" "-" ))("Ä"))
+((("D" "." ))("á¸"))
+((("D" "<" ))("Ä"))
+((("E" "\"" ))("Ã"))
+((("E" "'" ))("Ã"))
+((("E" "," ))("Ä"))
+((("E" "-" ))("Ä"))
+((("E" "." ))("Ä"))
+((("E" "<" ))("Ä"))
+((("E" ">" ))("Ã"))
+((("E" "^" ))("Ã"))
+((("E" "_" ))("Ä"))
+((("E" "`" ))("Ã"))
+((("F" "." ))("á¸"))
+((("G" "(" ))("Ä"))
+((("G" "," ))("Ä¢"))
+((("G" "." ))("Ä "))
+((("G" "U" ))("Ä"))
+((("I" "\"" ))("Ã"))
+((("I" "'" ))("Ã"))
+((("I" "," ))("Ä®"))
+((("I" "-" ))("Ī"))
+((("I" "." ))("Ä°"))
+((("I" ">" ))("Ã"))
+((("I" "^" ))("Ã"))
+((("I" "_" ))("Ī"))
+((("I" "`" ))("Ã"))
+((("I" "~" ))("Ĩ"))
+((("K" "," ))("Ķ"))
+((("L" "'" ))("Ĺ"))
+((("L" "," ))("Ä»"))
+((("L" "-" ))("£"))
+((("L" "<" ))("Ľ"))
+((("L" "=" ))("£"))
+((("L" "V" ))("|"))
+((("M" "." ))("á¹"))
+((("N" "'" ))("Å"))
+((("N" "," ))("Å
"))
+((("N" "-" ))("Ã"))
+((("N" "<" ))("Å"))
+((("N" "G" ))("Å"))
+((("N" "~" ))("Ã"))
+((("O" "\"" ))("Ã"))
+((("O" "'" ))("Ã"))
+((("O" "-" ))("Ã"))
+((("O" "/" ))("Ã"))
+((("O" ">" ))("Ã"))
+((("O" "C" ))("©"))
+((("O" "E" ))("Å"))
+((("O" "R" ))("®"))
+((("O" "S" ))("§"))
+((("O" "X" ))("¤"))
+((("O" "^" ))("Ã"))
+((("O" "_" ))("º"))
+((("O" "`" ))("Ã"))
+((("O" "c" ))("©"))
+((("O" "x" ))("¤"))
+((("O" "~" ))("Ã"))
+((("P" "!" ))("¶"))
+((("P" "." ))("á¹"))
+((("R" "'" ))("Å"))
+((("R" "," ))("Å"))
+((("R" "<" ))("Å"))
+((("R" "O" ))("®"))
+((("S" "!" ))("§"))
+((("S" "'" ))("Å"))
+((("S" "," ))("Å"))
+((("S" "." ))("á¹ "))
+((("S" "0" ))("§"))
+((("S" "1" ))("¹"))
+((("S" "2" ))("²"))
+((("S" "3" ))("³"))
+((("S" "<" ))("Å "))
+((("S" "O" ))("§"))
+((("T" "-" ))("Ŧ"))
+((("T" "." ))("Ṫ"))
+((("T" "/" ))("Ŧ"))
+((("t" "<" ))("Å¥"))
+((("T" "H" ))("Ã"))
+((("U" "\"" ))("Ã"))
+((("U" "'" ))("Ã"))
+((("U" "*" ))("Å®"))
+((("U" "," ))("Ų"))
+((("U" "-" ))("Å«"))
+((("U" "/" ))("µ"))
+((("U" ">" ))("Ã"))
+((("U" "^" ))("Ã"))
+((("U" "_" ))("Å«"))
+((("U" "`" ))("Ã"))
+((("U" "~" ))("Ũ"))
+((("V" "L" ))("|"))
+((("W" "^" ))("Å´"))
+((("X" "0" ))("¤"))
+((("X" "O" ))("¤"))
+((("X" "o" ))("¤"))
+((("Y" "\"" ))("Ÿ"))
+((("Y" "'" ))("Ã"))
+((("Y" "-" ))("Â¥"))
+((("Y" "=" ))("Â¥"))
+((("Y" "^" ))("Ŷ"))
+((("Z" "'" ))("Ź"))
+((("Z" "." ))("Å»"))
+((("Z" "<" ))("Ž"))
+((("^" " " ))("^"))
+((("^" "-" ))("¯"))
+((("^" "." ))("·"))
+((("^" "/" ))("|"))
+((("^" "0" ))("°"))
+((("^" "1" ))("¹"))
+((("^" "2" ))("²"))
+((("^" "3" ))("³"))
+((("^" "A" ))("Ã"))
+((("^" "E" ))("Ã"))
+((("^" "I" ))("Ã"))
+((("^" "O" ))("Ã"))
+((("^" "U" ))("Ã"))
+((("^" "W" ))("Å´"))
+((("^" "Y" ))("Ŷ"))
+((("^" "_" ))("¯"))
+((("^" "a" ))("â"))
+((("^" "e" ))("ê"))
+((("^" "i" ))("î"))
+((("^" "o" ))("ô"))
+((("^" "u" ))("û"))
+((("^" "w" ))("ŵ"))
+((("^" "y" ))("Å·"))
+((("_" "A" ))("ª"))
+((("_" "E" ))("Ä"))
+((("_" "I" ))("Ī"))
+((("_" "O" ))("º"))
+((("_" "U" ))("Ū"))
+((("_" "^" ))("¯"))
+((("_" "_" ))("¯"))
+((("_" "a" ))("ª"))
+((("_" "e" ))("Ä"))
+((("_" "i" ))("Ä«"))
+((("_" "o" ))("º"))
+((("_" "u" ))("Å«"))
+((("`" " " ))("`"))
+((("`" "A" ))("Ã"))
+((("`" "E" ))("Ã"))
+((("`" "I" ))("Ã"))
+((("`" "O" ))("Ã"))
+((("`" "U" ))("Ã"))
+((("`" "a" ))("Ã "))
+((("`" "e" ))("è"))
+((("`" "i" ))("ì"))
+((("`" "o" ))("ò"))
+((("`" "u" ))("ù"))
+((("a" "\""))("ä"))
+((("a" "'" ))("á"))
+((("a" "(" ))("Ä"))
+((("a" "*" ))("Ã¥"))
+((("a" "," ))("Ä
"))
+((("a" "-" ))("ã"))
+((("a" ">" ))("â"))
+((("a" "^" ))("â"))
+((("a" "_" ))("ª"))
+((("a" "`" ))("Ã "))
+((("a" "a" ))("Ã¥"))
+((("a" "e" ))("æ"))
+((("a" "~" ))("ã"))
+((("b" "." ))("á¸"))
+((("c" "," ))("ç"))
+((("c" "." ))("Ä"))
+((("c" "/" ))("¢"))
+((("c" "0" ))("©"))
+((("c" "<" ))("Ä"))
+((("c" "O" ))("©"))
+((("c" "o" ))("©"))
+((("c" "|" ))("¢"))
+((("d" "-" ))("Ä"))
+((("d" "." ))("á¸"))
+((("d" "<" ))("Ä"))
+((("e" "\"" ))("ë"))
+((("e" "'" ))("é"))
+((("e" "," ))("Ä"))
+((("e" "-" ))("Ä"))
+((("e" "." ))("Ä"))
+((("e" "=" ))("â¬"))
+((("e" "<" ))("Ä"))
+((("e" ">" ))("ê"))
+((("e" "^" ))("ê"))
+((("e" "_" ))("Ä"))
+((("e" "`" ))("è"))
+((("f" "." ))("á¸"))
+((("g" "(" ))("Ä"))
+((("g" "," ))("Ä£"))
+((("g" "." ))("Ä¡"))
+((("g" "U" ))("Ä"))
+((("i" "\""))("ï"))
+((("i" "'" ))("Ã"))
+((("i" "," ))("į"))
+((("i" "-" ))("Ä«"))
+((("i" "." ))("ı"))
+((("i" ">" ))("î"))
+((("i" "^" ))("î"))
+((("i" "_" ))("Ä«"))
+((("i" "`" ))("ì"))
+((("i" "~" ))("Ä©"))
+((("k" "," ))("Ä·"))
+((("k" "k" ))("ĸ"))
+((("l" "'" ))("ĺ"))
+((("l" "," ))("ļ"))
+((("l" "-" ))("£"))
+((("l" "<" ))("ľ"))
+((("l" "=" ))("£"))
+((("l" "v" ))("|"))
+((("m" "." ))("á¹"))
+((("n" "'" ))("Å"))
+((("n" "," ))("Å"))
+((("n" "-" ))("ñ"))
+((("n" "<" ))("Å"))
+((("n" "g" ))("Å"))
+((("n" "~" ))("ñ"))
+((("o" "\""))("ö"))
+((("o" "'" ))("ó"))
+((("o" "-" ))("õ"))
+((("o" "/" ))("ø"))
+((("o" ">" ))("ô"))
+((("o" "C" ))("©"))
+((("o" "X" ))("¤"))
+((("o" "^" ))("ô"))
+((("o" "_" ))("º"))
+((("o" "`" ))("ò"))
+((("o" "c" ))("©"))
+((("o" "e" ))("Å"))
+((("o" "s" ))("§"))
+((("o" "x" ))("¤"))
+((("o" "~" ))("õ"))
+((("p" "!" ))("¶"))
+((("p" "." ))("á¹"))
+((("r" "'" ))("Å"))
+((("r" "," ))("Å"))
+((("r" "<" ))("Å"))
+((("s" "!" ))("§"))
+((("s" "'" ))("Å"))
+((("s" "," ))("Å"))
+((("s" "." ))("ṡ"))
+((("s" "0" ))("§"))
+((("s" "1" ))("¹"))
+((("s" "2" ))("²"))
+((("s" "3" ))("³"))
+((("s" "<" ))("Å¡"))
+((("s" "o" ))("§"))
+((("s" "s" ))("Ã"))
+((("t" "-" ))("ŧ"))
+((("t" "." ))("ṫ"))
+((("t" "/" ))("ŧ"))
+((("t" "<" ))("Å¥"))
+((("t" "h" ))("þ"))
+((("u" "\""))("ü"))
+((("u" "'" ))("ú"))
+((("u" "*" ))("ů"))
+((("u" "," ))("ų"))
+((("u" "-" ))("Å«"))
+((("u" "/" ))("µ"))
+((("u" ">" ))("û"))
+((("u" "^" ))("û"))
+((("u" "_" ))("Å«"))
+((("u" "`" ))("ù"))
+((("u" "~" ))("Å©"))
+((("v" "Z" ))("Ž"))
+((("v" "l" ))("|"))
+((("v" "z" ))("ž"))
+((("w" "^" ))("ŵ"))
+((("x" "0" ))("¤"))
+((("x" "O" ))("¤"))
+((("x" "o" ))("¤"))
+((("x" "x" ))("Ã"))
+((("y" "\""))("ÿ"))
+((("y" "'" ))("ý"))
+((("y" "-" ))("Â¥"))
+((("y" "=" ))("Â¥"))
+((("y" "^" ))("Å·"))
+((("z" "'" ))("ź"))
+((("z" "." ))("ż"))
+((("z" "<" ))("ž"))
+((("|" "C" ))("¢"))
+((("|" "c" ))("¢"))
+((("~" " " ))("~"))
+((("~" "A" ))("Ã"))
+((("~" "I" ))("Ĩ"))
+((("~" "N" ))("Ã"))
+((("~" "O" ))("Ã"))
+((("~" "U" ))("Ũ"))
+((("~" "a" ))("ã"))
+((("~" "i" ))("Ä©"))
+((("~" "n" ))("ñ"))
+((("~" "o" ))("õ"))
+((("~" "u" ))("Å©"))
))
(define latin-im-rule
@@ -571,14 +578,155 @@
(define latin-init-handler
(lambda (id im arg)
- (generic-context-new id im latin-im-rule #f)))
+ (latin-context-new id im)))
-(generic-register-im
+;;; implementations
+
+(define ascii-rule
+ (map (compose (lambda (entry)
+ (list (list entry) entry))
+ list
+ charcode->string)
+ (iota 127 32)))
+
+(define latin-context-rec-spec
+ (append
+ context-rec-spec
+ '((rk-context #f)
+ (rk-nth 0)
+ (composing? #f)
+ (on #f)
+ (raw-commit #f)
+ (converting #f))))
+(define-record 'latin-context latin-context-rec-spec)
+(define latin-context-new-internal latin-context-new)
+
+(define latin-context-new
+ (lambda (id im)
+ (let ((gc (latin-context-new-internal id im))
+ (rkc (rk-context-new latin-im-rule #f #f)))
+ (latin-context-set-rk-context! gc rkc)
+ gc)))
+
+(define latin-context-flush
+ (lambda (pc)
+ (latin-context-set-rk-nth! pc 0)
+ (latin-context-set-converting! pc #f)))
+
+(define latin-update-preedit
+ (lambda (pc)
+ (let* ((rkc (latin-context-rk-context pc))
+ (cs (rk-current-seq rkc))
+ (n (latin-context-rk-nth pc)))
+ (im-clear-preedit pc)
+ (im-pushback-preedit
+ pc preedit-underline
+ (if cs
+ (nth n (cadr cs))
+ (rk-pending rkc)))
+ (im-pushback-preedit
+ pc preedit-cursor "")
+
+ (im-update-preedit pc))))
+
+(define latin-commit-raw
+ (lambda (pc)
+ (im-commit-raw pc)
+ (latin-context-set-raw-commit! pc #t)))
+
+(define latin-commit
+ (lambda (pc)
+ (let* ((rkc (latin-context-rk-context pc))
+ (cs (rk-current-seq rkc)))
+ (if (= (length (cadr cs)) 1)
+ (begin
+ (im-commit pc (car (cadr cs)))
+ (latin-context-set-composing?! pc #f)
+ (rk-flush rkc))))))
+
+(define latin-proc-composing-state
+ (lambda (pc key state)
+ (let* ((rkc (latin-context-rk-context pc))
+ (n (latin-context-rk-nth pc))
+ (cs (cadr (rk-current-seq rkc)))
+ (res))
+ (cond
+
+ ((latin-backspace-key? key state)
+ (if (not (rk-backspace rkc))
+ (latin-commit-raw pc)))
+
+ ((latin-commit-key? key state)
+ (latin-commit pc))
+
+ ((or (symbol? key)
+ (= 32 key)) ; space
+ (latin-commit-raw pc)
+ (latin-context-flush pc))
+
+ (else
+ (let ((res (rk-push-key! rkc (charcode->string key))))
+ (if (not (rk-partial? rkc))
+ (let ((cs (rk-current-seq rkc)))
+ (if (= (length (cadr cs)) 1)
+ (latin-commit pc))))
+ (if res
+ (begin
+ (print res)
+ (im-commit pc (list-ref res 0))
+ (latin-context-set-composing?! pc #f)
+ (rk-flush rkc)))
+ ))))))
+
+(define latin-proc-raw-state
+ (lambda (pc key state)
+ (if (latin-multi-key? key state)
+ (latin-context-set-composing?! pc #t)
+ (latin-commit-raw pc))))
+
+(define latin-press-key-handler
+ (lambda (pc key state)
+ (if (control-char? key)
+ (im-commit-raw pc)
+ (if (latin-context-composing? pc)
+ (latin-proc-composing-state pc key state)
+ (latin-proc-raw-state pc key state)))
+ (latin-update-preedit pc)))
+
+(define latin-release-key-handler
+ (lambda (pc key state)
+ (if (or (control-char? key)
+ (not (latin-context-on pc)))
+ ;; don't discard key release event for apps
+ (latin-commit-raw pc))))
+
+(define latin-reset-handler
+ (lambda (pc)
+ (let ((rkc (latin-context-rk-context pc)))
+ (rk-flush rkc))))
+
+(define latin-get-candidate-handler
+ (lambda (pc idx accel-enum-hint)
+ ()))
+
+(define latin-set-candidate-index-handler
+ (lambda (pc idx)
+ ()))
+
+(register-im
'latin
""
"UTF-8"
- ;; I think that the name "euro" is not appropriate since it
- ;; represents nation or geographic region. -- YamaKen 2005-01-29
(N_ "Latin characters")
(N_ "Latin characters mainly used for Latin and German languages")
- latin-init-handler)
+ #f
+ latin-init-handler
+ #f
+ context-mode-handler
+ latin-press-key-handler
+ latin-release-key-handler
+ latin-reset-handler
+ #f
+ #f
+ context-prop-activate-handler
+)
Modified: branches/r5rs/test/test-custom-rt.scm
===================================================================
--- branches/r5rs/test/test-custom-rt.scm 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/test/test-custom-rt.scm 2005-08-10 19:34:32 UTC (rev 1180)
@@ -29,6 +29,10 @@
;;; SUCH DAMAGE.
;;;;
+;; TODO:
+;;
+;; custom-reload-customs
+
(use test.unit)
(require "test/uim-test-utils")
Modified: branches/r5rs/test/test-custom.scm
===================================================================
--- branches/r5rs/test/test-custom.scm 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/test/test-custom.scm 2005-08-10 19:34:32 UTC (rev 1180)
@@ -33,9 +33,7 @@
;; TODO:
;;
-;; custom-reload-customs
;; custom-broadcast-customs
-;; custom-broadcast-customs
(use test.unit)
Modified: branches/r5rs/uim/uim-custom.c
===================================================================
--- branches/r5rs/uim/uim-custom.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/uim/uim-custom.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -55,6 +55,10 @@
#include "context.h"
#include "uim-helper.h"
+#if 1
+/* TODO: make stable */
+#define UIM_CUSTOM_EXPERIMENTAL_MTIME_SENSING
+#endif
typedef void (*uim_custom_cb_update_cb_t)(void *ptr, const char *custom_sym);
typedef void (*uim_custom_global_cb_update_cb_t)(void *ptr);
@@ -829,7 +833,35 @@
return for_each_primary_groups(uim_custom_load_group);
}
+#ifdef UIM_CUSTOM_EXPERIMENTAL_MTIME_SENSING
static uim_bool
+file_content_is_same(const char *a_path, const char *b_path)
+{
+ FILE *a, *b;
+ char a_buf[4096], b_buf[4096];
+
+ a = fopen(a_path, "r");
+ b = fopen(b_path, "r");
+
+ while(1) {
+ char *a_eof, *b_eof;
+ a_eof = fgets(a_buf, sizeof(a_buf), a);
+ b_eof = fgets(b_buf, sizeof(b_buf), b);
+
+ if(!a_eof && !b_eof)
+ break;
+ if((!a_eof && b_eof) || (a_eof && !b_eof))
+ return UIM_FALSE;
+
+ if(strcmp(a_buf, b_buf) != 0)
+ return UIM_FALSE;
+ }
+
+ return UIM_TRUE;
+}
+#endif
+
+static uim_bool
uim_custom_save_group(const char *group)
{
uim_bool succeeded = UIM_FALSE;
@@ -868,10 +900,26 @@
if (fclose(file) < 0)
goto error;
+
/* rename prepared temporary file to proper name */
file_path = custom_file_path(group, 0);
+#ifdef UIM_CUSTOM_EXPERIMENTAL_MTIME_SENSING
+ /*
+ * Avoiding a file saving at here by such method is a layer
+ * violation. Observing updated group is recommended way.
+ * -- YamaKen 2005-08-09
+ */
+ if(file_content_is_same(tmp_file_path, file_path)) {
+ succeeded = UIM_TRUE;
+ remove(tmp_file_path);
+ } else {
+ succeeded = (rename(tmp_file_path, file_path) == 0);
+ }
+#else
succeeded = (rename(tmp_file_path, file_path) == 0);
+#endif
free(file_path);
+
error:
free(tmp_file_path);
@@ -943,6 +991,29 @@
}
/**
+ * Broadcasts a request to reload custom files to other uim-enabled
+ * application processes via uim-helper-server.
+ *
+ * @retval UIM_TRUE succeeded
+ * @retval UIM_FALSE failed
+ */
+uim_bool
+uim_custom_broadcast_reload_request(void)
+{
+ if (helper_fd < 0) {
+ helper_fd = uim_helper_init_client_fd(helper_disconnect_cb);
+ }
+
+ uim_helper_send_message(helper_fd, "custom_reload_notify\n");
+
+ if (helper_fd != -1) {
+ uim_helper_close_client_fd(helper_fd);
+ }
+
+ return UIM_TRUE;
+}
+
+/**
* Returns attributes and current value of a custom variable. Returned value
* must be freed by uim_custom_free().
*
Modified: branches/r5rs/uim/uim-custom.h
===================================================================
--- branches/r5rs/uim/uim-custom.h 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/uim/uim-custom.h 2005-08-10 19:34:32 UTC (rev 1180)
@@ -127,6 +127,7 @@
uim_bool uim_custom_load(void);
uim_bool uim_custom_save(void);
uim_bool uim_custom_broadcast(void);
+uim_bool uim_custom_broadcast_reload_request(void);
/* custom variable */
struct uim_custom *uim_custom_get(const char *custom_sym);
Modified: branches/r5rs/uim/uim-helper-server.c
===================================================================
--- branches/r5rs/uim/uim-helper-server.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/uim/uim-helper-server.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -150,8 +150,9 @@
}
static void
-free_client(struct client *cl)
+close_client(struct client *cl)
{
+ close(cl->fd);
if (cl->rbuf) {
free(cl->rbuf);
cl->rbuf = strdup("");
@@ -261,20 +262,77 @@
return UIM_TRUE;
}
-/* FIXME: This function is too long to read... */
static void
+write_message(struct client *cl)
+{
+ int ret, message_len, out_len;
+ char *out;
+
+ out = cl->wbuf;
+ message_len = out_len = strlen(cl->wbuf);
+ while (out_len > 0) {
+ if ((ret = write(cl->fd, out, out_len)) < 0) {
+ if (errno == EAGAIN) {
+#if 0
+ fprintf(stderr, "EAGAIN: fd = %d\n", cl->fd);
+#endif
+ } else {
+ perror("uim-helper_server write(2) failed");
+ if (errno == EPIPE) {
+ fprintf(stderr, "fd = %d\n", cl->fd);
+ FD_CLR(cl->fd, &s_fdset_read);
+ FD_CLR(cl->fd, &s_fdset_write);
+ if (cl->fd == s_max_fd)
+ s_max_fd--;
+ close_client(cl);
+ }
+ }
+ break;
+ } else {
+ out += ret;
+ out_len -= ret;
+ }
+ }
+ if (out_len == 0) {
+ free(cl->wbuf);
+ cl->wbuf = strdup("");
+ FD_CLR(cl->fd, &s_fdset_write);
+ } else {
+ uim_helper_buffer_shift(cl->wbuf, message_len - out_len);
+ }
+}
+
+
+static void
+read_message(struct client *cl)
+{
+ int result;
+ result = reflect_message_fragment(cl);
+
+ if (result < 0) {
+ FD_CLR(cl->fd, &s_fdset_read);
+ FD_CLR(cl->fd, &s_fdset_write);
+ if (cl->fd == s_max_fd)
+ s_max_fd--;
+ close_client(cl);
+ }
+}
+
+
+static void
uim_helper_server_process_connection(int server_fd)
{
int i;
- fd_set readfds;
- fd_set writefds;
+ fd_set readfds, writefds;
while (1) {
/* Could we replace this memcpy with direct assignment? */
+ /* Copy readfds from s_fdset_read/s_fdset_write because select removes
+ readble/writable fd from readfds/writefds */
memcpy(&readfds, &s_fdset_read, sizeof(fd_set));
memcpy(&writefds, &s_fdset_write, sizeof(fd_set));
- /* call select(), waiting until a file descriptor readable */
+ /* call select(), waiting until a file descriptor became readable */
if (select(s_max_fd + 1, &readfds, &writefds, NULL, NULL) <= 0) {
perror("uim-helper_server select(2) failed");
sleep(3);
@@ -292,56 +350,10 @@
/* check data to write and from clients reached */
for (i = 0; i < nr_client_slots; i++) {
if (clients[i].fd != -1 && FD_ISSET(clients[i].fd, &writefds)) {
- int ret, message_len, out_len;
- char *out;
-
- out = clients[i].wbuf;
- message_len = out_len = strlen(clients[i].wbuf);
- while (out_len > 0) {
- if ((ret = write(clients[i].fd, out, out_len)) < 0) {
- if (errno == EAGAIN) {
-#if 0
- fprintf(stderr, "EAGAIN: fd = %d\n", clients[i].fd);
-#endif
- } else {
- perror("uim-helper_server write(2) failed");
- if (errno == EPIPE) {
- fprintf(stderr, "fd = %d\n", clients[i].fd);
- FD_CLR(clients[i].fd, &s_fdset_read);
- FD_CLR(clients[i].fd, &s_fdset_write);
- if (clients[i].fd == s_max_fd)
- s_max_fd--;
- close(clients[i].fd);
- free_client(&clients[i]);
- }
- }
- break;
- } else {
- out += ret;
- out_len -= ret;
- }
- }
- if (out_len == 0) {
- free(clients[i].wbuf);
- clients[i].wbuf = strdup("");
- FD_CLR(clients[i].fd, &s_fdset_write);
- } else {
- uim_helper_buffer_shift(clients[i].wbuf, message_len - out_len);
- }
+ write_message(&clients[i]);
}
if (clients[i].fd != -1 && FD_ISSET(clients[i].fd, &readfds)) {
- int result;
- /* actual process */
- result = reflect_message_fragment(&clients[i]);
-
- if (result < 0) {
- FD_CLR(clients[i].fd, &s_fdset_read);
- FD_CLR(clients[i].fd, &s_fdset_write);
- if (clients[i].fd == s_max_fd)
- s_max_fd--;
- close(clients[i].fd);
- free_client(&clients[i]);
- }
+ read_message(&clients[i]);
}
}
}
@@ -352,6 +364,7 @@
}
}
+
int
main(int argc, char **argv)
{
Modified: branches/r5rs/uim/uim-util.c
===================================================================
--- branches/r5rs/uim/uim-util.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/uim/uim-util.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -35,6 +35,7 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/time.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
@@ -127,6 +128,20 @@
}
static uim_lisp
+file_mtime(uim_lisp f)
+{
+ const char *filename = uim_scm_refer_c_str(f);
+ struct stat buf;
+
+ if(stat(filename, &buf) == 0) {
+ return uim_scm_make_int(buf.st_mtime);
+ } else {
+ /* FIXME: Write error handling code. */
+ return uim_scm_make_int(0);
+ }
+}
+
+static uim_lisp
charcode2string(uim_lisp x)
{
char buf[2];
@@ -611,6 +626,7 @@
uim_scm_init_subr_1("file-executable?", file_executablep);
uim_scm_init_subr_1("file-regular?", file_regularp);
uim_scm_init_subr_1("file-directory?", file_directoryp);
+ uim_scm_init_subr_1("file-mtime", file_mtime);
uim_scm_init_subr_2("nthcdr", nthcdr);
uim_scm_init_subr_1("charcode->string", charcode2string);
uim_scm_init_subr_1("string->charcode", string2charcode);
Modified: branches/r5rs/uim/uim.c
===================================================================
--- branches/r5rs/uim/uim.c 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/uim/uim.c 2005-08-10 19:34:32 UTC (rev 1180)
@@ -350,6 +350,17 @@
uc->id, custom, val);
}
+
+/* Tentative name. I followed above uim_prop_update_custom, but prop
+would not be proper to this function. */
+uim_bool
+uim_prop_reload_configs(void)
+{
+ /* FIXME: proces return value properly. */
+ uim_scm_eval_c_string("(custom-reload-configs)");
+ return UIM_TRUE;
+}
+
int
uim_get_current_mode(uim_context uc)
{
Modified: branches/r5rs/uim/uim.h
===================================================================
--- branches/r5rs/uim/uim.h 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/uim/uim.h 2005-08-10 19:34:32 UTC (rev 1180)
@@ -523,6 +523,8 @@
uim_prop_activate(uim_context uc, const char *str);
void
uim_prop_update_custom(uim_context uc, const char *custom, const char *val);
+uim_bool
+uim_prop_reload_configs(void);
/* mode is obsoleted by property, so please use property API instead of mode API */
int
Modified: branches/r5rs/xim/helper.cpp
===================================================================
--- branches/r5rs/xim/helper.cpp 2005-08-10 19:17:46 UTC (rev 1179)
+++ branches/r5rs/xim/helper.cpp 2005-08-10 19:34:32 UTC (rev 1180)
@@ -224,6 +224,8 @@
(*it).second->customContext(custom, val);
}
return;
+ } else if (strcmp("custom_reload_notify", line) == 0) {
+ uim_prop_reload_configs();
}
}
More information about the uim-commit
mailing list