From: tomo Date: Wed, 9 Feb 2011 05:41:45 +0000 (+0000) Subject: (Qrep_decomposition): New extern. X-Git-Tag: r21-4-22-chise-0_25-6^20~795 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=2e10d25ce0c122f8a7048e21898344d7d9ec368b;p=chise%2Fxemacs-chise.git (Qrep_decomposition): New extern. (char_encode_utf8): Try to encode as combing sequence (or IVS). --- diff --git a/src/text-coding.c b/src/text-coding.c index 79c9dcb..09afa27 100644 --- a/src/text-coding.c +++ b/src/text-coding.c @@ -1,7 +1,8 @@ /* Code conversion functions. Copyright (C) 1991, 1995 Free Software Foundation, Inc. Copyright (C) 1995 Sun Microsystems, Inc. - Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2008 MORIOKA Tomohiko + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2011 + MORIOKA Tomohiko This file is part of XEmacs. @@ -3476,7 +3477,7 @@ char_encode_as_entity_reference (Emchar ch, char* buf) /************************************************************************/ /* character composition */ /************************************************************************/ -extern Lisp_Object Qcomposition; +extern Lisp_Object Qcomposition, Qrep_decomposition; INLINE_HEADER void COMPOSE_FLUSH_CHARS (struct decoding_stream *str, unsigned_char_dynarr* dst); @@ -4657,10 +4658,30 @@ char_encode_utf8 (struct encoding_stream *str, Emchar ch, if ( (code_point < 0) || (code_point > 0xEFFFF) ) { - Lisp_Object map - = CODING_SYSTEM_ISO2022_INITIAL_CHARSET (str->codesys, 1); - Lisp_Object ret; + Lisp_Object seq = Fchar_feature (make_char (ch), + Qrep_decomposition, Qnil, + Qnil, Qnil); + Lisp_Object map, ret; + if ( CONSP (seq) ) + { + Lisp_Object base = Fcar (seq); + + seq = Fcdr (seq); + if ( CHARP (base) && CONSP (seq) ) + { + Lisp_Object comb = Fcar (seq); + + if ( CHARP (comb) ) + { + char_encode_utf8 (str, XCHAR (base), dst, flags); + char_encode_utf8 (str, XCHAR (comb), dst, flags); + return; + } + } + } + + map = CODING_SYSTEM_ISO2022_INITIAL_CHARSET (str->codesys, 1); if ( !NILP (map) && INTP (ret = Fchar_feature (make_char (ch), map, Qnil,