* fontset.c (face_for_char): Check char in the current face font first
authorJan Djärv <jan.h.d@swipnet.se>
Sun, 1 Sep 2013 09:59:19 +0000 (11:59 +0200)
committerJan Djärv <jan.h.d@swipnet.se>
Sun, 1 Sep 2013 09:59:19 +0000 (11:59 +0200)
if HAVE_NS.

Fixes: debbugs:15138

src/ChangeLog
src/fontset.c

index b46ba5b..7c09394 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-01  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * fontset.c (face_for_char): Check char in the current face font first
+       if HAVE_NS (Bug#15138).
+
 2013-08-31  Martin Rudalics  <rudalics@gmx.at>
 
        * window.c (temp_output_buffer_show): Make sure window returned
index 0bf716b..a6277b0 100644 (file)
@@ -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));