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 { |