From: Jan Djärv Date: Sun, 1 Sep 2013 09:59:19 +0000 (+0200) Subject: * fontset.c (face_for_char): Check char in the current face font first X-Git-Url: http://git.hcoop.net/bpt/emacs.git/commitdiff_plain/5b0891df61b20b9272ee304d3ed040babc3ba8e4 * fontset.c (face_for_char): Check char in the current face font first if HAVE_NS. Fixes: debbugs:15138 --- diff --git a/src/ChangeLog b/src/ChangeLog index b46ba5ba39..7c09394cbf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-09-01 Jan Djärv + + * fontset.c (face_for_char): Check char in the current face font first + if HAVE_NS (Bug#15138). + 2013-08-31 Martin Rudalics * window.c (temp_output_buffer_show): Make sure window returned diff --git a/src/fontset.c b/src/fontset.c index 0bf716bf1b..a6277b050d 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -944,6 +944,19 @@ face_for_char (struct frame *f, struct face *face, int c, int pos, Lisp_Object o if (ASCII_CHAR_P (c) || face->fontset < 0) return face->ascii_face->id; +#ifdef HAVE_NS + if (face->font) + { + /* Fonts often have characters in other scripts, like symbol, even if they + don't match script: symbol. So check if the character is present + in the current face first. Only enable for NS for now, but should + perhaps be general? */ + Lisp_Object font_object; + XSETFONT (font_object, face->font); + if (font_has_char (f, font_object, c)) return face->id; + } +#endif + eassert (fontset_id_valid_p (face->fontset)); fontset = FONTSET_FROM_ID (face->fontset); eassert (!BASE_FONTSET_P (fontset));