]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcmatch.c
[int] Remove fc_value_* macros that did nothing other than renaming
[fontconfig.git] / src / fcmatch.c
index 556fffeaa85a6aba69d9819008c5a2fd90e4b0ad..aa84eda834c895ec13a7a8245d62cf60ea4de3a7 100644 (file)
@@ -13,9 +13,9 @@
  * representations about the suitability of this software for any purpose.  It
  * is provided "as is" without express or implied warranty.
  *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
@@ -61,7 +61,7 @@ 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
@@ -69,8 +69,8 @@ FcCompareFamily (FcValue *v1, FcValue *v2)
 {
     /* rely on the guarantee in FcPatternAddWithBinding 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 != ' ')
@@ -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)
     {
@@ -550,7 +521,10 @@ FcFontSetMatch (FcConfig    *config,
            return 0;
     }
     best = FcFontSetMatchInternal (config, sets, nsets, p, result);
-    return FcFontRenderPrepare (config, p, best);
+    if (best)
+       return FcFontRenderPrepare (config, p, best);
+    else
+       return NULL;
 }
 
 FcPattern *
@@ -575,7 +549,10 @@ FcFontMatch (FcConfig      *config,
        sets[nsets++] = config->fonts[FcSetApplication];
 
     best = FcFontSetMatchInternal (config, sets, nsets, p, result);
-    return FcFontRenderPrepare (config, p, best);
+    if (best)
+       return FcFontRenderPrepare (config, p, best);
+    else
+       return NULL;
 }
 
 typedef struct _FcSortNode {
@@ -600,38 +577,45 @@ FcSortCompare (const void *aa, const void *ab)
 }
 
 static FcBool
-FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **cs, FcBool trim, FcBool build_cs)
+FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim)
 {
-    FcCharSet  *ncs;
-    FcSortNode *node;
+    FcBool ret = FcFalse;
+    FcCharSet *cs;
+
+    cs = 0;
+    if (trim || csp)
+    {
+       cs = FcCharSetCreate ();
+       if (cs == NULL)
+           goto bail;
+    }
 
     while (nnode--)
     {
-       node = *n++;
+       FcSortNode      *node = *n++;
+       FcBool          adds_chars = FcFalse;
 
        /*
         * Only fetch node charset if we'd need it
         */
-       if (trim || build_cs)
+       if (cs)
        {
+           FcCharSet   *ncs;
+
            if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) !=
                FcResultMatch)
                continue;
+
+           if (!FcCharSetMerge (cs, ncs, &adds_chars))
+               goto bail;
        }
 
        /*
         * If this font isn't a subset of the previous fonts,
         * add it to the list
         */
-       if (!trim || !*cs || !FcCharSetIsSubset (ncs, *cs))
+       if (!trim || adds_chars)
        {
-           if (trim || build_cs)
-           {
-               *cs = FcCharSetMerge (*cs, ncs);
-               if (*cs == NULL)
-                   return FcFalse;
-           }
-
            FcPatternReference (node->pattern);
            if (FcDebug () & FC_DBG_MATCHV)
            {
@@ -641,11 +625,23 @@ FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **cs, FcBool tri
            if (!FcFontSetAdd (fs, node->pattern))
            {
                FcPatternDestroy (node->pattern);
-               return FcFalse;
+               goto bail;
            }
        }
     }
-    return FcTrue;
+    if (csp)
+    {
+       *csp = cs;
+       cs = 0;
+    }
+
+    ret = FcTrue;
+
+bail:
+    if (cs)
+       FcCharSetDestroy (cs);
+
+    return ret;
 }
 
 void
@@ -669,7 +665,6 @@ FcFontSetSort (FcConfig         *config,
     FcSortNode     **nodeps, **nodep;
     int                    nnodes;
     FcSortNode     *new;
-    FcCharSet      *cs;
     int                    set;
     int                    f;
     int                    i;
@@ -797,19 +792,9 @@ FcFontSetSort (FcConfig        *config,
     if (!ret)
        goto bail1;
 
-    cs = 0;
-
-    if (!FcSortWalk (nodeps, nnodes, ret, &cs, trim, (csp!=0)))
+    if (!FcSortWalk (nodeps, nnodes, ret, csp, trim))
        goto bail2;
 
-    if (csp)
-       *csp = cs;
-    else
-    {
-        if (cs)
-            FcCharSetDestroy (cs);
-    }
-
     free (nodes);
 
     if (FcDebug() & FC_DBG_MATCH)
@@ -820,8 +805,6 @@ FcFontSetSort (FcConfig         *config,
     return ret;
 
 bail2:
-    if (cs)
-       FcCharSetDestroy (cs);
     FcFontSetDestroy (ret);
 bail1:
     free (nodes);