[varfonts] Do not set postscriptname for varfont pattern

This commit is contained in:
Behdad Esfahbod 2017-09-20 16:25:06 -07:00
parent be735d6a68
commit 2d0063948a
1 changed files with 46 additions and 43 deletions

View File

@ -1207,8 +1207,6 @@ FcFreeTypeQueryFace (const FT_Face face,
FcChar8 *style = 0; FcChar8 *style = 0;
int st; int st;
char psname[256];
const char *tmp;
FcBool symbol = FcFalse; FcBool symbol = FcFalse;
@ -1595,52 +1593,57 @@ FcFreeTypeQueryFace (const FT_Face face,
} }
/* Add the PostScript name into the cache */ /* Add the PostScript name into the cache */
tmp = FT_Get_Postscript_Name (face); if (!variable)
if (!tmp)
{ {
unsigned int i; char psname[256];
FcChar8 *family, *familylang = NULL; const char *tmp;
size_t len; tmp = FT_Get_Postscript_Name (face);
int n = 0; if (!tmp)
/* Workaround when FT_Get_Postscript_Name didn't give any name.
* try to find out the English family name and convert.
*/
while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &familylang) == FcResultMatch)
{ {
if (FcStrCmp (familylang, (const FcChar8 *)"en") == 0) unsigned int i;
break; FcChar8 *family, *familylang = NULL;
n++; size_t len;
familylang = NULL; int n = 0;
}
if (!familylang)
n = 0;
if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch) /* Workaround when FT_Get_Postscript_Name didn't give any name.
* try to find out the English family name and convert.
*/
while (FcPatternObjectGetString (pat, FC_FAMILYLANG_OBJECT, n, &familylang) == FcResultMatch)
{
if (FcStrCmp (familylang, (const FcChar8 *)"en") == 0)
break;
n++;
familylang = NULL;
}
if (!familylang)
n = 0;
if (FcPatternObjectGetString (pat, FC_FAMILY_OBJECT, n, &family) != FcResultMatch)
goto bail1;
len = strlen ((const char *)family);
/* the literal name in PostScript Language is limited to 127 characters though,
* It is the architectural limit. so assuming 255 characters may works enough.
*/
for (i = 0; i < len && i < 255; i++)
{
/* those characters are not allowed to be the literal name in PostScript */
static const char exclusive_chars[] = "\x04()/<>[]{}\t\f\r\n ";
if (strchr(exclusive_chars, family[i]) != NULL)
psname[i] = '-';
else
psname[i] = family[i];
}
psname[i] = 0;
}
else
{
strncpy (psname, tmp, 255);
psname[255] = 0;
}
if (!FcPatternAddString (pat, FC_POSTSCRIPT_NAME, (const FcChar8 *)psname))
goto bail1; goto bail1;
len = strlen ((const char *)family);
/* the literal name in PostScript Language is limited to 127 characters though,
* It is the architectural limit. so assuming 255 characters may works enough.
*/
for (i = 0; i < len && i < 255; i++)
{
/* those characters are not allowed to be the literal name in PostScript */
static const char exclusive_chars[] = "\x04()/<>[]{}\t\f\r\n ";
if (strchr(exclusive_chars, family[i]) != NULL)
psname[i] = '-';
else
psname[i] = family[i];
}
psname[i] = 0;
} }
else
{
strncpy (psname, tmp, 255);
psname[255] = 0;
}
if (!FcPatternAddString (pat, FC_POSTSCRIPT_NAME, (const FcChar8 *)psname))
goto bail1;
if (file && *file && !FcPatternAddString (pat, FC_FILE, file)) if (file && *file && !FcPatternAddString (pat, FC_FILE, file))
goto bail1; goto bail1;