/*
- * $RCSId: xc/lib/fontconfig/src/fclist.c,v 1.11tsi Exp $
+ * fontconfig/src/fclist.c
*
* Copyright © 2000 Keith Packard
*
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
{
FcValueListPtr pat, fnt;
- for (pat = patOrig; FcValueListPtrU(pat);
- pat = FcValueListPtrU(pat)->next)
+ for (pat = patOrig; pat != NULL; pat = FcValueListNext(pat))
{
- for (fnt = fntOrig; FcValueListPtrU(fnt);
- fnt = FcValueListPtrU(fnt)->next)
+ for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext(fnt))
{
/*
* make sure the font 'contains' the pattern.
* (OpListing is OpContains except for strings
* where it requires an exact match)
*/
- if (FcConfigCompareValue (&FcValueListPtrU(fnt)->value,
+ if (FcConfigCompareValue (&fnt->value,
FcOpListing,
- &FcValueListPtrU(pat)->value))
+ &pat->value))
break;
}
- if (!FcValueListPtrU(fnt))
+ if (fnt == NULL)
return FcFalse;
}
return FcTrue;
{
FcValueListPtr v1, v2;
- for (v1 = v1orig; FcValueListPtrU(v1);
- v1 = FcValueListPtrU(v1)->next)
+ for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
{
- for (v2 = v2orig; FcValueListPtrU(v2);
- v2 = FcValueListPtrU(v2)->next)
- if (FcValueEqual (FcValueCanonicalize(&FcValueListPtrU(v1)->value),
- FcValueCanonicalize(&FcValueListPtrU(v2)->value)))
+ for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
+ if (FcValueEqual (FcValueCanonicalize(&(v1)->value),
+ FcValueCanonicalize(&(v2)->value)))
break;
- if (!FcValueListPtrU(v2))
+ if (v2 == NULL)
return FcFalse;
}
- for (v2 = v2orig; FcValueListPtrU(v2);
- v2 = FcValueListPtrU(v2)->next)
+ for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
{
- for (v1 = v1orig; FcValueListPtrU(v1);
- v1 = FcValueListPtrU(v1)->next)
- if (FcValueEqual (FcValueCanonicalize(&FcValueListPtrU(v1)->value),
- FcValueCanonicalize(&FcValueListPtrU(v2)->value)))
+ for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
+ if (FcValueEqual (FcValueCanonicalize(&v1->value),
+ FcValueCanonicalize(&v2->value)))
break;
- if (!FcValueListPtrU(v1))
+ if (v1 == NULL)
return FcFalse;
}
return FcTrue;
for (i = 0; i < os->nobject; i++)
{
- e1 = FcPatternFindElt (p1, os->objects[i]);
- e2 = FcPatternFindElt (p2, os->objects[i]);
+ e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i]));
+ e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i]));
if (!e1 && !e2)
continue;
if (!e1 || !e2)
return FcFalse;
- if (!FcListValueListEqual (e1->values, e2->values))
+ if (!FcListValueListEqual (FcPatternEltValues(e1),
+ FcPatternEltValues(e2)))
return FcFalse;
}
return FcTrue;
const FcPattern *font)
{
int i;
- FcPatternElt *e;
for (i = 0; i < p->num; i++)
{
- e = FcPatternFindElt (font,
- FcObjectPtrU((FcPatternEltU(p->elts)+i)->object));
- if (!e)
+ FcPatternElt *pe = &FcPatternElts(p)[i];
+ FcPatternElt *fe = FcPatternObjectFindElt (font, pe->object);
+ if (!fe)
return FcFalse;
- if (!FcListValueListMatchAny ((FcPatternEltU(p->elts)+i)->values, /* pat elts */
- e->values)) /* font elts */
+ if (!FcListValueListMatchAny (FcPatternEltValues(pe), /* pat elts */
+ FcPatternEltValues(fe))) /* font elts */
return FcFalse;
}
return FcTrue;
{
FcChar32 h = 0;
- while (FcValueListPtrU(list))
+ while (list != NULL)
{
- h = h ^ FcListValueHash (&FcValueListPtrU(list)->value);
- list = FcValueListPtrU(list)->next;
+ h = h ^ FcListValueHash (&list->value);
+ list = FcValueListNext(list);
}
return h;
}
for (n = 0; n < os->nobject; n++)
{
- e = FcPatternFindElt (font, os->objects[n]);
+ e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n]));
if (e)
- h = h ^ FcListValueListHash (e->values);
+ h = h ^ FcListValueListHash (FcPatternEltValues(e));
}
return h;
}
}
static int
-FcGetDefaultObjectLangIndex (FcPattern *font, const char *object)
+FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object)
{
FcChar8 *lang = FcGetDefaultLang ();
- FcPatternElt *e = FcPatternFindElt (font, object);
+ FcPatternElt *e = FcPatternObjectFindElt (font, object);
FcValueListPtr v;
FcValue value;
int idx = -1;
if (e)
{
- for (v = e->values, i = 0; FcValueListPtrU(v); v = FcValueListPtrU(v)->next, ++i)
+ for (v = FcPatternEltValues(e), i = 0; v; v = FcValueListNext(v), ++i)
{
- value = FcValueCanonicalize (&FcValueListPtrU (v)->value);
+ value = FcValueCanonicalize (&v->value);
if (value.type == FcTypeString)
{
FcLangResult res = FcLangCompare (value.u.s, lang);
- if (res == FcLangEqual || (res == FcLangDifferentCountry && idx < 0))
+ if (res == FcLangEqual)
+ return i;
+
+ if (res == FcLangDifferentCountry && idx < 0)
idx = i;
}
}
if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG))
{
if (familyidx < 0)
- familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG);
+ familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT);
defidx = familyidx;
}
else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG))
{
if (fullnameidx < 0)
- fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG);
+ fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT);
defidx = fullnameidx;
}
else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG))
{
if (styleidx < 0)
- styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG);
+ styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT);
defidx = styleidx;
}
else
defidx = 0;
- /* Also, copy over the full path info. */
- if (!strcmp (os->objects[o], FC_FILE))
- FcPatternTransferFullFname (bucket->pattern, font);
-
- e = FcPatternFindElt (font, os->objects[o]);
+ e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o]));
if (e)
{
- for (v = e->values, idx = 0; FcValueListPtrU(v);
- v = FcValueListPtrU(v)->next, ++idx)
+ for (v = FcPatternEltValues(e), idx = 0; v;
+ v = FcValueListNext(v), ++idx)
{
if (!FcPatternAdd (bucket->pattern,
os->objects[o],
- FcValueCanonicalize(&FcValueListPtrU(v)->value), defidx != idx))
+ FcValueCanonicalize(&v->value), defidx != idx))
goto bail2;
}
}
FcListHashTable table;
int i;
FcListBucket *bucket;
+ int destroy_os = 0;
if (!config)
{
goto bail0;
}
FcListHashTableInit (&table);
+
+ if (!os)
+ {
+ os = FcObjectGetSet ();
+ destroy_os = 1;
+ }
+
/*
* Walk all available fonts adding those that
* match to the hash table
bail1:
FcListHashTableCleanup (&table);
bail0:
+ if (destroy_os)
+ FcObjectSetDestroy (os);
return 0;
}
if (!config)
{
+ if (!FcInitBringUptoDate ())
+ return 0;
+
config = FcConfigGetCurrent ();
if (!config)
return 0;
sets[nsets++] = config->fonts[FcSetApplication];
return FcFontSetList (config, sets, nsets, p, os);
}
+#define __fclist__
+#include "fcaliastail.h"
+#undef __fclist__