]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/mf-to-table.py
Run `make grand-replace'.
[lilypond.git] / buildscripts / mf-to-table.py
index c94d402e79876c0cd48489ab6b9af2d482ddb3b5..2c1df75f7fa6d55c7150f455cba950b44b7cbf03 100644 (file)
@@ -1,15 +1,14 @@
 #!@PYTHON@
 
-# mf-to-table.py -- convert spacing info in MF logs . and .tex
+# mf-to-table.py -- convert spacing info in MF logs . 
 #
 # source file of the GNU LilyPond music typesetter
 #
-# (c) 1997--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# (c) 1997--2008 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 import os
 import sys
 import getopt
-import string
 import re
 import time
 
@@ -28,7 +27,7 @@ def read_log_file (fn):
         a.append (match.group (1))
         return ''
 
-    str = re.sub ('\(([a-zA-Z_0-9-]+\.mf)', include_func, str)
+    str = re.sub ('\\(([/a-z.A-Z_0-9-]+\\.mf)', include_func, str)
     str = re.sub ('@{(.*?)@}', auto_func, str)
 
     return (autolines, deps)
@@ -41,7 +40,7 @@ class Char_metric:
 font_family = 'feta'
 
 def parse_logfile (fn):
-    (autolines, deps) = read_log_file (fn)
+    autolines, deps = read_log_file (fn)
     charmetrics = []
     
     global_info = {
@@ -50,7 +49,7 @@ def parse_logfile (fn):
     group = ''
 
     for l in autolines:
-        tags = string.split (l, '@:')
+        tags = l.split ('@:')
         if tags[0] == 'group':
             group = tags[1]
         elif tags[0] == 'puorg':
@@ -58,19 +57,18 @@ def parse_logfile (fn):
         elif tags[0] == 'char':
             name = tags[9]
 
-            name = re.sub ('-', 'M', name)
             if group:
                 name = group + '.' + name
             m = {
                 'description': tags[1],
                 'name': name,
-                'code': string.atoi (tags[2]),
-                'breapth': string.atof (tags[3]),
-                'width': string.atof (tags[4]),
-                'depth': string.atof (tags[5]),
-                'height': string.atof (tags[6]),
-                'wx': string.atof (tags[7]),
-                'wy': string.atof (tags[8]),
+                'code': int (tags[2]),
+                'breapth': float (tags[3]),
+                'width': float (tags[4]),
+                'depth': float (tags[5]),
+                'height': float (tags[6]),
+                'wx': float (tags[7]),
+                'wy': float (tags[8]),
             }
             charmetrics.append (m)
         elif tags[0] == 'font':
@@ -85,11 +83,10 @@ def parse_logfile (fn):
             encoding = re.sub (' ','-', tags[5])
             tags = tags[:-1]
             name = tags[1:]
-            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],
-                                '-')
+            global_info['design_size'] = float (tags[4])
+            global_info['FontName'] = '-'.join (name)
+            global_info['FullName'] = ' '.join (name)
+            global_info['FamilyName'] = '-'.join (name[1:-1])
             if 1:
                 global_info['Weight'] = tags[4]
             else: # testing
@@ -107,20 +104,7 @@ def parse_logfile (fn):
 
 
 
-def write_tex_defs (file, global_info, charmetrics):
-    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, texname, m['code'],'\n'))
-    file.write ('\\endinput\n')
-
-
-def write_character_lisp_table (file, global_info, charmetrics):
+def character_lisp_table (global_info, charmetrics):
 
     def conv_char_metric (charmetric):
         f = 1.0
@@ -141,11 +125,14 @@ def write_character_lisp_table (file, global_info, charmetrics):
 
         return s
 
+    s = ''
     for c in charmetrics:
-        file.write (conv_char_metric (c))
+        s += conv_char_metric (c)
+
+    return s
 
 
-def write_global_lisp_table (file, global_info):
+def global_lisp_table (global_info):
     str = ''
 
     keys = ['staffsize', 'stafflinethickness', 'staff_space',
@@ -157,29 +144,31 @@ def write_global_lisp_table (file, global_info):
         if global_info.has_key (k):
             str = str + "(%s . %s)\n" % (k,global_info[k])
 
-    file.write (str)
+    return str
 
     
-def write_ps_encoding (name, file, global_info, charmetrics):
+def ps_encoding (name, global_info, charmetrics):
     encs = ['.notdef'] * 256
     for m in charmetrics:
         encs[m['code']] = m['name']
 
-    file.write ('/%s [\n' % name)
-    for m in range (0, 256):
-        file.write ('  /%s %% %d\n' % (encs[m], m))
-    file.write ('] def\n')
 
+    s =  ('/%s [\n' % name)
+    for m in range (0, 256):
+        s += ('  /%s %% %d\n' % (encs[m], m))
+    s +=  ('] def\n')
+    return s
 
-def write_deps (file, deps, targets):
+def get_deps (deps, targets):
+    s = ''
     for t in targets:
         t = re.sub ( '^\\./', '', t)
-        file.write ('%s '% t)
-    file.write (": ")
+        s += ('%s '% t)
+    s += (": ")
     for d in deps:
-        file.write ('%s ' % d)
-    file.write ('\n')
-
+        s += ('%s ' % d)
+    s += ('\n')
+    return s
 
 def help ():
     sys.stdout.write(r"""Usage: mf-to-table [OPTIONS] LOGFILEs
@@ -192,7 +181,6 @@ Options:
  -l, --ly=FILE          name output table
  -o, --outdir=DIR       prefix for dependency info
  -p, --package=DIR      specify package
- -t, --tex=FILE         name output tex chardefs
 
  """)
     sys.exit (0)
@@ -203,12 +191,11 @@ Options:
         'a:d:ho:p:t:',
         ['enc=',  'outdir=', 'dep=', 'lisp=',
          'global-lisp=',
-         'tex=', 'debug', 'help', 'package='])
+         'debug', 'help', 'package='])
 
 global_lisp_nm = ''
 char_lisp_nm = ''
 enc_nm = ''
-texfile_nm = ''
 depfile_nm = ''
 lyfile_nm = ''
 outdir_prefix = '.'
@@ -220,8 +207,6 @@ for opt in options:
         depfile_nm = a
     elif o == '--outdir' or o == '-o':
         outdir_prefix = a
-    elif o == '--tex' or o == '-t':
-        texfile_nm = a
     elif o == '--lisp': 
         char_lisp_nm = a
     elif o == '--global-lisp': 
@@ -236,12 +221,11 @@ for opt in options:
         print o
         raise getopt.error
 
-base = re.sub ('.tex$', '', texfile_nm)
+base = os.path.splitext (lyfile_nm)[0]
 
 for filenm in files:
     (g, m, deps) = parse_logfile (filenm)
 
-    write_tex_defs (open (texfile_nm, 'w'), g, m)
     enc_name = 'FetaEncoding'
     if re.search ('parmesan', filenm):
         enc_name = 'ParmesanEncoding'
@@ -250,11 +234,11 @@ for filenm in files:
     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)  
+    open (enc_nm, 'w').write (ps_encoding (enc_name, g, m))
+    open (char_lisp_nm, 'w').write (character_lisp_table (g, m))
+    open (global_lisp_nm, 'w').write (global_lisp_table (g))
     if depfile_nm:
-        write_deps (open (depfile_nm, 'wb'), deps,
-              [base + '.log', base + '.dvi', base + '.pfa',
-               depfile_nm,
-               base + '.pfb', texfile_nm])
+        open (depfile_nm, 'wb').write (get_deps (deps,
+                                                 [base + '.log', base + '.dvi', base + '.pfa',
+                                                  depfile_nm,
+                                                  base + '.pfb']))