def __init__(self, font_file): self._glyphs = {} self._kern = {} self._page = {} if "." not in font_file: font_file = font_file+".zip" with zipfile.ZipFile(font_file,'r') as z: if font_file.lower().endswith(".zip"): font_file = os.path.basename(font_file)[:-4] xml = z.read(font_file+".fnt") xroot = ET.fromstring(xml) # misc info com = xroot.find('common') self._line_height = int(com.get("lineHeight")) self._base = int(com.get("base")) self._imgw = int(com.get("scaleW")) self._imgh = int(com.get("scaleH")) # load the textures for page in xroot.find('pages').findall("page"): id = int(page.get("id")) img_filename = page.get("file") img = z.read(img_filename) surf = pygame.image.load(StringIO.StringIO(img),img_filename) tex = Texture() tex.setFromSurface(surf) self._page[id] = tex assert(id == 0) # for now, we only support single-page fonts # load the glyph data for char in xroot.find("chars").findall("char"): d = {} for f in self.Glyph._fields: d[f] = int(char.get(f)) g=self.Glyph(**d) self._glyphs[g.id] = g # load the kerning data for kern in xroot.find("kernings").findall("kerning"): t = (int(kern.get("first")), int(kern.get("second"))) self._kern[t] = int(kern.get("amount")) self._material = Material() self._material.setTexture(0,self._page[0])