X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Ffns.c;h=2455d35fdb4a9f8077690cd39d54011832e930e4;hb=abf386d83354a83eaffe586602a5b5e34a9c6503;hp=b513f4c97e8109154fa1ccbf350c2a32cbf7d062;hpb=ef7f257b2a66501026d67435b1ce9d142713c829;p=chise%2Fxemacs-chise.git- diff --git a/src/fns.c b/src/fns.c index b513f4c..2455d35 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1,7 +1,7 @@ /* Random utility Lisp functions. Copyright (C) 1985, 86, 87, 93, 94, 95 Free Software Foundation, Inc. Copyright (C) 1995, 1996 Ben Wing. - Copyright (C) 2002, 2003 MORIOKA Tomohiko + Copyright (C) 2002, 2003, 2004 MORIOKA Tomohiko This file is part of XEmacs. @@ -3817,13 +3817,58 @@ Lisp_Object simplify_char_spec (Lisp_Object char_spec) { if (CHARP (char_spec)) - return char_spec; + { + Lisp_Object ccs; + int code_point = ENCODE_CHAR (XCHAR (char_spec), ccs); + + if (code_point >= 0) + { + int cid = decode_defined_char (ccs, code_point, Qnil); + + if (cid >= 0) + return make_char (cid); + } + return char_spec; + } else if (INTP (char_spec)) return Fdecode_char (Qmap_ucs, char_spec, Qnil, Qnil); else { +#if 0 Lisp_Object ret = Ffind_char (char_spec); - +#else + Lisp_Object ret; + Lisp_Object rest = char_spec; + int have_ccs = 0; + + while (CONSP (rest)) + { + Lisp_Object cell = Fcar (rest); + Lisp_Object ccs; + +#if 0 + if (!LISTP (cell)) + signal_simple_error ("Invalid argument", char_spec); +#endif + if (!NILP (ccs = Ffind_charset (Fcar (cell)))) + { + cell = Fcdr (cell); + if (CONSP (cell)) + ret = Fmake_char (ccs, Fcar (cell), Fcar (Fcdr (cell))); + else + ret = Fdecode_char (ccs, cell, Qt, Qt); + have_ccs = 1; + if (CHARP (ret)) + return ret; + } + rest = Fcdr (rest); + } + if (have_ccs) + ret = Fdefine_char (char_spec); + else + ret = Qnil; +#endif + if (CHARP (ret)) return ret; else