Commit 0eecad43 authored by Kenichi Handa's avatar Kenichi Handa
Browse files

(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.
parent cbb76662
...@@ -2301,11 +2301,11 @@ decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes) ...@@ -2301,11 +2301,11 @@ decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
/* Instead of encoding character C, produce one or two `?'s. */ /* Instead of encoding character C, produce one or two `?'s. */
#define ENCODE_UNSAFE_CHARACTER(c) \ #define ENCODE_UNSAFE_CHARACTER(c) \
do { \ do { \
ENCODE_ISO_CHARACTER (CODING_INHIBIT_CHARACTER_SUBSTITUTION); \ ENCODE_ISO_CHARACTER (CODING_REPLACEMENT_CHARACTER); \
if (CHARSET_WIDTH (CHAR_CHARSET (c)) > 1) \ if (CHARSET_WIDTH (CHAR_CHARSET (c)) > 1) \
ENCODE_ISO_CHARACTER (CODING_INHIBIT_CHARACTER_SUBSTITUTION); \ ENCODE_ISO_CHARACTER (CODING_REPLACEMENT_CHARACTER); \
} while (0) } while (0)
...@@ -2534,6 +2534,9 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes) ...@@ -2534,6 +2534,9 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
Lisp_Object translation_table; Lisp_Object translation_table;
Lisp_Object safe_chars; Lisp_Object safe_chars;
if (coding->flags & CODING_FLAG_ISO_SAFE)
coding->mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
safe_chars = coding_safe_chars (coding->symbol); safe_chars = coding_safe_chars (coding->symbol);
if (NILP (Venable_character_translation)) if (NILP (Venable_character_translation))
...@@ -2601,7 +2604,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes) ...@@ -2601,7 +2604,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
} }
else else
{ {
if (coding->flags & CODING_FLAG_ISO_SAFE if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR
&& ! CODING_SAFE_CHAR_P (safe_chars, c)) && ! CODING_SAFE_CHAR_P (safe_chars, c))
ENCODE_UNSAFE_CHARACTER (c); ENCODE_UNSAFE_CHARACTER (c);
else else
...@@ -2670,7 +2673,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes) ...@@ -2670,7 +2673,7 @@ encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
*dst++ = c; *dst++ = c;
coding->errors++; coding->errors++;
} }
else if (coding->flags & CODING_FLAG_ISO_SAFE else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR
&& ! CODING_SAFE_CHAR_P (safe_chars, c)) && ! CODING_SAFE_CHAR_P (safe_chars, c))
ENCODE_UNSAFE_CHARACTER (c); ENCODE_UNSAFE_CHARACTER (c);
else else
...@@ -3113,6 +3116,12 @@ encode_coding_sjis_big5 (coding, source, destination, ...@@ -3113,6 +3116,12 @@ encode_coding_sjis_big5 (coding, source, destination,
EMIT_ONE_BYTE (c1 | 0x80); EMIT_ONE_BYTE (c1 | 0x80);
else if (charset == charset_latin_jisx0201) else if (charset == charset_latin_jisx0201)
EMIT_ONE_BYTE (c1); EMIT_ONE_BYTE (c1);
else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR)
{
EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
if (CHARSET_WIDTH (charset) > 1)
EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
}
else else
/* There's no way other than producing the internal /* There's no way other than producing the internal
codes as is. */ codes as is. */
...@@ -3125,6 +3134,12 @@ encode_coding_sjis_big5 (coding, source, destination, ...@@ -3125,6 +3134,12 @@ encode_coding_sjis_big5 (coding, source, destination,
ENCODE_BIG5 (charset, c1, c2, c1, c2); ENCODE_BIG5 (charset, c1, c2, c1, c2);
EMIT_TWO_BYTES (c1, c2); EMIT_TWO_BYTES (c1, c2);
} }
else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR)
{
EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
if (CHARSET_WIDTH (charset) > 1)
EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
}
else else
/* There's no way other than producing the internal /* There's no way other than producing the internal
codes as is. */ codes as is. */
...@@ -7023,7 +7038,7 @@ DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_intern ...@@ -7023,7 +7038,7 @@ DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_intern
CHECK_SYMBOL (coding_system); CHECK_SYMBOL (coding_system);
setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding); setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding);
/* We had better not send unsafe characters to terminal. */ /* We had better not send unsafe characters to terminal. */
terminal_coding.flags |= CODING_FLAG_ISO_SAFE; terminal_coding.mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
/* Character composition should be disabled. */ /* Character composition should be disabled. */
terminal_coding.composing = COMPOSITION_DISABLED; terminal_coding.composing = COMPOSITION_DISABLED;
/* Error notification should be suppressed. */ /* Error notification should be suppressed. */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment