63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
# Automatically group the font files by family names and style names,
|
||
|
# and assume each bitmap font only contains one font face.
|
||
|
#
|
||
|
# Generates one otb file per (family name, style name) tuple, named
|
||
|
# after the tuple.
|
||
|
#
|
||
|
# This tool requires ftdump and fonttosfnt.
|
||
|
|
||
|
# Written by Peng Wu as
|
||
|
# https://pwu.fedorapeople.org/fonts/convertbitmap/convertfont.py
|
||
|
# Some changes by Hans Ulrich Niedermann.
|
||
|
|
||
|
import sys
|
||
|
import subprocess
|
||
|
|
||
|
usage = '''
|
||
|
bitmapfonts2otb.py [BITMAPFONTFILE]...
|
||
|
'''
|
||
|
|
||
|
fontnames = dict()
|
||
|
|
||
|
# get font family name and style name by ftdump
|
||
|
def getfullname(fontname):
|
||
|
output = subprocess.check_output(['ftdump', fontname])
|
||
|
|
||
|
output = output.decode('utf8')
|
||
|
# only contain one font face
|
||
|
assert not 'Face number: 1' in output
|
||
|
result = {}
|
||
|
for row in output.split('\n'):
|
||
|
if ':' in row:
|
||
|
key, value = row.split(': ')
|
||
|
result[key.strip()] = value.strip()
|
||
|
|
||
|
familyname, stylename = result['family'], result['style']
|
||
|
if stylename == 'Regular':
|
||
|
return familyname
|
||
|
else:
|
||
|
return familyname + ' ' + stylename
|
||
|
|
||
|
|
||
|
def generate_fonts():
|
||
|
for fullname, filenames in fontnames.items():
|
||
|
outputfilename = fullname.replace(' ', '-') + '.otb'
|
||
|
argv = ['fonttosfnt', '-b', '-c', '-g', '2', '-m', '2', '-o', outputfilename ]
|
||
|
argv.extend(filenames)
|
||
|
print(outputfilename)
|
||
|
print(' '.join(argv))
|
||
|
print(subprocess.check_output(argv).decode('utf8'))
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
for bitmapfontname in sys.argv[1:]:
|
||
|
fullname = getfullname(bitmapfontname)
|
||
|
if fullname in fontnames:
|
||
|
fontnames[fullname].append(bitmapfontname)
|
||
|
else:
|
||
|
fontnames[fullname] = [bitmapfontname]
|
||
|
|
||
|
generate_fonts()
|