Our footprint in the Python module namespace is all under fontTools now. User code importing sstruct should be updated to say "from fontTools.misc import sstruct".
58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
# Since bitmap glyph metrics are shared between EBLC and EBDT
|
|
# this class gets its own python file.
|
|
from fontTools.misc import sstruct
|
|
from types import TupleType
|
|
from fontTools.misc.textTools import safeEval
|
|
|
|
|
|
bigGlyphMetricsFormat = """
|
|
> # big endian
|
|
height: B
|
|
width: B
|
|
horiBearingX: b
|
|
horiBearingY: b
|
|
horiAdvance: B
|
|
vertBearingX: b
|
|
vertBearingY: b
|
|
vertAdvance: B
|
|
"""
|
|
|
|
smallGlyphMetricsFormat = """
|
|
> # big endian
|
|
height: B
|
|
width: B
|
|
BearingX: b
|
|
BearingY: b
|
|
Advance: B
|
|
"""
|
|
|
|
class BitmapGlyphMetrics:
|
|
|
|
def toXML(self, writer, ttFont):
|
|
writer.begintag(self.__class__.__name__)
|
|
writer.newline()
|
|
for metricName in sstruct.getformat(self.__class__.binaryFormat)[1]:
|
|
writer.simpletag(metricName, value=getattr(self, metricName))
|
|
writer.newline()
|
|
writer.endtag(self.__class__.__name__)
|
|
writer.newline()
|
|
|
|
def fromXML(self, (name, attrs, content), ttFont):
|
|
metricNames = set(sstruct.getformat(self.__class__.binaryFormat)[1])
|
|
for element in content:
|
|
if type(element) != TupleType:
|
|
continue
|
|
name, attrs, content = element
|
|
# Make sure this is a metric that is needed by GlyphMetrics.
|
|
if name in metricNames:
|
|
vars(self)[name] = safeEval(attrs['value'])
|
|
else:
|
|
print "Warning: unknown name '%s' being ignored in %s." % name, self.__class__.__name__
|
|
|
|
|
|
class BigGlyphMetrics(BitmapGlyphMetrics):
|
|
binaryFormat = bigGlyphMetricsFormat
|
|
|
|
class SmallGlyphMetrics(BitmapGlyphMetrics):
|
|
binaryFormat = smallGlyphMetricsFormat
|