From bc5aaae8183eac078917383e00250533b09c1ff7 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Mon, 21 Mar 2022 10:50:39 +1000 Subject: [PATCH] cmdopt2/parser: add a description parameter --- cmdopt2/parser.cpp | 7 +++++++ cmdopt2/parser.hpp | 4 ++++ test/cmdopt2.cpp | 6 +++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cmdopt2/parser.cpp b/cmdopt2/parser.cpp index f76d4d3f..f5a5e8f6 100644 --- a/cmdopt2/parser.cpp +++ b/cmdopt2/parser.cpp @@ -7,6 +7,12 @@ using cruft::cmdopt2::parser; +/////////////////////////////////////////////////////////////////////////////// +parser::parser (char const *_description) + : m_description (_description) +{ ; } + + /////////////////////////////////////////////////////////////////////////////// cruft::cmdopt2::positional_t& parser::add (positional_t const &arg)& @@ -220,6 +226,7 @@ parser::parse (int const argc, const char *const *argv) void parser::usage (int argc, char const * const* argv, FILE *fp) const { + fmt::print (fp, FMT_STRING("{}\nUsage:"), m_description); if (argc > 0) fmt::print (fp, " {}", argv[0]); diff --git a/cmdopt2/parser.hpp b/cmdopt2/parser.hpp index fff503a0..58c410d3 100644 --- a/cmdopt2/parser.hpp +++ b/cmdopt2/parser.hpp @@ -17,6 +17,8 @@ namespace cruft::cmdopt2 { class parser { public: + explicit parser (char const *desc); + int parse [[nodiscard]] (int argc, char const* const* argv); positional_t& add (positional_t const&) &; @@ -31,5 +33,7 @@ namespace cruft::cmdopt2 { std::vector m_positional; std::vector m_keyword; + + char const *m_description; }; } diff --git a/test/cmdopt2.cpp b/test/cmdopt2.cpp index d5185f4e..b704cf3a 100644 --- a/test/cmdopt2.cpp +++ b/test/cmdopt2.cpp @@ -80,7 +80,7 @@ test_combinations (cruft::TAP::logger &tap) bool verbose; using namespace cruft::cmdopt2; - parser p; + parser p ("test suite"); p.add (keyword ("foo").flag ().flag ('f').bind (foo)); p.add (keyword ("bar").bind (bar)); @@ -166,7 +166,7 @@ static void test_presence (cruft::TAP::logger &tap) using namespace cruft::cmdopt2; - parser p; + parser p ("test suite"); p.add (keyword ("verbose").flag ().flag ('v').count (count)); p.add (keyword ("present").flag ().flag ('p').present (present)); @@ -201,7 +201,7 @@ test_required (cruft::TAP::logger &tap) using namespace cruft::cmdopt2; - parser p; + parser p ("test suite"); p.add (keyword ("y").flag ('y').required (true ).ignore ()); p.add (keyword ("n").flag ('n').required (false).ignore ());