Spaces:
Sleeping
Sleeping
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) | |
if lazy is False: | |
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()) | |