X-Git-Url: http://git.chise.org/gitweb/?p=m17n%2Fm17n-test.git;a=blobdiff_plain;f=m17n-imconf.c;h=24db13f604de7a308a632d2084d6ac6b6cc97aa2;hp=d24aa26aff728e7f2777e2aa79c10d3b2b060aa8;hb=a85bd34569ff2afdab5b8d9adf11f4ba149daed9;hpb=33c2484c76806e4e65fde05b07ae1b0ab278f012 diff --git a/m17n-imconf.c b/m17n-imconf.c index d24aa26..24db13f 100644 --- a/m17n-imconf.c +++ b/m17n-imconf.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -84,6 +85,30 @@ eval_close (MPlist *arg) } MPlist * +eval_get_description (MPlist *arg) +{ + MSymbol lang, name; + MText *mt; + MPlist *plist; + + if (! SYMBOLP (arg)) + ERROR (error_invalid_arg); + lang = mplist_value (arg); + arg = mplist_next (arg); + if (! SYMBOLP (arg)) + ERROR (error_invalid_arg); + name = mplist_value (arg); + mt = minput_get_description (lang, name); + if (! mt) + ERROR (error_command_fail); + plist = mplist (); + mplist_add (plist, Mtext, mt); + m17n_object_unref (mt); + return plist; +} + + +MPlist * parse_arg_common (MPlist *arg, MSymbol *lang, MSymbol *name, MSymbol *target) { if (TAILP (arg)) @@ -152,6 +177,9 @@ call_config_common (int (*func) (MSymbol, MSymbol, MSymbol, MPlist *), ERROR (error_invalid_arg); if (TAILP (arg)) arg = NULL; + else if (mplist_key (arg) == Mplist + && mplist_key ((MPlist *) mplist_value (arg)) == Mnil) + arg = (MPlist *) mplist_value (arg); if (func (lang, name, target, arg) < 0) ERROR (error_command_fail); return NULL; @@ -189,6 +217,7 @@ struct EvalFunc { {eval_set, "set SYMBOL FORM"}, {eval_open, "open LANG NAME"}, {eval_close, "close SYMBOL"}, + {eval_get_description, "get-description LANG NAME"}, {eval_get_command, "get-command [LANG NAME [COMMAND]]"}, {eval_config_command, "config-command LANG NAME [COMMAND [(KEY ...) ...]]"}, {eval_get_variable, "get-variable [LANG NAME [VARIABLE]]"}, @@ -235,21 +264,25 @@ eval (MPlist *plist) void init (void) { + int n; + M17N_INIT (); Merror = msymbol ("error"); Mvalue = msymbol ("value"); Meval_function = msymbol ("eval-function"); - msymbol_put (msymbol ("help"), Meval_function, eval_functions + 0); - msymbol_put (msymbol ("set"), Meval_function, eval_functions + 1); - msymbol_put (msymbol ("open"), Meval_function, eval_functions + 2); - msymbol_put (msymbol ("close"), Meval_function, eval_functions + 3); - msymbol_put (msymbol ("get-command"), Meval_function, eval_functions + 4); - msymbol_put (msymbol ("config-command"), Meval_function, eval_functions + 5); - msymbol_put (msymbol ("get-variable"), Meval_function, eval_functions + 6); - msymbol_put (msymbol ("config-variable"), Meval_function, eval_functions + 7); - msymbol_put (msymbol ("save-config"), Meval_function, eval_functions + 8); + n = 0; + msymbol_put (msymbol ("help"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("set"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("open"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("close"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("get-description"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("get-command"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("config-command"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("get-variable"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("config-variable"), Meval_function, eval_functions + n), n++; + msymbol_put (msymbol ("save-config"), Meval_function, eval_functions + n); error_invalid_format = mplist (); mplist_add (error_invalid_format, Msymbol, Merror); @@ -289,6 +322,8 @@ main () { char line[256]; + setlocale (LC_ALL, ""); + init (); while (printf ("> ") && fgets (line, 256, stdin) != NULL)