From 35bf26f432e262a16ce34430ea26b9e1b3eda844 Mon Sep 17 00:00:00 2001 From: Sascha Ochsenknecht Date: Fri, 4 Dec 2009 10:15:11 +0000 Subject: [PATCH] Changed defaults for split_unix() function to be more compliant to unix command line style [SVN r58134] --- include/boost/program_options/parsers.hpp | 8 ++++---- test/split_test.cpp | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/include/boost/program_options/parsers.hpp b/include/boost/program_options/parsers.hpp index 460f05e..752dec6 100644 --- a/include/boost/program_options/parsers.hpp +++ b/include/boost/program_options/parsers.hpp @@ -210,14 +210,14 @@ namespace boost { namespace program_options { and escape characters '\' */ BOOST_PROGRAM_OPTIONS_DECL std::vector - split_unix(const std::string& cmdline, const std::string& seperator = " ", - const std::string& quote = "\"", const std::string& escape = "\\"); + split_unix(const std::string& cmdline, const std::string& seperator = " \t", + const std::string& quote = "'\"", const std::string& escape = "\\"); #ifndef BOOST_NO_STD_WSTRING /** @overload */ BOOST_PROGRAM_OPTIONS_DECL std::vector - split_unix(const std::wstring& cmdline, const std::wstring& seperator = L" ", - const std::wstring& quote = L"\"", const std::wstring& escape = L"\\"); + split_unix(const std::wstring& cmdline, const std::wstring& seperator = L" \t", + const std::wstring& quote = L"'\"", const std::wstring& escape = L"\\"); #endif #ifdef _WIN32 diff --git a/test/split_test.cpp b/test/split_test.cpp index 46e868d..eecd093 100644 --- a/test/split_test.cpp +++ b/test/split_test.cpp @@ -148,6 +148,26 @@ void split_single_quote(const options_description& description) notify(vm); } +void split_defaults(const options_description& description) +{ + const char* cmdline = "prg --input \t \'input file.txt\' \t --optimization 4 --opt \\\"option1\\ option2\\\""; + + vector< string > tokens = split_unix(cmdline); + + BOOST_REQUIRE(tokens.size() == 7); + check_value(tokens[0], "prg"); + check_value(tokens[1], "--input"); + check_value(tokens[2], "input file.txt"); + check_value(tokens[3], "--optimization"); + check_value(tokens[4], "4"); + check_value(tokens[5], "--opt"); + check_value(tokens[6], "\"option1 option2\""); + + variables_map vm; + store(command_line_parser(tokens).options(description).run(), vm); + notify(vm); +} + int main(int /*ac*/, char** /*av*/) { options_description desc; @@ -163,6 +183,7 @@ int main(int /*ac*/, char** /*av*/) split_quotes(desc); split_escape(desc); split_single_quote(desc); + split_defaults(desc); return 0; }