changeset 32401:be53a078f4e2

(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
author Kenichi Handa <handa@m17n.org>
date Thu, 12 Oct 2000 05:22:46 +0000
parents 7ae01ec91cb3
children b8defc3b27e2
files src/xterm.c
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Thu Oct 12 05:22:27 2000 +0000
+++ b/src/xterm.c	Thu Oct 12 05:22:46 2000 +0000
@@ -1798,6 +1798,17 @@
       int font_not_found_p;
       struct font_info *font_info;
       int boff;			/* baseline offset */
+      /* We may change it->multibyte_p upon unibyte<->multibyte
+	 conversion.  So, save the current value now and restore it
+	 later.
+
+	 Note: It seems that we don't have to record multibyte_p in
+	 struct glyph because the character code itself tells if or
+	 not the character is multibyte.  Thus, in the future, we must
+	 consider eliminating the field `multibyte_p' in the struct
+	 glyph.
+      */
+      int saved_multibyte_p = it->multibyte_p;
 
       /* Maybe translate single-byte characters to multibyte, or the
 	 other way.  */
@@ -1810,6 +1821,7 @@
 		  || !NILP (Vnonascii_translation_table)))
 	    {
 	      it->char_to_display = unibyte_char_to_multibyte (it->c);
+	      it->multibyte_p = 1;
 	      it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display);
 	      face = FACE_FROM_ID (it->f, it->face_id);
 	    }
@@ -1817,6 +1829,7 @@
 		   && !it->multibyte_p)
 	    {
 	      it->char_to_display = multibyte_char_to_unibyte (it->c, Qnil);
+	      it->multibyte_p = 0;
 	      it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display);
 	      face = FACE_FROM_ID (it->f, it->face_id);
 	    }
@@ -2016,6 +2029,7 @@
 	  if (it->glyph_row)
 	    x_append_glyph (it);
 	}
+      it->multibyte_p = saved_multibyte_p;
     }
   else if (it->what == IT_COMPOSITION)
     {