Mercurial > emacs
comparison src/coding.c @ 23116:6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
correctly. They are for SS2 and SS3 respectively.
(ccl_coding_driver): Fix previous change.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Thu, 27 Aug 1998 07:47:15 +0000 |
| parents | 20486aa49e7d |
| children | 7a72a7b8718c |
comparison
equal
deleted
inserted
replaced
| 23115:b992f7bb67d7 | 23116:6736da064f4a |
|---|---|
| 731 } | 731 } |
| 732 else | 732 else |
| 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. */ |
| 766 break; | 747 break; |
| 767 | 748 |
| 773 mask &= ~CODING_CATEGORY_MASK_ISO_7; | 754 mask &= ~CODING_CATEGORY_MASK_ISO_7; |
| 774 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT, charset)) | 755 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT, charset)) |
| 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 |
| 784 case ISO_CODE_SO: | 769 case ISO_CODE_SO: |
| 785 single_shifting = 0; | 770 single_shifting = 0; |
| 3621 { | 3606 { |
| 3622 struct ccl_program *ccl | 3607 struct ccl_program *ccl |
| 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)); |
| 3631 if (encodep) | 3615 if (encodep) |
| 3632 { | 3616 { |
