diff options
author | Kenichi Handa <handa@m17n.org> | 1999-04-06 12:33:42 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 1999-04-06 12:33:42 +0000 |
commit | 6076842800e60d758b460ccf9e98dbf891956682 (patch) | |
tree | fb83ab10395add078f2984755d0763dadf1ce9a9 /src/ccl.c | |
parent | a54b7a82c84ea1c7d4d28b53abfe4e5bfe9e1011 (diff) | |
download | emacs-6076842800e60d758b460ccf9e98dbf891956682.tar.gz |
(ccl_driver) <CCL_ReadMultibyteChar2>: Fix bug of handling
a composite character by skipping its leading code.
<CCL_WriteMultibyteChar2>: Handle non-ascii single byte character
correctly.
Diffstat (limited to 'src/ccl.c')
-rw-r--r-- | src/ccl.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/ccl.c b/src/ccl.c index d00eef2c7cd..794632f6568 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -1097,6 +1097,7 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) case CCL_ReadMultibyteChar2: if (!src) CCL_INVALID_CMD; + do { if (src >= src_end) { @@ -1116,14 +1117,24 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) } else ccl->private_state = COMPOSING_NO_RULE_HEAD; + + continue; } - if (ccl->private_state != 0) + if (ccl->private_state != COMPOSING_NO) { /* composite character */ - if (*src < 0xA0) - ccl->private_state = 0; + if (i < 0xA0) + ccl->private_state = COMPOSING_NO; else { + if (COMPOSING_WITH_RULE_RULE == ccl->private_state) + { + ccl->private_state = COMPOSING_WITH_RULE_HEAD; + continue; + } + else if (COMPOSING_WITH_RULE_HEAD == ccl->private_state) + ccl->private_state = COMPOSING_WITH_RULE_RULE; + if (i == 0xA0) { if (src >= src_end) @@ -1132,16 +1143,9 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) } else i -= 0x20; - - if (COMPOSING_WITH_RULE_RULE == ccl->private_state) - { - ccl->private_state = COMPOSING_WITH_RULE_HEAD; - continue; - } - else if (COMPOSING_WITH_RULE_HEAD == ccl->private_state) - ccl->private_state = COMPOSING_WITH_RULE_RULE; } } + if (i < 0x80) { /* ASCII */ @@ -1188,7 +1192,8 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) reg[RRR] = CHARSET_ASCII; reg[rrr] = i; } - } while (0); + break; + } while (1); break; ccl_read_multibyte_character_suspend: @@ -1206,7 +1211,7 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) case CCL_WriteMultibyteChar2: i = reg[RRR]; /* charset */ if (i == CHARSET_ASCII) - i = reg[rrr] & 0x7F; + i = reg[rrr] & 0x8F; else if (i == CHARSET_COMPOSITION) i = MAKE_COMPOSITE_CHAR (reg[rrr]); else if (CHARSET_DIMENSION (i) == 1) |