Mercurial > emacs
changeset 21443:3cb2644c8dd2
(display_text_line): Code for displaying a character by
octal form is modified.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 09 Apr 1998 05:40:23 +0000 |
parents | b598d28da979 |
children | 0cba6f211d7c |
files | src/xdisp.c |
diffstat | 1 files changed, 45 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Thu Apr 09 05:39:41 1998 +0000 +++ b/src/xdisp.c Thu Apr 09 05:40:23 1998 +0000 @@ -3353,8 +3353,6 @@ while (p1 < endp) { - int eat_following_binary_data; - if (pos >= pause) { int e_t_h; @@ -3739,61 +3737,56 @@ *p1 = MAKE_GLYPH (f, c ^ 0100, current_face) | rev_dir_bit; p1++; } - else if (len == 1) - { - /* C is not a multibyte character. */ - eat_following_binary_data = multibyte && BASE_LEADING_CODE_P (c); - - label_display_binary_data: - do { - if (p1 >= leftmargin && p1 < endp) - *p1 = (fix_glyph - (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) - && GLYPH_CHAR_VALID_P (XINT (DISP_ESCAPE_GLYPH (dp))) - ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), - current_face) - | rev_dir_bit); - p1++; - if (p1 >= leftmargin && p1 < endp) - *p1 = MAKE_GLYPH (f, (c >> 6) + '0', current_face) | rev_dir_bit; - p1++; - if (p1 >= leftmargin && p1 < endp) - *p1 = (MAKE_GLYPH (f, (7 & (c >> 3)) + '0', current_face) - | rev_dir_bit); - p1++; - if (p1 >= leftmargin && p1 < endp) - *p1 = MAKE_GLYPH (f, (7 & c) + '0', current_face) | rev_dir_bit; - p1++; - } while (eat_following_binary_data - && (pos_byte + len) < limit_byte - && ! CHAR_HEAD_P (*p) - && ((c = *p++), len++)); - } else { - /* C is a multibyte character. */ - int charset = CHAR_CHARSET (c); - int columns = (charset == CHARSET_COMPOSITION - ? cmpchar_table[COMPOSITE_CHAR_ID (c)]->width - : CHARSET_WIDTH (charset)); - GLYPH g = MAKE_GLYPH (f, c, current_face) | rev_dir_bit; - - while (columns--) + /* C is a multibyte character or a character to be displayed + by octral form. */ + int remaining_bytes = len; + + if (c >= 0400) { + /* C is a multibyte character. */ + int charset = CHAR_CHARSET (c); + int columns = (charset == CHARSET_COMPOSITION + ? cmpchar_table[COMPOSITE_CHAR_ID (c)]->width + : CHARSET_WIDTH (charset)); + GLYPH g = MAKE_GLYPH (f, c, current_face) | rev_dir_bit; + + while (columns--) + { + if (p1 >= leftmargin && p1 < endp) + *p1 = g, g |= GLYPH_MASK_PADDING; + p1++; + } + p1_wide_column_end = p1; + remaining_bytes -= CHARSET_BYTES (charset); + } + + while (remaining_bytes > 0) + { + c = *(p - remaining_bytes--); + if (p1 >= leftmargin && p1 < endp) - *p1 = g, g |= GLYPH_MASK_PADDING; + *p1 = (fix_glyph + (f, + (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) + && GLYPH_CHAR_VALID_P (XINT (DISP_ESCAPE_GLYPH (dp))) + ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), + current_face) + | rev_dir_bit); p1++; - } - - p1_wide_column_end = p1; - /* Check if binary data follows it. */ - if (pos_byte + len < limit_byte - && ! CHAR_HEAD_P (*p)) - { - eat_following_binary_data = 1; - c = *p++; - len++; - goto label_display_binary_data; + if (p1 >= leftmargin && p1 < endp) + *p1 = (MAKE_GLYPH (f, (c >> 6) + '0', current_face) + | rev_dir_bit); + p1++; + if (p1 >= leftmargin && p1 < endp) + *p1 = (MAKE_GLYPH (f, (7 & (c >> 3)) + '0', current_face) + | rev_dir_bit); + p1++; + if (p1 >= leftmargin && p1 < endp) + *p1 = (MAKE_GLYPH (f, (7 & c) + '0', current_face) + | rev_dir_bit); + p1++; } }