changeset 71:8481f8f52a84

More cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 09 Dec 2021 10:11:26 +0200
parents f887d8a68e5e
children 0849d65fabce
files lxmldump.py
diffstat 1 files changed, 41 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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 <ccr@tnsp.org>\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 <ccr@tnsp.org>\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] <input xml file(s)>",
-        add_help=False
+    optparser = PKKArgumentParser(
+        usage="%(prog)s [options] <input xml file(s)>"
         )
 
     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 <ccr@tnsp.org>\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