From 2e10d25ce0c122f8a7048e21898344d7d9ec368b Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 9 Feb 2011 05:41:45 +0000 Subject: [PATCH] (Qrep_decomposition): New extern. (char_encode_utf8): Try to encode as combing sequence (or IVS). --- src/text-coding.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) 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, -- 1.7.10.4