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