diff options
| author | Kenichi Handa | 1999-04-06 12:33:42 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1999-04-06 12:33:42 +0000 |
| commit | 6076842800e60d758b460ccf9e98dbf891956682 (patch) | |
| tree | fb83ab10395add078f2984755d0763dadf1ce9a9 /src | |
| parent | a54b7a82c84ea1c7d4d28b53abfe4e5bfe9e1011 (diff) | |
| download | emacs-6076842800e60d758b460ccf9e98dbf891956682.tar.gz emacs-6076842800e60d758b460ccf9e98dbf891956682.zip | |
(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')
| -rw-r--r-- | src/ccl.c | 31 |
1 files changed, 18 insertions, 13 deletions
| @@ -1097,6 +1097,7 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) | |||
| 1097 | case CCL_ReadMultibyteChar2: | 1097 | case CCL_ReadMultibyteChar2: |
| 1098 | if (!src) | 1098 | if (!src) |
| 1099 | CCL_INVALID_CMD; | 1099 | CCL_INVALID_CMD; |
| 1100 | |||
| 1100 | do { | 1101 | do { |
| 1101 | if (src >= src_end) | 1102 | if (src >= src_end) |
| 1102 | { | 1103 | { |
| @@ -1116,14 +1117,24 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) | |||
| 1116 | } | 1117 | } |
| 1117 | else | 1118 | else |
| 1118 | ccl->private_state = COMPOSING_NO_RULE_HEAD; | 1119 | ccl->private_state = COMPOSING_NO_RULE_HEAD; |
| 1120 | |||
| 1121 | continue; | ||
| 1119 | } | 1122 | } |
| 1120 | if (ccl->private_state != 0) | 1123 | if (ccl->private_state != COMPOSING_NO) |
| 1121 | { | 1124 | { |
| 1122 | /* composite character */ | 1125 | /* composite character */ |
| 1123 | if (*src < 0xA0) | 1126 | if (i < 0xA0) |
| 1124 | ccl->private_state = 0; | 1127 | ccl->private_state = COMPOSING_NO; |
| 1125 | else | 1128 | else |
| 1126 | { | 1129 | { |
| 1130 | if (COMPOSING_WITH_RULE_RULE == ccl->private_state) | ||
| 1131 | { | ||
| 1132 | ccl->private_state = COMPOSING_WITH_RULE_HEAD; | ||
| 1133 | continue; | ||
| 1134 | } | ||
| 1135 | else if (COMPOSING_WITH_RULE_HEAD == ccl->private_state) | ||
| 1136 | ccl->private_state = COMPOSING_WITH_RULE_RULE; | ||
| 1137 | |||
| 1127 | if (i == 0xA0) | 1138 | if (i == 0xA0) |
| 1128 | { | 1139 | { |
| 1129 | if (src >= src_end) | 1140 | if (src >= src_end) |
| @@ -1132,16 +1143,9 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) | |||
| 1132 | } | 1143 | } |
| 1133 | else | 1144 | else |
| 1134 | i -= 0x20; | 1145 | i -= 0x20; |
| 1135 | |||
| 1136 | if (COMPOSING_WITH_RULE_RULE == ccl->private_state) | ||
| 1137 | { | ||
| 1138 | ccl->private_state = COMPOSING_WITH_RULE_HEAD; | ||
| 1139 | continue; | ||
| 1140 | } | ||
| 1141 | else if (COMPOSING_WITH_RULE_HEAD == ccl->private_state) | ||
| 1142 | ccl->private_state = COMPOSING_WITH_RULE_RULE; | ||
| 1143 | } | 1146 | } |
| 1144 | } | 1147 | } |
| 1148 | |||
| 1145 | if (i < 0x80) | 1149 | if (i < 0x80) |
| 1146 | { | 1150 | { |
| 1147 | /* ASCII */ | 1151 | /* ASCII */ |
| @@ -1188,7 +1192,8 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) | |||
| 1188 | reg[RRR] = CHARSET_ASCII; | 1192 | reg[RRR] = CHARSET_ASCII; |
| 1189 | reg[rrr] = i; | 1193 | reg[rrr] = i; |
| 1190 | } | 1194 | } |
| 1191 | } while (0); | 1195 | break; |
| 1196 | } while (1); | ||
| 1192 | break; | 1197 | break; |
| 1193 | 1198 | ||
| 1194 | ccl_read_multibyte_character_suspend: | 1199 | ccl_read_multibyte_character_suspend: |
| @@ -1206,7 +1211,7 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) | |||
| 1206 | case CCL_WriteMultibyteChar2: | 1211 | case CCL_WriteMultibyteChar2: |
| 1207 | i = reg[RRR]; /* charset */ | 1212 | i = reg[RRR]; /* charset */ |
| 1208 | if (i == CHARSET_ASCII) | 1213 | if (i == CHARSET_ASCII) |
| 1209 | i = reg[rrr] & 0x7F; | 1214 | i = reg[rrr] & 0x8F; |
| 1210 | else if (i == CHARSET_COMPOSITION) | 1215 | else if (i == CHARSET_COMPOSITION) |
| 1211 | i = MAKE_COMPOSITE_CHAR (reg[rrr]); | 1216 | i = MAKE_COMPOSITE_CHAR (reg[rrr]); |
| 1212 | else if (CHARSET_DIMENSION (i) == 1) | 1217 | else if (CHARSET_DIMENSION (i) == 1) |