From d53d9aa220eafe21db983fb9ad0dd9beb5fa7811 Mon Sep 17 00:00:00 2001 From: Shivakar Vulli Date: Fri, 14 Jul 2017 11:12:19 -0400 Subject: [PATCH 1/3] Allow spaces in option specification. Fixes #57. --- include/cxxopts.hpp | 2 +- src/example.cpp | 2 +- test/options.cpp | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index e08f46a..f4fa7df 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -884,7 +884,7 @@ namespace cxxopts ("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([[:alnum:]]+)"); std::basic_regex option_specifier - ("(([[:alnum:]]),)?([[:alnum:]][-_[:alnum:]]*)?"); + ("(([[:alnum:]]),)?[ ]*([[:alnum:]][-_[:alnum:]]*)?"); String format_option diff --git a/src/example.cpp b/src/example.cpp index 85f0964..f9f50b2 100644 --- a/src/example.cpp +++ b/src/example.cpp @@ -38,7 +38,7 @@ int main(int argc, char* argv[]) options.add_options() ("a,apple", "an apple", cxxopts::value(apple)) ("b,bob", "Bob") - ("f,file", "File", cxxopts::value>(), "FILE") + ("f, file", "File", cxxopts::value>(), "FILE") ("i,input", "Input", cxxopts::value()) ("o,output", "Output file", cxxopts::value() ->default_value("a.out")->implicit_value("b.def"), "BIN") diff --git a/test/options.cpp b/test/options.cpp index 17354c9..958b926 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -52,6 +52,7 @@ TEST_CASE("Basic options", "[options]") ("value", "an option with a value", cxxopts::value()) ("a,av", "a short option with a value", cxxopts::value()) ("6,six", "a short number option") + ("p, space", "an option with space between short and long") ; Argv argv({ @@ -62,7 +63,8 @@ TEST_CASE("Basic options", "[options]") "value", "-a", "b", - "-6" + "-6", + "-p" }); char** actual_argv = argv.argv(); @@ -77,6 +79,7 @@ TEST_CASE("Basic options", "[options]") CHECK(options["value"].as() == "value"); CHECK(options["a"].as() == "b"); CHECK(options.count("6") == 1); + CHECK(options.count("p") == 1); } TEST_CASE("Short options", "[options]") From 2a73e710e66cf0bc1aba0f266a8a59a7ba0b5d55 Mon Sep 17 00:00:00 2001 From: Shivakar Vulli Date: Fri, 14 Jul 2017 12:29:45 -0400 Subject: [PATCH 2/3] Changed option specifier regex to be more readable --- include/cxxopts.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index f4fa7df..dab1351 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -884,7 +884,7 @@ namespace cxxopts ("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([[:alnum:]]+)"); std::basic_regex option_specifier - ("(([[:alnum:]]),)?[ ]*([[:alnum:]][-_[:alnum:]]*)?"); + ("(([[:alnum:]]),)?\\s*([[:alnum:]][-_[:alnum:]]*)?"); String format_option From 89a9f215533045fbd745271bba7c650e43fca646 Mon Sep 17 00:00:00 2001 From: Shivakar Vulli Date: Sat, 15 Jul 2017 08:30:52 -0400 Subject: [PATCH 3/3] Reverting back to tighter option spec regex --- include/cxxopts.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index dab1351..f4fa7df 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -884,7 +884,7 @@ namespace cxxopts ("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([[:alnum:]]+)"); std::basic_regex option_specifier - ("(([[:alnum:]]),)?\\s*([[:alnum:]][-_[:alnum:]]*)?"); + ("(([[:alnum:]]),)?[ ]*([[:alnum:]][-_[:alnum:]]*)?"); String format_option