From d6ea834746a7b2758ea5b89467c0e64446840ca4 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 11 Apr 2003 22:17:11 +0000 Subject: [PATCH] Bug #46, #47 fontconfig should retrieve type 1 font information from FontInfo dictionary Patch provided by g2@magestudios.net (Gerard Escalante) --- src/fcfreetype.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/fcfreetype.c b/src/fcfreetype.c index 7a9e32d..972390d 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -31,6 +31,7 @@ #include #include #include +#include /* * Keep Han languages separated by eliminating languages @@ -130,6 +131,7 @@ FcFreeTypeQuery (const FcChar8 *file, FcChar8 *style; int spacing; TT_OS2 *os2; + PS_FontInfoRec psfontinfo; TT_Header *head; const FcChar8 *exclusiveLang = 0; FT_SfntName sname; @@ -564,6 +566,48 @@ FcFreeTypeQuery (const FcChar8 *file, case 9: width = FC_WIDTH_ULTRAEXPANDED; break; } } + + /* + * Type 1: Check for FontInfo dictionary information + * Code from g2@magestudios.net (Gerard Escalante) + */ + + if (FT_Get_PS_Font_Info(face, &psfontinfo) == 0) + { + if (strcasecmp("thin", psfontinfo.weight) == 0) + weight = FC_WEIGHT_THIN; + else if (strcasecmp("extralight", psfontinfo.weight) == 0) + weight = FC_WEIGHT_EXTRALIGHT; + else if (strcasecmp("ultralight", psfontinfo.weight) == 0) + weight = FC_WEIGHT_ULTRALIGHT; + else if (strcasecmp("light", psfontinfo.weight) == 0) + weight = FC_WEIGHT_LIGHT; + else if (strcasecmp("regular", psfontinfo.weight) == 0) + weight = FC_WEIGHT_REGULAR; + else if (strcasecmp("normal", psfontinfo.weight) == 0) + weight = FC_WEIGHT_NORMAL; + else if (strcasecmp("medium", psfontinfo.weight) == 0) + weight = FC_WEIGHT_MEDIUM; + else if (strcasecmp("demibold", psfontinfo.weight) == 0) + weight = FC_WEIGHT_DEMIBOLD; + else if (strcasecmp("semibold", psfontinfo.weight) == 0) + weight = FC_WEIGHT_SEMIBOLD; + else if (strcasecmp("extrabold", psfontinfo.weight) == 0) + weight = FC_WEIGHT_EXTRABOLD; + else if (strcasecmp("ultrabold", psfontinfo.weight) == 0) + weight = FC_WEIGHT_EXTRABOLD; + else if (strcasecmp("bold", psfontinfo.weight) == 0) + weight = FC_WEIGHT_BOLD; + else if (strcasecmp("black", psfontinfo.weight) == 0) + weight = FC_WEIGHT_BLACK; + else if (strcasecmp("heavy", psfontinfo.weight) == 0) + weight = FC_WEIGHT_BLACK; + + if (psfontinfo.italic_angle < 0) + slant = FC_SLANT_ITALIC; + else if (psfontinfo.italic_angle >= 0) + slant = FC_SLANT_ROMAN; + } if (!FcPatternAddInteger (pat, FC_SLANT, slant)) goto bail1; -- 2.39.2