From: Jan Nieuwenhuizen <janneke@gnu.org> Date: Fri, 9 Oct 1998 15:17:39 +0000 (+0200) Subject: partial: 1.0.14.jcn X-Git-Tag: release/1.0.14~1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=59d157b880be249130b6ee71a35f5e70b9534c1c;p=lilypond.git partial: 1.0.14.jcn --- diff --git a/buildscripts/ps-to-pfa.py b/buildscripts/ps-to-pfa.py new file mode 100644 index 0000000000..33ee75ddec --- /dev/null +++ b/buildscripts/ps-to-pfa.py @@ -0,0 +1,165 @@ +#!@PYTHON@ + +# ps-to-pfa.py -- make PostScript Type 3 font from separate ps char files +# +# source file of the GNU LilyPond music typesetter +# +# (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org> + +name = 'ps-to-pfa' +version = '0.2' + +outdir = 'out/' +datadir = '' + +import os +import sys + +import getopt +from string import * +import regex +import regsub +import time + +def program_id (): + return name + ' version ' + version; + +def identify (): + sys.stdout.write (program_id () + '\n') + +def help (): + sys.stdout.write ("Usage: %s [options] [files]\n" + "ps-to-pfa.py -- make PostScript Type 3 font from separate ps char files\n\n" + + "Options:\n" + + " -d, --datadir=DIR use DIR for ps header/footer\n" + + " -h, --help print this help\n" + % (program_name) + ) + sys.exit (0) + +identify () +(options, files) = getopt.getopt ( + sys.argv[1:], 'd:', ['help', 'package']) +for opt in options: + o = opt[0] + a = opt[1] + if o== '--help' or o == '-h': + help () + elif o == '-d' or o == '--datadir': + datadir = a + else: + print o + raise getopt.error + + +def gulp_file (f): + sys.stderr.write ('[%s' % f) + try: + i = open (f) + i.seek (0, 2) + n = i.tell () + i.seek (0,0) + except: + sys.stderr.write ('can\'t open file %s\n ' % f) + return '' + s = i.read (n) + sys.stderr.write (']') + if len (s) <= 0: + sys.stderr.write ('gulped empty file: %s\n'% f) + return s + +mf = files[0] +# urg ? +font = os.path.basename (os.path.splitext (mf)[0]) +sys.stderr.write ('Font: %s\n'% font) + +def header (f): + f.write ('%!PS-AdobeFont-3.0: ' + font + '\n') + f.write ('%%%%Creator: %s-%s\n' % (name, version)) + f.write ('\n') + f.write ('/setgray { 1 add } bind def\n' + '\n' +'8 dict begin\n' +'/FontType 3 def %% Required elements of font\n' +'/FontName /%s def\n' +'/FontMatrix [.001 0 0 .001 0 0] def\n' +'%%/FontMatrix [.01 0 0 .01 0 0] def\n' +'%%/FontMatrix [0.1 0 0 0.1 0 0] def\n' +'%% /FontBBox [-1000 -1000 1000 1000] def\n' +' /FontBBox [-3000 -3000 3000 3000] def\n' +'%% /FontBBox [-300 -300 300 300] def\n' +'%%/FontBBox [-30 -30 30 30] def\n' +'\n' +'/Encoding 256 array def %% Trivial encoding vector\n' +'0 1 255 {Encoding exch /.notdef put} for\n' % (font)) + +def footer (f): + f.write ('\n' +'/BuildGlyph { % Stack contains: font charname\n' +'% 1000 0 % Width\n' +'% -750 -750 750 750 % Bounding Box\n' +' 3000 0 % Width\n' +' -3000 -3000 3000 3000 % Bounding Box\n' +'% 300 0 % Width\n' +'% -300 -300 300 300 % Bounding Box\n' +'% 30 0 % Width\n' +'% -30 -30 30 30 % Bounding Box\n' +' setcachedevice\n' +' exch /CharProcs get exch % Get CharProcs dictionary\n' +' 2 copy known not {pop /.notdef} if % See if charname is known\n' +' get exec % Execute character procedure\n' +'} bind def\n' +'\n' +'/BuildChar { % Level 1 compatibility\n' +' 1 index /Encoding get exch get\n' +' 1 index /BuildGlyph get exec\n' +'} bind def\n' +'\n' +'currentdict\n' +'end % of font dictionary\n') + f.write ('\n') + f.write ('/%s\n' % font) + f.write ('' +'exch definefont pop % Define the font\n') + +def characters (f): + #urg + # chars = os.listdir () + # chars.sort () + sys.stderr.write ('[') + pipe = os.popen ('/bin/ls -1 ' + font + '.[0-9] ' + font + '.[0-9][0-9] ' + font + '.[0-9][0-9][0-9] 2> /dev/null') + chars = [] + i = pipe.readline () + while i: + chars.append (i[0:len (i)-1]) + i = pipe.readline () + f.write ('\n' +'/CharProcs 3 dict def % Subsidiary dictiorary for\n' +'CharProcs begin % individual character definitions\n') + charprocs = ' /.notdef {} def\n' + encoding = '' + for i in chars: + s = gulp_file (i) + s = regsub.gsub ('^%.*\n', '', s) + s = regsub.gsub ('^showpage\n', '', s) + s = regsub.gsub ('^', ' ', s) + n = atoi (regsub.gsub ('.*\.', '', i)) + s = '\n /%s-%d{\n%s} bind def\n' % (font, n, s) + encoding = encoding + 'Encoding %d /%s-%d put\n' % (n, font, n) + charprocs = charprocs + s + f.write (charprocs) + f.write ('\n') + f.write ('end % of CharProcs\n') + f.write (encoding) + f.write ('\n') + sys.stderr.write (']') + +ps = outdir + font + '.pfa' +ps_file = open (ps, 'w') +header (ps_file) +characters (ps_file) +footer (ps_file) +sys.stderr.write ('\n') +ps_file.close () +sys.stderr.write ('Wrote PostScript font: %s\n'% ps) +