# HG changeset patch # User Matti Hamalainen # Date 1639037486 -7200 # Node ID 8481f8f52a84956a8c00aeef666fc7b60e57dd26 # Parent f887d8a68e5e1241177dcce25520bd675e38c7f0 More cleanups. diff -r f887d8a68e5e -r 8481f8f52a84 lxmldump.py --- a/lxmldump.py Thu Dec 09 08:59:41 2021 +0200 +++ b/lxmldump.py Thu Dec 09 10:11:26 2021 +0200 @@ -279,6 +279,19 @@ return pkk_get_value(mid).replace("\\n", "\n") +## Argument parser subclass +class PKKArgumentParser(argparse.ArgumentParser): + def print_help(self): + print("lxmldump - Convert and dump ISO/FDIS 1951 XML file data\n" + "(C) Copyright 2021 Matti 'ccr' Hämäläinen \n") + super().print_help() + + def error(self, message): + self.print_help() + sys.stderr.write(f"\nerror: {message}\n") + sys.exit(2) + + ## Annotate given string with prefix and suffix based on tag def pkk_str_annotate(mtag, mstr): if pkk_cfg.annotate and mtag in pkk_element_annotation_map: @@ -463,22 +476,34 @@ indent=pkk_geti(indent))) +## Argument parser subclass +class PKKArgumentParser(argparse.ArgumentParser): + def print_help(self): + print("lxmldump - Convert and dump ISO/FDIS 1951 XML file data\n" + "(C) Copyright 2021 Matti 'ccr' Hämäläinen \n") + + super().print_help() + + print(u"\nAvailable output modes:") + print(" " + ", ".join(pkk_modes_list.values())) + + + def error(self, message): + self.print_help() + sys.stderr.write(f"\nerror: {message}\n") + sys.exit(2) + + def pkk_get_argparser(): - optparser = argparse.ArgumentParser( - usage="%(prog)s [options] ", - add_help=False + optparser = PKKArgumentParser( + usage="%(prog)s [options] " ) optparser.add_argument("filenames", - type=str, action="extend", nargs="*", + type=str, action="extend", nargs="+", metavar="filename", help="XML filename(s)") - optparser.add_argument("-h", "--help", - dest="show_help", - action="store_true", - help="show this help message") - optparser.add_argument("-m", "--mode", dest="mode", action=pkk_set_mode, @@ -506,6 +531,11 @@ metavar="N", help='set indentation width (default: %(default)s)') + optparser.add_argument("-l", "--list", + dest="list_values", + action="store_true", + help="show list of format strings for current mode") + optparser.add_argument("-p", "--debug", dest="debug", action="store_true", @@ -524,29 +554,17 @@ optparser = pkk_get_argparser() pkk_cfg = optparser.parse_args() - - ### Show help if needed - if len(pkk_cfg.filenames) == 0 or pkk_cfg.show_help: - print("lxmldump - Convert and dump ISO/FDIS 1951 XML file data\n" - "Programmed and designed by Matti 'ccr' Hämäläinen \n" - "(C) Copyright 2021 Tecnic Software productions (TNSP)\n") - optparser.print_help() - print(u"\nAvailable output modes:") - print(" " + ", ".join(pkk_modes_list.values())) - + if pkk_cfg.list_values: if pkk_cfg.mode not in [PKK_MODE_NORMAL, PKK_MODE_ANKI]: pkk_cfg.mode = PKK_MODE_NORMAL - print(u"\nAvailable format strings and values (mode '{}'):".format( + print(u"Available format strings and values (mode '{}'):".format( pkk_modes_list[pkk_cfg.mode])) for mid in pkk_mode_defaults: stmp = pkk_get_value(mid).replace("\\", "\\\\").replace("\n", "\\n") print(u" {:22s} : '{}'".format(mid, stmp)) - sys.exit(0) - - ### Handle each input file for filename in pkk_cfg.filenames: # Parse XML file into element tree