poafloc

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

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

Exclude options with HIDDEN flag from --help

Diffstat:
M args.hpp | ++++++++++++ -----
M demo.cpp | ++++++ ------

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