]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcmatch.c
Fix comparison of family names to ignore leading space properly
[fontconfig.git] / src / fcmatch.c
index f0410528e4c0edc42b8710a6dd5801ac243cc2d9..e46eefe87766e36535dbcfc077d1028101cae492 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $RCSId: xc/lib/fontconfig/src/fcmatch.c,v 1.20 2002/08/31 22:17:32 keithp Exp $
+ * fontconfig/src/fcmatch.c
  *
  * Copyright © 2000 Keith Packard
  *
@@ -72,7 +72,8 @@ FcCompareFamily (FcValue *v1, FcValue *v2)
     const FcChar8* v1_string = fc_value_string(v1);
     const FcChar8* v2_string = fc_value_string(v2);
 
-    if (FcToLower(*v1_string) != FcToLower(*v2_string))
+    if (FcToLower(*v1_string) != FcToLower(*v2_string) &&
+       *v1_string != ' ' && *v2_string != ' ')
        return 1.0;
 
     return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0;
@@ -226,17 +227,16 @@ static FcMatcher _FcMatchers [] = {
 #define MATCH_WIDTH_INDEX   10
     
     { FC_DECORATIVE_OBJECT,    FcCompareBool,          11, 11 },
-#define MATCH_DECORATIVE       11
-#define MATCH_DECORATIVE_INDEX 12
+#define MATCH_DECORATIVE       10
+#define MATCH_DECORATIVE_INDEX 11
 
     { FC_ANTIALIAS_OBJECT,     FcCompareBool,          12, 12 },
-    
 #define MATCH_ANTIALIAS                    11
 #define MATCH_ANTIALIAS_INDEX      12
     
     { FC_RASTERIZER_OBJECT,    FcCompareString,        13, 13 },
 #define MATCH_RASTERIZER           12
-#define MATCH_RASTERIZER_INDEX     12
+#define MATCH_RASTERIZER_INDEX     13
 
     { FC_OUTLINE_OBJECT,       FcCompareBool,          14, 14 },
 #define MATCH_OUTLINE              13
@@ -591,40 +591,40 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **cs, FcBool tri
     while (nnode--)
     {
        node = *n++;
-       if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) == 
-           FcResultMatch)
+
+       /*
+        * Only fetch node charset if we'd need it
+        */
+       if (trim || build_cs)
+       {
+           if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) !=
+               FcResultMatch)
+               continue;
+       }
+
+       /*
+        * If this font isn't a subset of the previous fonts,
+        * add it to the list
+        */
+       if (!trim || !*cs || !FcCharSetIsSubset (ncs, *cs))
        {
-           /*
-            * If this font isn't a subset of the previous fonts,
-            * add it to the list
-            */
-           if (!trim || !*cs || !FcCharSetIsSubset (ncs, *cs))
+           if (trim || build_cs)
            {
-                if (trim || build_cs)
-                {
-                    if (*cs)
-                    {
-                        ncs = FcCharSetUnion (ncs, *cs);
-                        if (!ncs)
-                            return FcFalse;
-                        FcCharSetDestroy (*cs);
-                    }
-                    else
-                        ncs = FcCharSetCopy (ncs);
-                    *cs = ncs;
-                }
-
-               FcPatternReference (node->pattern);
-               if (FcDebug () & FC_DBG_MATCHV)
-               {
-                   printf ("Add ");
-                   FcPatternPrint (node->pattern);
-               }
-               if (!FcFontSetAdd (fs, node->pattern))
-               {
-                   FcPatternDestroy (node->pattern);
+               *cs = FcCharSetMerge (*cs, ncs);
+               if (*cs == NULL)
                    return FcFalse;
-               }
+           }
+
+           FcPatternReference (node->pattern);
+           if (FcDebug () & FC_DBG_MATCHV)
+           {
+               printf ("Add ");
+               FcPatternPrint (node->pattern);
+           }
+           if (!FcFontSetAdd (fs, node->pattern))
+           {
+               FcPatternDestroy (node->pattern);
+               return FcFalse;
            }
        }
     }