1
0
mirror of https://github.com/CLIUtils/CLI11.git synced 2025-04-30 12:43:52 +00:00

Format cleanup, using standard fn

This commit is contained in:
Henry Fredrick Schreiner 2017-02-04 14:21:02 -05:00
parent c5cab1feb6
commit 34b92f6894
2 changed files with 19 additions and 38 deletions

View File

@ -4,10 +4,10 @@
int main (int argc, char** argv) {
CLI::App app("K3Pi goofit fitter");
CLI::App* start = app.add_subcommand("start");
CLI::App* stop = app.add_subcommand("stop");
app.add_flag("--random", "Some random flag");
CLI::App* start = app.add_subcommand("start", "A great subcommand");
CLI::App* stop = app.add_subcommand("stop", "Do you really want to stop?");
std::cout << app.help();
std::string file;
start->add_option("-f,--file", file, "File name");

View File

@ -174,7 +174,13 @@ namespace detail {
return "STRING";
}
void format_help(std::stringstream &out, std::string name, std::string discription, size_t wid) {
name = " " + name;
out << std::setw(wid) << std::left << name;
if(name.length()>=wid)
out << std::endl << std::setw(wid) << "";
out << discription << std::endl;
}
struct Combiner {
int num;
@ -567,7 +573,7 @@ public:
/// The first half of the help print, name plus default, etc
std::string help_name() const {
std::stringstream out;
out << " " << get_name();
out << get_name();
if(expected() != 0) {
if(typeval != "")
out << " " << typeval;
@ -581,25 +587,6 @@ public:
return out.str();
}
/// The length of the name part of the help, for formatting
int help_len() const {
return help_name().length();
}
/// Make a help string, adjustable len.
std::string help(int len = 0) const {
std::stringstream out;
if(help_len() > len) {
out << help_name() << "\n";
out << std::setw(len) << " ";
} else {
out << std::setw(len) << std::left << help_name();
}
out << discription;
return out.str();
}
/// Produce a flattened vector of results, vs. a vector of vectors.
std::vector<std::string> flatten_results() const {
std::vector<std::string> output;
@ -1326,7 +1313,7 @@ public:
throw OptionNotFound(name);
}
std::string help() const {
std::string help(size_t wid=30) const {
std::stringstream out;
if(name != "")
out << "Subcommand: " << name << " ";
@ -1354,17 +1341,14 @@ public:
pos=true;
}
out << std::endl << std::endl;
// Positional discriptions
if(pos) {
out << "Positionals:" << std::endl;
for(const Option &opt : options)
if(opt.positional() && opt.has_discription()) {
out << std::setw(30) << std::left << " " + opt.get_pname();
out << opt.get_discription() << std::endl;
}
if(opt.positional() && opt.has_discription())
detail::format_help(out, opt.get_pname(), opt.get_discription(), wid);
out << std::endl;
}
@ -1374,9 +1358,9 @@ public:
if(npos) {
out << "Options:" << std::endl;
for(const Option &opt : options) {
if(opt.nonpositional()) {
out << opt.help(30) << std::endl;
}
if(opt.nonpositional())
detail::format_help(out, opt.help_name(), opt.get_discription(), wid);
}
out << std::endl;
}
@ -1384,11 +1368,8 @@ public:
// Subcommands
if(subcommands.size()> 0) {
out << "Subcommands:" << std::endl;
int max = std::accumulate(std::begin(subcommands), std::end(subcommands), 0,
[](int i, const std::unique_ptr<App> &j){return std::max(i, (int) j->get_name().length()+3);});
for(const std::unique_ptr<App> &com : subcommands) {
out << std::setw(max) << std::left << com->get_name() << " " << com->prog_discription << std::endl;
}
for(const std::unique_ptr<App> &com : subcommands)
detail::format_help(out, com->get_name(), com->prog_discription, wid);
}
return out.str();
}