diff options
Diffstat (limited to 'Lib/fontTools/cu2qu/cli.py')
-rw-r--r-- | Lib/fontTools/cu2qu/cli.py | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/Lib/fontTools/cu2qu/cli.py b/Lib/fontTools/cu2qu/cli.py index 34520fc0..9144043f 100644 --- a/Lib/fontTools/cu2qu/cli.py +++ b/Lib/fontTools/cu2qu/cli.py @@ -37,7 +37,7 @@ def open_ufo(path): def _font_to_quadratic(input_path, output_path=None, **kwargs): ufo = open_ufo(input_path) - logger.info('Converting curves for %s', input_path) + logger.info("Converting curves for %s", input_path) if font_to_quadratic(ufo, **kwargs): logger.info("Saving %s", output_path) if output_path: @@ -67,13 +67,13 @@ def _copytree(input_path, output_path): def main(args=None): """Convert a UFO font from cubic to quadratic curves""" parser = argparse.ArgumentParser(prog="cu2qu") - parser.add_argument( - "--version", action="version", version=fontTools.__version__) + parser.add_argument("--version", action="version", version=fontTools.__version__) parser.add_argument( "infiles", nargs="+", metavar="INPUT", - help="one or more input UFO source file(s).") + help="one or more input UFO source file(s).", + ) parser.add_argument("-v", "--verbose", action="count", default=0) parser.add_argument( "-e", @@ -81,19 +81,28 @@ def main(args=None): type=float, metavar="ERROR", default=None, - help="maxiumum approximation error measured in EM (default: 0.001)") + help="maxiumum approximation error measured in EM (default: 0.001)", + ) + parser.add_argument( + "-m", + "--mixed", + default=False, + action="store_true", + help="whether to used mixed quadratic and cubic curves", + ) parser.add_argument( "--keep-direction", dest="reverse_direction", action="store_false", - help="do not reverse the contour direction") + help="do not reverse the contour direction", + ) mode_parser = parser.add_mutually_exclusive_group() mode_parser.add_argument( "-i", "--interpolatable", action="store_true", - help="whether curve conversion should keep interpolation compatibility" + help="whether curve conversion should keep interpolation compatibility", ) mode_parser.add_argument( "-j", @@ -103,7 +112,8 @@ def main(args=None): default=1, const=_cpu_count(), metavar="N", - help="Convert using N multiple processes (default: %(default)s)") + help="Convert using N multiple processes (default: %(default)s)", + ) output_parser = parser.add_mutually_exclusive_group() output_parser.add_argument( @@ -111,14 +121,18 @@ def main(args=None): "--output-file", default=None, metavar="OUTPUT", - help=("output filename for the converted UFO. By default fonts are " - "modified in place. This only works with a single input.")) + help=( + "output filename for the converted UFO. By default fonts are " + "modified in place. This only works with a single input." + ), + ) output_parser.add_argument( "-d", "--output-dir", default=None, metavar="DIRECTORY", - help="output directory where to save converted UFOs") + help="output directory where to save converted UFOs", + ) options = parser.parse_args(args) @@ -143,8 +157,7 @@ def main(args=None): elif not os.path.isdir(output_dir): parser.error("'%s' is not a directory" % output_dir) output_paths = [ - os.path.join(output_dir, os.path.basename(p)) - for p in options.infiles + os.path.join(output_dir, os.path.basename(p)) for p in options.infiles ] elif options.output_file: output_paths = [options.output_file] @@ -152,12 +165,15 @@ def main(args=None): # save in-place output_paths = [None] * len(options.infiles) - kwargs = dict(dump_stats=options.verbose > 0, - max_err_em=options.conversion_error, - reverse_direction=options.reverse_direction) + kwargs = dict( + dump_stats=options.verbose > 0, + max_err_em=options.conversion_error, + reverse_direction=options.reverse_direction, + all_quadratic=False if options.mixed else True, + ) if options.interpolatable: - logger.info('Converting curves compatibly') + logger.info("Converting curves compatibly") ufos = [open_ufo(infile) for infile in options.infiles] if fonts_to_quadratic(ufos, **kwargs): for ufo, output_path in zip(ufos, output_paths): @@ -171,11 +187,10 @@ def main(args=None): if output_path: _copytree(input_path, output_path) else: - jobs = min(len(options.infiles), - options.jobs) if options.jobs > 1 else 1 + jobs = min(len(options.infiles), options.jobs) if options.jobs > 1 else 1 if jobs > 1: func = partial(_font_to_quadratic, **kwargs) - logger.info('Running %d parallel processes', jobs) + logger.info("Running %d parallel processes", jobs) with closing(mp.Pool(jobs)) as pool: pool.starmap(func, zip(options.infiles, output_paths)) else: |