123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- from fontTools.ttLib import TTFont
- from fontTools.feaLib.builder import addOpenTypeFeatures, Builder
- from fontTools.feaLib.error import FeatureLibError
- from fontTools import configLogger
- from fontTools.misc.cliTools import makeOutputFileName
- import sys
- import argparse
- import logging
- log = logging.getLogger("fontTools.feaLib")
- def main(args=None):
- """Add features from a feature file (.fea) into an OTF font"""
- parser = argparse.ArgumentParser(
- description="Use fontTools to compile OpenType feature files (*.fea)."
- )
- parser.add_argument(
- "input_fea", metavar="FEATURES", help="Path to the feature file"
- )
- parser.add_argument(
- "input_font", metavar="INPUT_FONT", help="Path to the input font"
- )
- parser.add_argument(
- "-o",
- "--output",
- dest="output_font",
- metavar="OUTPUT_FONT",
- help="Path to the output font.",
- )
- parser.add_argument(
- "-t",
- "--tables",
- metavar="TABLE_TAG",
- choices=Builder.supportedTables,
- nargs="+",
- help="Specify the table(s) to be built.",
- )
- parser.add_argument(
- "-d",
- "--debug",
- action="store_true",
- help="Add source-level debugging information to font.",
- )
- parser.add_argument(
- "-v",
- "--verbose",
- help="Increase the logger verbosity. Multiple -v " "options are allowed.",
- action="count",
- default=0,
- )
- parser.add_argument(
- "--traceback", help="show traceback for exceptions.", action="store_true"
- )
- options = parser.parse_args(args)
- levels = ["WARNING", "INFO", "DEBUG"]
- configLogger(level=levels[min(len(levels) - 1, options.verbose)])
- output_font = options.output_font or makeOutputFileName(options.input_font)
- log.info("Compiling features to '%s'" % (output_font))
- font = TTFont(options.input_font)
- try:
- addOpenTypeFeatures(
- font, options.input_fea, tables=options.tables, debug=options.debug
- )
- except FeatureLibError as e:
- if options.traceback:
- raise
- log.error(e)
- sys.exit(1)
- font.save(output_font)
- if __name__ == "__main__":
- sys.exit(main())
|