Allow for numbers in options

Closes #32. This adds numbers as allowed values in all parts
of short and long option specifiers.
This commit is contained in:
Jarryd Beck 2016-11-16 18:03:35 +11:00
parent db674a467f
commit d92988c6a2
2 changed files with 8 additions and 4 deletions

View File

@ -829,10 +829,10 @@ namespace cxxopts
constexpr int OPTION_DESC_GAP = 2; constexpr int OPTION_DESC_GAP = 2;
std::basic_regex<char> option_matcher std::basic_regex<char> option_matcher
("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([a-zA-Z]+)"); ("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([[:alnum:]]+)");
std::basic_regex<char> option_specifier std::basic_regex<char> option_specifier
("(([a-zA-Z]),)?([a-zA-Z0-9][-_a-zA-Z0-9]+)"); ("(([[:alnum:]]),)?([[:alnum:]][-_[:alnum:]]+)");
String String
format_option format_option

View File

@ -51,7 +51,9 @@ TEST_CASE("Basic options", "[options]")
("long", "a long option") ("long", "a long option")
("s,short", "a short option") ("s,short", "a short option")
("value", "an option with a value", cxxopts::value<std::string>()) ("value", "an option with a value", cxxopts::value<std::string>())
("a,av", "a short option with a value", cxxopts::value<std::string>()); ("a,av", "a short option with a value", cxxopts::value<std::string>())
("6,six", "a short number option")
;
Argv argv({ Argv argv({
"tester", "tester",
@ -60,7 +62,8 @@ TEST_CASE("Basic options", "[options]")
"--value", "--value",
"value", "value",
"-a", "-a",
"b" "b",
"-6"
}); });
char** actual_argv = argv.argv(); char** actual_argv = argv.argv();
@ -74,6 +77,7 @@ TEST_CASE("Basic options", "[options]")
CHECK(options.count("a") == 1); CHECK(options.count("a") == 1);
CHECK(options["value"].as<std::string>() == "value"); CHECK(options["value"].as<std::string>() == "value");
CHECK(options["a"].as<std::string>() == "b"); CHECK(options["a"].as<std::string>() == "b");
CHECK(options.count("6") == 1);
} }
TEST_CASE("No positional", "[positional]") TEST_CASE("No positional", "[positional]")