Construct fullname from family and style
OpenType spec says that the Regular descriptor would generally be
omitted from fullname. but some fonts doesn't follow on it.
So decided to construct a fullname from family and style instead of
relying on the meta data in a font.
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/208
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 7147569..672c33a 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1133,12 +1133,10 @@
static const FT_UShort nameid_order[] = {
TT_NAME_ID_WWS_FAMILY,
- TT_NAME_ID_PREFERRED_FAMILY,
+ TT_NAME_ID_TYPOGRAPHIC_FAMILY,
TT_NAME_ID_FONT_FAMILY,
- TT_NAME_ID_MAC_FULL_NAME,
- TT_NAME_ID_FULL_NAME,
TT_NAME_ID_WWS_SUBFAMILY,
- TT_NAME_ID_PREFERRED_SUBFAMILY,
+ TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY,
TT_NAME_ID_FONT_SUBFAMILY,
TT_NAME_ID_TRADEMARK,
TT_NAME_ID_MANUFACTURER,
@@ -1272,8 +1270,6 @@
int nfamily_lang = 0;
int nstyle = 0;
int nstyle_lang = 0;
- int nfullname = 0;
- int nfullname_lang = 0;
unsigned int p, n;
FcChar8 *style = 0;
@@ -1495,8 +1491,7 @@
* and treat the instance's nameid as FONT_SUBFAMILY.
* Postscript name is automatically handled by FreeType. */
if (nameid == TT_NAME_ID_WWS_SUBFAMILY ||
- nameid == TT_NAME_ID_PREFERRED_SUBFAMILY ||
- nameid == TT_NAME_ID_FULL_NAME)
+ nameid == TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY)
continue;
if (nameid == TT_NAME_ID_FONT_SUBFAMILY)
@@ -1512,7 +1507,7 @@
{
switch (nameid) {
case TT_NAME_ID_WWS_FAMILY:
- case TT_NAME_ID_PREFERRED_FAMILY:
+ case TT_NAME_ID_TYPOGRAPHIC_FAMILY:
case TT_NAME_ID_FONT_FAMILY:
#if 0
case TT_NAME_ID_UNIQUE_ID:
@@ -1527,22 +1522,8 @@
np = &nfamily;
nlangp = &nfamily_lang;
break;
- case TT_NAME_ID_MAC_FULL_NAME:
- case TT_NAME_ID_FULL_NAME:
- if (variable)
- break;
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found full (n %2d p %d e %d l 0x%04x)",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id);
-
- obj = FC_FULLNAME_OBJECT;
- objlang = FC_FULLNAMELANG_OBJECT;
- np = &nfullname;
- nlangp = &nfullname_lang;
- break;
case TT_NAME_ID_WWS_SUBFAMILY:
- case TT_NAME_ID_PREFERRED_SUBFAMILY:
+ case TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY:
case TT_NAME_ID_FONT_SUBFAMILY:
if (variable)
break;
@@ -1686,7 +1667,7 @@
}
/* Add the fullname into the cache */
- if (!variable && !nfullname)
+ if (!variable)
{
FcChar8 *family, *style, *lang;
int n = 0;
@@ -1728,8 +1709,11 @@
memcpy (style, &style[i], len - i);
FcStrBufInit (&sbuf, NULL, 0);
FcStrBufString (&sbuf, family);
- FcStrBufChar (&sbuf, ' ');
- FcStrBufString (&sbuf, style);
+ if (FcStrCmpIgnoreBlanksAndCase(style, (const FcChar8 *) "Regular") != 0)
+ {
+ FcStrBufChar (&sbuf, ' ');
+ FcStrBufString (&sbuf, style);
+ }
if (!FcPatternObjectAddString (pat, FC_FULLNAME_OBJECT, FcStrBufDoneStatic (&sbuf)))
{
FcStrBufDestroy (&sbuf);
@@ -1738,7 +1722,6 @@
FcStrBufDestroy (&sbuf);
if (!FcPatternObjectAddString (pat, FC_FULLNAMELANG_OBJECT, (const FcChar8 *) "en"))
goto bail1;
- ++nfullname;
}
/* Add the PostScript name into the cache */
if (!variable)