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