# HG changeset patch # User Matti Hamalainen # Date 1621980424 -10800 # Node ID f53ea742b57ffd81c6b7dda1b08afe8517dd04c6 # Parent 0e586b4ab62c685e32154853d3728237394e734e Refactor output mode handling. diff -r 0e586b4ab62c -r f53ea742b57f lxmldump.py --- a/lxmldump.py Tue May 25 23:51:56 2021 +0300 +++ b/lxmldump.py Wed May 26 01:07:04 2021 +0300 @@ -17,6 +17,7 @@ import xml.etree.ElementTree as xmlET import unicodedata import argparse +import textwrap assert sys.version_info >= (3, 7) @@ -41,7 +42,7 @@ pkk_mode_defaults = { # Default Ptr URL format strings - "ptr_url_fmt": { + "ptr_fmt": { PKK_MODE_NORMAL: u"{text}", PKK_MODE_ANKI: u"{text}", }, @@ -49,14 +50,13 @@ "word_fmt": { PKK_MODE_NORMAL: "\"{text}\"", }, + "word_attr_fmt": { + PKK_MODE_NORMAL: " ({alist})", + }, "word_attr_sep": { PKK_MODE_NORMAL: " ; ", PKK_MODE_ANKI: ":", }, - "word_attr_fmt": { - PKK_MODE_NORMAL: " ({alist})", - }, - "word_eol": { PKK_MODE_NORMAL: "\n", }, @@ -155,6 +155,17 @@ sys.exit(1) +class pkk_set_mode(argparse.Action): + def __call__(self, parser, namespace, value, option_string=None): + lvalue = value.strip().lower() + for mode in pkk_modes_list: + if pkk_modes_list[mode] == lvalue: + setattr(namespace, self.dest, mode) + return + + pkk_fatal(f"Invalid output mode '{lvalue}'.") + + ## Value handling class pkk_set_value(argparse.Action): @@ -225,7 +236,7 @@ ## Format a "Ptr" node as text def pkk_ptr_to_text(pnode): - pfmt = pkk_get_fmt("ptr_url_fmt") + pfmt = pkk_get_fmt("ptr_fmt") return pfmt.format( text=("".join(pnode.itertext())).strip(), href=pnode.attrib["{http://www.w3.org/TR/xlink}href"]) @@ -355,23 +366,13 @@ optparser.add_argument("-h", "--help", dest="show_help", action="store_true", - help="show this help message and exit") + help="show this help message") -optparser.add_argument("-d", "--dump", - dest="mode", - action="store_const", const=PKK_MODE_DUMP, default=PKK_MODE_NORMAL, - help="output as simple dump") - -optparser.add_argument("-x", "--xml", +optparser.add_argument("-m", "--mode", dest="mode", - action="store_const", const=PKK_MODE_XML, - help="output as XML") - -optparser.add_argument("-A", "--anki", - dest="mode", - action="store_const", const=PKK_MODE_ANKI, - help=argparse.SUPPRESS) -# help="output Anki compatible") + action=pkk_set_mode, + default=PKK_MODE_NORMAL, + help="set output mode (see below)") optparser.add_argument("-s", "--set", action=pkk_set_value, @@ -407,13 +408,13 @@ ### Show help if needed if len(pkk_cfg.filenames) == 0 or pkk_cfg.show_help: optparser.print_help() + print(u"\nAvailable output modes:") + print(" " + ", ".join(pkk_modes_list.values())) -# print(u"\nDefault Ptr format strings per mode:") -# for pmode in pkk_modes_list: -# if pmode in pkk_ptr_url_fmt: -# print(u" {:6s} : \"{}\"".format(pkk_modes_list[pmode], pkk_ptr_url_fmt[pmode])) - - print(u"") + print(u"\nAvailable format strings and values:") + for mid in pkk_mode_defaults: + stmp = pkk_mode_defaults[mid][PKK_MODE_NORMAL].replace("\\", "\\\\").replace("\n", "\\n") + print(u" {:18s} : '{}'".format(mid, stmp)) sys.exit(0)