Coverage for /usr/lib/python3/dist-packages/fontTools/ttLib/tables/BitmapGlyphMetrics.py: 46%
28 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
1# Since bitmap glyph metrics are shared between EBLC and EBDT
2# this class gets its own python file.
3from fontTools.misc import sstruct
4from fontTools.misc.textTools import safeEval
5import logging
8log = logging.getLogger(__name__)
10bigGlyphMetricsFormat = """
11 > # big endian
12 height: B
13 width: B
14 horiBearingX: b
15 horiBearingY: b
16 horiAdvance: B
17 vertBearingX: b
18 vertBearingY: b
19 vertAdvance: B
20"""
22smallGlyphMetricsFormat = """
23 > # big endian
24 height: B
25 width: B
26 BearingX: b
27 BearingY: b
28 Advance: B
29"""
32class BitmapGlyphMetrics(object):
33 def toXML(self, writer, ttFont):
34 writer.begintag(self.__class__.__name__)
35 writer.newline()
36 for metricName in sstruct.getformat(self.__class__.binaryFormat)[1]:
37 writer.simpletag(metricName, value=getattr(self, metricName))
38 writer.newline()
39 writer.endtag(self.__class__.__name__)
40 writer.newline()
42 def fromXML(self, name, attrs, content, ttFont):
43 metricNames = set(sstruct.getformat(self.__class__.binaryFormat)[1])
44 for element in content:
45 if not isinstance(element, tuple):
46 continue
47 name, attrs, content = element
48 # Make sure this is a metric that is needed by GlyphMetrics.
49 if name in metricNames:
50 vars(self)[name] = safeEval(attrs["value"])
51 else:
52 log.warning(
53 "unknown name '%s' being ignored in %s.",
54 name,
55 self.__class__.__name__,
56 )
59class BigGlyphMetrics(BitmapGlyphMetrics):
60 binaryFormat = bigGlyphMetricsFormat
63class SmallGlyphMetrics(BitmapGlyphMetrics):
64 binaryFormat = smallGlyphMetricsFormat