X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d6d9cbc15cbebfe466756a7a75601173c15287a2..09af58633c2a83b61dee86bcf3794122b101671a:/src/fontset.c diff --git a/src/fontset.c b/src/fontset.c index 15fdf9f41a..b9f6de33eb 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -453,7 +453,7 @@ reorder_font_vector (Lisp_Object font_group, struct font *font) } if (score_changed) - qsort (XVECTOR (vec)->u.contents, size, word_size, + qsort (XVECTOR (vec)->contents, size, word_size, fontset_compare_rfontdef); XSETCAR (font_group, make_number (charset_ordered_list_tick)); } @@ -899,42 +899,21 @@ free_face_fontset (struct frame *f, struct face *face) face->fontset = -1; } - -#if 0 -/* Return true if FACE is suitable for displaying character C. - Called from the macro FACE_SUITABLE_FOR_CHAR_P - when C is not an ASCII character. */ - -bool -face_suitable_for_char_p (struct face *face, int c) -{ - Lisp_Object fontset, rfont_def; - - fontset = FONTSET_FROM_ID (face->fontset); - rfont_def = fontset_font (fontset, c, NULL, -1); - return (VECTORP (rfont_def) - && INTEGERP (RFONT_DEF_FACE (rfont_def)) - && face->id == XINT (RFONT_DEF_FACE (rfont_def))); -} -#endif - - -/* Return ID of face suitable for displaying character C on frame F. - FACE must be realized for ASCII characters in advance. Called from - the macro FACE_FOR_CHAR. */ +/* Return ID of face suitable for displaying character C at buffer position + POS on frame F. FACE must be realized for ASCII characters in advance. + Called from the macro FACE_FOR_CHAR. */ int -face_for_char (struct frame *f, struct face *face, int c, int pos, Lisp_Object object) +face_for_char (struct frame *f, struct face *face, int c, + ptrdiff_t pos, Lisp_Object object) { Lisp_Object fontset, rfont_def, charset; int face_id; int id; - /* If face->fontset is negative (that happens when no font is found - for face), just return face->ascii_face because we can't do - anything. Perhaps, we should fix the callers to assure - that face->fontset is always valid. */ - if (ASCII_CHAR_P (c) || face->fontset < 0) + eassert (fontset_id_valid_p (face->fontset)); + + if (ASCII_CHAR_P (c) || CHAR_BYTE8_P (c)) return face->ascii_face->id; #ifdef HAVE_NS @@ -950,7 +929,6 @@ face_for_char (struct frame *f, struct face *face, int c, int pos, Lisp_Object o } #endif - eassert (fontset_id_valid_p (face->fontset)); fontset = FONTSET_FROM_ID (face->fontset); eassert (!BASE_FONTSET_P (fontset)); @@ -1005,7 +983,7 @@ face_for_char (struct frame *f, struct face *face, int c, int pos, Lisp_Object o Lisp_Object -font_for_char (struct face *face, int c, int pos, Lisp_Object object) +font_for_char (struct face *face, int c, ptrdiff_t pos, Lisp_Object object) { Lisp_Object fontset, rfont_def, charset; int id; @@ -1875,7 +1853,7 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, return Qnil; w = XWINDOW (window); f = XFRAME (w->frame); - face_id = face_at_buffer_position (w, pos, -1, -1, &dummy, + face_id = face_at_buffer_position (w, pos, &dummy, pos + 100, 0, -1); } if (! CHAR_VALID_P (c))