From 5622d5d239378cc26fffc3c2a3366c44acb9c7ec Mon Sep 17 00:00:00 2001 From: Jim Hague Date: Thu, 12 Oct 2017 11:59:28 +0100 Subject: [PATCH] Convert abcfield.py from OptionParser to ArgumentParser. abctemplate.py uses ArgumentParser, so this reduced dependencies. --- abcfield.py | 75 +++++++++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/abcfield.py b/abcfield.py index 095c0bb..1da24a5 100755 --- a/abcfield.py +++ b/abcfield.py @@ -17,7 +17,7 @@ # break between it and the previous line. # -import optparse +import argparse import pathlib import re import subprocess @@ -239,17 +239,17 @@ def getFullTitle(lines, dir, starts = None, latex = False): return title if len(subtitle) == 0 else title + " (" + subtitle + ")" if __name__ == "__main__": - def process(f, dir, options): + def process(f, dir, args): lines = f.readlines() - if options.display: - if options.field.upper() == "FT": - line = getFullTitle(lines, dir, options.starts, options.latex) + if args.display: + if args.field.upper() == "FT": + line = getFullTitle(lines, dir, args.starts, args.latex) else: - line = getFieldDisplayText(lines, dir, options.field, options.index, options.starts, options.latex) + line = getFieldDisplayText(lines, dir, args.field, args.index, args.starts, args.latex) else: - if options.field.upper() == "FT": - options.field = "T" - line = getFieldText(lines, options.field, options.index, options.starts) + if args.field.upper() == "FT": + args.field = "T" + line = getFieldText(lines, args.field, args.index, args.starts) if line: print(line) return True @@ -257,32 +257,39 @@ if __name__ == "__main__": return False # execute only if run as a script - parser = optparse.OptionParser(usage="usage: %prog [options] [filename]\n\n" - " Extract field data from ABC file.") - parser.add_option("-f", "--field", dest="field", default="T", - help="extract the field FIELD", metavar="FIELD") - parser.add_option("-l", "--latex", dest="latex", - action="store_true", default=False, - help="convert special characters for LaTeX") - parser.add_option("-d", "--display", dest="display", - action="store_true", default=False, - help="convert to display text") - parser.add_option("-n", "--index", dest="index", - action="store", type="int", default=1, - help="report INDEXth value [default: %default]", - metavar="INDEX") - parser.add_option("-s", "--starts", dest="starts", - action="store", type="string", default=None, - help="report only if line starts CONTENT and remove CONTENT", - metavar="CONTENT") - (options, args) = parser.parse_args() + parser = argparse.ArgumentParser(description="Extract field data from ABC file.") + parser.add_argument("-f", "--field", dest="field", default="T", + help=("extract the given field [default: %(default)s]. " + "Field FT is special; it returns the full title " + "- the title followed by subtitle in () if " + "present - for display text, or just the title " + "for non-display text.")) + parser.add_argument("-l", "--latex", dest="latex", + action="store_true", default=False, + help="convert special characters for LaTeX (default HTML)") + parser.add_argument("-d", "--display", dest="display", + action="store_true", default=False, + help=("convert to display text. Convert accents to " + "LaTeX or HTML, in titles convert 'Tune, The' to " + "'The Tune', convert keys to full key name, " + "and expand Markdown in notes and history.")) + parser.add_argument("-n", "--index", dest="index", + action="store", type=int, default=1, + help="report INDEXth value [default: %(default)s]") + parser.add_argument("-s", "--starts", dest="starts", + action="store", default=None, + help=("report only if line starts with CONTENT " + "and remove CONTENT"), + metavar="CONTENT") + parser.add_argument('input', type=argparse.FileType('r'), + help='input ABC file') + args = parser.parse_args() res = False - if len(args) > 0: - for arg in args: - path = pathlib.Path(arg) - with path.open() as f: - res = res or process(f, path.parent, options) + if args.input: + path = pathlib.Path(args.input.name) + with path.open() as f: + res = process(f, path.parent, args) else: - res = process(sys.stdin, ".", options) + res = process(sys.stdin, ".", args) sys.exit(int(not res))