nerd-fonts/bin/scripts/name_parser/query_name
Fini Jastrow 00d02f84b8 query_name: Add compatible fullname
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-11-26 20:12:09 +01:00

62 lines
2 KiB
Python
Executable file

#!/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 ''
sfnt_compat = sfnt['Compatible Full'] if 'Compatible Full' in sfnt else None
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('Compatible Fullname {}'.format(sfnt_compat))
print('fondname {}'.format(aname))