comparison src/coding.c @ 51356:8da3b8a0ca4f

(DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags is nonzero, accept multibyte form of eight-bit-control chars. (decode_composition_emacs_mule): Likewise. (decode_coding_emacs_mule): Likewise. (encode_coding_emacs_mule): If coding->flags is nonzero, produce multibyte form of eight-bit-control chars.
author Kenichi Handa <handa@m17n.org>
date Sat, 31 May 2003 00:56:42 +0000
parents 389d833cd25e
children 3c675181c3d8
comparison
equal deleted inserted replaced
51355:7133cddab605 51356:8da3b8a0ca4f
710 sequence. If no valid character is found, set C to -1. */ 710 sequence. If no valid character is found, set C to -1. */
711 711
712 #define DECODE_EMACS_MULE_COMPOSITION_CHAR(c, p) \ 712 #define DECODE_EMACS_MULE_COMPOSITION_CHAR(c, p) \
713 do { \ 713 do { \
714 int bytes; \ 714 int bytes; \
715 \ 715 \
716 c = SAFE_ONE_MORE_BYTE (); \ 716 c = SAFE_ONE_MORE_BYTE (); \
717 if (c < 0) \ 717 if (c < 0) \
718 break; \ 718 break; \
719 if (CHAR_HEAD_P (c)) \ 719 if (CHAR_HEAD_P (c)) \
720 c = -1; \ 720 c = -1; \
741 c = SAFE_ONE_MORE_BYTE (); \ 741 c = SAFE_ONE_MORE_BYTE (); \
742 if (c < 0) \ 742 if (c < 0) \
743 break; \ 743 break; \
744 *p++ = c; \ 744 *p++ = c; \
745 } \ 745 } \
746 if (UNIBYTE_STR_AS_MULTIBYTE_P (p0, p - p0, bytes)) \ 746 if (UNIBYTE_STR_AS_MULTIBYTE_P (p0, p - p0, bytes) \
747 || (coding->flags /* We are recovering a file. */ \
748 && p0[0] == LEADING_CODE_8_BIT_CONTROL \
749 && ! CHAR_HEAD_P (p0[1]))) \
747 c = STRING_CHAR (p0, bytes); \ 750 c = STRING_CHAR (p0, bytes); \
748 else \ 751 else \
749 c = -1; \ 752 c = -1; \
750 } \ 753 } \
751 else \ 754 else \
845 c = COMPOSITION_ENCODE_RULE (gref, nref); 848 c = COMPOSITION_ENCODE_RULE (gref, nref);
846 } 849 }
847 else 850 else
848 { 851 {
849 int bytes; 852 int bytes;
850 if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes)) 853 if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes)
854 || (coding->flags /* We are recovering a file. */
855 && src[0] == LEADING_CODE_8_BIT_CONTROL
856 && ! CHAR_HEAD_P (src[1])))
851 c = STRING_CHAR (src, bytes); 857 c = STRING_CHAR (src, bytes);
852 else 858 else
853 c = *src, bytes = 1; 859 c = *src, bytes = 1;
854 src += bytes; 860 src += bytes;
855 } 861 }
999 } 1005 }
1000 bytes = CHAR_STRING (*src, tmp); 1006 bytes = CHAR_STRING (*src, tmp);
1001 p = tmp; 1007 p = tmp;
1002 src++; 1008 src++;
1003 } 1009 }
1004 else if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes)) 1010 else if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes)
1011 || (coding->flags /* We are recovering a file. */
1012 && src[0] == LEADING_CODE_8_BIT_CONTROL
1013 && ! CHAR_HEAD_P (src[1])))
1005 { 1014 {
1006 p = src; 1015 p = src;
1007 src += bytes; 1016 src += bytes;
1008 } 1017 }
1009 else 1018 else
1130 EMIT_TWO_BYTES ('\r', c); 1139 EMIT_TWO_BYTES ('\r', c);
1131 else 1140 else
1132 EMIT_ONE_BYTE ('\r'); 1141 EMIT_ONE_BYTE ('\r');
1133 } 1142 }
1134 else if (SINGLE_BYTE_CHAR_P (c)) 1143 else if (SINGLE_BYTE_CHAR_P (c))
1135 EMIT_ONE_BYTE (c); 1144 {
1145 if (coding->flags && ! ASCII_BYTE_P (c))
1146 {
1147 /* As we are auto saving, retain the multibyte form for
1148 8-bit chars. */
1149 unsigned char buf[MAX_MULTIBYTE_LENGTH];
1150 int bytes = CHAR_STRING (c, buf);
1151
1152 if (bytes == 1)
1153 EMIT_ONE_BYTE (buf[0]);
1154 else
1155 EMIT_TWO_BYTES (buf[0], buf[1]);
1156 }
1157 else
1158 EMIT_ONE_BYTE (c);
1159 }
1136 else 1160 else
1137 EMIT_BYTES (src_base, src); 1161 EMIT_BYTES (src_base, src);
1138 coding->consumed_char++; 1162 coding->consumed_char++;
1139 } 1163 }
1140 label_end_of_loop: 1164 label_end_of_loop: