# Source code for fontTools.ttLib.tables.BitmapGlyphMetrics

    # Since bitmap glyph metrics are shared between EBLC and EBDT
    # this class gets its own python file.
    from fontTools.misc import sstruct
    from fontTools.misc.textTools import safeEval
    import logging

    log = logging.getLogger(__name__)

    bigGlyphMetricsFormat = """
      > # big endian
      height:       B
      width:        B
      horiBearingX: b
      horiBearingY: b
      horiAdvance:  B
      vertBearingX: b
      vertBearingY: b
      vertAdvance:  B
    """

    smallGlyphMetricsFormat = """
      > # big endian
      height:   B
      width:    B
      BearingX: b
      BearingY: b
      Advance:  B
    """

    class BitmapGlyphMetrics(object):

    	def toXML(self, writer, ttFont):
    		writer.begintag(self.__class__.__name__)
    		writer.newline()
    		for metricName in sstruct.getformat(self.__class__.binaryFormat)[1]:
    			writer.simpletag(metricName, value=getattr(self, metricName))
    			writer.newline()
    		writer.endtag(self.__class__.__name__)
    		writer.newline()

    	def fromXML(self, name, attrs, content, ttFont):
    		metricNames = set(sstruct.getformat(self.__class__.binaryFormat)[1])
    		for element in content:
    			if not isinstance(element, tuple):
    				continue
    			name, attrs, content = element
    			# Make sure this is a metric that is needed by GlyphMetrics.
    			if name in metricNames:
    				vars(self)[name] = safeEval(attrs['value'])
    			else:
    				log.warning("unknown name '%s' being ignored in %s.", name, self.__class__.__name__)

    class BigGlyphMetrics(BitmapGlyphMetrics):
    	binaryFormat = bigGlyphMetricsFormat

    class SmallGlyphMetrics(BitmapGlyphMetrics):
    	binaryFormat = smallGlyphMetricsFormat