]> git.wh0rd.org - fontconfig.git/commitdiff
Move FC_BANK_DYNAMIC, FC_BANK_FIRST to internal header.
authorPatrick Lam <plam@MIT.EDU>
Thu, 24 Nov 2005 21:40:20 +0000 (21:40 +0000)
committerPatrick Lam <plam@MIT.EDU>
Thu, 24 Nov 2005 21:40:20 +0000 (21:40 +0000)
Check for type validity during FcPatternAddWithBinding, don't verify type
    in FcFontMatch, don't call FcCanonicalize here (which always does a
    deep copy).
reviewed by: plam

ChangeLog
fontconfig/fontconfig.h
src/fcint.h
src/fcmatch.c
src/fcpat.c

index bea96dde9392347746cb92d52f221412186a3a7d..2acd9c49ada1652660491260a14323d487ca6329 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2005-11-24  Dirk Mueller <dmueller@suse.com>
+       reviewed by: plam
+       
+        * src/fcint.h, fontconfig/fontconfig.h: 
+        
+       Move FC_BANK_DYNAMIC, FC_BANK_FIRST to internal header.
+
+        * src/fcpat.c, src/fcint.h, src/fcname.c:
+          
+       Check for type validity during FcPatternAddWithBinding, don't
+       verify type in FcFontMatch, don't call FcCanonicalize here
+        (which always does a deep copy).
+
 2005-11-24  Dirk Mueller  <dmueller@suse.com>
        reviewed by: plam
 
index 68b62d2512e346eea56ae446d2017af9e2aef4f8..aae60f44c4973d0fc9befa667404d75606a11ee0 100644 (file)
@@ -207,9 +207,6 @@ typedef struct _FcPattern   FcPattern;
 
 typedef struct _FcLangSet   FcLangSet;
 
