X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Finput.c;h=3cc1086f5774d90e9154486ff79d70b7a8c899d1;hb=398685e3214363bc831a7c29f89e466a96b71e4a;hp=888bce0d55cdd6024dcbc318f43e3d3e19c0faf4;hpb=23a8dfeafca462751e8d08439c3e297c5e2c9eaa;p=m17n%2Fm17n-lib.git diff --git a/src/input.c b/src/input.c index 888bce0..3cc1086 100644 --- a/src/input.c +++ b/src/input.c @@ -1640,7 +1640,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 @@ -1782,11 +1782,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 +2078,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; @@ -5103,11 +5109,14 @@ minput_config_command (MSymbol language, MSymbol name, MSymbol command, } else { - plist = MPLIST_PLIST (plist); /* (NAME nil KEYSEQ ...) */ - plist = MPLIST_NEXT (plist); - 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 KEYSEQ ...) */ + plist = MPLIST_NEXT (plist); + mplist_set (plist, Mnil, NULL); + } } } else @@ -5147,7 +5156,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 @@ -5462,11 +5471,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 @@ -5625,30 +5637,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) @@ -5660,29 +5663,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 ();