/*
- * $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.15 2002/06/02 20:52:06 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.16 2002/06/03 08:31:15 keithp Exp $
*
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
*
FcPattern *
FcPatternDuplicate (FcPattern *p);
+void
+FcPatternReference (FcPattern *p);
+
void
FcValueDestroy (FcValue v);
if 'qual' is 'any', then the match succeeds if any value in the field matches.
if 'qual' is 'all', then the match succeeds only if all values match.
+ if 'qual' is 'first', then the match succeeds only if the first value matches.
+ if 'qual' is 'not_first', then the match succeeds only if any value other than
+ the first matches.
-->
<!ELEMENT test (%expr;)*>
<!ATTLIST test
- qual (any|all) "any"
+ qual (any|all|first|not_first) "any"
name CDATA #REQUIRED
compare (eq|not_eq|less|less_eq|more|more_eq) "eq">
/*
- * $XFree86: xc/lib/fontconfig/src/fccache.c,v 1.4 2002/03/01 01:00:54 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fccache.c,v 1.7 2002/05/21 17:06:22 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
{
printf (" dir cache file \"%s\"\n", file);
}
- FcPatternAddString (font, FC_FILE, path);
+ if (!FcPatternAddString (font, FC_FILE, path))
+ {
+ FcPatternDestroy (font);
+ goto bail2;
+ }
if (!FcFontSetAdd (set, font))
+ {
+ FcPatternDestroy (font);
goto bail2;
+ }
}
}
if (path != path_buf)
st[i].value = FcConfigMatchValueList (p, t, st[i].elt->values);
if (!st[i].value)
break;
+ if (t->qual == FcQualFirst && st[i].value != st[i].elt->values)
+ break;
+ if (t->qual == FcQualNotFirst && st[i].value == st[i].elt->values)
+ break;
}
if (t)
{
/*
- * $XFree86: xc/lib/fontconfig/src/fcdbg.c,v 1.2 2002/02/18 22:29:28 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fcdbg.c,v 1.3 2002/06/02 21:07:56 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
case FcQualAll:
printf ("all ");
break;
+ case FcQualFirst:
+ printf ("first ");
+ break;
+ case FcQualNotFirst:
+ printf ("not_first ");
+ break;
}
printf ("%s ", test->field);
FcOpPrint (test->op);
/*
- * $XFree86: xc/lib/fontconfig/src/fcdir.c,v 1.2 2002/02/15 06:01:28 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fcdir.c,v 1.5 2002/05/21 17:06:22 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
{
font = FcNameParse (name);
if (font)
- FcPatternAddString (font, FC_FILE, file);
+ if (!FcPatternAddString (font, FC_FILE, file))
+ ret = FcFalse;
}
}
else
/*
- * $XFree86: xc/lib/fontconfig/src/fcint.h,v 1.12 2002/05/31 23:21:25 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fcint.h,v 1.13 2002/06/03 08:31:15 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
typedef struct _FcPatternElt {
const char *object;
- FcValueList *values;
+ FcValueList *values;
} FcPatternElt;
struct _FcPattern {
int num;
int size;
- FcPatternElt *elts;
+ int ref;
+ FcPatternElt *elts;
};
typedef enum _FcOp {
} FcExpr;
typedef enum _FcQual {
- FcQualAny, FcQualAll
+ FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
} FcQual;
typedef struct _FcTest {
/*
- * $XFree86: xc/lib/fontconfig/src/fclist.c,v 1.4 2002/06/02 21:07:56 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fclist.c,v 1.5 2002/06/03 08:31:15 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
pe = FcPatternFindElt (pat, fe->object);
if (pe)
{
+ int j;
+ double score[NUM_MATCHER];
+
+ for (j = 0; j < NUM_MATCHER; j++)
+ score[j] = 0;
if (!FcCompareValueList (pe->object, pe->values,
fe->values, &v, 0, &result))
{
FcPatternDestroy (new);
return 0;
}
+ for (j = 0; j < NUM_MATCHER; 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;
- FcPatternAdd (new, fe->object, v, FcTrue);
+ FcPatternAdd (new, fe->object, v, FcFalse);
}
for (i = 0; i < pat->num; i++)
{
else
ncs = FcCharSetCopy (ncs);
*cs = ncs;
+ FcPatternReference (node->pattern);
if (!FcFontSetAdd (fs, node->pattern))
+ {
+ FcPatternDestroy (node->pattern);
return FcFalse;
+ }
}
}
}
void
FcFontSetSortDestroy (FcFontSet *fs)
{
- fs->nfont = 0;
FcFontSetDestroy (fs);
}
/*
- * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.6 2002/06/02 21:07:57 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.7 2002/06/03 08:31:15 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
{ (FcChar8 *) "mono", "spacing", FC_MONO, },
{ (FcChar8 *) "charcell", "spacing", FC_CHARCELL, },
+ { (FcChar8 *) "none", "rgba", FC_RGBA_NONE },
{ (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, },
{ (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, },
{ (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB },
/*
- * $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.6 2002/05/31 23:21:25 keithp Exp $
+ * $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.7 2002/06/03 08:31:15 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
p->num = 0;
p->size = 0;
p->elts = 0;
+ p->ref = 1;
return p;
}
{
int i;
+ if (--p->ref > 0)
+ return;
+
for (i = 0; i < p->num; i++)
FcValueListDestroy (p->elts[i].values);
return 0;
}
+void
+FcPatternReference (FcPattern *p)
+{
+ p->ref++;
+}
+
FcPattern *
FcPatternVaBuild (FcPattern *orig, va_list va)
{
qual = FcQualAny;
else if (!strcmp ((char *) qual_string, "all"))
qual = FcQualAll;
+ else if (!strcmp ((char *) qual_string, "first"))
+ qual = FcQualFirst;
+ else if (!strcmp ((char *) qual_string, "not_first"))
+ qual = FcQualNotFirst;
else
{
FcConfigMessage (parse, FcSevereWarning, "invalid test qual \"%s\"", qual_string);