code: def makeGlyphsBoundingBoxes(self):
          
  
          def getControlPointBounds(glyph):
              pen.init()
              glyph.draw(pen)
              return pen.bounds
  
          def toInt(value, else_callback):
              rounded = otRound(value)
              if tolerance >= 0.5 or abs(rounded - value) <= tolerance:
                  return rounded
              else:
                  return int(else_callback(value))
  
          tolerance = self.roundTolerance
          glyphBoxes = {}
          pen = ControlBoundsPen(self.allGlyphs)
          for glyphName, glyph in self.allGlyphs.items():
              bounds = None
              if glyph or glyph.components:
                  bounds = getControlPointBounds(glyph)
                  if bounds:
                      rounded = []
                      for value in bounds[:2]:
                          rounded.append(toInt(value, math.floor))
                      for value in bounds[2:]:
                          rounded.append(toInt(value, math.ceil))
                      bounds = BoundingBox(*rounded)
              glyphBoxes[glyphName] = bounds
          return glyphBoxes
docs: Make bounding boxes for all the glyphs, and return a dictionary of
          BoundingBox(xMin, xMax, yMin, yMax) namedtuples keyed by glyph names.
          The bounding box of empty glyphs (without contours or components) is
          set to None.
  
          Check that the float values are within the range of the specified
          self.roundTolerance, and if so use the rounded value; else take the
          floor or ceiling to ensure that the bounding box encloses the original
          values.