Skip to content

Commit

Permalink
Merge pull request #1406 from ryanoasis/bugfix/visualstudio2022
Browse files Browse the repository at this point in the history
Bugfix for Visual Studio 2022
  • Loading branch information
Finii authored Nov 11, 2023
2 parents 4579b49 + 784e892 commit 61ab5c0
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 11 deletions.
16 changes: 15 additions & 1 deletion bin/scripts/name_parser/FontnameParser.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,24 @@ 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()
pfn = FontnameTools.concat(name, rest, self.other_token, self.family_suff)
other = self.other_token
weights = self.weight_token
aggressive = self.use_short_families[2]
if self.use_short_families[1]:
[ other, weights ] = FontnameTools.short_styles([ other, weights ], aggressive)
pfn = FontnameTools.concat(name, rest, other, self.short_family_suff)
if self.suppress_preferred_if_identical and pfn == self.family():
# Do not set if identical to ID 1
return ''
Expand Down
60 changes: 60 additions & 0 deletions bin/scripts/name_parser/query_name
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/usr/bin/env python3
# coding=utf8
#
# Usually called via
# $ fontforge query_name fontfile.tff 2>/dev/null

import sys
import os.path
import fontforge

###### Some helpers

def get_sfnt_dict(font):
"""Extract SFNT table as nice dict"""
return { k: v for l, k, v in font.sfnt_names }

###### Let's go!

if len(sys.argv) < 2:
print('Usage: {} font_name [font_name ...]\n'.format(sys.argv[0]))
sys.exit(1)

print('Examining {} font files'.format(len(sys.argv) - 1))
add_line = False

for filename in sys.argv[1:]:
fullfile = os.path.basename(filename)
fname = os.path.splitext(fullfile)[0]

font = fontforge.open(filename, 1)
sfnt = get_sfnt_dict(font)
psname = font.fontname
aname = font.fondname
full = font.fullname
fam = font.familyname
font.close()

sfnt_full = sfnt['Fullname']
sfnt_fam = sfnt['Family']
sfnt_subfam = sfnt['SubFamily']
sfnt_pfam = sfnt['Preferred Family'] if 'Preferred Family' in sfnt else ''
sfnt_psubfam = sfnt['Preferred Styles'] if 'Preferred Styles' in sfnt else ''
sfnt_psname = sfnt['PostScriptName'] if 'PostScriptName' in sfnt else ''

if add_line:
print()
else:
add_line = True

print('======== {} ========'.format(fname))
print('SFNT Fullname ID 4 {}'.format(sfnt_full))
print('SFNT Family ID 1 {}'.format(sfnt_fam))
print('SFNT SubFamily ID 2 {}'.format(sfnt_subfam))
print('SFNT Pref Family ID 16 {}'.format(sfnt_pfam))
print('SFNT Pref Styles ID 17 {}'.format(sfnt_psubfam))
print('SFNT PS Name ID 6 {}'.format(sfnt_psname))
print('PS fontname {}'.format(psname))
print('PS fullname {}'.format(full))
print('PS familyname {}'.format(fam))
print('fondname {}'.format(aname))
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 61ab5c0

Please sign in to comment.