Rework option parsing a bit.

- Add --basic-regexp
- Add --grep
- Remove --input-file
- Make it possible to have multiple --regexp
This commit is contained in:
tastytea 2021-05-23 16:23:07 +02:00
parent a86baf750f
commit 03e07dfc3e
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
2 changed files with 32 additions and 12 deletions

View File

@ -70,6 +70,14 @@ int main(int argc, char *argv[])
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("regexp") > 0)
{
for (const auto &regex : vm["regexp"].as<std::vector<std::string>>())
{
cout << "Searching for: " << regex << '\n';
}
}
if (vm.count("input-file") > 0) if (vm.count("input-file") > 0)
{ {
cout << "\nINPUT FILES:\n"; cout << "\nINPUT FILES:\n";

View File

@ -41,40 +41,52 @@ using std::cout;
po::variables_map parse_options(int argc, char *argv[]) po::variables_map parse_options(int argc, char *argv[])
{ {
po::options_description cmdline_desc(translate("Available options")); po::options_description options_visible(translate("Available options"));
// clang-format off // clang-format off
cmdline_desc.add_options() options_visible.add_options()
("help,h", ("help,h",
translate("Display this help and exit.").str().data()) translate("Display this help and exit.").str().data())
("version,V", ("version,V",
translate("Display version information and exit.").str().data()) translate("Display version information and exit.").str().data())
("basic-regexp,G",
translate("PATTERN is a basic regular expression (default).")
.str().data())
("extended-regexp,E", ("extended-regexp,E",
translate("PATTERN is extended regular expression.").str().data()) translate("PATTERN is an extended regular expression.").str().data())
("grep",
translate("Use grep-variation of regular expressions with -G and -E.")
.str().data())
("perl-regexp,P", ("perl-regexp,P",
translate("PATTERN is Perl regular expression.").str().data()) translate("PATTERN is a Perl regular expression.").str().data())
("ignore-case,i", ("ignore-case,i",
translate("Ignore case distinctions in pattern and data.") translate("Ignore case distinctions in pattern and data.")
.str().data()) .str().data())
("regexp,e", po::value<std::string>()->value_name(translate("PATTERN")), ("regexp,e", po::value<std::vector<std::string>>()->composing()
translate("Use PATTERN for matching.").str().data()) ->value_name(translate("PATTERN")),
("input-file,I", po::value<std::vector<std::string>>() translate("Use additional PATTERN for matching.").str().data())
->value_name(translate("FILE")),
translate("Input file. Can be used more than once.").str().data())
; ;
po::options_description options_hidden("Hidden options");
options_hidden.add_options()
("input-file", po::value<std::vector<std::string>>()
->value_name("FILE"), "Input file to search.")
;
// clang-format on // clang-format on
po::options_description options_all("Allowed options");
options_all.add(options_visible).add(options_hidden);
po::positional_options_description positional_desc; po::positional_options_description positional_desc;
positional_desc.add("regexp", 1).add("input-file", -1); positional_desc.add("regexp", 1).add("input-file", -1);
po::variables_map vm; po::variables_map vm;
po::store(po::command_line_parser(argc, argv) po::store(po::command_line_parser(argc, argv)
.options(cmdline_desc) .options(options_all)
.positional(positional_desc) .positional(positional_desc)
.run(), .run(),
vm); vm);
std::ifstream configfile(get_config_path()); std::ifstream configfile(get_config_path());
po::store(po::parse_config_file(configfile, cmdline_desc, true), vm); po::store(po::parse_config_file(configfile, options_visible, true), vm);
configfile.close(); configfile.close();
po::notify(vm); po::notify(vm);
@ -82,7 +94,7 @@ po::variables_map parse_options(int argc, char *argv[])
if (vm.count("help") != 0) if (vm.count("help") != 0)
{ {
cout << translate("Usage: epubgrep [OPTION]… PATTERN [FILE]…\n"); cout << translate("Usage: epubgrep [OPTION]… PATTERN [FILE]…\n");
cout << cmdline_desc; cout << options_visible;
} }
else if (vm.count("version") != 0) else if (vm.count("version") != 0)
{ {