Merge branch 'master' into default_values

Conflicts:
	src/cxxopts.hpp
	src/example.cpp
This commit is contained in:
Baptiste Wicht 2014-10-29 16:42:59 +01:00
commit 9a2749f692
2 changed files with 24 additions and 10 deletions

View File

@ -594,6 +594,7 @@ namespace cxxopts
bool has_arg;
bool has_default;
std::string default_value;
std::string arg_help;
};
struct HelpGroupDetails
@ -629,7 +630,8 @@ namespace cxxopts
const std::string& s,
const std::string& l,
std::string desc,
std::shared_ptr<const Value> value
std::shared_ptr<const Value> value,
std::string arg_help
);
int
@ -734,7 +736,8 @@ namespace cxxopts
const std::string& opts,
const std::string& desc,
std::shared_ptr<const Value> value
= ::cxxopts::value<bool>()
= ::cxxopts::value<bool>(),
std::string arg_help = ""
);
private:
@ -786,7 +789,14 @@ namespace cxxopts
if (o.has_arg)
{
result += " arg";
if (o.arg_help.size() != 0)
{
result += " " + toLocalString(o.arg_help);
}
else
{
result += " arg";
}
if (o.has_default)
{
@ -865,7 +875,8 @@ OptionAdder::operator()
(
const std::string& opts,
const std::string& desc,
std::shared_ptr<const Value> value
std::shared_ptr<const Value> value,
std::string arg_help
)
{
std::match_results<const char*> result;
@ -879,7 +890,8 @@ OptionAdder::operator()
const auto& s = result[2];
const auto& l = result[3];
m_options.add_option(m_group, s.str(), l.str(), desc, value);
m_options.add_option(m_group, s.str(), l.str(), desc, value,
std::move(arg_help));
return *this;
}
@ -1100,7 +1112,8 @@ Options::add_option
const std::string& s,
const std::string& l,
std::string desc,
std::shared_ptr<const Value> value
std::shared_ptr<const Value> value,
std::string arg_help
)
{
auto stringDesc = toLocalString(std::move(desc));
@ -1118,9 +1131,10 @@ Options::add_option
//add the help details
auto& options = m_help[group];
options.options.emplace_back(HelpOptionDetails{s, l, stringDesc,
value->has_arg(), value->has_default(), value->get_default_value()});
value->has_arg(), value->has_default(), value->get_default_value(),
std::move(arg_help)});
}
void

View File

@ -37,7 +37,7 @@ int main(int argc, char* argv[])
options.add_options()
("a,apple", "an apple", cxxopts::value<bool>(apple))
("b,bob", "Bob")
("f,file", "File", cxxopts::value<std::vector<std::string>>())
("f,file", "File", cxxopts::value<std::vector<std::string>>(), "FILE")
("o,output", "Output file", cxxopts::value<std::string>()
->default_value("a.out")->implicit_value("b.def"))
("positional",
@ -46,7 +46,7 @@ int main(int argc, char* argv[])
("long-description",
"thisisareallylongwordthattakesupthewholelineandcannotbebrokenataspace")
("help", "Print help")
("int", "An integer", cxxopts::value<int>())
("int", "An integer", cxxopts::value<int>(), "N")
("option_that_is_too_long_for_the_help", "A very long option")
#ifdef CXXOPTS_USE_UNICODE
("unicode", u8"A help option with non-ascii: à. Here the size of the"