summaryrefslogtreecommitdiff
path: root/src/charset.h
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2003-05-31 00:11:28 +0000
committerKenichi Handa <handa@m17n.org>2003-05-31 00:11:28 +0000
commit1efcd78f5ea5f366d094eea53509ed277eea873c (patch)
tree3d0fb92ac8fb75fe5ac2dc64ee451872198190f5 /src/charset.h
parenta2f3f87b0b934272db889b5c9393626b38b04c95 (diff)
downloademacs-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.h30
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