Improve the performance a bit
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 2f86d8a..00d68fe 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1101,15 +1101,22 @@
}
static FcBool
-FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string)
+FcStringInPatternElement (FcPattern *pat, FcObject obj, const FcChar8 *string)
{
- int e;
- FcChar8 *old;
- for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++)
- if (!FcStrCmpIgnoreBlanksAndCase (old, string))
- {
+ FcPatternIter iter;
+ FcValueListPtr l;
+
+ FcPatternIterStart (pat, &iter);
+ if (!FcPatternFindObjectIter (pat, &iter, obj))
+ return FcFalse;
+ for (l = FcPatternIterGetValues (pat, &iter); l; l = FcValueListNext (l))
+ {
+ FcValue v = FcValueCanonicalize (&l->value);
+ if (v.type != FcTypeString)
+ break;
+ if (!FcStrCmpIgnoreBlanksAndCase (v.u.s, string))
return FcTrue;
- }
+ }
return FcFalse;
}
@@ -1455,10 +1462,10 @@
FT_SfntName sname;
int nameidx;
const FcChar8 *lang;
- const char *elt = 0, *eltlang = 0;
int *np = 0, *nlangp = 0;
size_t len;
int nameid, lookupid;
+ FcObject obj = FC_INVALID_OBJECT, objlang = FC_INVALID_OBJECT;
nameid = lookupid = nameid_order[n];
@@ -1494,8 +1501,8 @@
sname.name_id, sname.platform_id,
sname.encoding_id, sname.language_id);
- elt = FC_FAMILY;
- eltlang = FC_FAMILYLANG;
+ obj = FC_FAMILY_OBJECT;
+ objlang = FC_FAMILYLANG_OBJECT;
np = &nfamily;
nlangp = &nfamily_lang;
break;
@@ -1506,8 +1513,8 @@
sname.name_id, sname.platform_id,
sname.encoding_id, sname.language_id);
- elt = FC_FULLNAME;
- eltlang = FC_FULLNAMELANG;
+ obj = FC_FULLNAME_OBJECT;
+ objlang = FC_FULLNAMELANG_OBJECT;
np = &nfullname;
nlangp = &nfullname_lang;
break;
@@ -1521,8 +1528,8 @@
sname.name_id, sname.platform_id,
sname.encoding_id, sname.language_id);
- elt = FC_STYLE;
- eltlang = FC_STYLELANG;
+ obj = FC_STYLE_OBJECT;
+ objlang = FC_STYLELANG_OBJECT;
np = &nstyle;
nlangp = &nstyle_lang;
break;
@@ -1538,7 +1545,7 @@
}
break;
}
- if (elt)
+ if (obj != FC_INVALID_OBJECT)
{
FcChar8 *utf8, *pp;
@@ -1562,14 +1569,14 @@
pp--;
*pp = 0;
- if (FcStringInPatternElement (pat, elt, utf8))
+ if (FcStringInPatternElement (pat, obj, utf8))
{
free (utf8);
continue;
}
/* add new element */
- if (!FcPatternAddString (pat, elt, utf8))
+ if (!FcPatternObjectAddString (pat, obj, utf8))
{
free (utf8);
goto bail1;
@@ -1580,11 +1587,11 @@
/* pad lang list with 'und' to line up with elt */
while (*nlangp < *np)
{
- if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "und"))
+ if (!FcPatternObjectAddString (pat, objlang, (FcChar8 *) "und"))
goto bail1;
++*nlangp;
}
- if (!FcPatternAddString (pat, eltlang, lang))
+ if (!FcPatternObjectAddString (pat, objlang, lang))
goto bail1;
++*nlangp;
}