aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c38
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));