diff options
| author | Kenichi Handa | 1997-03-18 23:31:34 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1997-03-18 23:31:34 +0000 |
| commit | e57bca5d35f6a700d7f9162d17ef9bc1334ac17a (patch) | |
| tree | c28ba98c6e33340c7717f8adc3005437a6332dab /src | |
| parent | 81ba44e5ff6ee0f8c5a725dc515620043d515b29 (diff) | |
| download | emacs-e57bca5d35f6a700d7f9162d17ef9bc1334ac17a.tar.gz emacs-e57bca5d35f6a700d7f9162d17ef9bc1334ac17a.zip | |
(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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xdisp.c | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index 7384985dbc6..c9aa763edbb 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -2617,8 +2617,13 @@ copy_part_of_rope (f, to, s, from, len, face) | |||
| 2617 | if (! FRAME_TERMCAP_P (f)) | 2617 | if (! FRAME_TERMCAP_P (f)) |
| 2618 | while (n--) | 2618 | while (n--) |
| 2619 | { | 2619 | { |
| 2620 | int glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); | 2620 | GLYPH glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); |
| 2621 | int facecode; | 2621 | int facecode; |
| 2622 | unsigned int c = FAST_GLYPH_CHAR (glyph); | ||
| 2623 | |||
| 2624 | if (c > MAX_CHAR) | ||
| 2625 | /* For an invalid character code, use space. */ | ||
| 2626 | c = ' '; | ||
| 2622 | 2627 | ||
| 2623 | if (FAST_GLYPH_FACE (glyph) == 0) | 2628 | if (FAST_GLYPH_FACE (glyph) == 0) |
| 2624 | /* If GLYPH has no face code, use FACE. */ | 2629 | /* If GLYPH has no face code, use FACE. */ |
| @@ -2634,7 +2639,7 @@ copy_part_of_rope (f, to, s, from, len, face) | |||
| 2634 | } | 2639 | } |
| 2635 | 2640 | ||
| 2636 | if (to >= s) | 2641 | if (to >= s) |
| 2637 | *to = FAST_MAKE_GLYPH (FAST_GLYPH_CHAR (glyph), facecode); | 2642 | *to = FAST_MAKE_GLYPH (c, facecode); |
| 2638 | ++to; | 2643 | ++to; |
| 2639 | ++fp; | 2644 | ++fp; |
| 2640 | } | 2645 | } |
| @@ -2757,8 +2762,10 @@ display_text_line (w, start, vpos, hpos, taboffset, ovstr_done) | |||
| 2757 | : default_invis_vector); | 2762 | : default_invis_vector); |
| 2758 | 2763 | ||
| 2759 | GLYPH truncator = (dp == 0 || !INTEGERP (DISP_TRUNC_GLYPH (dp)) | 2764 | GLYPH truncator = (dp == 0 || !INTEGERP (DISP_TRUNC_GLYPH (dp)) |
| 2765 | || !GLYPH_CHAR_VALID_P (XINT (DISP_TRUNC_GLYPH (dp))) | ||
| 2760 | ? '$' : XINT (DISP_TRUNC_GLYPH (dp))); | 2766 | ? '$' : XINT (DISP_TRUNC_GLYPH (dp))); |
| 2761 | GLYPH continuer = (dp == 0 || !INTEGERP (DISP_CONTINUE_GLYPH (dp)) | 2767 | GLYPH continuer = (dp == 0 || !INTEGERP (DISP_CONTINUE_GLYPH (dp)) |
| 2768 | || !GLYPH_CHAR_VALID_P (XINT (DISP_CONTINUE_GLYPH (dp))) | ||
| 2762 | ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp))); | 2769 | ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp))); |
| 2763 | 2770 | ||
| 2764 | /* If 1, we must handle multibyte characters. */ | 2771 | /* If 1, we must handle multibyte characters. */ |
| @@ -3224,9 +3231,11 @@ display_text_line (w, start, vpos, hpos, taboffset, ovstr_done) | |||
| 3224 | else if (c < 0200 && ctl_arrow) | 3231 | else if (c < 0200 && ctl_arrow) |
| 3225 | { | 3232 | { |
| 3226 | if (p1 >= leftmargin) | 3233 | if (p1 >= leftmargin) |
| 3227 | *p1 = (fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) | 3234 | *p1 = (fix_glyph |
| 3228 | ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), | 3235 | (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) |
| 3229 | current_face) | 3236 | && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (dp))) |
| 3237 | ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), | ||
| 3238 | current_face) | ||
| 3230 | | rev_dir_bit); | 3239 | | rev_dir_bit); |
| 3231 | p1++; | 3240 | p1++; |
| 3232 | if (p1 >= leftmargin && p1 < endp) | 3241 | if (p1 >= leftmargin && p1 < endp) |
| @@ -3237,9 +3246,11 @@ display_text_line (w, start, vpos, hpos, taboffset, ovstr_done) | |||
| 3237 | { | 3246 | { |
| 3238 | /* C is not a multibyte character. */ | 3247 | /* C is not a multibyte character. */ |
| 3239 | if (p1 >= leftmargin) | 3248 | if (p1 >= leftmargin) |
| 3240 | *p1 = (fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) | 3249 | *p1 = (fix_glyph |
| 3241 | ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), | 3250 | (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) |
| 3242 | current_face) | 3251 | && GLYPH_CHAR_VALID_P (DISP_ESCAPE_GLYPH (dp)) |
| 3252 | ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), | ||
| 3253 | current_face) | ||
| 3243 | | rev_dir_bit); | 3254 | | rev_dir_bit); |
| 3244 | p1++; | 3255 | p1++; |
| 3245 | if (p1 >= leftmargin && p1 < endp) | 3256 | if (p1 >= leftmargin && p1 < endp) |
| @@ -4596,9 +4607,11 @@ display_string (w, vpos, string, length, hpos, truncate, | |||
| 4596 | else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow)) | 4607 | else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow)) |
| 4597 | { | 4608 | { |
| 4598 | if (p1 >= start) | 4609 | if (p1 >= start) |
| 4599 | *p1 = fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) | 4610 | *p1 = (fix_glyph |
| 4600 | ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), | 4611 | (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) |
| 4601 | 0); | 4612 | && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (dp))) |
| 4613 | ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), | ||
| 4614 | 0)); | ||
| 4602 | p1++; | 4615 | p1++; |
| 4603 | if (p1 >= start && p1 < end) | 4616 | if (p1 >= start && p1 < end) |
| 4604 | *p1 = c ^ 0100; | 4617 | *p1 = c ^ 0100; |
| @@ -4608,9 +4621,11 @@ display_string (w, vpos, string, length, hpos, truncate, | |||
| 4608 | { | 4621 | { |
| 4609 | /* C is a control character or a binary byte data. */ | 4622 | /* C is a control character or a binary byte data. */ |
| 4610 | if (p1 >= start) | 4623 | if (p1 >= start) |
| 4611 | *p1 = fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) | 4624 | *p1 = (fix_glyph |
| 4612 | ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), | 4625 | (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) |
| 4613 | 0); | 4626 | && GLYPH_CHAR_VALID_P (XINT (DISP_ESCAPE_GLYPH (dp))) |
| 4627 | ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), | ||
| 4628 | 0)); | ||
| 4614 | p1++; | 4629 | p1++; |
| 4615 | if (p1 >= start && p1 < end) | 4630 | if (p1 >= start && p1 < end) |
| 4616 | *p1 = (c >> 6) + '0'; | 4631 | *p1 = (c >> 6) + '0'; |