Improve the performance a bit
This commit is contained in:
parent
322131f433
commit
cb3e6ff4d7
|
@ -1101,13 +1101,20 @@ FcGetPixelSize (FT_Face face, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static FcBool
|
static FcBool
|
||||||
FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string)
|
FcStringInPatternElement (FcPattern *pat, FcObject obj, const FcChar8 *string)
|
||||||
{
|
{
|
||||||
int e;
|
FcPatternIter iter;
|
||||||
FcChar8 *old;
|
FcValueListPtr l;
|
||||||
for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++)
|
|
||||||
if (!FcStrCmpIgnoreBlanksAndCase (old, string))
|
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 FcTrue;
|
||||||
}
|
}
|
||||||
return FcFalse;
|
return FcFalse;
|
||||||
|
@ -1455,10 +1462,10 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
FT_SfntName sname;
|
FT_SfntName sname;
|
||||||
int nameidx;
|
int nameidx;
|
||||||
const FcChar8 *lang;
|
const FcChar8 *lang;
|
||||||
const char *elt = 0, *eltlang = 0;
|
|
||||||
int *np = 0, *nlangp = 0;
|
int *np = 0, *nlangp = 0;
|
||||||
size_t len;
|
size_t len;
|
||||||
int nameid, lookupid;
|
int nameid, lookupid;
|
||||||
|
FcObject obj = FC_INVALID_OBJECT, objlang = FC_INVALID_OBJECT;
|
||||||
|
|
||||||
nameid = lookupid = nameid_order[n];
|
nameid = lookupid = nameid_order[n];
|
||||||
|
|
||||||
|
@ -1494,8 +1501,8 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
sname.name_id, sname.platform_id,
|
sname.name_id, sname.platform_id,
|
||||||
sname.encoding_id, sname.language_id);
|
sname.encoding_id, sname.language_id);
|
||||||
|
|
||||||
elt = FC_FAMILY;
|
obj = FC_FAMILY_OBJECT;
|
||||||
eltlang = FC_FAMILYLANG;
|
objlang = FC_FAMILYLANG_OBJECT;
|
||||||
np = &nfamily;
|
np = &nfamily;
|
||||||
nlangp = &nfamily_lang;
|
nlangp = &nfamily_lang;
|
||||||
break;
|
break;
|
||||||
|
@ -1506,8 +1513,8 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
sname.name_id, sname.platform_id,
|
sname.name_id, sname.platform_id,
|
||||||
sname.encoding_id, sname.language_id);
|
sname.encoding_id, sname.language_id);
|
||||||
|
|
||||||
elt = FC_FULLNAME;
|
obj = FC_FULLNAME_OBJECT;
|
||||||
eltlang = FC_FULLNAMELANG;
|
objlang = FC_FULLNAMELANG_OBJECT;
|
||||||
np = &nfullname;
|
np = &nfullname;
|
||||||
nlangp = &nfullname_lang;
|
nlangp = &nfullname_lang;
|
||||||
break;
|
break;
|
||||||
|
@ -1521,8 +1528,8 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
sname.name_id, sname.platform_id,
|
sname.name_id, sname.platform_id,
|
||||||
sname.encoding_id, sname.language_id);
|
sname.encoding_id, sname.language_id);
|
||||||
|
|
||||||
elt = FC_STYLE;
|
obj = FC_STYLE_OBJECT;
|
||||||
eltlang = FC_STYLELANG;
|
objlang = FC_STYLELANG_OBJECT;
|
||||||
np = &nstyle;
|
np = &nstyle;
|
||||||
nlangp = &nstyle_lang;
|
nlangp = &nstyle_lang;
|
||||||
break;
|
break;
|
||||||
|
@ -1538,7 +1545,7 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (elt)
|
if (obj != FC_INVALID_OBJECT)
|
||||||
{
|
{
|
||||||
FcChar8 *utf8, *pp;
|
FcChar8 *utf8, *pp;
|
||||||
|
|
||||||
|
@ -1562,14 +1569,14 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
pp--;
|
pp--;
|
||||||
*pp = 0;
|
*pp = 0;
|
||||||
|
|
||||||
if (FcStringInPatternElement (pat, elt, utf8))
|
if (FcStringInPatternElement (pat, obj, utf8))
|
||||||
{
|
{
|
||||||
free (utf8);
|
free (utf8);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add new element */
|
/* add new element */
|
||||||
if (!FcPatternAddString (pat, elt, utf8))
|
if (!FcPatternObjectAddString (pat, obj, utf8))
|
||||||
{
|
{
|
||||||
free (utf8);
|
free (utf8);
|
||||||
goto bail1;
|
goto bail1;
|
||||||
|
@ -1580,11 +1587,11 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
|
||||||
/* pad lang list with 'und' to line up with elt */
|
/* pad lang list with 'und' to line up with elt */
|
||||||
while (*nlangp < *np)
|
while (*nlangp < *np)
|
||||||
{
|
{
|
||||||
if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "und"))
|
if (!FcPatternObjectAddString (pat, objlang, (FcChar8 *) "und"))
|
||||||
goto bail1;
|
goto bail1;
|
||||||
++*nlangp;
|
++*nlangp;
|
||||||
}
|
}
|
||||||
if (!FcPatternAddString (pat, eltlang, lang))
|
if (!FcPatternObjectAddString (pat, objlang, lang))
|
||||||
goto bail1;
|
goto bail1;
|
||||||
++*nlangp;
|
++*nlangp;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue