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