Mercurial > emacs
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: |