]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_produce_glyphs): Handle unibyte_display_via_language_environment
authorKenichi Handa <handa@m17n.org>
Thu, 12 Oct 2000 05:22:46 +0000 (05:22 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 12 Oct 2000 05:22:46 +0000 (05:22 +0000)
correctly.

src/xterm.c

index ff821edab1939adedffc9a6658cafead0deb09d6..ef707abfcfe2c5fa0a5177e7b3dfe73dec213df8 100644 (file)
@@ -1798,6 +1798,17 @@ x_produce_glyphs (it)
       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 @@ x_produce_glyphs (it)
                  || !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 @@ x_produce_glyphs (it)
                   && !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 @@ x_produce_glyphs (it)
          if (it->glyph_row)
            x_append_glyph (it);
        }
+      it->multibyte_p = saved_multibyte_p;
     }
   else if (it->what == IT_COMPOSITION)
     {