From 02f23a214c762fafe8e921737ffe8bdad6b21bf6 Mon Sep 17 00:00:00 2001 From: Simon Cozens Date: Sun, 3 May 2020 21:21:30 +0100 Subject: [PATCH 1/3] [doc] Add help options to fonttools CLI --- Lib/fontTools/__main__.py | 6 ++++-- Lib/fontTools/cu2qu/__main__.py | 1 + Lib/fontTools/feaLib/__main__.py | 1 + Lib/fontTools/help/__init__.py | 0 Lib/fontTools/help/__main__.py | 35 ++++++++++++++++++++++++++++++++ Lib/fontTools/mtiLib/__main__.py | 2 ++ Lib/fontTools/subset/__main__.py | 2 ++ Lib/fontTools/varLib/__main__.py | 2 ++ 8 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 Lib/fontTools/help/__init__.py create mode 100644 Lib/fontTools/help/__main__.py diff --git a/Lib/fontTools/__main__.py b/Lib/fontTools/__main__.py index ba09c7fc6..9b978aaa7 100644 --- a/Lib/fontTools/__main__.py +++ b/Lib/fontTools/__main__.py @@ -5,8 +5,6 @@ def main(args=None): if args is None: args = sys.argv[1:] - # TODO Add help output, --help, etc. - # TODO Handle library-wide options. Eg.: # --unicodedata # --verbose / other logging stuff @@ -20,6 +18,10 @@ def main(args=None): # can be added. Should we just try importing the fonttools # module first and try without if it fails? + if len(sys.argv) < 2: + sys.argv.append("help") + if sys.argv[1] == "-h" or sys.argv[1] == "--help": + sys.argv[1] = "help" mod = 'fontTools.'+sys.argv[1] sys.argv[1] = sys.argv[0] + ' ' + sys.argv[1] del sys.argv[0] diff --git a/Lib/fontTools/cu2qu/__main__.py b/Lib/fontTools/cu2qu/__main__.py index 084bf8f96..32715062f 100644 --- a/Lib/fontTools/cu2qu/__main__.py +++ b/Lib/fontTools/cu2qu/__main__.py @@ -1,3 +1,4 @@ +"""Convert a UFO font with cubic curves to quadratic curves""" import sys from .cli import main diff --git a/Lib/fontTools/feaLib/__main__.py b/Lib/fontTools/feaLib/__main__.py index b69307e84..81ba360ac 100644 --- a/Lib/fontTools/feaLib/__main__.py +++ b/Lib/fontTools/feaLib/__main__.py @@ -1,3 +1,4 @@ +"""Add features from a feature file (.fea) into a OTF font""" from fontTools.misc.py23 import * from fontTools.ttLib import TTFont from fontTools.feaLib.builder import addOpenTypeFeatures, Builder diff --git a/Lib/fontTools/help/__init__.py b/Lib/fontTools/help/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/Lib/fontTools/help/__main__.py b/Lib/fontTools/help/__main__.py new file mode 100644 index 000000000..97237e449 --- /dev/null +++ b/Lib/fontTools/help/__main__.py @@ -0,0 +1,35 @@ +"""Show this help""" +import pkgutil +import sys +from setuptools import find_packages +from pkgutil import iter_modules +import fontTools +import importlib + + +def get_description(pkg): + try: + return __import__(pkg+".__main__",globals(),locals(),["__doc__"]).__doc__ + except Exception as e: + return None + +def show_help_list(): + path = fontTools.__path__[0] + for pkg in find_packages(path): + qualifiedPkg = "fontTools."+pkg + description = get_description(qualifiedPkg) + if description: + print("fontools %-10s %s" % (pkg, description)) + pkgpath = path + '/' + qualifiedPkg.replace('.', '/') + if (sys.version_info.major == 3 and sys.version_info.minor < 6): + for _, name, ispkg in iter_modules([pkgpath]): + if get_description(pkg+ '.' + name): + modules.add(pkg + '.' + name) + else: + for info in iter_modules([pkgpath]): + if get_description(pkg+ '.' + info.name): + modules.add(pkg + '.' + info.name) + +if __name__ == '__main__': + print("fonttools v%s\n" % fontTools.__version__) + show_help_list() diff --git a/Lib/fontTools/mtiLib/__main__.py b/Lib/fontTools/mtiLib/__main__.py index eacfefd59..0d4183b54 100644 --- a/Lib/fontTools/mtiLib/__main__.py +++ b/Lib/fontTools/mtiLib/__main__.py @@ -1,6 +1,8 @@ +"""Convert Monotype FontDame layout files to TTX""" from fontTools.misc.py23 import * import sys from fontTools.mtiLib import main + if __name__ == '__main__': sys.exit(main()) diff --git a/Lib/fontTools/subset/__main__.py b/Lib/fontTools/subset/__main__.py index 3f3d894a0..e1d9f123a 100644 --- a/Lib/fontTools/subset/__main__.py +++ b/Lib/fontTools/subset/__main__.py @@ -1,6 +1,8 @@ +"""OpenType font subsetter and optimizer""" from fontTools.misc.py23 import * import sys from fontTools.subset import main + if __name__ == '__main__': sys.exit(main()) diff --git a/Lib/fontTools/varLib/__main__.py b/Lib/fontTools/varLib/__main__.py index 29657401d..c147b4980 100644 --- a/Lib/fontTools/varLib/__main__.py +++ b/Lib/fontTools/varLib/__main__.py @@ -1,5 +1,7 @@ +"""Build a variable font from a designspace file and masters""" import sys from fontTools.varLib import main + if __name__ == '__main__': sys.exit(main()) From f4841c1b0ddecd27544e2fd36429fd72c102d162 Mon Sep 17 00:00:00 2001 From: Simon Cozens Date: Mon, 4 May 2020 11:46:32 +0100 Subject: [PATCH 2/3] Address feedback, reformat, simplify, fix bugs and typo --- Lib/fontTools/help/__main__.py | 43 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/Lib/fontTools/help/__main__.py b/Lib/fontTools/help/__main__.py index 97237e449..b707c9f09 100644 --- a/Lib/fontTools/help/__main__.py +++ b/Lib/fontTools/help/__main__.py @@ -7,29 +7,26 @@ import fontTools import importlib -def get_description(pkg): - try: - return __import__(pkg+".__main__",globals(),locals(),["__doc__"]).__doc__ - except Exception as e: - return None +def describe(pkg): + try: + description = __import__( + "fontTools." + pkg + ".__main__", globals(), locals(), ["__doc__"] + ).__doc__ + print("fonttools %-10s %s" % (pkg, description), file=sys.stderr) + except Exception as e: + return None + def show_help_list(): - path = fontTools.__path__[0] - for pkg in find_packages(path): - qualifiedPkg = "fontTools."+pkg - description = get_description(qualifiedPkg) - if description: - print("fontools %-10s %s" % (pkg, description)) - pkgpath = path + '/' + qualifiedPkg.replace('.', '/') - if (sys.version_info.major == 3 and sys.version_info.minor < 6): - for _, name, ispkg in iter_modules([pkgpath]): - if get_description(pkg+ '.' + name): - modules.add(pkg + '.' + name) - else: - for info in iter_modules([pkgpath]): - if get_description(pkg+ '.' + info.name): - modules.add(pkg + '.' + info.name) + path = fontTools.__path__[0] + for pkg in find_packages(path): + qualifiedPkg = "fontTools." + pkg + describe(pkg) + pkgpath = path + "/" + qualifiedPkg.replace(".", "/") + for info in iter_modules([pkgpath]): + describe(pkg + "." + info.name) -if __name__ == '__main__': - print("fonttools v%s\n" % fontTools.__version__) - show_help_list() + +if __name__ == "__main__": + print("fonttools v%s\n" % fontTools.__version__, file=sys.stderr) + show_help_list() From c8c0a0d178a4f18f76624dcfa1e40d53946a2e3d Mon Sep 17 00:00:00 2001 From: Simon Cozens Date: Mon, 4 May 2020 12:55:48 +0100 Subject: [PATCH 3/3] Move help from package to module --- Lib/fontTools/{help/__main__.py => help.py} | 0 Lib/fontTools/help/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Lib/fontTools/{help/__main__.py => help.py} (100%) delete mode 100644 Lib/fontTools/help/__init__.py diff --git a/Lib/fontTools/help/__main__.py b/Lib/fontTools/help.py similarity index 100% rename from Lib/fontTools/help/__main__.py rename to Lib/fontTools/help.py diff --git a/Lib/fontTools/help/__init__.py b/Lib/fontTools/help/__init__.py deleted file mode 100644 index e69de29bb..000000000