aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa1999-04-06 12:33:42 +0000
committerKenichi Handa1999-04-06 12:33:42 +0000
commit6076842800e60d758b460ccf9e98dbf891956682 (patch)
treefb83ab10395add078f2984755d0763dadf1ce9a9 /src
parenta54b7a82c84ea1c7d4d28b53abfe4e5bfe9e1011 (diff)
downloademacs-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.c31
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)
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)