]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/mf-to-table.py
*** empty log message ***
[lilypond.git] / buildscripts / mf-to-table.py
index 22afb3e9ea64144be6e012b2f8f4cc34cdf43027..c738e3bb3be4bd51615df184d29afdfb0603956d 100644 (file)
@@ -1,10 +1,10 @@
 #!@PYTHON@
 
-# mf-to-table.py -- convert spacing info in MF logs .afm and .tex
+# mf-to-table.py -- convert spacing info in MF logs . and .tex
 #
 # source file of the GNU LilyPond music typesetter
 #
-# (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 import os
 import sys
@@ -56,14 +56,15 @@ def tfm_checksum (fn):
 
        return cs
 
-
-## ugh.  What's font_family supposed to be?  It's not an afm thing.
 font_family = 'feta'
 
 def parse_logfile (fn):
        (autolines, deps) = read_log_file (fn)
        charmetrics = []
-       global_info = {}
+       
+       global_info = {
+               'filename' : os.path.splitext (os.path.basename (fn))[0]
+               }
        group = ''
 
        for l in autolines:
@@ -81,7 +82,6 @@ def parse_logfile (fn):
                        m = {
                                'description': tags[1],
                                'name': name,
-                               'tex': tags[10],
                                'code': string.atoi (tags[2]),
                                'breapth': string.atof (tags[3]),
                                'width': string.atof (tags[4]),
@@ -103,8 +103,8 @@ def parse_logfile (fn):
                        encoding = re.sub (' ','-', tags[5])
                        tags = tags[:-1]
                        name = tags[1:]
-                       global_info['DesignSize'] = string.atof (tags[4])
-                       global_info['FontName'] = string.join (name,'-')
+                       global_info['design_size'] = string.atof (tags[4])
+                       global_info['FontName'] = string.join (name, '-')
                        global_info['FullName'] = string.join (name,' ')
                        global_info['FamilyName'] = string.join (name[1:-1],
                                                                 '-')
@@ -118,66 +118,65 @@ def parse_logfile (fn):
                        global_info['Descender'] = '0'
                        global_info['EncodingScheme'] = encoding
 
+               elif tags[0] == 'parameter':
+                       global_info[tags[1]] = tags[2];
+                       
        return (global_info, charmetrics, deps)
 
 
-def write_afm_char_metric (file, charmetric):
-       f = 1000;
-       tup = (charmetric['code'],
-              charmetric['name'],
-              -charmetric['breapth'] * f,
-              -charmetric['depth'] * f,
-              charmetric['width'] * f,
-              charmetric['height'] * f,
-              charmetric['wx'] * f,
-              charmetric['wy'] * f)
-
-       file.write ('C %d ; N %s ; B %d %d %d %d ; W %d %d ;\n' % tup)
-
-
-def write_afm_header (file):
-       file.write ("StartFontMetrics 2.0\n")
-       file.write ("Comment Automatically generated by mf-to-table.py\n")
-
-
-def write_afm_metric (file, global_info, charmetrics):
-       for (k, v) in global_info.items():
-               file.write ("%s %s\n" % (k, v))
-       file.write ('StartCharMetrics %d\n' % len(charmetrics ))
-       for m in charmetrics:
-               write_afm_char_metric (file, m)
-       file.write ('EndCharMetrics\n')
-       file.write ('EndFontMetrics\n')
-
 
 def write_tex_defs (file, global_info, charmetrics):
-       ## nm = global_info['FontFamily']
        nm = font_family
        for m in charmetrics:
+               
+               texname = re.sub ('[_.]', 'X',  m['name'])
+               def digit_to_letter (match):
+                       return chr (ord (match.group(1)) - ord ('0') + ord ('A'))
+               texname = re.sub ('([0-9])', digit_to_letter, texname)
                file.write (r'''\gdef\%s%s{\char%d}%%%s''' % \
-                           (nm, m['tex'], m['code'],'\n'))
+                           (nm, texname, m['code'],'\n'))
        file.write ('\\endinput\n')
 
 
-def write_otf_lisp_table (file, global_info, charmetrics):
+def write_character_lisp_table (file, global_info, charmetrics):
 
        def conv_char_metric (charmetric):
                f = 1.0
