/*
- * $XFree86: xc/lib/fontconfig/src/fcname.c,v 1.2 2002/02/15 06:01:28 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_SPACING, FcTypeInteger, },
{ FC_FOUNDRY, FcTypeString, },
/* { FC_CORE, FcTypeBool, }, */
{ FC_ANTIALIAS, FcTypeBool, },
+ { FC_HINT_STYLE, FcTypeInteger, },
+ { FC_HINTING, FcTypeBool, },
+ { FC_VERTICAL_LAYOUT, FcTypeBool, },
+ { FC_AUTOHINT, FcTypeBool, },
+ { FC_GLOBAL_ADVANCE, FcTypeBool, },
/* { FC_XLFD, FcTypeString, }, */
{ FC_FILE, FcTypeString, },
{ FC_INDEX, FcTypeInteger, },
{ FC_RASTERIZER, FcTypeString, },
{ FC_OUTLINE, FcTypeBool, },
{ FC_SCALABLE, FcTypeBool, },
+ { FC_DPI, FcTypeDouble },
{ FC_RGBA, FcTypeInteger, },
{ FC_SCALE, FcTypeDouble, },
/* { FC_RENDER, FcTypeBool, },*/
{ FC_CHAR_HEIGHT, FcTypeInteger },
{ FC_MATRIX, FcTypeMatrix },
{ FC_CHARSET, FcTypeCharSet },
- { FC_LANG, FcTypeString },
+ { FC_LANG, FcTypeLangSet },
+ { FC_FONTVERSION, FcTypeInteger },
+ { FC_CAPABILITY, FcTypeString },
+ { FC_FONTFORMAT, FcTypeString },
+ { FC_EMBOLDEN, FcTypeBool },
};
#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0])
l = (FcObjectTypeList *) malloc (sizeof (FcObjectTypeList));
if (!l)
return FcFalse;
+ FcMemAlloc (FC_MEM_OBJECTTYPE, sizeof (FcObjectTypeList));
l->types = types;
l->ntypes = ntypes;
l->next = _FcObjectTypes;
if (l->types == types && l->ntypes == ntypes)
{
*prev = l->next;
+ FcMemFree (FC_MEM_OBJECTTYPE, sizeof (FcObjectTypeList));
free ((void *) l);
return FcTrue;
}
for (i = 0; i < l->ntypes; i++)
{
t = &l->types[i];
- if (!FcStrCmpIgnoreCase ((FcChar8 *) object, (FcChar8 *) t->object))
+ if (!strcmp (object, t->object))
return t;
}
}
}
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 *) "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])
l = (FcConstantList *) malloc (sizeof (FcConstantList));
if (!l)
return FcFalse;
+ FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList));
l->consts = consts;
l->nconsts = nconsts;
l->next = _FcConstants;
if (l->consts == consts && l->nconsts == nconsts)
{
*prev = l->next;
+ FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList));
free ((void *) l);
return FcTrue;
}
{
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.si = FcObjectStaticName(string);
break;
case FcTypeBool:
if (!FcNameBool (string, &v.u.b))
v.u.d = strtod ((char *) string, 0);
break;
case FcTypeMatrix:
- v.u.m = m;
+ v.u.mi = FcMatrixPtrCreateDynamic(m);
sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy);
break;
case FcTypeCharSet:
- v.u.c = FcNameParseCharSet (string);
+ v.u.ci = FcCharSetPtrCreateDynamic(FcNameParseCharSet (string));
+ break;
+ case FcTypeLangSet:
+ v.u.li = FcLangSetPtrCreateDynamic(FcNameParseLangSet (string));
break;
default:
break;
const FcObjectType *t;
const FcConstant *c;
+ /* freed below */
save = malloc (strlen ((char *) name) + 1);
if (!save)
goto bail0;
for (;;)
{
name = FcNameFindNext (name, ":,", save, &delim);
- if (save[0] && t)
+ if (t)
{
v = FcNameConvert (t->type, save, &m);
if (!FcPatternAdd (pat, t->object, v, FcTrue))
{
- if (v.type == FcTypeCharSet)
- FcCharSetDestroy ((FcCharSet *) v.u.c);
+ switch (v.type) {
+ case FcTypeCharSet:
+ FcCharSetDestroy ((FcCharSet *) FcCharSetPtrU(v.u.ci));
+ break;
+ case FcTypeLangSet:
+ FcLangSetDestroy ((FcLangSet *) FcLangSetPtrU(v.u.li));
+ break;
+ default:
+ break;
+ }
goto bail2;
}
- if (v.type == FcTypeCharSet)
- FcCharSetDestroy ((FcCharSet *) v.u.c);
+ switch (v.type) {
+ case FcTypeCharSet:
+ FcCharSetDestroy ((FcCharSet *) FcCharSetPtrU(v.u.ci));
+ break;
+ case FcTypeLangSet:
+ FcLangSetDestroy ((FcLangSet *) FcLangSetPtrU(v.u.li));
+ break;
+ default:
+ break;
+ }
}
if (delim != ',')
break;
sprintf ((char *) temp, "%g", v.u.d);
return FcNameUnparseString (buf, temp, 0);
case FcTypeString:
- return FcNameUnparseString (buf, v.u.s, escape);
+ return FcNameUnparseString (buf, FcObjectPtrU(v.u.si), escape);
case FcTypeBool:
return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0);
case FcTypeMatrix:
+ {
+ FcMatrix * m = FcMatrixPtrU(v.u.mi);
sprintf ((char *) temp, "%g %g %g %g",
- v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
+ m->xx, m->xy, m->yx, m->yy);
return FcNameUnparseString (buf, temp, 0);
+ }
case FcTypeCharSet:
- return FcNameUnparseCharSet (buf, v.u.c);
+ return FcNameUnparseCharSet (buf, FcCharSetPtrU(v.u.ci));
+ case FcTypeLangSet:
+ return FcNameUnparseLangSet (buf, FcLangSetPtrU(v.u.li));
+ case FcTypeFTFace:
+ return FcTrue;
}
return FcFalse;
}
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, FcValueListPtrU(v)->value, escape))
return FcFalse;
- if ((v = v->next))
+ if (FcValueListPtrU(v = FcValueListPtrU(v)->next))
if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0))
return FcFalse;
}
const FcObjectType *o;
FcStrBufInit (&buf, buf_static, sizeof (buf_static));
- e = FcPatternFind (pat, FC_FAMILY, FcFalse);
+ e = FcPatternFindElt (pat, FC_FAMILY);
if (e)
{
if (!FcNameUnparseValueList (&buf, e->values, (FcChar8 *) FC_ESCAPE_FIXED))
goto bail0;
}
- e = FcPatternFind (pat, FC_SIZE, FcFalse);
+ e = FcPatternFindElt (pat, FC_SIZE);
if (e)
{
if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0))
!strcmp (o->object, FC_FILE))
continue;
- e = FcPatternFind (pat, o->object, FcFalse);
+ e = FcPatternFindElt (pat, o->object);
if (e)
{
if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0))