aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.c
diff options
context:
space:
mode:
authorKenichi Handa2003-05-22 05:53:23 +0000
committerKenichi Handa2003-05-22 05:53:23 +0000
commit0eecad4333fc4bb4223e6c9b577e376a002aba48 (patch)
tree5011efe567881aeb3da7795401528adb017075c0 /src/coding.c
parentcbb76662ea2dfe92eb141bde926336f2cdc0be60 (diff)
downloademacs-0eecad4333fc4bb4223e6c9b577e376a002aba48.tar.gz
emacs-0eecad4333fc4bb4223e6c9b577e376a002aba48.zip
(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.
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/coding.c b/src/coding.c
index 2867a0dc233..b19ceda532e 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -2301,11 +2301,11 @@ decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
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
@@ -2534,6 +2534,9 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
2534 Lisp_Object translation_table; 2534 Lisp_Object translation_table;
2535 Lisp_Object safe_chars; 2535 Lisp_Object safe_chars;
2536 2536
2537 if (coding->flags & CODING_FLAG_ISO_SAFE)
2538 coding->mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
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))
@@ -2601,7 +2604,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
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
@@ -2670,7 +2673,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
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
@@ -3113,6 +3116,12 @@ encode_coding_sjis_big5 (coding, source, destination,
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. */
@@ -3125,6 +3134,12 @@ encode_coding_sjis_big5 (coding, source, destination,
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);
3127 } 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);
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. */
@@ -7023,7 +7038,7 @@ DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_intern
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. */