-#define FC_BANK_DYNAMIC 0
-#define FC_BANK_FIRST 1
-
 typedef struct _FcValue {
     FcType     type;
     union {
index 1b545bca8d99323ce16ded7a099d1401ff584245..e20589ccdfbf87bd86f0945ce2730df2df4754c6 100644 (file)
 
 #define FC_MEM_NUM         30
 
+#define FC_BANK_DYNAMIC 0
+#define FC_BANK_FIRST 1
 #define FC_BANK_LANGS      0xfcfcfcfc
 
 typedef enum _FcValueBinding {
@@ -309,6 +311,7 @@ typedef struct _FcCaseFold {
 #define fc_value_string(v)  (((v)->type & FC_STORAGE_STATIC) ? ((FcChar8 *) v) + (v)->u.s_off : (v) -> u.s)
 #define fc_value_charset(v)  (((v)->type & FC_STORAGE_STATIC) ? (const FcCharSet *)(((char *) v) + (v)->u.c_off) : (v) -> u.c)
 #define fc_value_langset(v)  (((v)->type & FC_STORAGE_STATIC) ? (const FcLangSet *)(((char *) v) + (v)->u.l_off) : (v) -> u.l)
+#define fc_storage_type(v) ((v)->type & ~FC_STORAGE_STATIC)
 
 /*
  * The per-user ~/.fonts.cache-<version> file is loaded into
index 8b0bd014f4d8a10de9abbd1f163ea4b45bcf2557..b0d4bf8dd31cfa0fd21902e52d35b404d6f00fd7 100644 (file)
@@ -61,12 +61,7 @@ FcCompareNumber (const char *object, FcValue *value1, FcValue *value2)
 static double
 FcCompareString (const char *object, FcValue *v1, FcValue *v2)
 {
-    FcValue value1, value2;
-    if ((v2->type & ~FC_STORAGE_STATIC) != FcTypeString || 
-        (v1->type & ~FC_STORAGE_STATIC) != FcTypeString)
-       return -1.0;
-    value1 = FcValueCanonicalize(v1); value2 = FcValueCanonicalize(v2);
-    return (double) FcStrCmpIgnoreCase (value1.u.s, value2.u.s) != 0;
+    return (double) FcStrCmpIgnoreCase (fc_value_string(v1), fc_value_string(v2)) != 0;
 }
 
 static double
@@ -74,9 +69,6 @@ FcCompareFamily (const char *object, FcValue *v1, FcValue *v2)
 {
     /* rely on the guarantee in FcPatternAddWithBinding that
      * families are always FcTypeString. */
-
-    /* assert ((v2->type & ~FC_STORAGE_STATIC) == FcTypeString && 
-       (v1->type & ~FC_STORAGE_STATIC) == FcTypeString); */
     const FcChar8* v1_string = fc_value_string(v1);
     const FcChar8* v2_string = fc_value_string(v2);
 
@@ -134,21 +126,17 @@ FcCompareLang (const char *object, FcValue *v1, FcValue *v2)
 }
 
 static double
-FcCompareBool (const char *object, FcValue *value1, FcValue *value2)
+FcCompareBool (const char *object, FcValue *v1, FcValue *v2)
 {
-    if (value2->type != FcTypeBool || value1->type != FcTypeBool)
+    if (fc_storage_type(v2) != FcTypeBool || fc_storage_type(v1) != FcTypeBool)
        return -1.0;
-    return (double) value2->u.b != value1->u.b;
+    return (double) v2->u.b != v1->u.b;
 }
 
 static double
 FcCompareCharSet (const char *object, FcValue *v1, FcValue *v2)
 {
-    FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
-    
-    if (value2.type != FcTypeCharSet || value1.type != FcTypeCharSet)
-       return -1.0;
-    return (double) FcCharSetSubtractCount (value1.u.c, value2.u.c);
+    return (double) FcCharSetSubtractCount (fc_value_charset(v1), fc_value_charset(v2));
 }
 
 static double
index c37936f397133993fbaac14eb38382461551b9cb..ad6afc0065b0e6bb27061bc444ad58410f82be40 100644 (file)
@@ -855,7 +855,8 @@ FcPatternAddWithBinding  (FcPattern     *p,
 {
     FcPatternElt   *e;
     FcValueListPtr new, *prev;
-    FcValueList *  newp;
+    FcValueList    *newp;
+    FcObjectPtr    objectPtr;
 
     if (p->ref == FC_REF_CONSTANT)
        goto bail0;
@@ -872,11 +873,22 @@ FcPatternAddWithBinding  (FcPattern           *p,
     if (value.type == FcTypeVoid)
        goto bail1;
 
-    /* quick and dirty hack to enable FcCompareFamily speedup:
-     * only allow strings to be added under the FC_FAMILY key.
+    /* quick and dirty hack to enable FcCompareFamily/FcCompareString
+     * speedup: only allow strings to be added under the FC_FAMILY,
+     * FC_FOUNDRY, FC_STYLE, FC_RASTERIZER keys.  
+     * and charsets under FC_CHARSET key.
+     * This is slightly semantically different from the old behaviour,
+     * but fonts shouldn't be getting non-strings here anyway.
      * a better hack would use FcBaseObjectTypes to check all objects. */
-    if (FcObjectToPtr(object) == FcObjectToPtr(FC_FAMILY) &&
-        value.type != FcTypeString)
+    objectPtr = FcObjectToPtr(object);
+    if ((objectPtr == FcObjectToPtr(FC_FAMILY)
+         || objectPtr == FcObjectToPtr(FC_FOUNDRY)
+         || objectPtr == FcObjectToPtr(FC_STYLE)
+         || objectPtr == FcObjectToPtr(FC_RASTERIZER))
+        && value.type != FcTypeString)
+        goto bail1;
+    if (objectPtr == FcObjectToPtr(FC_CHARSET)
+        && value.type != FcTypeCharSet)
         goto bail1;
 
     FcValueListPtrU(new)->value = value;