Skip to content

Commit e5c1540

Browse files
committed
Improve the cmdline script to accept more options
1 parent 29fc2ec commit e5c1540

File tree

1 file changed

+45
-16
lines changed

1 file changed

+45
-16
lines changed

Lib/extractor/__init__.py

+45-16
Original file line numberDiff line numberDiff line change
@@ -84,28 +84,57 @@ def cmdline():
8484
8585
Usage: extractufo font [font ...]
8686
"""
87-
from sys import argv, exit
88-
try:
89-
from ufoLib2 import Font
90-
library = "ufoLib2"
91-
except ImportError:
87+
import os
88+
from sys import exit
89+
from argparse import ArgumentParser
90+
91+
parser = ArgumentParser(
92+
description="Extract data from font binaries and build UFO objects from them.",
93+
epilog="Each resulting UFO will be saved as FONT_FILE.ufo(z) in the same directory as the original FONT_FILE. "
94+
"If destination file or directory already exists, conversion for that source file will be skipped and the application exit code will indicate an error.",
95+
)
96+
parser.add_argument('FONT_FILE', help='Input font path', nargs="+")
97+
parser.add_argument('-m', '--ufo-module', choices=['ufoLib2', 'defcon'],
98+
help='Select the default library for writing UFOs (default: autodetect, prefer ufoLib2)')
99+
parser.add_argument('-z', '--zip', action="store_true", help="Output UFO ZIP")
100+
101+
args = parser.parse_args()
102+
if args.ufo_module is None:
103+
try:
104+
from ufoLib2 import Font
105+
print("Will use ufoLib2 for UFO output.")
106+
except ImportError:
107+
try:
108+
from defcon import Font
109+
print("Will use defcon for UFO output.")
110+
except ImportError:
111+
print("Either ufoLib2 or, alternatively, defcon library is required to run this command.\nPlease install one of them.")
112+
exit(1)
113+
elif args.ufo_module == 'ufoLib2':
114+
try:
115+
from ufoLib2 import Font
116+
except ImportError:
117+
print("Can't find ufoLib2 installed. Please install it or specify a different UFO library.")
118+
exit(1)
119+
else:
92120
try:
93121
from defcon import Font
94-
library = "defcon"
95122
except ImportError:
96-
print("Either ufoLib2 or defcon library is required for this command to work.\nPlease install one of them.")
123+
print("Can't find defcon installed. Please install it or specify a different UFO library.")
97124
exit(1)
98125

99-
if len(argv) <= 1:
100-
print("No font path supplied.\nUsage: extractufo font [font ...]")
101-
exit(1)
102-
103-
print(f"Will use {library} library for UFO output.")
104-
105-
for font_path in argv[1:]:
106-
ufo_path = f"{font_path}.ufo"
126+
structure = "zip" if args.zip else "package"
127+
had_write_errors = False
128+
for font_path in args.FONT_FILE:
129+
ufo_path = f"{font_path}.ufo" if not args.zip else f"{font_path}.ufoz"
107130
print(f"Extracting {ufo_path}... ", end="")
131+
if os.path.exists(ufo_path):
132+
print("path already exists, skipping.")
133+
had_write_errors = True
134+
continue
108135
ufo = Font()
109136
extractUFO(font_path, ufo)
110-
ufo.save(ufo_path, overwrite=True)
137+
ufo.save(ufo_path, structure=structure)
111138
print("done.")
139+
140+
exit(had_write_errors)

0 commit comments

Comments
 (0)