Blame tools/utility/metafont/bulk_eps_import.py

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 ) )