/*
- * $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.15 2002/06/29 20:31:02 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.20 2002/08/31 22:17:32 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
{
FcLangResult result;
- if (value2.type != FcTypeString || value1.type != FcTypeString)
+ switch (value1.type) {
+ case FcTypeLangSet:
+ switch (value2.type) {
+ case FcTypeLangSet:
+ result = FcLangSetCompare (value1.u.l, value2.u.l);
+ break;
+ case FcTypeString:
+ result = FcLangSetHasLang (value1.u.l, value2.u.s);
+ break;
+ default:
+ return -1.0;
+ }
+ break;
+ case FcTypeString:
+ switch (value2.type) {
+ case FcTypeLangSet:
+ result = FcLangSetHasLang (value2.u.l, value1.u.s);
+ break;
+ case FcTypeString:
+ result = FcLangCompare (value1.u.s, value2.u.s);
+ break;
+ default:
+ return -1.0;
+ }
+ break;
+ default:
return -1.0;
- result = FcLangCompare (value1.u.s, value2.u.s);
+ }
switch (result) {
case FcLangEqual:
return 0;
{ FC_OUTLINE, FcCompareBool, 12, 12 },
#define MATCH_OUTLINE 11
+
+ { FC_FONTVERSION, FcCompareInteger, 13, 13 },
+#define MATCH_FONTVERSION 12
};
-#define NUM_MATCH_VALUES 13
+#define NUM_MATCH_VALUES 14
static FcBool
FcCompareValueList (const char *object,
case 'f':
switch (FcToLower (object[1])) {
case 'o':
- i = MATCH_FOUNDRY; break;
+ switch (FcToLower (object[2])) {
+ case 'u':
+ i = MATCH_FOUNDRY; break;
+ case 'n':
+ i = MATCH_FONTVERSION; break;
+ }
+ break;
case 'a':
i = MATCH_FAMILY; break;
}
pe = FcPatternFindElt (pat, fe->object);
if (pe)
{
- int j;
- double score[NUM_MATCH_VALUES];
-
- for (j = 0; j < NUM_MATCH_VALUES; j++)
- score[j] = 0;
if (!FcCompareValueList (pe->object, pe->values,
- fe->values, &v, score, &result))
+ fe->values, &v, 0, &result))
{
FcPatternDestroy (new);
return 0;
}
- for (j = 0; j < NUM_MATCH_VALUES; j++)
- if (score[j] >= 100.0)
- {
- FcValueList *pv;
-
- for (pv = pe->values; pv; pv = pv->next)
- FcPatternAdd (new, fe->object, pv->value, FcTrue);
- break;
- }
}
else
v = fe->values->value;
if (!fe)
FcPatternAdd (new, pe->object, pe->values->value, FcTrue);
}
- FcConfigSubstitute (config, new, FcMatchFont);
+ FcConfigSubstituteWithPat (config, new, pat, FcMatchFont);
return new;
}
}
if (!nnodes)
goto bail0;
+ /* freed below */
nodes = malloc (nnodes * sizeof (FcSortNode) + nnodes * sizeof (FcSortNode *));
if (!nodes)
goto bail0;