emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs/src ftfont.c


From: Kenichi Handa
Subject: [Emacs-diffs] emacs/src ftfont.c
Date: Tue, 14 Jul 2009 11:55:03 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Kenichi Handa <handa>   09/07/14 11:55:03

Modified files:
        src            : ftfont.c 

Log message:
        (ftfont_spec_pattern): New arg langname.  Caller
        changed.
        (ftfont_list): Adjusted for the change of ftfont_spec_pattern.
        Reject a font who has adstyle property that is different from a
        langname derived from registry property.
        (ftfont_match): Adjusted for the change of ftfont_spec_pattern.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/ftfont.c?cvsroot=emacs&r1=1.57&r2=1.58

Patches:
Index: ftfont.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/ftfont.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -b -r1.57 -r1.58
--- ftfont.c    26 Jun 2009 06:15:54 -0000      1.57
+++ ftfont.c    14 Jul 2009 11:55:03 -0000      1.58
@@ -700,13 +700,15 @@
 }
 
 static FcPattern *ftfont_spec_pattern P_ ((Lisp_Object, char *,
-                                          struct OpenTypeSpec **));
+                                          struct OpenTypeSpec **,
+                                          char **langname));
 
 static FcPattern *
-ftfont_spec_pattern (spec, otlayout, otspec)
+ftfont_spec_pattern (spec, otlayout, otspec, langname)
      Lisp_Object spec;
      char *otlayout;
      struct OpenTypeSpec **otspec;
+     char **langname;
 {
   Lisp_Object tmp, extra;
   FcPattern *pattern = NULL;
@@ -744,7 +746,8 @@
       if (fc_charset_idx < 0)
        return NULL;
       charset = fc_charset_table[fc_charset_idx].fc_charset;
-      lang = (FcChar8 *) fc_charset_table[fc_charset_idx].lang;
+      *langname = fc_charset_table[fc_charset_idx].lang;
+      lang = (FcChar8 *) *langname;
       if (lang)
        {
          langset = FcLangSetCreate ();
@@ -876,6 +879,7 @@
   char otlayout[15];           /* For "otlayout:XXXX" */
   struct OpenTypeSpec *otspec = NULL;
   int spacing = -1;
+  char *langname = NULL;
 
   if (! fc_initialized)
     {
@@ -883,7 +887,7 @@
       fc_initialized = 1;
     }
 
-  pattern = ftfont_spec_pattern (spec, otlayout, &otspec);
+  pattern = ftfont_spec_pattern (spec, otlayout, &otspec, &langname);
   if (! pattern)
     return Qnil;
   if (FcPatternGetCharSet (pattern, FC_CHARSET, 0, &charset) != FcResultMatch)
@@ -1023,13 +1027,18 @@
          if (j == ASIZE (chars))
            continue;
        }
-      if (! NILP (adstyle))
+      if (! NILP (adstyle) || langname)
        {
          Lisp_Object this_adstyle = get_adstyle_property (fontset->fonts[i]);
 
-         if (NILP (this_adstyle)
+         if (! NILP (adstyle)
+             && (NILP (this_adstyle)
              || xstrcasecmp (SDATA (SYMBOL_NAME (adstyle)),
-                             SDATA (SYMBOL_NAME (this_adstyle))) != 0)
+                                 SDATA (SYMBOL_NAME (this_adstyle))) != 0))
+           continue;
+         if (langname
+             && ! NILP (this_adstyle)
+             && xstrcasecmp (langname, SDATA (SYMBOL_NAME (this_adstyle))))
            continue;
        }
       entity = ftfont_pattern_entity (fontset->fonts[i],
@@ -1062,6 +1071,7 @@
   FcResult result;
   char otlayout[15];           /* For "otlayout:XXXX" */
   struct OpenTypeSpec *otspec = NULL;
+  char *langname = NULL;
 
   if (! fc_initialized)
     {
@@ -1069,7 +1079,7 @@
       fc_initialized = 1;
     }
 
-  pattern = ftfont_spec_pattern (spec, otlayout, &otspec);
+  pattern = ftfont_spec_pattern (spec, otlayout, &otspec, &langname);
   if (! pattern)
     return Qnil;
 




reply via email to

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