Mercurial > emacs
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) {