Add --regexp and --input, add both as positional options.

This commit is contained in:
tastytea 2021-05-20 11:25:56 +02:00
parent dd7a62ceb8
commit 9a136b87a9
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
2 changed files with 38 additions and 11 deletions

View File

@ -24,6 +24,8 @@
#include <exception> #include <exception>
#include <iostream> #include <iostream>
#include <locale> #include <locale>
#include <string>
#include <vector>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -58,4 +60,14 @@ int main(int argc, char *argv[])
cout << "extended-regexp: " << vm.count("extended-regexp") << '\n'; cout << "extended-regexp: " << vm.count("extended-regexp") << '\n';
cout << "perl-regexp: " << vm.count("perl-regexp") << '\n'; cout << "perl-regexp: " << vm.count("perl-regexp") << '\n';
cout << "ignore-case: " << vm.count("ignore-case") << '\n'; cout << "ignore-case: " << vm.count("ignore-case") << '\n';
if (vm.count("input") > 0)
{
cout << "\nINPUT FILES: ";
for (const auto &input : vm["input"].as<std::vector<std::string>>())
{
cout << input << " ";
}
cout << '\n';
}
} }

View File

@ -22,6 +22,8 @@
#include <boost/locale/message.hpp> #include <boost/locale/message.hpp>
#include <boost/program_options/options_description.hpp> #include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp> #include <boost/program_options/parsers.hpp>
#include <boost/program_options/positional_options.hpp>
#include <boost/program_options/value_semantic.hpp>
#include <boost/program_options/variables_map.hpp> #include <boost/program_options/variables_map.hpp>
#include <cstdlib> #include <cstdlib>
@ -39,35 +41,48 @@ using std::cout;
po::variables_map parse_options(int argc, char *argv[]) po::variables_map parse_options(int argc, char *argv[])
{ {
po::options_description desc(translate("Available options")); po::options_description cmdline_desc(translate("Available options"));
// clang-format off // clang-format off
desc.add_options() cmdline_desc.add_options()
("help", ("help",
translate("Display this help and exit").str().data()) translate("Display this help and exit.").str().data())
("version", ("version",
translate("Display version information and exit").str().data()) translate("Display version information and exit.").str().data())
("extended-regexp", ("extended-regexp",
translate("PATTERNS are extended regular expressions").str().data()) translate("PATTERN is extended regular expression.").str().data())
("perl-regexp", ("perl-regexp",
translate("PATTERNS are Perl regular expressions").str().data()) translate("PATTERN is Perl regular expression.").str().data())
("ignore-case", ("ignore-case",
translate("Ignore case distinctions in patterns and data") translate("Ignore case distinctions in pattern and data.")
.str().data()) .str().data())
("regexp", po::value<std::string>()->value_name(translate("PATTERN")),
translate("Use PATTERN for matching.").str().data())
("input", po::value<std::vector<std::string>>()
->value_name(translate("FILE")),
translate("Input files. Can be repeated.").str().data())
; ;
// clang-format on // clang-format on
po::positional_options_description positional_desc;
positional_desc.add("regexp", 1).add("input", -1);
po::variables_map vm; po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm); po::store(po::command_line_parser(argc, argv)
.options(cmdline_desc)
.positional(positional_desc)
.run(),
vm);
std::ifstream configfile(get_config_path()); std::ifstream configfile(get_config_path());
po::store(po::parse_config_file(configfile, desc, true), vm); po::store(po::parse_config_file(configfile, cmdline_desc, true), vm);
configfile.close(); configfile.close();
po::notify(vm); po::notify(vm);
if (vm.count("help") != 0) if (vm.count("help") != 0)
{ {
cout << translate("Usage: epubgrep [OPTION]… PATTERNS [FILE]…\n"); cout << translate("Usage: epubgrep [OPTION]… PATTERN [FILE]…\n");
cout << desc; cout << cmdline_desc;
} }
else if (vm.count("version") != 0) else if (vm.count("version") != 0)
{ {