1from argparse import RawTextHelpFormatter 2from fontTools.otlLib.optimize.gpos import COMPRESSION_LEVEL, compact 3from fontTools.ttLib import TTFont 4 5 6def main(args=None): 7 """Optimize the layout tables of an existing font""" 8 from argparse import ArgumentParser 9 10 from fontTools import configLogger 11 12 parser = ArgumentParser( 13 prog="otlLib.optimize", 14 description=main.__doc__, 15 formatter_class=RawTextHelpFormatter, 16 ) 17 parser.add_argument("font") 18 parser.add_argument( 19 "-o", metavar="OUTPUTFILE", dest="outfile", default=None, help="output file" 20 ) 21 parser.add_argument( 22 "--gpos-compression-level", 23 help=COMPRESSION_LEVEL.help, 24 default=COMPRESSION_LEVEL.default, 25 choices=list(range(10)), 26 type=int, 27 ) 28 logging_group = parser.add_mutually_exclusive_group(required=False) 29 logging_group.add_argument( 30 "-v", "--verbose", action="store_true", help="Run more verbosely." 31 ) 32 logging_group.add_argument( 33 "-q", "--quiet", action="store_true", help="Turn verbosity off." 34 ) 35 options = parser.parse_args(args) 36 37 configLogger( 38 level=("DEBUG" if options.verbose else "ERROR" if options.quiet else "INFO") 39 ) 40 41 font = TTFont(options.font) 42 compact(font, options.gpos_compression_level) 43 font.save(options.outfile or options.font) 44 45 46if __name__ == "__main__": 47 import sys 48 49 if len(sys.argv) > 1: 50 sys.exit(main()) 51 import doctest 52 53 sys.exit(doctest.testmod().failed) 54