xref: /aosp_15_r20/external/fonttools/Lib/fontTools/varLib/avar.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1from fontTools.varLib import _add_avar, load_designspace
2from fontTools.misc.cliTools import makeOutputFileName
3import logging
4
5log = logging.getLogger("fontTools.varLib.avar")
6
7
8def main(args=None):
9    """Add `avar` table from designspace file to variable font."""
10
11    if args is None:
12        import sys
13
14        args = sys.argv[1:]
15
16    from fontTools import configLogger
17    from fontTools.ttLib import TTFont
18    from fontTools.designspaceLib import DesignSpaceDocument
19    import argparse
20
21    parser = argparse.ArgumentParser(
22        "fonttools varLib.avar",
23        description="Add `avar` table from designspace file to variable font.",
24    )
25    parser.add_argument("font", metavar="varfont.ttf", help="Variable-font file.")
26    parser.add_argument(
27        "designspace", metavar="family.designspace", help="Designspace file."
28    )
29    parser.add_argument(
30        "-o",
31        "--output-file",
32        type=str,
33        help="Output font file name.",
34    )
35    parser.add_argument(
36        "-v", "--verbose", action="store_true", help="Run more verbosely."
37    )
38
39    options = parser.parse_args(args)
40
41    configLogger(level=("INFO" if options.verbose else "WARNING"))
42
43    font = TTFont(options.font)
44    if not "fvar" in font:
45        log.error("Not a variable font.")
46        return 1
47
48    axisTags = [a.axisTag for a in font["fvar"].axes]
49
50    ds = load_designspace(options.designspace)
51
52    if "avar" in font:
53        log.warning("avar table already present, overwriting.")
54        del font["avar"]
55
56    _add_avar(font, ds.axes, ds.axisMappings, axisTags)
57
58    if options.output_file is None:
59        outfile = makeOutputFileName(options.font, overWrite=True, suffix=".avar")
60    else:
61        outfile = options.output_file
62    if outfile:
63        log.info("Saving %s", outfile)
64        font.save(outfile)
65
66
67if __name__ == "__main__":
68    import sys
69
70    sys.exit(main())
71