12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # Since bitmap glyph metrics are shared between EBLC and EBDT
- # this class gets its own python file.
- from fontTools.misc import sstruct
- from fontTools.misc.textTools import safeEval
- import logging
- log = logging.getLogger(__name__)
- 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(object):
- 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 not isinstance(element, tuple):
- 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:
- log.warning(
- "unknown name '%s' being ignored in %s.",
- name,
- self.__class__.__name__,
- )
- class BigGlyphMetrics(BitmapGlyphMetrics):
- binaryFormat = bigGlyphMetricsFormat
- class SmallGlyphMetrics(BitmapGlyphMetrics):
- binaryFormat = smallGlyphMetricsFormat
|