Mercurial > emacs
comparison src/coding.c @ 51140:94d903190cee
(ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
of CODING_REPLACEMENT_CHARACTER.
(decode_coding_iso2022): If CODING_FLAG_ISO_SAFE, set
CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag in coding->mode, and
check this flag on encoding.
(encode_coding_sjis_big5): Check
CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag of coding->mode.
(Fset_terminal_coding_system_internal): Set
CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag in terminal_coding.mode
instead of setting CODING_FLAG_ISO_SAFE flag in
terminal_coding.flags.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 22 May 2003 05:53:23 +0000 |
parents | 269d016f45bd |
children | e610d367508d |
comparison
equal
deleted
inserted
replaced
51139:3d3ffeef8c92 | 51140:94d903190cee |
---|---|
2299 } while (0) | 2299 } while (0) |
2300 | 2300 |
2301 | 2301 |
2302 /* Instead of encoding character C, produce one or two `?'s. */ | 2302 /* Instead of encoding character C, produce one or two `?'s. */ |
2303 | 2303 |
2304 #define ENCODE_UNSAFE_CHARACTER(c) \ | 2304 #define ENCODE_UNSAFE_CHARACTER(c) \ |
2305 do { \ | 2305 do { \ |
2306 ENCODE_ISO_CHARACTER (CODING_INHIBIT_CHARACTER_SUBSTITUTION); \ | 2306 ENCODE_ISO_CHARACTER (CODING_REPLACEMENT_CHARACTER); \ |
2307 if (CHARSET_WIDTH (CHAR_CHARSET (c)) > 1) \ | 2307 if (CHARSET_WIDTH (CHAR_CHARSET (c)) > 1) \ |
2308 ENCODE_ISO_CHARACTER (CODING_INHIBIT_CHARACTER_SUBSTITUTION); \ | 2308 ENCODE_ISO_CHARACTER (CODING_REPLACEMENT_CHARACTER); \ |
2309 } while (0) | 2309 } while (0) |
2310 | 2310 |
2311 | 2311 |
2312 /* Produce designation and invocation codes at a place pointed by DST | 2312 /* Produce designation and invocation codes at a place pointed by DST |
2313 to use CHARSET. The element `spec.iso2022' of *CODING is updated. | 2313 to use CHARSET. The element `spec.iso2022' of *CODING is updated. |
2531 (within macro EMIT_BYTES). */ | 2531 (within macro EMIT_BYTES). */ |
2532 unsigned char *src_base; | 2532 unsigned char *src_base; |
2533 int c; | 2533 int c; |
2534 Lisp_Object translation_table; | 2534 Lisp_Object translation_table; |
2535 Lisp_Object safe_chars; | 2535 Lisp_Object safe_chars; |
2536 | |
2537 if (coding->flags & CODING_FLAG_ISO_SAFE) | |
2538 coding->mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR; | |
2536 | 2539 |
2537 safe_chars = coding_safe_chars (coding->symbol); | 2540 safe_chars = coding_safe_chars (coding->symbol); |
2538 | 2541 |
2539 if (NILP (Venable_character_translation)) | 2542 if (NILP (Venable_character_translation)) |
2540 translation_table = Qnil; | 2543 translation_table = Qnil; |
2599 ENCODE_COMPOSITION_RULE (c); | 2602 ENCODE_COMPOSITION_RULE (c); |
2600 coding->composition_rule_follows = 0; | 2603 coding->composition_rule_follows = 0; |
2601 } | 2604 } |
2602 else | 2605 else |
2603 { | 2606 { |
2604 if (coding->flags & CODING_FLAG_ISO_SAFE | 2607 if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR |
2605 && ! CODING_SAFE_CHAR_P (safe_chars, c)) | 2608 && ! CODING_SAFE_CHAR_P (safe_chars, c)) |
2606 ENCODE_UNSAFE_CHARACTER (c); | 2609 ENCODE_UNSAFE_CHARACTER (c); |
2607 else | 2610 else |
2608 ENCODE_ISO_CHARACTER (c); | 2611 ENCODE_ISO_CHARACTER (c); |
2609 if (coding->composing == COMPOSITION_WITH_RULE_ALTCHARS) | 2612 if (coding->composing == COMPOSITION_WITH_RULE_ALTCHARS) |
2668 else if (SINGLE_BYTE_CHAR_P (c)) | 2671 else if (SINGLE_BYTE_CHAR_P (c)) |
2669 { | 2672 { |
2670 *dst++ = c; | 2673 *dst++ = c; |
2671 coding->errors++; | 2674 coding->errors++; |
2672 } | 2675 } |
2673 else if (coding->flags & CODING_FLAG_ISO_SAFE | 2676 else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR |
2674 && ! CODING_SAFE_CHAR_P (safe_chars, c)) | 2677 && ! CODING_SAFE_CHAR_P (safe_chars, c)) |
2675 ENCODE_UNSAFE_CHARACTER (c); | 2678 ENCODE_UNSAFE_CHARACTER (c); |
2676 else | 2679 else |
2677 ENCODE_ISO_CHARACTER (c); | 2680 ENCODE_ISO_CHARACTER (c); |
2678 | 2681 |
3111 } | 3114 } |
3112 else if (charset == charset_katakana_jisx0201) | 3115 else if (charset == charset_katakana_jisx0201) |
3113 EMIT_ONE_BYTE (c1 | 0x80); | 3116 EMIT_ONE_BYTE (c1 | 0x80); |
3114 else if (charset == charset_latin_jisx0201) | 3117 else if (charset == charset_latin_jisx0201) |
3115 EMIT_ONE_BYTE (c1); | 3118 EMIT_ONE_BYTE (c1); |
3119 else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR) | |
3120 { | |
3121 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER); | |
3122 if (CHARSET_WIDTH (charset) > 1) | |
3123 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER); | |
3124 } | |
3116 else | 3125 else |
3117 /* There's no way other than producing the internal | 3126 /* There's no way other than producing the internal |
3118 codes as is. */ | 3127 codes as is. */ |
3119 EMIT_BYTES (src_base, src); | 3128 EMIT_BYTES (src_base, src); |
3120 } | 3129 } |
3122 { | 3131 { |
3123 if (charset == charset_big5_1 || charset == charset_big5_2) | 3132 if (charset == charset_big5_1 || charset == charset_big5_2) |
3124 { | 3133 { |
3125 ENCODE_BIG5 (charset, c1, c2, c1, c2); | 3134 ENCODE_BIG5 (charset, c1, c2, c1, c2); |
3126 EMIT_TWO_BYTES (c1, c2); | 3135 EMIT_TWO_BYTES (c1, c2); |
3136 } | |
3137 else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR) | |
3138 { | |
3139 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER); | |
3140 if (CHARSET_WIDTH (charset) > 1) | |
3141 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER); | |
3127 } | 3142 } |
3128 else | 3143 else |
3129 /* There's no way other than producing the internal | 3144 /* There's no way other than producing the internal |
3130 codes as is. */ | 3145 codes as is. */ |
3131 EMIT_BYTES (src_base, src); | 3146 EMIT_BYTES (src_base, src); |
7021 Lisp_Object coding_system; | 7036 Lisp_Object coding_system; |
7022 { | 7037 { |
7023 CHECK_SYMBOL (coding_system); | 7038 CHECK_SYMBOL (coding_system); |
7024 setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding); | 7039 setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding); |
7025 /* We had better not send unsafe characters to terminal. */ | 7040 /* We had better not send unsafe characters to terminal. */ |
7026 terminal_coding.flags |= CODING_FLAG_ISO_SAFE; | 7041 terminal_coding.mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR; |
7027 /* Character composition should be disabled. */ | 7042 /* Character composition should be disabled. */ |
7028 terminal_coding.composing = COMPOSITION_DISABLED; | 7043 terminal_coding.composing = COMPOSITION_DISABLED; |
7029 /* Error notification should be suppressed. */ | 7044 /* Error notification should be suppressed. */ |
7030 terminal_coding.suppress_error = 1; | 7045 terminal_coding.suppress_error = 1; |
7031 terminal_coding.src_multibyte = 1; | 7046 terminal_coding.src_multibyte = 1; |