diff options
Diffstat (limited to 'src/cz/crcs/ectester/common/cli/CLITools.java')
| -rw-r--r-- | src/cz/crcs/ectester/common/cli/CLITools.java | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/cz/crcs/ectester/common/cli/CLITools.java b/src/cz/crcs/ectester/common/cli/CLITools.java index 8f34f62..1b73207 100644 --- a/src/cz/crcs/ectester/common/cli/CLITools.java +++ b/src/cz/crcs/ectester/common/cli/CLITools.java @@ -37,16 +37,43 @@ public class CLITools { } } + private static void usage(HelpFormatter help, PrintWriter pw, CommandLineParser cli, Options opts) { + StringWriter sw = new StringWriter(); + PrintWriter upw = new PrintWriter(sw); + help.printUsage(upw, HelpFormatter.DEFAULT_WIDTH, "", opts); + upw.print(" "); + if (cli instanceof TreeParser) { + TreeParser tp = (TreeParser) cli; + if (!tp.isRequired()) { + upw.print("[ "); + } + tp.getParsers().forEach((key, value) -> { + upw.print("( " + key + " "); + usage(help, upw, value.getParser(), value.getOptions()); + upw.print(")"); + }); + if (!tp.isRequired()) { + upw.print(" ]"); + } + } + pw.println(sw.toString().substring(8).replace("\n", "")); + } + /** * Print tree help. */ - public static void help(String prog, String header, Options baseOpts, TreeParser baseParser, String footer, boolean usage) { + public static void help(String prog, String header, Options baseOpts, TreeParser baseParser, String footer, boolean printUsage) { HelpFormatter help = new HelpFormatter(); help.setOptionComparator(null); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); - if (usage) { - help.printUsage(pw, HelpFormatter.DEFAULT_WIDTH, prog, baseOpts); + if (printUsage) { + StringWriter uw = new StringWriter(); + PrintWriter upw = new PrintWriter(uw); + usage(help, upw, baseParser, baseOpts); + pw.print(prog + " usage: "); + help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, uw.toString()); + upw.close(); } help.printWrapped(pw, HelpFormatter.DEFAULT_WIDTH, header); help.printOptions(pw, HelpFormatter.DEFAULT_WIDTH, baseOpts, HelpFormatter.DEFAULT_LEFT_PAD, HelpFormatter.DEFAULT_DESC_PAD); |
