comparison src/coding.c @ 89042:2b9f8973f240

(coding_set_destination): Fix coding->destination for the case converting a region. (encode_coding_utf_8): Encode eight-bit chars as single byte. (encode_coding_object): Fix coding->dst_pos and coding->dst_pos_byte for the case converting a region.
author Kenichi Handa <handa@m17n.org>
date Wed, 21 Aug 2002 12:53:56 +0000
parents 3b05c02eebf2
children 88a9e962e183
comparison
equal deleted inserted replaced
89041:2ce9656d788b 89042:2b9f8973f240
922 coding_set_destination (coding) 922 coding_set_destination (coding)
923 struct coding_system *coding; 923 struct coding_system *coding;
924 { 924 {
925 if (BUFFERP (coding->dst_object)) 925 if (BUFFERP (coding->dst_object))
926 { 926 {
927 /* We are sure that coding->dst_pos_byte is before the gap of the
928 buffer. */
929 coding->destination = (BUF_BEG_ADDR (XBUFFER (coding->dst_object))
930 + coding->dst_pos_byte - 1);
931 if (coding->src_pos < 0) 927 if (coding->src_pos < 0)
932 coding->dst_bytes = (GAP_END_ADDR 928 {
933 - (coding->src_bytes - coding->consumed) 929 coding->destination = BEG_ADDR + coding->dst_pos_byte - 1;
934 - coding->destination); 930 coding->dst_bytes = (GAP_END_ADDR
931 - (coding->src_bytes - coding->consumed)
932 - coding->destination);
933 }
935 else 934 else
936 coding->dst_bytes = (BUF_GAP_END_ADDR (XBUFFER (coding->dst_object)) 935 {
937 - coding->destination); 936 /* We are sure that coding->dst_pos_byte is before the gap
937 of the buffer. */
938 coding->destination = (BUF_BEG_ADDR (XBUFFER (coding->dst_object))
939 + coding->dst_pos_byte - 1);
940 coding->dst_bytes = (BUF_GAP_END_ADDR (XBUFFER (coding->dst_object))
941 - coding->destination);
942 }
938 } 943 }
939 else 944 else
940 /* Otherwise, the destination is C string and is never relocated 945 /* Otherwise, the destination is C string and is never relocated
941 automatically. Thus we don't have to update anything. */ 946 automatically. Thus we don't have to update anything. */
942 ; 947 ;
1221 { 1226 {
1222 unsigned char str[MAX_MULTIBYTE_LENGTH], *p, *pend = str; 1227 unsigned char str[MAX_MULTIBYTE_LENGTH], *p, *pend = str;
1223 1228
1224 ASSURE_DESTINATION (safe_room); 1229 ASSURE_DESTINATION (safe_room);
1225 c = *charbuf++; 1230 c = *charbuf++;
1226 CHAR_STRING_ADVANCE (c, pend); 1231 if (CHAR_BYTE8_P (c))
1227 for (p = str; p < pend; p++) 1232 {
1228 EMIT_ONE_BYTE (*p); 1233 c = CHAR_TO_BYTE8 (c);
1234 EMIT_ONE_BYTE (c);
1235 }
1236 else
1237 {
1238 CHAR_STRING_ADVANCE (c, pend);
1239 for (p = str; p < pend; p++)
1240 EMIT_ONE_BYTE (*p);
1241 }
1229 } 1242 }
1230 } 1243 }
1231 else 1244 else
1232 { 1245 {
1233 int safe_room = MAX_MULTIBYTE_LENGTH; 1246 int safe_room = MAX_MULTIBYTE_LENGTH;
6113 } 6126 }
6114 6127
6115 if (BUFFERP (dst_object)) 6128 if (BUFFERP (dst_object))
6116 { 6129 {
6117 coding->dst_object = dst_object; 6130 coding->dst_object = dst_object;
6118 coding->dst_pos = BUF_PT (XBUFFER (dst_object)); 6131 if (EQ (src_object, dst_object))
6119 coding->dst_pos_byte = BUF_PT_BYTE (XBUFFER (dst_object)); 6132 {
6133 coding->dst_pos = from;
6134 coding->dst_pos_byte = from_byte;
6135 }
6136 else
6137 {
6138 coding->dst_pos = BUF_PT (XBUFFER (dst_object));
6139 coding->dst_pos_byte = BUF_PT_BYTE (XBUFFER (dst_object));
6140 }
6120 coding->dst_multibyte 6141 coding->dst_multibyte
6121 = ! NILP (XBUFFER (dst_object)->enable_multibyte_characters); 6142 = ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
6122 } 6143 }
6123 else if (EQ (dst_object, Qt)) 6144 else if (EQ (dst_object, Qt))
6124 { 6145 {