def cmap_dump(self): font = TTFont(self.fontfile) #TODO(ahmetcelik) cmap in format 12 should be used if it exists cmapTable = font['cmap'].getcmap(3, 10) if not cmapTable: cmapTable = font['cmap'].getcmap(3, 1) assert cmapTable, 'Unicode cmap table required' cmap = cmapTable.cmap # unicode table codepoints = [] glyphs = [] for code, name in cmap.iteritems(): id = font.getGlyphID(name) glyphs.append(id) codepoints.append(code) if self.debug: print id, name, code font.close() cp_dumper = Dumper(self.folder + '/codepoints') cp_dumper.dump_array(codepoints, 'I', '>') cp_dumper.close() gid_dumper = Dumper(self.folder + '/gids') gid_dumper.dump_array(glyphs, 'H', '>') gid_dumper.close()
def cmap_dump(self): font = TTFont(self.fontfile) #TODO(ahmetcelik) cmap in format 12 should be used if it exists cmapTable = font['cmap'].getcmap(3, 10) if not cmapTable: cmapTable = font['cmap'].getcmap(3, 1) assert cmapTable,'Unicode cmap table required' cmap = cmapTable.cmap # unicode table codepoints = [] glyphs = [] for code, name in cmap.iteritems(): id = font.getGlyphID(name) glyphs.append(id) codepoints.append(code) if self.debug: print id,name,code font.close() cp_dumper = Dumper(self.folder + '/codepoints') cp_dumper.dump_array(codepoints, 'I', '>') cp_dumper.close() gid_dumper = Dumper(self.folder + '/gids') gid_dumper.dump_array(glyphs, 'H', '>') gid_dumper.close()
def dump_closure_map(fontfile, outputfolder): """Takes closure of each glyph in the font and dump them into the two seperate files. Index file used to locate a glyph in data file. Data file contains closure lists """ font = TTFont(fontfile) closurer = ClosureTaker(font) glyph_metadata = Dumper(outputfolder + "/closure_idx") glyph_data = Dumper(outputfolder + "/closure_data") bigEndian = ">" fmt_offset = ">l" # offset - length fmt_size = ">H" fmt_elem = "H" elem_size = struct.calcsize(fmt_elem) offset = 0 for g in font.getGlyphOrder(): closurer.clear() closurer.add_glyph_names([g]) glyphsClosure = closurer.closure() id = closurer.glyph_name_to_id[g] if len(glyphsClosure) == 1 and id in glyphsClosure: # recording not needed glyph_metadata.dump_fmt(-1, fmt_offset) glyph_metadata.dump_fmt(0, fmt_size) else: size = elem_size * len(glyphsClosure) glyph_data.dump_array(glyphsClosure, fmt_elem, bigEndian) glyph_metadata.dump_fmt(offset, fmt_offset) glyph_metadata.dump_fmt(size, fmt_size) # print id, g, glyphsClosure offset += size font.close() glyph_data.close() glyph_metadata.close()
def dump_closure_map(fontfile, outputfolder): """Takes closure of each glyph in the font and dump them into the two seperate files. Index file used to locate a glyph in data file. Data file contains closure lists """ font = TTFont(fontfile) closurer = ClosureTaker(font) glyph_metadata = Dumper(outputfolder + '/closure_idx') glyph_data = Dumper(outputfolder + '/closure_data') bigEndian = '>' fmt_offset = '>l' # offset - length fmt_size = '>H' fmt_elem = 'H' elem_size = struct.calcsize(fmt_elem) offset = 0 for g in font.getGlyphOrder(): closurer.clear() closurer.add_glyph_names([g]) glyphsClosure = closurer.closure() id = closurer.glyph_name_to_id[g] if len(glyphsClosure) == 1 and id in glyphsClosure: # recording not needed glyph_metadata.dump_fmt(-1, fmt_offset) glyph_metadata.dump_fmt(0, fmt_size) else: size = elem_size * len(glyphsClosure) glyph_data.dump_array(glyphsClosure, fmt_elem, bigEndian) glyph_metadata.dump_fmt(offset, fmt_offset) glyph_metadata.dump_fmt(size, fmt_size) #print id, g, glyphsClosure offset += size font.close() glyph_data.close() glyph_metadata.close()
def cmap_dump(self): font = TTFont(self.fontfile) cmap = font['cmap'].getcmap(3, 1).cmap # unicode table assert cmap, 'Unicode cmap table required' codepoints = [] glyphs = [] for code, name in cmap.iteritems(): id = font.getGlyphID(name) glyphs.append(id) codepoints.append(code) if self.debug: print id,name,code font.close() cp_dumper = Dumper(self.folder + '/codepoints') cp_dumper.dump_array(codepoints, 'H', '>') cp_dumper.close() gid_dumper = Dumper(self.folder + '/gids') gid_dumper.dump_array(glyphs, 'H', '>') gid_dumper.close()