-               s = """((%s .
-(bbox . (%f %f %f %f))
-(attachment . (%f %f))))
+               s = """(%s .
+((bbox . (%f %f %f %f))
+ (subfont . "%s")
+ (subfont-index . %d)
+ (attachment . (%f . %f))))
 """ %(charmetric['name'],
-                -charmetric['breapth'] * f,
-                -charmetric['depth'] * f,
-                charmetric['width'] * f,
-                charmetric['height'] * f,
-                charmetric['wx'],
-                charmetric['wy'])
+      -charmetric['breapth'] * f,
+      -charmetric['depth'] * f,
+      charmetric['width'] * f,
+      charmetric['height'] * f,
+      global_info['filename'],
+      charmetric['code'],
+      charmetric['wx'],
+      charmetric['wy'])
 
                return s
 
        for c in charmetrics:
                file.write (conv_char_metric (c))
+
+
+def write_global_lisp_table (file, global_info):
+       str = ''
+
+       keys = ['staffsize', 'stafflinethickness', 'staff_space',
+               'linethickness', 'black_notehead_width', 'ledgerlinethickness',
+               'design_size', 
+               'blot_diameter'
+               ]
+       for k in keys:
+               if global_info.has_key (k):
+                       str = str + "(%s . %s)\n" % (k,global_info[k])
+
+       file.write (str)
+
        
 def write_ps_encoding (name, file, global_info, charmetrics):
        encs = ['.notdef'] * 256
@@ -255,7 +254,6 @@ def help ():
 Generate feta metrics table from preparated feta log.
 
 Options:
-  -a, --afm=FILE         specify .afm file
   -d, --dep=FILE         print dependency info to FILE
   -h, --help             print this help
   -l, --ly=FILE          name output table
@@ -270,15 +268,15 @@ Options:
 (options, files) = \
   getopt.getopt (sys.argv[1:],
                 'a:d:hl:o:p:t:',
-                ['enc=', 'afm=', 'outdir=', 'dep=', 'lisp=',
+                ['enc=',  'outdir=', 'dep=', 'lisp=',
+                 'global-lisp=',
                  'tex=', 'ly=', 'debug', 'help', 'package='])
 
-
-lisp_nm = ''
+global_lisp_nm = ''
+char_lisp_nm = ''
 enc_nm = ''
 texfile_nm = ''
 depfile_nm = ''
-afmfile_nm = ''
 lyfile_nm = ''
 outdir_prefix = '.'
 
@@ -292,15 +290,15 @@ for opt in options:
        elif o == '--tex' or o == '-t':
                texfile_nm = a
        elif o == '--lisp': 
-               lisp_nm = a
+               char_lisp_nm = a
+       elif o == '--global-lisp': 
+               global_lisp_nm = a
        elif o == '--enc':
                enc_nm = a
        elif o == '--ly' or o == '-l':
                lyfile_nm = a
        elif o== '--help' or o == '-h':
                help()
-       elif o=='--afm' or o == '-a':
-               afmfile_nm = a
        elif o == '--debug':
                debug_b = 1
        else:
@@ -312,15 +310,6 @@ base = re.sub ('.tex$', '', texfile_nm)
 for filenm in files:
        (g, m, deps) = parse_logfile (filenm)
        cs = tfm_checksum (re.sub ('.log$', '.tfm', filenm))
-       afm = open (afmfile_nm, 'w')
-
-       write_afm_header (afm)
-       afm.write ("Comment TfmCheckSum %d\n" % cs)
-       afm.write ("Comment DesignSize %.2f\n" % g['DesignSize'])
-
-       del g['DesignSize']
-
-       write_afm_metric (afm, g, m)
 
        write_tex_defs (open (texfile_nm, 'w'), g, m)
        enc_name = 'FetaEncoding'
@@ -328,12 +317,15 @@ for filenm in files:
                enc_name = 'ParmesanEncoding'
        elif re.search ('feta-brace', filenm):
                enc_name = 'FetaBraceEncoding'
+       elif re.search ('feta-alphabet', filenm):
+               enc_name = 'FetaAlphabetEncoding';
 
        write_ps_encoding (enc_name, open (enc_nm, 'w'), g, m)
-       write_otf_lisp_table (open (lisp_nm, 'w'), g, m)  
+       write_character_lisp_table (open (char_lisp_nm, 'w'), g, m)  
+       write_global_lisp_table (open (global_lisp_nm, 'w'), g)  
        if depfile_nm:
                write_deps (open (depfile_nm, 'wb'), deps,
                            [base + '.dvi', base + '.pfa', base + '.pfb',
-                            texfile_nm, afmfile_nm])
+                            texfile_nm])
        if lyfile_nm:
                write_fontlist (open (lyfile_nm, 'w'), g, m)