From 0a3360e52727cdefce2e9b28286b074faf99033c Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 15 Sep 2023 07:57:04 -0600 Subject: [PATCH] [varLib.avar] New module to compile avar from .designspace file Fixes https://github.com/fonttools/fonttools/issues/3275 --- Lib/fontTools/varLib/avar.py | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Lib/fontTools/varLib/avar.py diff --git a/Lib/fontTools/varLib/avar.py b/Lib/fontTools/varLib/avar.py new file mode 100644 index 000000000..60f0d7e70 --- /dev/null +++ b/Lib/fontTools/varLib/avar.py @@ -0,0 +1,70 @@ +from fontTools.varLib import _add_avar, load_designspace +from fontTools.misc.cliTools import makeOutputFileName +import logging + +log = logging.getLogger("fontTools.varLib.avar") + + +def main(args=None): + """Add `avar` table from designspace file to variable font.""" + + if args is None: + import sys + + args = sys.argv[1:] + + from fontTools import configLogger + from fontTools.ttLib import TTFont + from fontTools.designspaceLib import DesignSpaceDocument + import argparse + + parser = argparse.ArgumentParser( + "fonttools varLib.avar", + description="Add `avar` table from designspace file to variable font.", + ) + parser.add_argument("font", metavar="varfont.ttf", help="Variable-font file.") + parser.add_argument( + "designspace", metavar="family.designspace", help="Designspace file." + ) + parser.add_argument( + "-o", + "--output-file", + type=str, + help="Output font file name.", + ) + parser.add_argument( + "-v", "--verbose", action="store_true", help="Run more verbosely." + ) + + options = parser.parse_args(args) + + configLogger(level=("INFO" if options.verbose else "WARNING")) + + font = TTFont(options.font) + if not "fvar" in font: + log.error("Not a variable font.") + return 1 + + axisTags = [a.axisTag for a in font["fvar"].axes] + + ds = load_designspace(options.designspace) + + if "avar" in font: + log.warning("avar table already present, overwriting.") + del font["avar"] + + _add_avar(font, ds.axes, ds.axisMappings, axisTags) + + if options.output_file is None: + outfile = makeOutputFileName(options.font, overWrite=True, suffix=".avar") + else: + outfile = options.output_file + if outfile: + log.info("Saving %s", outfile) + font.save(outfile) + + +if __name__ == "__main__": + import sys + + sys.exit(main())