#!@PYTHON
+
## make a fonts.scale file.
+
import re
import sys
import string
+import os
+
+
+### mftrace/afm.py
+
+# Read some global vars
+class Afm_reader:
+ def __init__ (self, filename):
+ self.filename = filename
+ self.lines = open (self.filename).readlines ()
+
+ def get_afm (self):
+ afm = Afm_font_metric (self.filename)
+ for i in self.lines[:20]:
+ m = re.match ('([^ \t\n]*)[ \t]*(.*[^ \t\n])', i)
+ if m and m.group (1):
+ key = m.group (1)
+ value = m.group (2)
+ if key != 'Comment':
+ afm.__dict__[key] = value
+ return afm
+
+class Afm_font_metric:
+ def __init__ (self, filename):
+ m = re.match ('.*/(.+)', filename)
+ self.filename = m.group (1)
+ m = re.match ('([-_A-Za-z]*)([0-9]*)', self.filename)
+ self.name = m.group (1) + m.group (2)
+ self.basename = m.group (1)
+ self.designsize = m.group (2)
+
+def read_afm_file (filename):
+ reader = Afm_reader (filename)
+ return reader.get_afm ()
+
+#if __name__ == '__main__':
+# i = read_afm_file (sys.argv[1])
+# print i, i.FullName, i.FontName
+
+### mftrace
+
+class Font_info:
+ cm = {
+ 'bx': ('bold', 'roman'),
+ 'bxti' : ('bold', 'italic'),
+ 'csc' : ('smallcaps', 'roman'),
+ 'r' : ('regular', 'roman'),
+ 'ss' : ('regular', 'sansserif'),
+ 'tt' : ('regular', 'typewriter'),
+ 'ti' : ('regular', 'italic'),
+ }
+
+ def set_defaults (self, name):
+ self.FontName = name
+ self.FullName = name
+ self.EncodingScheme = 'AdobeStandard'
+
+ self.foundry = 'GNU'
+ self.family = 'LilyPond'
+ self.weight = 'Feta'
+ self.slant = 'r'
+ self.setwidth = 'normal'
+ self.style = ''
+ self.pixelsize = '0'
+ self.pointsize = '0'
+ self.xresolution = '0'
+ self.yresolution = '0'
+ self.spacing = 'p'
+ self.averagewidth = '0'
+ self.registry = 'GNU'
+ self.encoding = 'FontSpecific'
+
+ split = string.split (name, '-')
+ if len (split) >= 4:
+ # Assume
+ # Adobe FontName = X11 foundry-family-weight-style
+ if 1:
+ self.foundry, self.family = split[:2]
+ else: # testin'
+ self.foundry = split[0]
+ self.family = string.join (split[1:-2], ' ')
+ self.weight = string.join (split[2:-1], ' ')
+ self.style = split[-1:][0]
+ self.FamilyName = '%s %s' % (self.family, self.weight)
+ self.designsize = self.style
+ elif name[:2] == 'cm':
+ self.foundry = 'TeX' # Knuth?
+ self.FamilyName = 'Computer Modern'
+ self.family = self.FamilyName
+ m = re.match ('^cm([a-z]*)([0-9]*)', name)
+ self.weight = string.join (self.cm[m.group (1)], ' ')
+ self.designsize = m.group (2)
+ self.style = self.designsize
+ else:
+ self.FamilyName = name
+
+ def __init__ (self, x):
+ if type (x) == type ("hallo"):
+ m = re.match ('([-_A-Za-z]*)([0-9]*)', x)
+ self.name = x
+ self.basename = m.group (1)
+ self.designsize = m.group (2)
+ self.set_defaults (x)
+ elif type (x) == type ({}):
+ self.set_defaults (x['FontName'])
+ for k in x.keys ():
+ self.__dict__[k] = x[k]
+
+ def __getitem__ (self, key):
+ return self.__dict__[key]
+
+ def get_X11 (self):
+ return (self.foundry, self.family, self.weight,
+ self.slant, self.setwidth, self.style,
+ self.pixelsize, self.pointsize,
+ self.xresolution, self.yresolution,
+ self.spacing, self.averagewidth,
+ self.registry, self.encoding)
+
+fontinfo = {}
+
+# wat een intervaas...
ls = sys.stdin.readline ()
ls = string.split (ls)
-print len(ls)
-for fn in ls:
- name = re.sub ('\.pf[ab]', '',fn)
- name = re.sub ('-', ' ',name)
- print '%s -misc-%s-regular-r-normal--0-0-0-0-p-0-adobe-fontspecific' % (fn, name)
+sketch_p = 0
+sodipodi_p = 0
+if len (ls) and ls[0] == 'sodipodi':
+ ls = ls[1:]
+ sodipodi_p = 1
+elif len (ls) and ls[0] == 'sketch':
+ ls = ls[1:]
+ sketch_p = 1
+
+if not (sketch_p or sodipodi_p):
+ print len(ls)
+
+for filename in ls:
+ basename = re.sub ('\.pf[ab]', '',filename)
+ fontname = re.sub ('-', ' ',basename)
+
+ m = re.search ("([0-9]+)$", fontname)
+ designsize = 'normal'
+
+ if m:
+ designsize = m.group (1)
+ fontbase = re.sub ("([0-9]+)$", "", fontname)
+
+
+ # FIXME: Font naming -- what a mess
+ # Check sane naming with xfontsel and gtkfontsel
+
+ # Adobe's font naming scheme and X11's seem to be conflicting.
+ # Adobe's FontFamily seems to be X11's family + weight
+ # Also, text selection applets like gtkfontsel, gfontview and
+ # GNOME-applications specific ones, display X11's `family'
+ # parameter as `Font', and X11's `Weight' parameter as `Style'.
+
+ # Using X11 description/convention -- good for xfontsel:
+ # 1 foundry: GNU
+ # 2 family: LilyPond <basename>
+ # 3 weight: <designsize>
+ # 4 slant: r(oman) =upright
+ # 5 setwidth: normal
+ # 6 style:
+ # 7 pixelsize: 0
+ # 8 pointsize: 0 (20 crashes xfs, moved to style)
+ # 9 xresolution: 0
+ # 10 yresolution: 0
+ # 11 spacing: p(roportional)
+ # 12 averagewidth: 0
+ # 13 registry: GNU
+ # 14 encoding: fonstpecific
+
+ # gives:
+ # feta20.pfa -GNU-LilyPond feta-20-r-normal--0-0-0-0-p-0-gnu-fontspecific
+
+ # However, GNOME (gtkfontsel, gnome apps) seems to want:
+
+ # 1 foundry: GNU
+ # 2 family: LilyPond
+ # 3 weight: <basename>
+ # 4 slant: r(oman) =upright
+ # 5 setwidth: normal
+ # 6 style: <designsize>
+ # 7 pixelsize: 0
+ # 8 pointsize: 0 (20 crashes xfs, moved to style)
+ # 9 xresolution: 0
+ # 10 yresolution: 0
+ # 11 spacing: p(roportional)
+ # 12 averagewidth: 0
+ # 13 registry: GNU
+ # 14 encoding: fonstpecific
+
+ # which gives:
+ # feta20.pfa -GNU-LilyPond-feta-r-normal--20-0-0-0-p-0-gnu-fontspecific
+ # foundry: GNU
+ ## ouch, pointsize 20 crashes xfs
+ ## XXXfeta20.pfa -GNU-LilyPond Feta-regular-r-normal--0-20-0-0-p-0-gnu-fontspecific
+
+ ## feta20.pfa -GNU-LilyPond feta-regular-r-normal-20-0-0-0-0-p-0-gnu-fontspecific
+
+ afmfile = ''
+ if not afmfile:
+ #afmfile = find_file (basename + '.afm')
+ afmfile = basename + '.afm'
+
+ if afmfile:
+ afmfile = os.path.abspath (afmfile)
+ if os.path.exists (afmfile):
+ afm = read_afm_file (afmfile)
+ fontinfo = Font_info (afm.__dict__)
+ else:
+ fontinfo = Font_info (basename)
+
+ family_name = string.join (string.split (fontinfo['FamilyName'],
+ '-'), ' ')
+
+ if sodipodi_p:
+ print string.join ((os.path.abspath (filename),
+ fontinfo.FamilyName,
+ fontinfo.FamilyName,''
+ ),
+
+ ',')
+
+ elif sketch_p:
+ # Sketch's lilypond.sfd map:
+ s = string.join ([fontinfo.FontName,
+ fontinfo.family,
+ '%s %s' % (fontinfo.weight, fontinfo.style),
+ string.join (fontinfo.get_X11 ()[:4], '-'),
+ string.join (fontinfo.get_X11 ()[-2:], '-'),
+ fontinfo.name],
+ ',')
+ print s
+
+ s = string.join ([fontinfo.FamilyName + fontinfo.designsize,
+ fontinfo.family,
+ '%s %s' % (fontinfo.weight, fontinfo.style),
+ string.join (fontinfo.get_X11 ()[:4], '-'),
+ string.join (fontinfo.get_X11 ()[-2:], '-'),
+ fontinfo.name],
+ ',')
+ print s
+ else:
+ print filename + ' -' + string.join (fontinfo.get_X11 (), '-')