build.py 2.0 KB

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