changeset 51311:e723bcb43569

*** empty log message ***
author Kenichi Handa <handa@m17n.org>
date Wed, 28 May 2003 23:27:28 +0000
parents a8358d5d67b3
children b2f981020fdd
files src/ChangeLog src/coding.c
diffstat 2 files changed, 95 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed May 28 22:53:08 2003 +0000
+++ b/src/ChangeLog	Wed May 28 23:27:28 2003 +0000
@@ -1,3 +1,26 @@
+2003-05-29  Kenichi Handa  <handa@m17n.org>
+
+	* coding.c (decode_coding_iso2022): Pay attention to the byte
+	sequence of CTEXT extended segment, and retain those bytes as is.
+
+2003-05-28  Kenichi Handa  <handa@m17n.org>
+
+	* coding.c (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.
+
+	* coding.h (CODING_REPLACEMENT_CHARACTER): Renamed from
+	CODING_INHIBIT_CHARACTER_SUBSTITUTION.
+	(CODING_MODE_INHIBIT_UNENCODABLE_CHAR): New macro.
+
 2003-05-28  Richard M. Stallman  <rms@gnu.org>
 
 	* print.c (syms_of_print) <print-escape-nonascii>: Doc fix.
--- a/src/coding.c	Wed May 28 22:53:08 2003 +0000
+++ b/src/coding.c	Wed May 28 23:27:28 2003 +0000
@@ -2036,6 +2036,78 @@
 		}
 	      continue;
 
+	    case '%':
+	      if (COMPOSING_P (coding))
+		DECODE_COMPOSITION_END ('1');
+	      ONE_MORE_BYTE (c1);
+	      if (c1 == '/')
+		{
+		  /* CTEXT extended segment:
+		     ESC % / [0-4] M L --ENCODING-NAME-- \002 --BYTES--
+		     We keep these bytes as is for the moment.
+		     They may be decoded by post-read-conversion.  */
+		  int dim, M, L;
+		  int size, required;
+		  int produced_chars;
+		  
+		  ONE_MORE_BYTE (dim);
+		  ONE_MORE_BYTE (M);
+		  ONE_MORE_BYTE (L);
+		  size = ((M - 128) * 128) + (L - 128);
+		  required = 8 + size * 2;
+		  if (dst + required > (dst_bytes ? dst_end : src))
+		    goto label_end_of_loop;
+		  *dst++ = ISO_CODE_ESC;
+		  *dst++ = '%';
+		  *dst++ = '/';
+		  *dst++ = dim;
+		  produced_chars = 4;
+		  dst += CHAR_STRING (M, dst), produced_chars++;
+		  dst += CHAR_STRING (L, dst), produced_chars++;
+		  while (size-- > 0)
+		    {
+		      ONE_MORE_BYTE (c1);
+		      dst += CHAR_STRING (c1, dst), produced_chars++;
+		    }
+		  coding->produced_char += produced_chars;
+		}
+	      else if (c1 == 'G')
+		{
+		  unsigned char *d = dst;
+		  int produced_chars;
+
+		  /* XFree86 extension for embedding UTF-8 in CTEXT:
+		     ESC % G --UTF-8-BYTES-- ESC % @
+		     We keep these bytes as is for the moment.
+		     They may be decoded by post-read-conversion.  */
+		  if (d + 6 > (dst_bytes ? dst_end : src))
+		    goto label_end_of_loop;
+		  *d++ = ISO_CODE_ESC;
+		  *d++ = '%';
+		  *d++ = 'G';
+		  produced_chars = 3;
+		  while (d + 1 < (dst_bytes ? dst_end : src))
+		    {
+		      ONE_MORE_BYTE (c1);
+		      if (c1 == ISO_CODE_ESC
+			  && src + 1 < src_end
+			  && src[0] == '%'
+			  && src[1] == '@')
+			break;
+		      d += CHAR_STRING (c1, d), produced_chars++;
+		    }
+		  if (d + 3 > (dst_bytes ? dst_end : src))
+		    goto label_end_of_loop;
+		  *d++ = ISO_CODE_ESC;
+		  *d++ = '%';
+		  *d++ = '@';
+		  dst = d;
+		  coding->produced_char += produced_chars + 3;
+		}
+	      else
+		goto label_invalid_code;
+	      continue;
+
 	    default:
 	      if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION))
 		goto label_invalid_code;