Paul de Vrieze wrote:
On Friday 18 October 2002 05:21, Ian Pilcher wrote:
As an aside, this doesn't work for the Courier fonts that ship with
XFree86. I suspect that this is because a couple of them don't have a
spacing value.
How can I check this?
Here is my very first fontconfig program. The usage is:
fcdump [-d] [pattern]
If '-d' is omitted, a single-line version of each pattern will be
printed (with FcNameUnparse); if '-d' is present, a multi-line version
will be printed (with FcPatternPrint). If no pattern is supplied, all
fonts will be printed.
--
Ian Pilcher [EMAIL PROTECTED]
#include stdlib.h
#include string.h
#include stdio.h
#include errno.h
#include fontconfig/fontconfig.h
int main(int argc, char *argv[])
{
FcFontSet *fonts;
int i, print_detail = 0;
FcChar8 *name;
FcPattern *pattern = NULL;
FcObjectSet *objects;
if (argc = 2 strcmp(argv[1], -d) == 0)
print_detail = 1;
if (FcInit() != FcTrue)
{
perror(FcInit);
exit(__LINE__);
}
if (argc = 2 + print_detail)
{
pattern = FcNameParse(argv[1 + print_detail]);
if (pattern == NULL)
{
perror(FcNameParse);
exit(__LINE__);
}
objects = FcObjectSetBuild(FC_FAMILY, FC_STYLE, FC_SLANT, FC_WEIGHT,
FC_SIZE, FC_ASPECT, FC_PIXEL_SIZE, FC_SPACING, FC_FOUNDRY,
FC_ANTIALIAS, FC_HINTING, FC_VERTICAL_LAYOUT, FC_AUTOHINT,
FC_GLOBAL_ADVANCE, FC_FILE, FC_INDEX, FC_FT_FACE, FC_RASTERIZER,
FC_OUTLINE, FC_SCALABLE, FC_SCALE, FC_DPI, FC_RGBA, FC_MINSPACE,
NULL);
fonts = FcFontList(NULL, pattern, objects);
if (fonts == NULL)
{
perror(FcFontList);
exit(__LINE__);
}
}
else
{
fonts = FcConfigGetFonts(NULL, FcSetSystem);
if (fonts == NULL)
{
perror(FcConfigGetFonts);
exit(__LINE__);
}
}
for (i = 0; i fonts-nfont; ++i)
{
if (print_detail)
{
FcPatternPrint(fonts-fonts[i]);
continue;
}
name = FcNameUnparse(fonts-fonts[i]);
if (name == NULL)
{
perror(FcNameUnparse);
exit(__LINE__);
}
pattern = FcNameParse(name);
if (pattern == NULL)
{
perror(FcNameParse);
exit(__LINE__);
}
free(name);
FcPatternDel(pattern, FC_CHARSET);
FcPatternDel(pattern, FC_LANG);
name = FcNameUnparse(pattern);
if (name == NULL)
{
perror(FcNameUnparse);
exit(__LINE__);
}
puts(name);
FcPatternDestroy(pattern);
free(name);
}
return 0;
}