diff options
| author | Kenichi Handa | 1998-08-27 07:47:15 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1998-08-27 07:47:15 +0000 |
| commit | ae9ff118cbc0114e3e3522626e54fcde22b05d12 (patch) | |
| tree | bdf5e450a83e5be6058194178d6dea8d8c8c70fa /src/coding.c | |
| parent | 71f8198a32ea19add5ed5af1f3cf882c4a6822ce (diff) | |
| download | emacs-ae9ff118cbc0114e3e3522626e54fcde22b05d12.tar.gz emacs-ae9ff118cbc0114e3e3522626e54fcde22b05d12.zip | |
(detect_coding_iso2022): Handle ESC N and ESC O
correctly. They are for SS2 and SS3 respectively.
(ccl_coding_driver): Fix previous change.
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 38 |
1 files changed, 11 insertions, 27 deletions
diff --git a/src/coding.c b/src/coding.c index dba64143bdb..89e82678a2d 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -733,33 +733,14 @@ detect_coding_iso2022 (src, src_end) | |||
| 733 | /* Invalid designation sequence. Just ignore. */ | 733 | /* Invalid designation sequence. Just ignore. */ |
| 734 | break; | 734 | break; |
| 735 | } | 735 | } |
| 736 | else if (c == 'N' || c == 'n') | 736 | else if (c == 'N' || c == 'O') |
| 737 | { | 737 | { |
| 738 | if (shift_out == 0 | 738 | /* ESC <Fe> for SS2 or SS3. */ |
| 739 | && (reg[1] >= 0 | 739 | mask &= CODING_CATEGORY_MASK_ISO_7_ELSE; |
| 740 | || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_7_ELSE) | ||
| 741 | || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_8_ELSE))) | ||
| 742 | { | ||
| 743 | /* Locking shift out. */ | ||
| 744 | mask &= ~CODING_CATEGORY_MASK_ISO_7BIT; | ||
| 745 | mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT; | ||
| 746 | shift_out = 1; | ||
| 747 | } | ||
| 748 | break; | ||
| 749 | } | ||
| 750 | else if (c == 'O' || c == 'o') | ||
| 751 | { | ||
| 752 | if (shift_out == 1) | ||
| 753 | { | ||
| 754 | /* Locking shift in. */ | ||
| 755 | mask &= ~CODING_CATEGORY_MASK_ISO_7BIT; | ||
| 756 | mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT; | ||
| 757 | shift_out = 0; | ||
| 758 | } | ||
| 759 | break; | 740 | break; |
| 760 | } | 741 | } |
| 761 | else if (c == '0' || c == '1' || c == '2') | 742 | else if (c == '0' || c == '1' || c == '2') |
| 762 | /* Start/end composition. Just ignore. */ | 743 | /* ESC <Fp> for start/end composition. Just ignore. */ |
| 763 | break; | 744 | break; |
| 764 | else | 745 | else |
| 765 | /* Invalid escape sequence. Just ignore. */ | 746 | /* Invalid escape sequence. Just ignore. */ |
| @@ -775,9 +756,13 @@ detect_coding_iso2022 (src, src_end) | |||
| 775 | mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT; | 756 | mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT; |
| 776 | else | 757 | else |
| 777 | mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT; | 758 | mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT; |
| 778 | if (! CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset)) | 759 | if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset)) |
| 760 | mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE; | ||
| 761 | else | ||
| 779 | mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE; | 762 | mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE; |
| 780 | if (! CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset)) | 763 | if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset)) |
| 764 | mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE; | ||
| 765 | else | ||
| 781 | mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE; | 766 | mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE; |
| 782 | break; | 767 | break; |
| 783 | 768 | ||
| @@ -3623,8 +3608,7 @@ ccl_coding_driver (coding, source, destination, src_bytes, dst_bytes, encodep) | |||
| 3623 | = encodep ? &coding->spec.ccl.encoder : &coding->spec.ccl.decoder; | 3608 | = encodep ? &coding->spec.ccl.encoder : &coding->spec.ccl.decoder; |
| 3624 | int result; | 3609 | int result; |
| 3625 | 3610 | ||
| 3626 | if (encodep) | 3611 | ccl->last_block = coding->mode & CODING_MODE_LAST_BLOCK; |
| 3627 | ccl->last_block = coding->mode & CODING_MODE_LAST_BLOCK; | ||
| 3628 | 3612 | ||
| 3629 | coding->produced = ccl_driver (ccl, source, destination, | 3613 | coding->produced = ccl_driver (ccl, source, destination, |
| 3630 | src_bytes, dst_bytes, &(coding->consumed)); | 3614 | src_bytes, dst_bytes, &(coding->consumed)); |