diff options
Diffstat (limited to 'Lib/fontTools/ttLib/__main__.py')
-rw-r--r-- | Lib/fontTools/ttLib/__main__.py | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/Lib/fontTools/ttLib/__main__.py b/Lib/fontTools/ttLib/__main__.py new file mode 100644 index 00000000..2733444d --- /dev/null +++ b/Lib/fontTools/ttLib/__main__.py @@ -0,0 +1,108 @@ +import sys +from fontTools.ttLib import TTLibError, TTLibFileIsCollectionError +from fontTools.ttLib.ttFont import * +from fontTools.ttLib.ttCollection import TTCollection + + +def main(args=None): + """Open/save fonts with TTFont() or TTCollection() + + ./fonttools ttLib [-oFILE] [-yNUMBER] files... + + If multiple files are given on the command-line, + they are each opened (as a font or collection), + and added to the font list. + + If -o (output-file) argument is given, the font + list is then saved to the output file, either as + a single font, if there is only one font, or as + a collection otherwise. + + If -y (font-number) argument is given, only the + specified font from collections is opened. + + The above allow extracting a single font from a + collection, or combining multiple fonts into a + collection. + + If --lazy or --no-lazy are give, those are passed + to the TTFont() or TTCollection() constructors. + """ + from fontTools import configLogger + + if args is None: + args = sys.argv[1:] + + import argparse + + parser = argparse.ArgumentParser( + "fonttools ttLib", + description="Open/save fonts with TTFont() or TTCollection()", + epilog=""" + If multiple files are given on the command-line, + they are each opened (as a font or collection), + and added to the font list. + + The above, when combined with -o / --output, + allows for extracting a single font from a + collection, or combining multiple fonts into a + collection. + """, + ) + parser.add_argument("font", metavar="font", nargs="*", help="Font file.") + parser.add_argument( + "-t", "--table", metavar="table", nargs="*", help="Tables to decompile." + ) + parser.add_argument( + "-o", "--output", metavar="FILE", default=None, help="Output file." + ) + parser.add_argument( + "-y", metavar="NUMBER", default=-1, help="Font number to load from collections." + ) + parser.add_argument( + "--lazy", action="store_true", default=None, help="Load fonts lazily." + ) + parser.add_argument( + "--no-lazy", dest="lazy", action="store_false", help="Load fonts immediately." + ) + parser.add_argument( + "--flavor", + dest="flavor", + default=None, + help="Flavor of output font. 'woff' or 'woff2'.", + ) + options = parser.parse_args(args) + + fontNumber = int(options.y) if options.y is not None else None + outFile = options.output + lazy = options.lazy + flavor = options.flavor + tables = options.table if options.table is not None else [] + + fonts = [] + for f in options.font: + try: + font = TTFont(f, fontNumber=fontNumber, lazy=lazy) + fonts.append(font) + except TTLibFileIsCollectionError: + collection = TTCollection(f, lazy=lazy) + fonts.extend(collection.fonts) + + for font in fonts: + for table in tables if "*" not in tables else font.keys(): + font[table] # Decompiles + + if outFile is not None: + if len(fonts) == 1: + fonts[0].flavor = flavor + fonts[0].save(outFile) + else: + if flavor is not None: + raise TTLibError("Cannot set flavor for collections.") + collection = TTCollection() + collection.fonts = fonts + collection.save(outFile) + + +if __name__ == "__main__": + sys.exit(main()) |