]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcmatch.c
Fix stupid bug in FcFontSort()
[fontconfig.git] / src / fcmatch.c
index 01420a630a906e5dc46239463d480b1e06b9d66e..1b9162b46cde6ee2fe4974185f17c54939aed9ba 100644 (file)
@@ -7,9 +7,9 @@
  * documentation for any purpose is hereby granted without fee, provided that
  * the above copyright notice appear in all copies and that both that
  * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
+ * documentation, and that the name of the author(s) not be used in
  * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
+ * specific, written prior permission.  The authors make no
  * representations about the suitability of this software for any purpose.  It
  * is provided "as is" without express or implied warranty.
  *
@@ -31,7 +31,7 @@ static double
 FcCompareNumber (FcValue *value1, FcValue *value2)
 {
     double  v1, v2, v;
-    
+
     switch (value1->type) {
     case FcTypeInteger:
        v1 = (double) value1->u.i;
@@ -61,16 +61,16 @@ FcCompareNumber (FcValue *value1, FcValue *value2)
 static double
 FcCompareString (FcValue *v1, FcValue *v2)
 {
-    return (double) FcStrCmpIgnoreCase (fc_value_string(v1), fc_value_string(v2)) != 0;
+    return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0;
 }
 
 static double
 FcCompareFamily (FcValue *v1, FcValue *v2)
 {
-    /* rely on the guarantee in FcPatternAddWithBinding that
+    /* rely on the guarantee in FcPatternObjectAddWithBinding that
      * families are always FcTypeString. */
-    const FcChar8* v1_string = fc_value_string(v1);
-    const FcChar8* v2_string = fc_value_string(v2);
+    const FcChar8* v1_string = FcValueString(v1);
+    const FcChar8* v2_string = FcValueString(v2);
 
     if (FcToLower(*v1_string) != FcToLower(*v2_string) &&
        *v1_string != ' ' && *v2_string != ' ')
@@ -84,7 +84,7 @@ FcCompareLang (FcValue *v1, FcValue *v2)
 {
     FcLangResult    result;
     FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
-    
+
     switch (value1.type) {
     case FcTypeLangSet:
        switch (value2.type) {
@@ -92,7 +92,7 @@ FcCompareLang (FcValue *v1, FcValue *v2)
            result = FcLangSetCompare (value1.u.l, value2.u.l);
            break;
        case FcTypeString:
-           result = FcLangSetHasLang (value1.u.l, 
+           result = FcLangSetHasLang (value1.u.l,
                                       value2.u.s);
            break;
        default:
@@ -105,7 +105,7 @@ FcCompareLang (FcValue *v1, FcValue *v2)
            result = FcLangSetHasLang (value2.u.l, value1.u.s);
            break;
        case FcTypeString:
-           result = FcLangCompare (value1.u.s, 
+           result = FcLangCompare (value1.u.s,
                                    value2.u.s);
            break;
        default:
@@ -129,7 +129,7 @@ FcCompareLang (FcValue *v1, FcValue *v2)
 static double
 FcCompareBool (FcValue *v1, FcValue *v2)
 {
-    if (fc_storage_type(v2) != FcTypeBool || fc_storage_type(v1) != FcTypeBool)
+    if (v2->type != FcTypeBool || v1->type != FcTypeBool)
        return -1.0;
     return (double) v2->u.b != v1->u.b;
 }
@@ -137,7 +137,7 @@ FcCompareBool (FcValue *v1, FcValue *v2)
 static double
 FcCompareCharSet (FcValue *v1, FcValue *v2)
 {
-    return (double) FcCharSetSubtractCount (fc_value_charset(v1), fc_value_charset(v2));
+    return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2));
 }
 
 static double
@@ -184,72 +184,43 @@ typedef struct _FcMatcher {
  * each value, earlier values are more significant than
  * later values
  */
-static FcMatcher _FcMatchers [] = {
+static const FcMatcher _FcMatchers [] = {
     { FC_FOUNDRY_OBJECT,       FcCompareString,        0, 0 },
 #define MATCH_FOUNDRY      0
-#define MATCH_FOUNDRY_INDEX 0
-    
     { FC_CHARSET_OBJECT,       FcCompareCharSet,       1, 1 },
 #define MATCH_CHARSET      1
-#define MATCH_CHARSET_INDEX 1
-    
     { FC_FAMILY_OBJECT,        FcCompareFamily,        2, 4 },
 #define MATCH_FAMILY       2
-#define MATCH_FAMILY_STRONG_INDEX   2
-#define MATCH_FAMILY_WEAK_INDEX            4
-    
     { FC_LANG_OBJECT,          FcCompareLang,  3, 3 },
 #define MATCH_LANG         3
 #define MATCH_LANG_INDEX    3
-    
     { FC_SPACING_OBJECT,       FcCompareNumber,        5, 5 },
 #define MATCH_SPACING      4
-#define MATCH_SPACING_INDEX 5
-    
     { FC_PIXEL_SIZE_OBJECT,    FcCompareSize,  6, 6 },
 #define MATCH_PIXEL_SIZE    5
-#define MATCH_PIXEL_SIZE_INDEX 6
-    
     { FC_STYLE_OBJECT,         FcCompareString,        7, 7 },
 #define MATCH_STYLE        6
-#define MATCH_STYLE_INDEX   7
-    
     { FC_SLANT_OBJECT,         FcCompareNumber,        8, 8 },
 #define MATCH_SLANT        7
-#define MATCH_SLANT_INDEX   8
-    
     { FC_WEIGHT_OBJECT,                FcCompareNumber,        9, 9 },
 #define MATCH_WEIGHT       8
-#define MATCH_WEIGHT_INDEX  9
-    
     { FC_WIDTH_OBJECT,         FcCompareNumber,        10, 10 },
 #define MATCH_WIDTH        9
-#define MATCH_WIDTH_INDEX   10
-    
     { FC_DECORATIVE_OBJECT,    FcCompareBool,          11, 11 },
 #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     13
-
     { FC_OUTLINE_OBJECT,       FcCompareBool,          14, 14 },
 #define MATCH_OUTLINE              13
-#define MATCH_OUTLINE_INDEX        14
-
     { FC_FONTVERSION_OBJECT,   FcCompareNumber,        15, 15 },
 #define MATCH_FONTVERSION          14
-#define MATCH_FONTVERSION_INDEX            15
 };
 
 #define NUM_MATCH_VALUES    16
 
-static FcMatcher*
+static const FcMatcher*
 FcObjectToMatcher (FcObject object)
 {
     int        i;
@@ -305,7 +276,7 @@ FcCompareValueList (FcObject         object,
     FcValueListPtr  v1, v2;
     double         v, best, bestStrong, bestWeak;
     int                    j;
-    FcMatcher       *match = FcObjectToMatcher(object);
+    const FcMatcher *match = FcObjectToMatcher(object);
 
     if (!match)
     {
@@ -383,10 +354,10 @@ FcCompare (FcPattern      *pat,
           FcResult     *result)
 {
     int                    i, i1, i2;
-    
+
     for (i = 0; i < NUM_MATCH_VALUES; i++)
        value[i] = 0.0;
-    
+
     i1 = 0;
     i2 = 0;
     while (i1 < pat->num && i2 < fnt->num)
@@ -423,7 +394,7 @@ FcFontRenderPrepare (FcConfig           *config,
     FcPatternElt    *fe, *pe;
     FcValue        v;
     FcResult       result;
-    
+
     new = FcPatternCreate ();
     if (!new)
        return 0;
@@ -433,7 +404,7 @@ FcFontRenderPrepare (FcConfig           *config,
        pe = FcPatternObjectFindElt (pat, fe->object);
        if (pe)
        {
-           if (!FcCompareValueList (pe->object, FcPatternEltValues(pe), 
+           if (!FcCompareValueList (pe->object, FcPatternEltValues(pe),
                                     FcPatternEltValues(fe), &v, 0, &result))
            {
                FcPatternDestroy (new);
@@ -558,7 +529,7 @@ FcFontSetMatch (FcConfig    *config,
 
 FcPattern *
 FcFontMatch (FcConfig  *config,
-            FcPattern  *p, 
+            FcPattern  *p,
             FcResult   *result)
 {
     FcFontSet  *sets[2];
@@ -716,21 +687,21 @@ FcFontSetSort (FcConfig       *config,
     }
     if (!nnodes)
        goto bail0;
-    
+
     for (nPatternLang = 0;
         FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch;
         nPatternLang++)
        ;
        
     /* freed below */
-    nodes = malloc (nnodes * sizeof (FcSortNode) + 
+    nodes = malloc (nnodes * sizeof (FcSortNode) +
                    nnodes * sizeof (FcSortNode *) +
                    nPatternLang * sizeof (FcBool));
     if (!nodes)
        goto bail0;
     nodeps = (FcSortNode **) (nodes + nnodes);
     patternLangSat = (FcBool *) (nodeps + nnodes);
-    
+
     new = nodes;
     nodep = nodeps;
     for (set = 0; set < nsets; set++)
@@ -764,13 +735,13 @@ FcFontSetSort (FcConfig       *config,
     }
 
     nnodes = new - nodes;
-    
+
     qsort (nodeps, nnodes, sizeof (FcSortNode *),
           FcSortCompare);
-    
+
     for (i = 0; i < nPatternLang; i++)
        patternLangSat[i] = FcFalse;
-    
+
     for (f = 0; f < nnodes; f++)
     {
        FcBool  satisfies = FcFalse;
@@ -778,7 +749,7 @@ FcFontSetSort (FcConfig         *config,
         * If this node matches any language, go check
         * which ones and satisfy those entries
         */
-       if (nodeps[f]->score[MATCH_LANG_INDEX] < 200)
+       if (nodeps[f]->score[MATCH_LANG_INDEX] < 2000)
        {
            for (i = 0; i < nPatternLang; i++)
            {
@@ -843,7 +814,7 @@ bail0:
 
 FcFontSet *
 FcFontSort (FcConfig   *config,
-           FcPattern   *p, 
+           FcPattern   *p,
            FcBool      trim,
            FcCharSet   **csp,
            FcResult    *result)