xref: /aosp_15_r20/external/fonttools/Lib/fontTools/otlLib/optimize/__init__.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
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