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;