/*
- * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.13 2002/08/22 07:36:45 keithp Exp $
+ * $RCSId: xc/lib/fontconfig/src/fcname.c,v 1.15 2002/09/26 00:17:28 keithp Exp $
*
- * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2000 Keith Packard
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
static const FcObjectType _FcBaseObjectTypes[] = {
{ FC_FAMILY, FcTypeString, },
+ { FC_FAMILYLANG, FcTypeString, },
{ FC_STYLE, FcTypeString, },
+ { FC_STYLELANG, FcTypeString, },
+ { FC_FULLNAME, FcTypeString, },
+ { FC_FULLNAMELANG, FcTypeString, },
{ FC_SLANT, FcTypeInteger, },
{ FC_WEIGHT, FcTypeInteger, },
+ { FC_WIDTH, FcTypeInteger, },
{ FC_SIZE, FcTypeDouble, },
{ FC_ASPECT, FcTypeDouble, },
{ FC_PIXEL_SIZE, FcTypeDouble, },
{ FC_FOUNDRY, FcTypeString, },
/* { FC_CORE, FcTypeBool, }, */
{ FC_ANTIALIAS, FcTypeBool, },
+ { FC_HINT_STYLE, FcTypeInteger, },
{ FC_HINTING, FcTypeBool, },
{ FC_VERTICAL_LAYOUT, FcTypeBool, },
{ FC_AUTOHINT, FcTypeBool, },
{ FC_MATRIX, FcTypeMatrix },
{ FC_CHARSET, FcTypeCharSet },
{ FC_LANG, FcTypeLangSet },
+ { FC_FONTVERSION, FcTypeInteger },
+ { FC_CAPABILITY, FcTypeString },
+ { FC_FONTFORMAT, FcTypeString },
+ { FC_EMBOLDEN, FcTypeBool },
};
#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0])
return 0;
}
+static int objectptr_count = 1;
+static int objectptr_alloc = 0;
+static int * objectptr_indices = 0;
+
+void
+FcObjectNewBank(void)
+{
+ objectptr_count = 1;
+ objectptr_alloc = 0;
+ objectptr_indices = 0;
+}
+
+// XXX todo: introduce a hashtable for faster lookup
+FcObjectPtr
+FcObjectToPtr (const char * object)
+{
+ int i;
+ const FcObjectTypeList *l;
+ const FcObjectType *t;
+
+ for (l = _FcObjectTypes; l; l = l->next)
+ {
+ for (i = 0; i < l->ntypes; i++)
+ {
+ t = &l->types[i];
+ if (!strcmp (object, t->object))
+ return i;
+ }
+ }
+ abort();
+ return 0;
+}
+
+const char *
+FcObjectPtrU (FcObjectPtr si)
+{
+ return _FcObjectTypes->types[si].object;
+}
+
+int
+FcObjectNeededBytes (FcObjectPtr si)
+{
+ return 0;
+}
+
+void *
+FcObjectDistributeBytes (FcCache * metadata, void * block_ptr)
+{
+ return block_ptr;
+}
+
+FcObjectPtr
+FcObjectSerialize (FcObjectPtr si)
+{
+ return si;
+}
+
+void
+FcObjectUnserialize (FcCache metadata, FcConfig * config, void *block_ptr)
+{
+}
+
+int
+FcObjectPtrCompare (const FcObjectPtr a, const FcObjectPtr b)
+{
+ return a - b;
+}
+
static const FcConstant _FcBaseConstants[] = {
+ { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, },
+ { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, },
+ { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, },
{ (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, },
+ { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, },
+ { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, },
{ (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, },
{ (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, },
+ { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, },
{ (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, },
+ { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, },
+ { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, },
{ (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, },
{ (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, },
{ (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, },
{ (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, },
+ { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED },
+ { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED },
+ { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED },
+ { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED },
+ { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL },
+ { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED },
+ { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED },
+ { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED },
+ { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED },
+
{ (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, },
+ { (FcChar8 *) "dual", "spacing", FC_DUAL, },
{ (FcChar8 *) "mono", "spacing", FC_MONO, },
{ (FcChar8 *) "charcell", "spacing", FC_CHARCELL, },
- { (FcChar8 *) "none", "rgba", FC_RGBA_NONE },
+ { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN },
{ (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, },
{ (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, },
{ (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB },
{ (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR },
+ { (FcChar8 *) "none", "rgba", FC_RGBA_NONE },
+
+ { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE },
+ { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT },
+ { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM },
+ { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL },
};
#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0])
{
const FcConstantList *l;
int i;
-
+
for (l = _FcConstants; l; l = l->next)
{
for (i = 0; i < l->nconsts; i++)
}
FcBool
-FcNameBool (FcChar8 *v, FcBool *result)
+FcNameBool (const FcChar8 *v, FcBool *result)
{
char c0, c1;
c0 = *v;
- if (isupper (c0))
- c0 = tolower (c0);
+ c0 = FcToLower (c0);
if (c0 == 't' || c0 == 'y' || c0 == '1')
{
*result = FcTrue;
if (c0 == 'o')
{
c1 = v[1];
- if (isupper (c1))
- c1 = tolower (c1);
+ c1 = FcToLower (c1);
if (c1 == 'n')
{
*result = FcTrue;
v.u.i = atoi ((char *) string);
break;
case FcTypeString:
- v.u.s = string;
+ v.u.s = FcObjectStaticName(string);
break;
case FcTypeBool:
if (!FcNameBool (string, &v.u.b))
static FcBool
FcNameUnparseValue (FcStrBuf *buf,
- FcValue v,
+ int bank,
+ FcValue *v0,
FcChar8 *escape)
{
FcChar8 temp[1024];
+ FcValue v = FcValueCanonicalize(v0);
switch (v.type) {
case FcTypeVoid:
static FcBool
FcNameUnparseValueList (FcStrBuf *buf,
- FcValueList *v,
+ FcValueListPtr v,
FcChar8 *escape)
{
- while (v)
+ while (FcValueListPtrU(v))
{
- if (!FcNameUnparseValue (buf, v->value, escape))
+ if (!FcNameUnparseValue (buf, v.bank, &FcValueListPtrU(v)->value, escape))
return FcFalse;
- if ((v = v->next))
+ if (FcValueListPtrU(v = FcValueListPtrU(v)->next))
if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0))
return FcFalse;
}