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