1 # Since bitmap glyph metrics are shared between EBLC and EBDT 2 # this class gets its own python file. 3 from __future__ import print_function, division, absolute_import 4 from fontTools.misc.py23 import * 5 from fontTools.misc import sstruct 6 from fontTools.misc.textTools import safeEval 7 8 9 bigGlyphMetricsFormat = """ 10 > # big endian 11 height: B 12 width: B 13 horiBearingX: b 14 horiBearingY: b 15 horiAdvance: B 16 vertBearingX: b 17 vertBearingY: b 18 vertAdvance: B 19 """ 20 21 smallGlyphMetricsFormat = """ 22 > # big endian 23 height: B 24 width: B 25 BearingX: b 26 BearingY: b 27 Advance: B 28 """ 29 30 class BitmapGlyphMetrics(object): 31 32 def toXML(self, writer, ttFont): 33 writer.begintag(self.__class__.__name__) 34 writer.newline() 35 for metricName in sstruct.getformat(self.__class__.binaryFormat)[1]: 36 writer.simpletag(metricName, value=getattr(self, metricName)) 37 writer.newline() 38 writer.endtag(self.__class__.__name__) 39 writer.newline() 40 41 def fromXML(self, name, attrs, content, ttFont): 42 metricNames = set(sstruct.getformat(self.__class__.binaryFormat)[1]) 43 for element in content: 44 if not isinstance(element, tuple): 45 continue 46 name, attrs, content = element 47 # Make sure this is a metric that is needed by GlyphMetrics. 48 if name in metricNames: 49 vars(self)[name] = safeEval(attrs['value']) 50 else: 51 print("Warning: unknown name '%s' being ignored in %s." % name, self.__class__.__name__) 52 53 54 class BigGlyphMetrics(BitmapGlyphMetrics): 55 binaryFormat = bigGlyphMetricsFormat 56 57 class SmallGlyphMetrics(BitmapGlyphMetrics): 58 binaryFormat = smallGlyphMetricsFormat 59