remove remaining references to fondLib in macUtils.py and install.txt
Fixes #319
This commit is contained in:
parent
a54b98f445
commit
c67295d759
@ -95,10 +95,6 @@ The library
|
||||
fontTools.agl -- Interface to the Adobe Glyph List: maps unicode values
|
||||
to glyph names and back.
|
||||
|
||||
Mac-specific
|
||||
fontTools.fondLib -- A reader/writer class for Mac FOND resources.
|
||||
fontTools.nfntLib -- Reads Mac NFNT bitmap font resources.
|
||||
|
||||
|
||||
Thank-you's
|
||||
|
||||
|
@ -71,129 +71,3 @@ class SFNTResourceReader(object):
|
||||
def __getattr__(self, attr):
|
||||
# cheap inheritance
|
||||
return getattr(self.file, attr)
|
||||
|
||||
|
||||
class SFNTResourceWriter(object):
|
||||
|
||||
"""Simple (Mac-only) file wrapper for 'sfnt' resources."""
|
||||
|
||||
def __init__(self, path, ttFont, res_id=None):
|
||||
self.file = StringIO()
|
||||
self.name = path
|
||||
self.closed = 0
|
||||
fullname = ttFont['name'].getName(4, 1, 0) # Full name, mac, default encoding
|
||||
familyname = ttFont['name'].getName(1, 1, 0) # Fam. name, mac, default encoding
|
||||
psname = ttFont['name'].getName(6, 1, 0) # PostScript name, etc.
|
||||
if fullname is None or fullname is None or psname is None:
|
||||
from fontTools import ttLib
|
||||
raise ttLib.TTLibError("can't make 'sfnt' resource, no Macintosh 'name' table found")
|
||||
self.fullname = fullname.string
|
||||
self.familyname = familyname.string
|
||||
self.psname = psname.string
|
||||
if self.familyname != self.psname[:len(self.familyname)]:
|
||||
# ugh. force fam name to be the same as first part of ps name,
|
||||
# fondLib otherwise barfs.
|
||||
for i in range(min(len(self.psname), len(self.familyname))):
|
||||
if self.familyname[i] != self.psname[i]:
|
||||
break
|
||||
self.familyname = self.psname[:i]
|
||||
|
||||
self.ttFont = ttFont
|
||||
self.res_id = res_id
|
||||
if os.path.exists(self.name):
|
||||
os.remove(self.name)
|
||||
# XXX datafork support
|
||||
Res.FSpCreateResFile(self.name, 'DMOV', 'FFIL', 0)
|
||||
self.resref = Res.FSOpenResFile(self.name, 3) # exclusive read/write permission
|
||||
|
||||
def close(self):
|
||||
if self.closed:
|
||||
return
|
||||
Res.UseResFile(self.resref)
|
||||
try:
|
||||
res = Res.Get1NamedResource('sfnt', self.fullname)
|
||||
except Res.Error:
|
||||
pass
|
||||
else:
|
||||
res.RemoveResource()
|
||||
res = Res.Resource(self.file.getvalue())
|
||||
if self.res_id is None:
|
||||
self.res_id = Res.Unique1ID('sfnt')
|
||||
res.AddResource('sfnt', self.res_id, self.fullname)
|
||||
res.ChangedResource()
|
||||
|
||||
self.createFond()
|
||||
del self.ttFont
|
||||
Res.CloseResFile(self.resref)
|
||||
self.file.close()
|
||||
self.closed = 1
|
||||
|
||||
def createFond(self):
|
||||
fond_res = Res.Resource("")
|
||||
fond_res.AddResource('FOND', self.res_id, self.fullname)
|
||||
|
||||
from fontTools import fondLib
|
||||
fond = fondLib.FontFamily(fond_res, "w")
|
||||
|
||||
fond.ffFirstChar = 0
|
||||
fond.ffLastChar = 255
|
||||
fond.fondClass = 0
|
||||
fond.fontAssoc = [(0, 0, self.res_id)]
|
||||
fond.ffFlags = 20480 # XXX ???
|
||||
fond.ffIntl = (0, 0)
|
||||
fond.ffLeading = 0
|
||||
fond.ffProperty = (0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
fond.ffVersion = 0
|
||||
fond.glyphEncoding = {}
|
||||
if self.familyname == self.psname:
|
||||
fond.styleIndices = (1,) * 48 # uh-oh, fondLib is too dumb.
|
||||
else:
|
||||
fond.styleIndices = (2,) * 48
|
||||
fond.styleStrings = []
|
||||
fond.boundingBoxes = None
|
||||
fond.ffFamID = self.res_id
|
||||
fond.changed = 1
|
||||
fond.glyphTableOffset = 0
|
||||
fond.styleMappingReserved = 0
|
||||
|
||||
# calc:
|
||||
scale = 4096 / self.ttFont['head'].unitsPerEm
|
||||
fond.ffAscent = scale * self.ttFont['hhea'].ascent
|
||||
fond.ffDescent = scale * self.ttFont['hhea'].descent
|
||||
fond.ffWidMax = scale * self.ttFont['hhea'].advanceWidthMax
|
||||
|
||||
fond.ffFamilyName = self.familyname
|
||||
fond.psNames = {0: self.psname}
|
||||
|
||||
fond.widthTables = {}
|
||||
fond.kernTables = {}
|
||||
cmap = self.ttFont['cmap'].getcmap(1, 0)
|
||||
if cmap:
|
||||
names = {}
|
||||
for code, name in cmap.cmap.items():
|
||||
names[name] = code
|
||||
if 'kern' in self.ttFont:
|
||||
kern = self.ttFont['kern'].getkern(0)
|
||||
if kern:
|
||||
fondkerning = []
|
||||
for (left, right), value in kern.kernTable.items():
|
||||
if left in names and right in names:
|
||||
fondkerning.append((names[left], names[right], scale * value))
|
||||
fondkerning.sort()
|
||||
fond.kernTables = {0: fondkerning}
|
||||
if 'hmtx' in self.ttFont:
|
||||
hmtx = self.ttFont['hmtx']
|
||||
fondwidths = [2048] * 256 + [0, 0] # default width, + plus two zeros.
|
||||
for name, (width, lsb) in hmtx.metrics.items():
|
||||
if name in names:
|
||||
fondwidths[names[name]] = scale * width
|
||||
fond.widthTables = {0: fondwidths}
|
||||
fond.save()
|
||||
|
||||
def __del__(self):
|
||||
if not self.closed:
|
||||
self.close()
|
||||
|
||||
def __getattr__(self, attr):
|
||||
# cheap inheritance
|
||||
return getattr(self.file, attr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user