X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Finput.c;h=3175ce0b5d9cc09c9c1bae9dfe0af1d27fed92d3;hb=4b24e6ff1659fc0a8608c31b66ad6e1ebc494dd4;hp=c923d38a9c4dd1eeb8d3108040d6dcc84ab78331;hpb=f5c260843009ed8a861ee5576f37452747f9edae;p=m17n%2Fm17n-lib.git diff --git a/src/input.c b/src/input.c index c923d38..3175ce0 100644 --- a/src/input.c +++ b/src/input.c @@ -1070,34 +1070,48 @@ load_branch (MInputMethodInfo *im_info, MPlist *plist, MIMMap *map) if (branch_actions) M17N_OBJECT_REF (branch_actions); } - else if (im_info->maps - && (plist = (MPlist *) mplist_get (im_info->maps, map_name))) + else if (im_info->maps) { - MPLIST_DO (plist, plist) + plist = (MPlist *) mplist_get (im_info->maps, map_name); + if (! plist) { - MPlist *keylist, *map_actions; + MPlist *p = mplist__assq (im_info->configured_vars, map_name); - if (! MPLIST_PLIST_P (plist)) - MERROR (MERROR_IM, -1); - keylist = MPLIST_PLIST (plist); - map_actions = MPLIST_NEXT (keylist); - if (MPLIST_SYMBOL_P (keylist)) + if (p && MPLIST_PLIST_P (p)) + { + p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (p)))); + if (MPLIST_SYMBOL_P (p)) + plist = mplist_get (im_info->maps, MPLIST_SYMBOL (p)); + } + } + if (plist) + { + MPLIST_DO (plist, plist) { - MSymbol command = MPLIST_SYMBOL (keylist); - MPlist *pl; + MPlist *keylist, *map_actions; - if (MFAILP (command != Mat_reload)) - continue; - pl = resolve_command (im_info->configured_cmds, command); - if (MFAILP (pl)) - continue; - MPLIST_DO (pl, pl) - load_translation (map, pl, map_actions, branch_actions, + if (! MPLIST_PLIST_P (plist)) + MERROR (MERROR_IM, -1); + keylist = MPLIST_PLIST (plist); + map_actions = MPLIST_NEXT (keylist); + if (MPLIST_SYMBOL_P (keylist)) + { + MSymbol command = MPLIST_SYMBOL (keylist); + MPlist *pl; + + if (MFAILP (command != Mat_reload)) + continue; + pl = resolve_command (im_info->configured_cmds, command); + if (MFAILP (pl)) + continue; + MPLIST_DO (pl, pl) + load_translation (map, pl, map_actions, branch_actions, + im_info->macros); + } + else + load_translation (map, keylist, map_actions, branch_actions, im_info->macros); } - else - load_translation (map, keylist, map_actions, branch_actions, - im_info->macros); } } @@ -1640,7 +1654,7 @@ check_description (MPlist *plist) { M17N_OBJECT_UNREF (mt); mt = mtext__from_data (translated, strlen (translated), - MTEXT_FORMAT_UTF_8, 0); + MTEXT_FORMAT_UTF_8, 1); } } #endif @@ -1742,14 +1756,13 @@ config_command (MPlist *plist, MPlist *global_cmds, MPlist *custom_cmds, MPlist *config_cmds) { MPlist *global = NULL, *custom = NULL, *config = NULL; - MSymbol name; + MSymbol name = MPLIST_SYMBOL (plist); MSymbol status; MPlist *description, *keyseq; if (global_cmds && (global = mplist__assq (global_cmds, name))) global = MPLIST_NEXT (MPLIST_PLIST (global)); - name = MPLIST_SYMBOL (plist); plist = MPLIST_NEXT (plist); if (MPLIST_MTEXT_P (plist) || MPLIST_PLIST_P (plist)) { @@ -1782,11 +1795,14 @@ config_command (MPlist *plist, MPlist *global_cmds, MPlist *custom_cmds, } else if (custom_cmds && (custom = mplist__assq (custom_cmds, name))) { - custom = MPLIST_NEXT (MPLIST_PLIST (custom)); - if (! MPLIST_TAIL_P (custom)) + MPlist *this_keyseq = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (custom))); + + if (MPLIST_TAIL_P (this_keyseq)) + mplist__pop_unref (custom); + else { status = Mcustomized; - keyseq = custom; + keyseq = this_keyseq; } } @@ -2075,10 +2091,13 @@ config_variable (MPlist *plist, MPlist *global_vars, MPlist *custom_vars, } else if (custom_vars && (custom = mplist__assq (custom_vars, name))) { - custom = MPLIST_NEXT (MPLIST_PLIST (custom)); - if (! MPLIST_TAIL_P (custom)) + MPlist *this_value = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (custom))); + + if (MPLIST_TAIL_P (this_value)) + mplist__pop_unref (custom); + else { - value = custom; + value = this_value; if (MFAILP (check_variable_value (value, global ? global : plist))) value = NULL; status = Mcustomized; @@ -3790,8 +3809,6 @@ filter (MInputContext *ic, MSymbol key, void *arg) if (mtext_nchars (ic->produced) > 0) { - MSymbol lang = msymbol_get (ic->im->language, Mlanguage); - if (mdebug__flag & mdebug_mask) { MDEBUG_PRINT (" (produced"); @@ -3800,9 +3817,8 @@ filter (MInputContext *ic, MSymbol key, void *arg) MDEBUG_PRINT (")"); } - if (lang != Mnil) - mtext_put_prop (ic->produced, 0, mtext_nchars (ic->produced), - Mlanguage, ic->im->language); + mtext_put_prop (ic->produced, 0, mtext_nchars (ic->produced), + Mlanguage, ic->im->language); } if (ic_info->commit_key_head > 0) { @@ -5103,7 +5119,7 @@ minput_config_command (MSymbol language, MSymbol name, MSymbol command, } else { - if (no_cutom) + if (no_custom) mplist__pop_unref (plist); else { @@ -5150,7 +5166,7 @@ minput_config_command (MSymbol language, MSymbol name, MSymbol command, @brief Get information about input method variable(s). The minput_get_variable () function returns information about - the variable $VARIABLE of the input method specified by $LANGUAGE and $NAME. + variable $VARIABLE of the input method specified by $LANGUAGE and $NAME. An input method variable controls behavior of an input method. There are two kinds of variables, global and local. A global @@ -5465,11 +5481,14 @@ minput_config_variable (MSymbol language, MSymbol name, MSymbol variable, } else { - plist = MPLIST_PLIST (plist); /* (NAME nil VALUE) */ - plist = MPLIST_NEXT (plist); /* ([nil VALUE]) */ - if (! MPLIST_TAIL_P (plist)) - return 0; - mplist_set (plist, Mnil ,NULL); + if (no_custom) + mplist__pop_unref (plist); + else + { + plist = MPLIST_PLIST (plist); /* (NAME nil VALUE) */ + plist = MPLIST_NEXT (plist); /* ([nil VALUE]) */ + mplist_set (plist, Mnil ,NULL); + } } } else @@ -5628,30 +5647,21 @@ minput_save_config (void) else custom->cmds = mplist (), p = NULL; elt = MPLIST_NEXT (elt); - if (MPLIST_TAIL_P (elt)) + if (p) { - if (p) - { - /* Make customization ignored. */ - p = MPLIST_NEXT (MPLIST_PLIST (p)); - mplist_set (p, Mnil, NULL); - } + p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (p))); + mplist_set (p, Mnil, NULL); } else { - elt = MPLIST_NEXT (elt); - if (p) - { - p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (p))); - mplist_set (p, Mnil, NULL); - mplist__conc (p, elt); - } - else - { - p = MPLIST_PLIST (pl); - mplist_add (custom->cmds, Mplist, p); - } + p = mplist (); + mplist_add (custom->cmds, Mplist, p); + M17N_OBJECT_UNREF (p); + mplist_add (p, Msymbol, command); + p = mplist_add (p, Msymbol, Mnil); + p = MPLIST_NEXT (p); } + mplist__conc (p, elt); } if (config->vars) MPLIST_DO (pl, config->vars) @@ -5663,29 +5673,25 @@ minput_save_config (void) else custom->vars = mplist (), p = NULL; elt = MPLIST_NEXT (elt); - if (MPLIST_TAIL_P (elt)) + if (p) { - if (p) - mplist__pop_unref (p); + p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (p))); + mplist_set (p, Mnil, NULL); } else { - elt = MPLIST_NEXT (elt); - if (p) - { - p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (p))); - mplist_set (p, Mnil, NULL); - mplist__conc (p, elt); - } - else - { - p = MPLIST_PLIST (pl); - mplist_add (custom->vars, Mplist, p); - } + p = mplist (); + mplist_add (custom->vars, Mplist, p); + M17N_OBJECT_UNREF (p); + mplist_add (p, Msymbol, variable); + p = mplist_add (p, Msymbol, Mnil); + p = MPLIST_NEXT (p); } + mplist__conc (p, elt); } } - M17N_OBJECT_UNREF (im_config_list); + free_im_list (im_config_list); + im_config_list = NULL; /* Next, reflect customization to the actual plist to be written. */ data = tail = mplist ();