aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/cu2qu/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/fontTools/cu2qu/cli.py')
-rw-r--r--Lib/fontTools/cu2qu/cli.py55
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: