+2003-05-30 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (ccl_coding_driver): Set ccl->eight_bit_control
+ properly before calling ccl_driver.
+
+ * ccl.h (struct ccl_program) <eight_bit_control: Comment fixed.
+
+ * ccl.c (CCL_WRITE_CHAR): Increment extra_bytes only when it is
+ nonzero.
+ (ccl_driver): Initialize extra_bytes to ccl->eight_bit_control.
+ (setup_ccl_program): Initialize ccl->eight_bit_control to zero.
+
2003-05-14 Stefan Monnier <monnier@cs.yale.edu>
* keyboard.c (make_lispy_event): Apply modifiers to multibyte chars.
if (bytes == 1) \
{ \
*dst++ = (ch); \
- if ((ch) >= 0x80 && (ch) < 0xA0) \
+ if (extra_bytes && (ch) >= 0x80 && (ch) < 0xA0) \
/* We may have to convert this eight-bit char to \
multibyte form later. */ \
extra_bytes++; \
CCL_SUSPEND (CCL_STAT_SUSPEND_BY_DST); \
} while (0)
+
/* Encode one character CH to multibyte form and write to the current
output buffer. The output bytes always forms a valid multibyte
sequence. */
each of them will be converted to multibyte form of 2-byte
sequence. For that conversion, we remember how many more bytes
we must keep in DESTINATION in this variable. */
- int extra_bytes = 0;
+ int extra_bytes = ccl->eight_bit_control;
if (ic >= ccl->eof_ic)
ic = CCL_HEADER_MAIN;
ccl->ic = ic;
ccl->stack_idx = stack_idx;
ccl->prog = ccl_prog;
- ccl->eight_bit_control = (extra_bytes > 0);
+ ccl->eight_bit_control = (extra_bytes > 1);
if (consumed)
*consumed = src - source;
return (dst ? dst - destination : 0);
ccl->stack_idx = 0;
ccl->eol_type = CODING_EOL_LF;
ccl->suppress_error = 0;
+ ccl->eight_bit_control = 0;
return 0;
}