diff options
author | Kenichi Handa <handa@m17n.org> | 2003-05-31 00:11:28 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 2003-05-31 00:11:28 +0000 |
commit | 1efcd78f5ea5f366d094eea53509ed277eea873c (patch) | |
tree | 3d0fb92ac8fb75fe5ac2dc64ee451872198190f5 /src/charset.h | |
parent | a2f3f87b0b934272db889b5c9393626b38b04c95 (diff) | |
download | emacs-1efcd78f5ea5f366d094eea53509ed277eea873c.tar.gz |
(VALID_LEADING_CODE_P): New macro.
(UNIBYTE_STR_AS_MULTIBYTE_P): Check more rigidly.
Diffstat (limited to 'src/charset.h')
-rw-r--r-- | src/charset.h | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/charset.h b/src/charset.h index 97b9801464e..fd8905e47d8 100644 --- a/src/charset.h +++ b/src/charset.h @@ -441,21 +441,29 @@ extern int width_by_char_head[256]; #endif /* not BYTE_COMBINING_DEBUG */ +#define VALID_LEADING_CODE_P(code) \ + (! NILP (CHARSET_TABLE_ENTRY (code))) + /* Return 1 iff the byte sequence at unibyte string STR (LENGTH bytes) is valid as a multibyte form. If valid, by a side effect, BYTES is set to the byte length of the multibyte form. */ -#define UNIBYTE_STR_AS_MULTIBYTE_P(str, length, bytes) \ - (((str)[0] < 0x80 || (str)[0] >= 0xA0) \ - ? ((bytes) = 1) \ - : (((bytes) = BYTES_BY_CHAR_HEAD ((str)[0])), \ - ((bytes) > 1 && (bytes) <= (length) \ - && (str)[0] != LEADING_CODE_8_BIT_CONTROL \ - && !CHAR_HEAD_P ((str)[1]) \ - && ((bytes) == 2 \ - || (!CHAR_HEAD_P ((str)[2]) \ - && ((bytes) == 3 \ - || !CHAR_HEAD_P ((str)[3]))))))) +#define UNIBYTE_STR_AS_MULTIBYTE_P(str, length, bytes) \ + (((str)[0] < 0x80 || (str)[0] >= 0xA0) \ + ? ((bytes) = 1) \ + : (((bytes) = BYTES_BY_CHAR_HEAD ((str)[0])), \ + ((bytes) <= (length) \ + && !CHAR_HEAD_P ((str)[1]) \ + && ((bytes) == 2 \ + ? (str)[0] != LEADING_CODE_8_BIT_CONTROL \ + : (!CHAR_HEAD_P ((str)[2]) \ + && ((bytes) == 3 \ + ? (((str)[0] != LEADING_CODE_PRIVATE_11 \ + && (str)[0] != LEADING_CODE_PRIVATE_12) \ + || VALID_LEADING_CODE_P (str[1])) \ + : (!CHAR_HEAD_P ((str)[3]) \ + && VALID_LEADING_CODE_P (str[1])))))))) + /* Return 1 iff the byte sequence at multibyte string STR is valid as a unibyte form. By a side effect, BYTES is set to the byte length |