poafloc

poafloc - Parser Of Arguments For Lines Of Commands
git clone git://git.dimitrijedobrota.com/poafloc.git
Log | Files | Refs | README | LICENSE

commit f43244f45b0a1d518bafd73e85555c25bacb02a0
parent 84921ee22706704d4d37b23fe3341a0218d099d0
Author: Dimitrije Dobrota <mail@dimitrijedobrota.com>
Date:   Sat,  8 Jun 2024 21:00:24 +0200

Exclude options with HIDDEN flag from --help

Diffstat:
Margs.hpp | 17++++++++++++-----
Mdemo.cpp | 12++++++------
2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/args.hpp b/args.hpp @@ -45,10 +45,10 @@ class Parser { }; Parser(argp_t *argp) : argp(argp) { - int key_last; - int i = 0; + bool hidden = false; + int key_last = 0; - while (true) { + for (int i = 0; true; i++) { const auto &opt = argp->options[i]; if (!opt.name && !opt.key) break; @@ -64,6 +64,10 @@ class Parser { } trie.insert(opt.name, key_last); + + if (hidden) continue; + if (opt.options & Option::HIDDEN) continue; + help_entries.back().push(opt.name); } else { if (options.count(opt.key)) { @@ -77,6 +81,8 @@ class Parser { bool arg_opt = opt.options & Option::ARG_OPTIONAL; if ((opt.options & ALIAS) == 0) { + if ((hidden = opt.options & Option::HIDDEN)) continue; + help_entries.emplace_back(opt.arg, opt.message, arg_opt); if (opt.name) help_entries.back().push(opt.name); @@ -89,14 +95,15 @@ class Parser { throw new std::runtime_error("no alias"); } + if (hidden) continue; + if (opt.options & Option::HIDDEN) continue; + if (opt.name) help_entries.back().push(opt.name); if (std::isprint(opt.key)) { help_entries.back().push(opt.key); } } } - - i++; } std::sort(begin(help_entries), end(help_entries)); diff --git a/demo.cpp b/demo.cpp @@ -41,12 +41,12 @@ using enum Parser::Option; // clang-format off static const Parser::option_t options[] = { - { "output", 'o', "file", ARG_OPTIONAL, "Output file, default stdout"}, - { 0, 'i', "file", 0, "Input file"}, - { "debug", 777, 0, 0, "Execute program in debugging mode"}, - { "hex", 'h', 0, 0, "Output in hex format"}, - {"hexadecimal", 0, 0, ALIAS}, - {"relocatable", 'r', 0, 0, "Output in relocatable format"}, + { "output", 'o', "file", ARG_OPTIONAL, "Output file, default stdout"}, + { 0, 'i', "file", 0, "Input file"}, + { "debug", 777, 0, 0, "Execute program in debugging mode"}, + { "hex", 'h', 0, 0, "Output in hex format"}, + {"hexadecimal", 0, 0, ALIAS | HIDDEN}, + {"relocatable", 'r', 0, 0, "Output in relocatable format"}, {0}, }; // clang-format on