|
Packit |
f0e7df |
#!/usr/bin/fontforge -script
|
|
Packit |
f0e7df |
"""
|
|
Packit |
f0e7df |
For use on Metafont fonts.
|
|
Packit |
f0e7df |
To import glyphs each in individual .eps files into an empty font file.
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
First, process with 'mpost'. Procedure is:
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
1) Make sure you have an mfplain mem file for mpost. It may come with
|
|
Packit |
f0e7df |
the distro, but it is possible also to generate it.
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
I found an mfplain.mp file somewhere. Use it to make an mfplain.mem.
|
|
Packit |
f0e7df |
mpost -ini '\input mfplain.mp; dump'
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
2) Generate .eps files from a .mf file such as skt10.mf
|
|
Packit |
f0e7df |
mpost '&./mfplain \mag=1; truecorners:=0; filenametemplate "%j-%4c.eps"; input skt10.mf'
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
A bunch of eps files should result, with names like
|
|
Packit |
f0e7df |
skt10-012.eps
|
|
Packit |
f0e7df |
3) Use FontForge to make an empty font file, with a name like SKT.sfd
|
|
Packit |
f0e7df |
4) Run this script on the eps files like so
|
|
Packit |
f0e7df |
freefont/tools/metafont/bulk_eps_import.py SKT.sfd skt10
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
Then clean up clean up clean up.
|
|
Packit |
f0e7df |
"""
|
|
Packit |
f0e7df |
__author__ = "Stevan White"
|
|
Packit |
f0e7df |
__email__ = "stevan.white@googlemail.com"
|
|
Packit |
f0e7df |
__copyright__ = "Copyright 2008, 2011, Stevan White"
|
|
Packit |
f0e7df |
__date__ = "$Date: 2011-09-12 14:25:06 +0200 (Mon, 12 Sep 2011) $"
|
|
Packit |
f0e7df |
__version__ = "$Revision: 1694 $"
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
import fontforge
|
|
Packit |
f0e7df |
import sys, os
|
|
Packit |
f0e7df |
import fnmatch, re
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
problem = False
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
def import_glyph( font, name, chrnum ):
|
|
Packit |
f0e7df |
print "importing file: " + name + " to slot " + str( chrnum )
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
g = font.createChar( chrnum )
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
print "importing outlines " + name
|
|
Packit |
f0e7df |
g.importOutlines( name )
|
|
Packit |
f0e7df |
# The glyphs produced by MetaPost usually have a grid, whose
|
|
Packit |
f0e7df |
# right side seems to correspond to the proper right side bearing
|
|
Packit |
f0e7df |
xmax = g.layers[1].boundingBox()[2]
|
|
Packit |
f0e7df |
g.right_side_bearing = max( xmax, 0 )
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
scriptname = sys.argv[0];
|
|
Packit |
f0e7df |
argc = len( sys.argv )
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
file_pat = r'([A-Za-z0-9]*)-(\d{3,4}).eps'
|
|
Packit |
f0e7df |
file_pat = sys.argv[2] + r'-(\d{3,4}).eps'
|
|
Packit |
f0e7df |
re_file_pat = re.compile( file_pat )
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
if argc > 2:
|
|
Packit |
f0e7df |
fontfilename = sys.argv[1]
|
|
Packit |
f0e7df |
font = fontforge.open( fontfilename )
|
|
Packit |
f0e7df |
print "bulk importing to font file: " + fontfilename
|
|
Packit |
f0e7df |
chrnum = 0
|
|
Packit |
f0e7df |
directories = os.listdir('.')
|
|
Packit |
f0e7df |
directories.sort()
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
for file in directories:
|
|
Packit |
f0e7df |
matches = re_file_pat.match( file )
|
|
Packit |
f0e7df |
if matches:
|
|
Packit |
f0e7df |
chrnum = int( matches.group(1) )
|
|
Packit |
f0e7df |
import_glyph( font, file, chrnum )
|
|
Packit |
f0e7df |
font.save()
|
|
Packit |
f0e7df |
font.close()
|
|
Packit |
f0e7df |
|
|
Packit |
f0e7df |
sys.exit( int( problem ) )
|