]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/mf-to-table.py
* The grand 2005-2006 replace.
[lilypond.git] / buildscripts / mf-to-table.py
index e75b7c2efa1562287f1b1226b75b60c264bfc934..7035870483a84a4f491f60ea43340727f4dd21ac 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--2006 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],
                                                                 '-')
@@ -124,41 +124,17 @@ def parse_logfile (fn):
        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')
 
 
@@ -168,14 +144,18 @@ def write_character_lisp_table (file, global_info, charmetrics):
                f = 1.0
                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
 
@@ -188,10 +168,12 @@ def write_global_lisp_table (file, global_info):
 
        keys = ['staffsize', 'stafflinethickness', 'staff_space',
                'linethickness', 'black_notehead_width', 'ledgerlinethickness',
+               'design_size', 
                'blot_diameter'
                ]
        for k in keys:
-               str = str + "(%s . %s)\n" % (k,global_info[k])
+               if global_info.has_key (k):
+                       str = str + "(%s . %s)\n" % (k,global_info[k])
 
        file.write (str)
 
@@ -226,14 +208,12 @@ r"""%% LilyPond file to list all font symbols and the corresponding names
                ## \musicglyph and \markup require "_" to be escaped
                ## differently
                scm_string = re.sub ('_', r'_', m['name'])
-               tex_string = re.sub ('_', r'\\_' , m['name'])
-
-               ## prevent TeX from interpreting "--" as long dash
-               tex_string = re.sub ('--','-{}-', tex_string)
 
                file.write ('''    \\markup { \\raise #0.75 \\vcenter
              \\musicglyph #"%s"
-             \\typewriter " %s" } 4\n''' % (scm_string, tex_string))
+             \\typewriter " %s" } 4
+             \\noBreak
+             ''' % (scm_string, scm_string))
 
                if (count % per_line) == 0:
                        file.write ('    \\skip 8 \\break\n')
@@ -272,7 +252,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
@@ -287,7 +266,7 @@ 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='])
 
@@ -296,7 +275,6 @@ char_lisp_nm = ''
 enc_nm = ''
 texfile_nm = ''
 depfile_nm = ''
-afmfile_nm = ''
 lyfile_nm = ''
 outdir_prefix = '.'
 
@@ -319,8 +297,6 @@ for opt in options:
                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:
@@ -332,15 +308,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'
@@ -348,13 +315,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_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])
+                           [base + '.log', base + '.dvi', base + '.pfa',
+                            base + '.pfb', texfile_nm])
        if lyfile_nm:
                write_fontlist (open (lyfile_nm, 'w'), g, m)