nerd-fonts/bin/scripts/name_parser/query_name
Fini Jastrow d3ee35db8e name-parser: Unify abbreviations in family names
[why]
Because the newer Preferred/Typographic names ID 16 and ID 17 have not
a very demanding length limit we add the long form of the name
addendum (i.e. Nerd Font, Nerd Font Mono, Nerd Font Propo).

In the more restricted old names ID 1 and ID 2 we use the short forms
(i.e. NF, NFM, NFP).

This seems to be problematic with Visual Studio (Community) 2022 and the
fonts can be selected but are not really used.

The Postscript family name is never shortened which seems to be of no
consequence, but still is different than the other.

[how]
When creating the Preferred/Typographic Family (ID 16) we check the
shortening mode first and abbreviate the parts as needed and alike ID 1.

This will also change the filenames, because they base on the SFNT
table. We can not change that without changing the whole mechanism.

[note]
Also add new tool that lists all names of fonts, including the
Postscript ones.

Fixes: #1242

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-11-11 23:59:07 +01:00

60 lines
1.8 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 ''
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))