Add FcPatternEqualSubset for Pango, clean up some internal FcPattern
interfaces
This commit is contained in:
parent
88c747e206
commit
e9be9cd10a
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.14 2002/05/31 23:21:24 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.15 2002/06/02 20:52:06 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -598,7 +598,10 @@ void
|
||||||
FcPatternDestroy (FcPattern *p);
|
FcPatternDestroy (FcPattern *p);
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternEqual (FcPattern *pa, FcPattern *pb);
|
FcPatternEqual (const FcPattern *pa, const FcPattern *pb);
|
||||||
|
|
||||||
|
FcBool
|
||||||
|
FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os);
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
|
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
|
||||||
|
|
12
src/fccfg.c
12
src/fccfg.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fccfg.c,v 1.8 2002/06/02 19:51:36 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fccfg.c,v 1.7 2002/05/29 08:21:33 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -1027,7 +1027,7 @@ FcConfigPatternAdd (FcPattern *p,
|
||||||
{
|
{
|
||||||
if (list)
|
if (list)
|
||||||
{
|
{
|
||||||
FcPatternElt *e = FcPatternFind (p, object, FcTrue);
|
FcPatternElt *e = FcPatternInsertElt (p, object);
|
||||||
|
|
||||||
if (!e)
|
if (!e)
|
||||||
return;
|
return;
|
||||||
|
@ -1042,7 +1042,7 @@ static void
|
||||||
FcConfigPatternDel (FcPattern *p,
|
FcConfigPatternDel (FcPattern *p,
|
||||||
const char *object)
|
const char *object)
|
||||||
{
|
{
|
||||||
FcPatternElt *e = FcPatternFind (p, object, FcFalse);
|
FcPatternElt *e = FcPatternFindElt (p, object);
|
||||||
if (!e)
|
if (!e)
|
||||||
return;
|
return;
|
||||||
while (e->values)
|
while (e->values)
|
||||||
|
@ -1053,7 +1053,7 @@ static void
|
||||||
FcConfigPatternCanon (FcPattern *p,
|
FcConfigPatternCanon (FcPattern *p,
|
||||||
const char *object)
|
const char *object)
|
||||||
{
|
{
|
||||||
FcPatternElt *e = FcPatternFind (p, object, FcFalse);
|
FcPatternElt *e = FcPatternFindElt (p, object);
|
||||||
if (!e)
|
if (!e)
|
||||||
return;
|
return;
|
||||||
if (!e->values)
|
if (!e->values)
|
||||||
|
@ -1106,7 +1106,7 @@ FcConfigSubstitute (FcConfig *config,
|
||||||
printf ("FcConfigSubstitute test ");
|
printf ("FcConfigSubstitute test ");
|
||||||
FcTestPrint (t);
|
FcTestPrint (t);
|
||||||
}
|
}
|
||||||
st[i].elt = FcPatternFind (p, t->field, FcFalse);
|
st[i].elt = FcPatternFindElt (p, t->field);
|
||||||
/*
|
/*
|
||||||
* If there's no such field in the font,
|
* If there's no such field in the font,
|
||||||
* then FcQualAll matches while FcQualAny does not
|
* then FcQualAll matches while FcQualAny does not
|
||||||
|
@ -1158,7 +1158,7 @@ FcConfigSubstitute (FcConfig *config,
|
||||||
* If there was a test, then replace the matched
|
* If there was a test, then replace the matched
|
||||||
* value with the new list of values
|
* value with the new list of values
|
||||||
*/
|
*/
|
||||||
if (t && st[i].elt)
|
if (t)
|
||||||
{
|
{
|
||||||
FcValueList *thisValue = st[i].value;
|
FcValueList *thisValue = st[i].value;
|
||||||
FcValueList *nextValue = thisValue ? thisValue->next : 0;
|
FcValueList *nextValue = thisValue ? thisValue->next : 0;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcint.h,v 1.11 2002/05/31 04:42:42 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcint.h,v 1.12 2002/05/31 23:21:25 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -470,7 +470,10 @@ void
|
||||||
FcValueListDestroy (FcValueList *l);
|
FcValueListDestroy (FcValueList *l);
|
||||||
|
|
||||||
FcPatternElt *
|
FcPatternElt *
|
||||||
FcPatternFind (FcPattern *p, const char *object, FcBool insert);
|
FcPatternFindElt (const FcPattern *p, const char *object);
|
||||||
|
|
||||||
|
FcPatternElt *
|
||||||
|
FcPatternInsertElt (FcPattern *p, const char *object);
|
||||||
|
|
||||||
/* fcrender.c */
|
/* fcrender.c */
|
||||||
|
|
||||||
|
|
74
src/fclist.c
74
src/fclist.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fclist.c,v 1.3 2002/05/21 17:06:22 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fclist.c,v 1.4 2002/06/02 21:07:56 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -45,6 +45,7 @@ FcObjectSetAdd (FcObjectSet *os, const char *object)
|
||||||
{
|
{
|
||||||
int s;
|
int s;
|
||||||
const char **objects;
|
const char **objects;
|
||||||
|
int high, low, mid, c;
|
||||||
|
|
||||||
if (os->nobject == os->sobject)
|
if (os->nobject == os->sobject)
|
||||||
{
|
{
|
||||||
|
@ -62,7 +63,26 @@ FcObjectSetAdd (FcObjectSet *os, const char *object)
|
||||||
os->objects = objects;
|
os->objects = objects;
|
||||||
os->sobject = s;
|
os->sobject = s;
|
||||||
}
|
}
|
||||||
os->objects[os->nobject++] = object;
|
high = os->nobject - 1;
|
||||||
|
low = 0;
|
||||||
|
mid = 0;
|
||||||
|
c = 1;
|
||||||
|
while (low <= high)
|
||||||
|
{
|
||||||
|
mid = (low + high) >> 1;
|
||||||
|
c = strcmp (os->objects[mid], object);
|
||||||
|
if (c == 0)
|
||||||
|
return FcTrue;
|
||||||
|
if (c < 0)
|
||||||
|
low = mid + 1;
|
||||||
|
else
|
||||||
|
high = mid - 1;
|
||||||
|
}
|
||||||
|
if (c < 0)
|
||||||
|
mid++;
|
||||||
|
memmove (os->objects + mid + 1, os->objects + mid, os->nobject - mid);
|
||||||
|
os->objects[mid] = object;
|
||||||
|
os->nobject++;
|
||||||
return FcTrue;
|
return FcTrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,6 +157,28 @@ FcListValueListEqual (FcValueList *v1orig,
|
||||||
return FcTrue;
|
return FcTrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FcBool
|
||||||
|
FcListPatternEqual (FcPattern *p1,
|
||||||
|
FcPattern *p2,
|
||||||
|
FcObjectSet *os)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
FcPatternElt *e1, *e2;
|
||||||
|
|
||||||
|
for (i = 0; i < os->nobject; i++)
|
||||||
|
{
|
||||||
|
e1 = FcPatternFindElt (p1, os->objects[i]);
|
||||||
|
e2 = FcPatternFindElt (p2, os->objects[i]);
|
||||||
|
if (!e1 && !e2)
|
||||||
|
return FcTrue;
|
||||||
|
if (!e1 || !e2)
|
||||||
|
return FcFalse;
|
||||||
|
if (!FcListValueListEqual (e1->values, e2->values))
|
||||||
|
return FcFalse;
|
||||||
|
}
|
||||||
|
return FcTrue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FcTrue iff all objects in "p" match "font"
|
* FcTrue iff all objects in "p" match "font"
|
||||||
*/
|
*/
|
||||||
|
@ -150,7 +192,7 @@ FcListPatternMatchAny (FcPattern *p,
|
||||||
|
|
||||||
for (i = 0; i < p->num; i++)
|
for (i = 0; i < p->num; i++)
|
||||||
{
|
{
|
||||||
e = FcPatternFind (font, p->elts[i].object, FcFalse);
|
e = FcPatternFindElt (font, p->elts[i].object);
|
||||||
if (!e)
|
if (!e)
|
||||||
return FcFalse;
|
return FcFalse;
|
||||||
if (!FcListValueListMatchAny (p->elts[i].values, e->values))
|
if (!FcListValueListMatchAny (p->elts[i].values, e->values))
|
||||||
|
@ -159,28 +201,6 @@ FcListPatternMatchAny (FcPattern *p,
|
||||||
return FcTrue;
|
return FcTrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FcBool
|
|
||||||
FcListPatternEqual (FcPattern *p1,
|
|
||||||
FcPattern *p2,
|
|
||||||
FcObjectSet *os)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FcPatternElt *e1, *e2;
|
|
||||||
|
|
||||||
for (i = 0; i < os->nobject; i++)
|
|
||||||
{
|
|
||||||
e1 = FcPatternFind (p1, os->objects[i], FcFalse);
|
|
||||||
e2 = FcPatternFind (p2, os->objects[i], FcFalse);
|
|
||||||
if (!e1 && !e2)
|
|
||||||
return FcTrue;
|
|
||||||
if (!e1 || !e2)
|
|
||||||
return FcFalse;
|
|
||||||
if (!FcListValueListEqual (e1->values, e2->values))
|
|
||||||
return FcFalse;
|
|
||||||
}
|
|
||||||
return FcTrue;
|
|
||||||
}
|
|
||||||
|
|
||||||
static FcChar32
|
static FcChar32
|
||||||
FcListStringHash (const FcChar8 *s)
|
FcListStringHash (const FcChar8 *s)
|
||||||
{
|
{
|
||||||
|
@ -253,7 +273,7 @@ FcListPatternHash (FcPattern *font,
|
||||||
|
|
||||||
for (n = 0; n < os->nobject; n++)
|
for (n = 0; n < os->nobject; n++)
|
||||||
{
|
{
|
||||||
e = FcPatternFind (font, os->objects[n], FcFalse);
|
e = FcPatternFindElt (font, os->objects[n]);
|
||||||
if (e)
|
if (e)
|
||||||
h = h ^ FcListValueListHash (e->values);
|
h = h ^ FcListValueListHash (e->values);
|
||||||
}
|
}
|
||||||
|
@ -331,7 +351,7 @@ FcListAppend (FcListHashTable *table,
|
||||||
|
|
||||||
for (o = 0; o < os->nobject; o++)
|
for (o = 0; o < os->nobject; o++)
|
||||||
{
|
{
|
||||||
e = FcPatternFind (font, os->objects[o], FcFalse);
|
e = FcPatternFindElt (font, os->objects[o]);
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
for (v = e->values; v; v = v->next)
|
for (v = e->values; v; v = v->next)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.8 2002/05/31 04:42:42 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcmatch.c,v 1.9 2002/06/02 21:07:56 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -326,7 +326,7 @@ FcFontRenderPrepare (FcConfig *config,
|
||||||
for (i = 0; i < font->num; i++)
|
for (i = 0; i < font->num; i++)
|
||||||
{
|
{
|
||||||
fe = &font->elts[i];
|
fe = &font->elts[i];
|
||||||
pe = FcPatternFind (pat, fe->object, FcFalse);
|
pe = FcPatternFindElt (pat, fe->object);
|
||||||
if (pe)
|
if (pe)
|
||||||
{
|
{
|
||||||
if (!FcCompareValueList (pe->object, pe->values,
|
if (!FcCompareValueList (pe->object, pe->values,
|
||||||
|
@ -343,7 +343,7 @@ FcFontRenderPrepare (FcConfig *config,
|
||||||
for (i = 0; i < pat->num; i++)
|
for (i = 0; i < pat->num; i++)
|
||||||
{
|
{
|
||||||
pe = &pat->elts[i];
|
pe = &pat->elts[i];
|
||||||
fe = FcPatternFind (font, pe->object, FcFalse);
|
fe = FcPatternFindElt (font, pe->object);
|
||||||
if (!fe)
|
if (!fe)
|
||||||
FcPatternAdd (new, pe->object, pe->values->value, FcTrue);
|
FcPatternAdd (new, pe->object, pe->values->value, FcTrue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.5 2002/06/02 20:52:06 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.6 2002/06/02 21:07:57 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -500,13 +500,13 @@ FcNameUnparse (FcPattern *pat)
|
||||||
const FcObjectType *o;
|
const FcObjectType *o;
|
||||||
|
|
||||||
FcStrBufInit (&buf, buf_static, sizeof (buf_static));
|
FcStrBufInit (&buf, buf_static, sizeof (buf_static));
|
||||||
e = FcPatternFind (pat, FC_FAMILY, FcFalse);
|
e = FcPatternFindElt (pat, FC_FAMILY);
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
if (!FcNameUnparseValueList (&buf, e->values, (FcChar8 *) FC_ESCAPE_FIXED))
|
if (!FcNameUnparseValueList (&buf, e->values, (FcChar8 *) FC_ESCAPE_FIXED))
|
||||||
goto bail0;
|
goto bail0;
|
||||||
}
|
}
|
||||||
e = FcPatternFind (pat, FC_SIZE, FcFalse);
|
e = FcPatternFindElt (pat, FC_SIZE);
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0))
|
if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0))
|
||||||
|
@ -524,7 +524,7 @@ FcNameUnparse (FcPattern *pat)
|
||||||
!strcmp (o->object, FC_FILE))
|
!strcmp (o->object, FC_FILE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
e = FcPatternFind (pat, o->object, FcFalse);
|
e = FcPatternFindElt (pat, o->object);
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0))
|
if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0))
|
||||||
|
|
167
src/fcpat.c
167
src/fcpat.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.5 2002/05/29 22:07:33 keithp Exp $
|
* $XFree86: xc/lib/fontconfig/src/fcpat.c,v 1.6 2002/05/31 23:21:25 keithp Exp $
|
||||||
*
|
*
|
||||||
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
|
||||||
*
|
*
|
||||||
|
@ -183,84 +183,91 @@ FcPatternDestroy (FcPattern *p)
|
||||||
free (p);
|
free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
FcPatternPosition (const FcPattern *p, const char *object)
|
||||||
|
{
|
||||||
|
int low, high, mid, c;
|
||||||
|
|
||||||
|
low = 0;
|
||||||
|
high = p->num - 1;
|
||||||
|
c = 1;
|
||||||
|
mid = 0;
|
||||||
|
while (low <= high)
|
||||||
|
{
|
||||||
|
mid = (low + high) >> 1;
|
||||||
|
c = strcmp (p->elts[mid].object, object);
|
||||||
|
if (c == 0)
|
||||||
|
return mid;
|
||||||
|
if (c < 0)
|
||||||
|
low = mid + 1;
|
||||||
|
else
|
||||||
|
high = mid - 1;
|
||||||
|
}
|
||||||
|
if (c < 0)
|
||||||
|
mid++;
|
||||||
|
return -(mid + 1);
|
||||||
|
}
|
||||||
|
|
||||||
FcPatternElt *
|
FcPatternElt *
|
||||||
FcPatternFind (FcPattern *p, const char *object, FcBool insert)
|
FcPatternFindElt (const FcPattern *p, const char *object)
|
||||||
|
{
|
||||||
|
int i = FcPatternPosition (p, object);
|
||||||
|
if (i < 0)
|
||||||
|
return 0;
|
||||||
|
return &p->elts[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
FcPatternElt *
|
||||||
|
FcPatternInsertElt (FcPattern *p, const char *object)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int s;
|
|
||||||
FcPatternElt *e;
|
FcPatternElt *e;
|
||||||
|
|
||||||
int low, high;
|
i = FcPatternPosition (p, object);
|
||||||
|
if (i < 0)
|
||||||
/* match existing */
|
|
||||||
low = 0;
|
|
||||||
high = p->num;
|
|
||||||
|
|
||||||
while (low + 1 < high)
|
|
||||||
{
|
{
|
||||||
i = (low + high) >> 1;
|
i = -i - 1;
|
||||||
s = strcmp (object, p->elts[i].object);
|
|
||||||
if (s == 0)
|
|
||||||
return &p->elts[i];
|
|
||||||
if (s > 0)
|
|
||||||
low = i;
|
|
||||||
else
|
|
||||||
high = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = low;
|
/* grow array */
|
||||||
while (i < high)
|
if (p->num + 1 >= p->size)
|
||||||
{
|
|
||||||
s = strcmp (object, p->elts[i].object);
|
|
||||||
if (s == 0)
|
|
||||||
return &p->elts[i];
|
|
||||||
if (s < 0)
|
|
||||||
break;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!insert)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* grow array */
|
|
||||||
if (p->num + 1 >= p->size)
|
|
||||||
{
|
|
||||||
s = p->size + 16;
|
|
||||||
if (p->elts)
|
|
||||||
e = (FcPatternElt *) realloc (p->elts, s * sizeof (FcPatternElt));
|
|
||||||
else
|
|
||||||
e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt));
|
|
||||||
if (!e)
|
|
||||||
return FcFalse;
|
|
||||||
p->elts = e;
|
|
||||||
if (p->size)
|
|
||||||
FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
|
|
||||||
FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt));
|
|
||||||
while (p->size < s)
|
|
||||||
{
|
{
|
||||||
p->elts[p->size].object = 0;
|
int s = p->size + 16;
|
||||||
p->elts[p->size].values = 0;
|
if (p->elts)
|
||||||
p->size++;
|
e = (FcPatternElt *) realloc (p->elts, s * sizeof (FcPatternElt));
|
||||||
|
else
|
||||||
|
e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt));
|
||||||
|
if (!e)
|
||||||
|
return FcFalse;
|
||||||
|
p->elts = e;
|
||||||
|
if (p->size)
|
||||||
|
FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
|
||||||
|
FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt));
|
||||||
|
while (p->size < s)
|
||||||
|
{
|
||||||
|
p->elts[p->size].object = 0;
|
||||||
|
p->elts[p->size].values = 0;
|
||||||
|
p->size++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* move elts up */
|
||||||
|
memmove (p->elts + i + 1,
|
||||||
|
p->elts + i,
|
||||||
|
sizeof (FcPatternElt) *
|
||||||
|
(p->num - i));
|
||||||
|
|
||||||
|
/* bump count */
|
||||||
|
p->num++;
|
||||||
|
|
||||||
|
p->elts[i].object = object;
|
||||||
|
p->elts[i].values = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* move elts up */
|
|
||||||
memmove (p->elts + i + 1,
|
|
||||||
p->elts + i,
|
|
||||||
sizeof (FcPatternElt) *
|
|
||||||
(p->num - i));
|
|
||||||
|
|
||||||
/* bump count */
|
|
||||||
p->num++;
|
|
||||||
|
|
||||||
p->elts[i].object = object;
|
|
||||||
p->elts[i].values = 0;
|
|
||||||
|
|
||||||
return &p->elts[i];
|
return &p->elts[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternEqual (FcPattern *pa, FcPattern *pb)
|
FcPatternEqual (const FcPattern *pa, const FcPattern *pb)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -276,6 +283,32 @@ FcPatternEqual (FcPattern *pa, FcPattern *pb)
|
||||||
return FcTrue;
|
return FcTrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FcBool
|
||||||
|
FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os)
|
||||||
|
{
|
||||||
|
FcPatternElt *ea, *eb;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < os->nobject; i++)
|
||||||
|
{
|
||||||
|
ea = FcPatternFindElt (pa, os->objects[i]);
|
||||||
|
eb = FcPatternFindElt (pb, os->objects[i]);
|
||||||
|
if (ea)
|
||||||
|
{
|
||||||
|
if (!eb)
|
||||||
|
return FcFalse;
|
||||||
|
if (!FcValueListEqual (ea->values, eb->values))
|
||||||
|
return FcFalse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (eb)
|
||||||
|
return FcFalse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FcTrue;
|
||||||
|
}
|
||||||
|
|
||||||
FcBool
|
FcBool
|
||||||
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
|
FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
|
||||||
{
|
{
|
||||||
|
@ -295,7 +328,7 @@ FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
|
||||||
new->value = value;
|
new->value = value;
|
||||||
new->next = 0;
|
new->next = 0;
|
||||||
|
|
||||||
e = FcPatternFind (p, object, FcTrue);
|
e = FcPatternInsertElt (p, object);
|
||||||
if (!e)
|
if (!e)
|
||||||
goto bail2;
|
goto bail2;
|
||||||
|
|
||||||
|
@ -339,7 +372,7 @@ FcPatternDel (FcPattern *p, const char *object)
|
||||||
FcPatternElt *e;
|
FcPatternElt *e;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
e = FcPatternFind (p, object, FcFalse);
|
e = FcPatternFindElt (p, object);
|
||||||
if (!e)
|
if (!e)
|
||||||
return FcFalse;
|
return FcFalse;
|
||||||
|
|
||||||
|
@ -434,7 +467,7 @@ FcPatternGet (FcPattern *p, const char *object, int id, FcValue *v)
|
||||||
FcPatternElt *e;
|
FcPatternElt *e;
|
||||||
FcValueList *l;
|
FcValueList *l;
|
||||||
|
|
||||||
e = FcPatternFind (p, object, FcFalse);
|
e = FcPatternFindElt (p, object);
|
||||||
if (!e)
|
if (!e)
|
||||||
return FcResultNoMatch;
|
return FcResultNoMatch;
|
||||||
for (l = e->values; l; l = l->next)
|
for (l = e->values; l; l = l->next)
|
||||||
|
|
Loading…
Reference in New Issue