Loading tools/layoutlib/rename_font/build_font.py +60 −37 Original line number Diff line number Diff line Loading @@ -30,13 +30,18 @@ import os from lxml import etree import shutil import glob from multiprocessing import Pool # global variable dest_dir = '/tmp' def main(argv): if len(argv) < 2: sys.exit('Usage: build_font.py /path/to/input_fonts/ /path/to/out/dir/') for dir in argv: if not os.path.isdir(dir): sys.exit(dir + ' is not a valid directory') for directory in argv: if not os.path.isdir(directory): sys.exit(directory + ' is not a valid directory') global dest_dir dest_dir = argv[-1] src_dirs = argv[:-1] cwd = os.getcwd() Loading @@ -45,6 +50,7 @@ def main(argv): for filename in files: os.remove(filename) os.chdir(cwd) input_fonts = list() for src_dir in src_dirs: for filename in os.listdir(src_dir): if os.path.isdir(os.path.join(src_dir, filename)): Loading @@ -52,14 +58,25 @@ def main(argv): if not os.path.splitext(filename)[1].lower() == '.ttf': shutil.copy(os.path.join(src_dir, filename), dest_dir) continue old_ttf_path = os.path.join(src_dir, filename) input_fonts.append(os.path.join(src_dir, filename)) # Create as many threads as the number of CPUs pool = Pool(processes=None) pool.map(convert_font, input_fonts) class InvalidFontException(Exception): pass def convert_font(input_path): filename = os.path.basename(input_path) print 'Converting font: ' + filename # the path to the output file. The file name is the fontfilename.ttx ttx_path = os.path.join(dest_dir, filename) ttx_path = ttx_path[:-1] + 'x' try: # run ttx to generate an xml file in the output folder which represents all # its info ttx_args = ['-d', dest_dir, old_ttf_path] ttx_args = ['-q', '-d', dest_dir, input_path] ttx.main(ttx_args) # now parse the xml file to change its PS name. tree = etree.parse(ttx_path) Loading @@ -72,12 +89,18 @@ def main(argv): update_name(name, new_ps_name) tree.write(ttx_path, xml_declaration=True, encoding=encoding ) # generate the udpated font now. ttx_args = ['-d', dest_dir, ttx_path] ttx_args = ['-q', '-d', dest_dir, ttx_path] ttx.main(ttx_args) except Exception: except InvalidFontException: # In case of invalid fonts, we exit. print filename + ' is not a valid font' raise except Exception as e: print 'Error converting font: ' + filename print e # Some fonts are too big to be handled by the ttx library. # Just copy paste them. shutil.copy(old_ttf_path, dest_dir) shutil.copy(input_path, dest_dir) try: # delete the temp ttx file is it exists. os.remove(ttx_path) Loading @@ -94,14 +117,14 @@ def get_font_info(tag): if namerecord.attrib['nameID'] == '6': if ps_name is not None: if not sanitize(namerecord.text) == ps_name: sys.exit('found multiple possibilities of the font name') raise InvalidFontException('found multiple possibilities of the font name') else: ps_name = sanitize(namerecord.text) # nameID=5 means the font version if namerecord.attrib['nameID'] == '5': if ps_version is not None: if not ps_version == get_version(namerecord.text): sys.exit('found multiple possibilities of the font version') raise InvalidFontException('found multiple possibilities of the font version') else: ps_version = get_version(namerecord.text) return [ps_name, ps_version] Loading @@ -121,7 +144,7 @@ def get_version(string): # to extract n.nn, we return the second entry in the split strings. string = string.strip() if not string.startswith('Version '): sys.exit('mal-formed font version') raise InvalidFontException('mal-formed font version') return sanitize(string.split()[1]) if __name__ == '__main__': Loading Loading
tools/layoutlib/rename_font/build_font.py +60 −37 Original line number Diff line number Diff line Loading @@ -30,13 +30,18 @@ import os from lxml import etree import shutil import glob from multiprocessing import Pool # global variable dest_dir = '/tmp' def main(argv): if len(argv) < 2: sys.exit('Usage: build_font.py /path/to/input_fonts/ /path/to/out/dir/') for dir in argv: if not os.path.isdir(dir): sys.exit(dir + ' is not a valid directory') for directory in argv: if not os.path.isdir(directory): sys.exit(directory + ' is not a valid directory') global dest_dir dest_dir = argv[-1] src_dirs = argv[:-1] cwd = os.getcwd() Loading @@ -45,6 +50,7 @@ def main(argv): for filename in files: os.remove(filename) os.chdir(cwd) input_fonts = list() for src_dir in src_dirs: for filename in os.listdir(src_dir): if os.path.isdir(os.path.join(src_dir, filename)): Loading @@ -52,14 +58,25 @@ def main(argv): if not os.path.splitext(filename)[1].lower() == '.ttf': shutil.copy(os.path.join(src_dir, filename), dest_dir) continue old_ttf_path = os.path.join(src_dir, filename) input_fonts.append(os.path.join(src_dir, filename)) # Create as many threads as the number of CPUs pool = Pool(processes=None) pool.map(convert_font, input_fonts) class InvalidFontException(Exception): pass def convert_font(input_path): filename = os.path.basename(input_path) print 'Converting font: ' + filename # the path to the output file. The file name is the fontfilename.ttx ttx_path = os.path.join(dest_dir, filename) ttx_path = ttx_path[:-1] + 'x' try: # run ttx to generate an xml file in the output folder which represents all # its info ttx_args = ['-d', dest_dir, old_ttf_path] ttx_args = ['-q', '-d', dest_dir, input_path] ttx.main(ttx_args) # now parse the xml file to change its PS name. tree = etree.parse(ttx_path) Loading @@ -72,12 +89,18 @@ def main(argv): update_name(name, new_ps_name) tree.write(ttx_path, xml_declaration=True, encoding=encoding ) # generate the udpated font now. ttx_args = ['-d', dest_dir, ttx_path] ttx_args = ['-q', '-d', dest_dir, ttx_path] ttx.main(ttx_args) except Exception: except InvalidFontException: # In case of invalid fonts, we exit. print filename + ' is not a valid font' raise except Exception as e: print 'Error converting font: ' + filename print e # Some fonts are too big to be handled by the ttx library. # Just copy paste them. shutil.copy(old_ttf_path, dest_dir) shutil.copy(input_path, dest_dir) try: # delete the temp ttx file is it exists. os.remove(ttx_path) Loading @@ -94,14 +117,14 @@ def get_font_info(tag): if namerecord.attrib['nameID'] == '6': if ps_name is not None: if not sanitize(namerecord.text) == ps_name: sys.exit('found multiple possibilities of the font name') raise InvalidFontException('found multiple possibilities of the font name') else: ps_name = sanitize(namerecord.text) # nameID=5 means the font version if namerecord.attrib['nameID'] == '5': if ps_version is not None: if not ps_version == get_version(namerecord.text): sys.exit('found multiple possibilities of the font version') raise InvalidFontException('found multiple possibilities of the font version') else: ps_version = get_version(namerecord.text) return [ps_name, ps_version] Loading @@ -121,7 +144,7 @@ def get_version(string): # to extract n.nn, we return the second entry in the split strings. string = string.strip() if not string.startswith('Version '): sys.exit('mal-formed font version') raise InvalidFontException('mal-formed font version') return sanitize(string.split()[1]) if __name__ == '__main__': Loading