From 0c86382f26886368fb8ab1c70d20c61afa17ba5c Mon Sep 17 00:00:00 2001 From: Fini Jastrow Date: Mon, 27 Nov 2023 14:11:51 +0100 Subject: [PATCH] name-parser: Fill short and long name as TypoFamily [why] This sets out to circumvent a problem with VisualStudio 2022. That application seems to have problems with fonts when the ID16 is not a prefix in ID1. We have this when --makegroups >= 4, because ID1 has the short name suffix 'NF' ID16 has the long suffix 'Nerd Font' These fonts can be selected in VisualStudio 2022, and the preview works ok, but one active some replacement default font is used instead. See more discussions in # [how] Write both forms in ID16 fields, 'NF' and 'Nerd Font' suffixes. This works as long as the application considers all languages equal. Signed-off-by: Fini Jastrow --- bin/scripts/name_parser/FontnameParser.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/bin/scripts/name_parser/FontnameParser.py b/bin/scripts/name_parser/FontnameParser.py index 5768c42b140..d932d174d73 100644 --- a/bin/scripts/name_parser/FontnameParser.py +++ b/bin/scripts/name_parser/FontnameParser.py @@ -180,9 +180,18 @@ def psname(self): sub = FontnameTools.postscript_char_filter(sub) return self._make_ps_name(fam + sub, False) - def preferred_family(self): + def preferred_family(self, short_alternative = False): """Get the SFNT Preferred Familyname (ID 16)""" + # When short_alternative we get the short named alternative needed for some Windows applications (name, rest) = self._shortened_name() + other = self.other_token + if short_alternative: + if self.use_short_families[1]: + [ other ] = FontnameTools.short_styles([ other ], self.use_short_families[2]) + pfn = FontnameTools.concat(name, rest, self.other_token, self.short_family_suff) + if pfn == self.preferred_family(False): + return '' + return pfn pfn = FontnameTools.concat(name, rest, self.other_token, self.family_suff) if self.suppress_preferred_if_identical and pfn == self.family(): # Do not set if identical to ID 1 @@ -231,7 +240,7 @@ def subfamily(self): def ps_familyname(self): """Get the PS Familyname""" - fam = self.preferred_family() + fam = self.preferred_family(False) if len(fam) < 1: fam = self.family() return self._make_ps_name(fam, True) @@ -350,12 +359,18 @@ def rename_font(self, font): sfnt_list += [( 'English (US)', 'Fullname', self.checklen(63, 'Fullname (ID 4)', self.fullname()) )] # 4 sfnt_list += [( 'English (US)', 'PostScriptName', self.checklen(63, 'PSN (ID 6)', self.psname()) )] # 6 - p_fam = self.preferred_family() + p_fam = self.preferred_family(False) if len(p_fam): sfnt_list += [( 'English (US)', 'Preferred Family', self.checklen(31, 'PrefFamily (ID 16)', p_fam) )] # 16 + p_fam = self.preferred_family(True) + if len(p_fam): + sfnt_list += [( 'English (British)', 'Preferred Family', self.checklen(31, 'PrefFamily (ID 16)', p_fam) )] p_sty = self.preferred_styles() if len(p_sty): sfnt_list += [( 'English (US)', 'Preferred Styles', self.checklen(31, 'PrefStyles (ID 17)', p_sty) )] # 17 + if len(p_fam): + # Set only if ID16 for British has been set + sfnt_list += [( 'English (British)', 'Preferred Styles', self.checklen(31, 'PrefStyles (ID 17)', p_sty) )] font.sfnt_names = tuple(sfnt_list)