Skip to content

Commit

Permalink
name-parser: Revert file name change
Browse files Browse the repository at this point in the history
[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 <[email protected]>
  • Loading branch information
Finii committed Nov 11, 2023
1 parent d3ee35d commit 784e892
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
9 changes: 9 additions & 0 deletions bin/scripts/name_parser/FontnameParser.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,15 @@ def psname(self):
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()
Expand Down
28 changes: 18 additions & 10 deletions font-patcher
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 784e892

Please sign in to comment.