emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r100469: Handle face-ignored-fonts


From: Kenichi Handa
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100469: Handle face-ignored-fonts
Date: Fri, 28 May 2010 15:46:28 +0900
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100469 [merge]
committer: Kenichi Handa <address@hidden>
branch nick: trunk
timestamp: Fri 2010-05-28 15:46:28 +0900
message:
  Handle face-ignored-fonts
modified:
  src/ChangeLog
  src/font.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-05-28 03:29:09 +0000
+++ b/src/ChangeLog     2010-05-28 06:45:43 +0000
@@ -1,3 +1,10 @@
+2010-05-28  Kenichi Handa  <address@hidden>
+
+       * font.c (font_delete_unmatched): Check Vface_ignored_fonts.
+       Don't sheck SPEC if it is nil.
+       (font_list_entities): Call font_delete_unmatched if
+       Vface_ignored_fonts is non-nil.
+
 2010-05-28  Glenn Morris  <address@hidden>
 
        * Makefile.in (LIBES): Remove $LOADLIBES, it is never set.

=== modified file 'src/font.c'
--- a/src/font.c        2010-05-14 03:47:38 +0000
+++ b/src/font.c        2010-05-28 06:42:43 +0000
@@ -2821,6 +2821,14 @@
 
 static Lisp_Object scratch_font_spec, scratch_font_prefer;
 
+/* Check each font-entity in VEC, and return a list of font-entities
+   that satisfy this condition:
+     (1) matches with SPEC and SIZE if SPEC is not nil, and
+     (2) doesn't match with any regexps in Vface_ignored_fonts (if non-nil).
+*/
+
+extern Lisp_Object Vface_ignored_fonts;
+
 Lisp_Object
 font_delete_unmatched (vec, spec, size)
      Lisp_Object vec, spec;
@@ -2833,6 +2841,29 @@
   for (val = Qnil, i = ASIZE (vec) - 1; i >= 0; i--)
     {
       entity = AREF (vec, i);
+      if (! NILP (Vface_ignored_fonts))
+       {
+         char name[256];
+         Lisp_Object tail, regexp;
+
+         if (font_unparse_xlfd (entity, 0, name, 256) >= 0)
+           {
+             for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail))
+               {
+                 regexp = XCAR (tail);
+                 if (STRINGP (regexp)
+                     && fast_c_string_match_ignore_case (regexp, name) >= 0)
+                   break;
+               }
+             if (CONSP (tail))
+               continue;
+           }
+       }
+      if (NILP (spec))
+       {
+         val = Fcons (entity, val);
+         continue;
+       }
       for (prop = FONT_WEIGHT_INDEX; prop < FONT_SIZE_INDEX; prop++)
        if (INTEGERP (AREF (spec, prop))
            && ((XINT (AREF (spec, prop)) >> 8)
@@ -2932,8 +2963,10 @@
            ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type);
            XSETCDR (cache, Fcons (Fcons (copy, val), XCDR (cache)));
          }
-       if (ASIZE (val) > 0 && need_filtering)
-         val = font_delete_unmatched (val, spec, size);
+       if (ASIZE (val) > 0
+           && (need_filtering
+               || ! NILP (Vface_ignored_fonts)))
+         val = font_delete_unmatched (val, need_filtering ? spec : Qnil, size);
        if (ASIZE (val) > 0)
          list = Fcons (val, list);
       }


reply via email to

[Prev in Thread] Current Thread [Next in Thread]