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