name-parser: Revert file name change

[why]
It is better to have a not-abbreviated file name so that one can make
sense out of the name parts, especially when doing a partial patch.
With the previous commit we ended up with all abbreviated names.

The filename length is hopefully not limited, at least not as severe as
the SFNT table entries.

[how]
We need to store the answers somewhere because the naming is only
understood by the FontnameParser object which we throw away soon.
As fallback we still can parse the SFNT table, for example when the old
renaming is used.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
This commit is contained in:
Fini Jastrow 2023-11-11 04:23:30 +01:00
parent d3ee35db8e
commit 784e892575
2 changed files with 27 additions and 10 deletions

View file

@ -180,6 +180,15 @@ class FontnameParser:
sub = FontnameTools.postscript_char_filter(sub)
return self._make_ps_name(fam + sub, False)
def long_family(self):
"""Get unabbreviated Familyname"""
(name, rest) = self._shortened_name()
return FontnameTools.concat(name, rest, self.other_token, self.family_suff)
def long_subfamily(self):
"""Get unabbreviated Styles"""
return FontnameTools.concat(self.weight_token, self.style_token)
def preferred_family(self):
"""Get the SFNT Preferred Familyname (ID 16)"""
(name, rest) = self._shortened_name()

View file

@ -6,7 +6,7 @@
from __future__ import absolute_import, print_function, unicode_literals
# Change the script version when you edit this script:
script_version = "4.7.0"
script_version = "4.7.1"
version = "3.0.2"
projectName = "Nerd Fonts"
@ -306,16 +306,20 @@ def get_old_average_x_width(font):
s += font[g].width * weights[g]
return int(s / 1000)
def create_filename(fonts):
def create_filename(patcher, fonts):
""" Determine filename from font object(s) """
pfam = patcher.long_family
psubfam = patcher.long_subfamily
sfnt = { k: v for l, k, v in fonts[0].sfnt_names }
sfnt_pfam = sfnt.get('Preferred Family', sfnt['Family'])
sfnt_psubfam = sfnt.get('Preferred Styles', sfnt['SubFamily'])
if not pfam:
pfam = sfnt.get('Preferred Family', sfnt['Family'])
if not psubfam or len(psubfam) < 1:
psubfam = sfnt.get('Preferred Styles', sfnt['SubFamily'])
if len(fonts) > 1:
return sfnt_pfam
if len(sfnt_psubfam) > 0:
sfnt_psubfam = '-' + sfnt_psubfam
return (sfnt_pfam + sfnt_psubfam).replace(' ', '')
return pfam.replace(' ', '')
if len(psubfam) > 0:
psubfam = '-' + psubfam
return (pfam + psubfam).replace(' ', '')
class font_patcher:
@ -333,6 +337,8 @@ class font_patcher:
self.essential = set()
self.config = configparser.ConfigParser(empty_lines_in_values=False, allow_no_value=True)
self.xavgwidth = [] # list of ints
self.long_family = None
self.long_subfamily = None
def patch(self, font):
self.sourceFont = font
@ -426,11 +432,11 @@ class font_patcher:
break
outfile = os.path.normpath(os.path.join(
sanitize_filename(self.args.outputdir, True),
sanitize_filename(create_filename(sourceFonts)) + ".ttc"))
sanitize_filename(create_filename(self, sourceFonts)) + ".ttc"))
sourceFonts[0].generateTtc(outfile, sourceFonts[1:], flags=gen_flags, layer=layer)
message = " Generated {} fonts\n \===> '{}'".format(len(sourceFonts), outfile)
else:
fontname = create_filename(sourceFonts)
fontname = create_filename(self, sourceFonts)
if not fontname:
fontname = sourceFont.cidfontname
outfile = os.path.normpath(os.path.join(
@ -749,6 +755,8 @@ class font_patcher:
# inject_suffix(family, ps_fontname, short_family)
n.inject_suffix(verboseAdditionalFontNameSuffix, ps_suffix, short_family)
n.rename_font(font)
self.long_family = n.long_family()
self.long_subfamily = n.long_subfamily()
font.comment = projectInfo
font.fontlog = projectInfo