# HG changeset patch # User Kenichi Handa # Date 904204035 0 # Node ID 6736da064f4a1409f3abc14113798f82e3096c53 # Parent b992f7bb67d7c97f4526a526a0a63b82d64fad76 (detect_coding_iso2022): Handle ESC N and ESC O correctly. They are for SS2 and SS3 respectively. (ccl_coding_driver): Fix previous change. diff -r b992f7bb67d7 -r 6736da064f4a src/coding.c --- a/src/coding.c Thu Aug 27 02:00:35 1998 +0000 +++ b/src/coding.c Thu Aug 27 07:47:15 1998 +0000 @@ -733,33 +733,14 @@ /* Invalid designation sequence. Just ignore. */ break; } - else if (c == 'N' || c == 'n') + else if (c == 'N' || c == 'O') { - if (shift_out == 0 - && (reg[1] >= 0 - || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_7_ELSE) - || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_8_ELSE))) - { - /* Locking shift out. */ - mask &= ~CODING_CATEGORY_MASK_ISO_7BIT; - mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT; - shift_out = 1; - } - break; - } - else if (c == 'O' || c == 'o') - { - if (shift_out == 1) - { - /* Locking shift in. */ - mask &= ~CODING_CATEGORY_MASK_ISO_7BIT; - mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT; - shift_out = 0; - } + /* ESC for SS2 or SS3. */ + mask &= CODING_CATEGORY_MASK_ISO_7_ELSE; break; } else if (c == '0' || c == '1' || c == '2') - /* Start/end composition. Just ignore. */ + /* ESC for start/end composition. Just ignore. */ break; else /* Invalid escape sequence. Just ignore. */ @@ -775,9 +756,13 @@ mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT; else mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT; - if (! CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset)) + if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset)) + mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE; + else mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE; - if (! CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset)) + if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset)) + mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE; + else mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE; break; @@ -3623,8 +3608,7 @@ = encodep ? &coding->spec.ccl.encoder : &coding->spec.ccl.decoder; int result; - if (encodep) - ccl->last_block = coding->mode & CODING_MODE_LAST_BLOCK; + ccl->last_block = coding->mode & CODING_MODE_LAST_BLOCK; coding->produced = ccl_driver (ccl, source, destination, src_bytes, dst_bytes, &(coding->consumed));