Mercurial > emacs
changeset 17179:9468df9944cc
(copy_part_of_rope): Declare glyph as type GLYPH. For a
invalid character code, use ' ' (space).
(display_string, display_text_line): Check validity of character
code before calling fix_glyph.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 18 Mar 1997 23:31:34 +0000 |
parents | 4173a7215c5b |
children | 364327df6e7c |
files | src/xdisp.c |
diffstat | 1 files changed, 29 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Tue Mar 18 23:31:34 1997 +0000 +++ b/src/xdisp.c Tue Mar 18 23:31:34 1997 +0000 @@ -2617,8 +2617,13 @@ if (! FRAME_TERMCAP_P (f)) while (n--) { - int glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); + GLYPH glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); int facecode; + unsigned int c = FAST_GLYPH_CHAR (glyph); + + if (c > MAX_CHAR) + /* For an invalid character code, use space. */ + c = ' '; if (FAST_GLYPH_FACE (glyph) == 0) /* If GLYPH has no face code, use FACE. */ @@ -2634,7 +2639,7 @@ } if (to >= s) - *to = FAST_MAKE_GLYPH (FAST_GLYPH_CHAR (glyph), facecode); + *to = FAST_MAKE_GLYPH (c, facecode); ++to; ++fp; } @@ -2757,8 +2762,10 @@ : default_invis_vector); GLYPH truncator = (dp == 0 || !INTEGERP (DISP_TRUNC_GLYPH (dp)) + || !GLYPH_CHAR_VALID_P (XINT (DISP_TRUNC_GLYPH (dp))) ? '$' : XINT (DISP_TRUNC_GLYPH (dp))); GLYPH continuer = (dp == 0 || !INTEGERP (DISP_CONTINUE_GLYPH (dp)) + || !GLYPH_CHAR_VALID_P (XINT (DISP_CONTINUE_GLYPH (dp))) ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp))); /* If 1, we must handle multibyte characters. */ @@ -3224,9 +3231,11 @@ else if (c < 0200 && ctl_arrow) { if (p1 >= leftmargin) - *p1 = (fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) - ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), - current_face) + *p1 = (fix_glyph + (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) + && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (dp))) + ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), + current_face) | rev_dir_bit); p1++; if (p1 >= leftmargin && p1 < endp) @@ -3237,9 +3246,11 @@ { /* C is not a multibyte character. */ if (p1 >= leftmargin) - *p1 = (fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) - ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), - current_face) + *p1 = (fix_glyph + (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) + && GLYPH_CHAR_VALID_P (DISP_ESCAPE_GLYPH (dp)) + ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), + current_face) | rev_dir_bit); p1++; if (p1 >= leftmargin && p1 < endp) @@ -4596,9 +4607,11 @@ else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow)) { if (p1 >= start) - *p1 = fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) - ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), - 0); + *p1 = (fix_glyph + (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) + && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (dp))) + ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), + 0)); p1++; if (p1 >= start && p1 < end) *p1 = c ^ 0100; @@ -4608,9 +4621,11 @@ { /* C is a control character or a binary byte data. */ if (p1 >= start) - *p1 = fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) - ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), - 0); + *p1 = (fix_glyph + (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) + && GLYPH_CHAR_VALID_P (XINT (DISP_ESCAPE_GLYPH (dp))) + ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), + 0)); p1++; if (p1 >= start && p1 < end) *p1 = (c >> 6) + '0';