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