From 05505664cf307615297a25b4f0a4a9c245e525c9 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 25 Sep 1997 12:25:01 +0000 Subject: [PATCH] (find_charset_in_str): Return also charsets in composite characters. --- src/charset.c | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/charset.c b/src/charset.c index edfab057549..c8665b49130 100644 --- a/src/charset.c +++ b/src/charset.c @@ -546,23 +546,53 @@ find_charset_in_str (str, len, charsets, table) Lisp_Object table; { int num = 0; + int cmpcharp = 0; + unsigned char str_work[4], *str_tmp; if (! CHAR_TABLE_P (table)) table = Qnil; while (len > 0) { - int bytes = BYTES_BY_CHAR_HEAD (*str); - int charset; + int bytes, charset; + if (*str == LEADING_CODE_COMPOSITION) + { + str++; + len--; + cmpcharp = 1; + } + else if (CHAR_HEAD_P (str)) + cmpcharp = 0; + + if (cmpcharp) + { + if (*str == 0xA0) + { + str++; + len--; + str_work[0] = *str & 0x7F; + } + else + { + bcopy (str, str_work, min (4, len)); + str_work[0] -= 0x20; + } + str_tmp = str_work; + } + else + str_tmp = str; + + bytes = BYTES_BY_CHAR_HEAD (*str_tmp); + if (NILP (table)) - charset = CHARSET_AT (str); + charset = CHARSET_AT (str_tmp); else { - int c, charset; + int c; unsigned char c1, c2; - SPLIT_STRING(str, bytes, charset, c1, c2); + SPLIT_STRING(str_tmp, bytes, charset, c1, c2); if ((c = unify_char (table, -1, charset, c1, c2)) >= 0) charset = CHAR_CHARSET (c); } -- 2.39.2