From 03e07dfc3edd768462aac6018d3a9a7f01a23625 Mon Sep 17 00:00:00 2001 From: tastytea Date: Sun, 23 May 2021 16:23:07 +0200 Subject: [PATCH] Rework option parsing a bit. - Add --basic-regexp - Add --grep - Remove --input-file - Make it possible to have multiple --regexp --- src/main.cpp | 8 ++++++++ src/options.cpp | 36 ++++++++++++++++++++++++------------ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ecf3d95..1e20679 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -70,6 +70,14 @@ int main(int argc, char *argv[]) cout << "perl-regexp: " << vm.count("perl-regexp") << '\n'; cout << "ignore-case: " << vm.count("ignore-case") << '\n'; + if (vm.count("regexp") > 0) + { + for (const auto ®ex : vm["regexp"].as>()) + { + cout << "Searching for: " << regex << '\n'; + } + } + if (vm.count("input-file") > 0) { cout << "\nINPUT FILES:\n"; diff --git a/src/options.cpp b/src/options.cpp index cfbb18f..f6912d6 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -41,40 +41,52 @@ using std::cout; 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 - cmdline_desc.add_options() + options_visible.add_options() ("help,h", translate("Display this help and exit.").str().data()) ("version,V", translate("Display version information and exit.").str().data()) + ("basic-regexp,G", + translate("PATTERN is a basic regular expression (default).") + .str().data()) ("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", - translate("PATTERN is Perl regular expression.").str().data()) + translate("PATTERN is a Perl regular expression.").str().data()) ("ignore-case,i", translate("Ignore case distinctions in pattern and data.") .str().data()) - ("regexp,e", po::value()->value_name(translate("PATTERN")), - translate("Use PATTERN for matching.").str().data()) - ("input-file,I", po::value>() - ->value_name(translate("FILE")), - translate("Input file. Can be used more than once.").str().data()) + ("regexp,e", po::value>()->composing() + ->value_name(translate("PATTERN")), + translate("Use additional PATTERN for matching.").str().data()) ; + + po::options_description options_hidden("Hidden options"); + options_hidden.add_options() + ("input-file", po::value>() + ->value_name("FILE"), "Input file to search.") + ; // clang-format on + po::options_description options_all("Allowed options"); + options_all.add(options_visible).add(options_hidden); po::positional_options_description positional_desc; positional_desc.add("regexp", 1).add("input-file", -1); po::variables_map vm; po::store(po::command_line_parser(argc, argv) - .options(cmdline_desc) + .options(options_all) .positional(positional_desc) .run(), vm); 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(); po::notify(vm); @@ -82,7 +94,7 @@ po::variables_map parse_options(int argc, char *argv[]) if (vm.count("help") != 0) { cout << translate("Usage: epubgrep [OPTION]… PATTERN [FILE]…\n"); - cout << cmdline_desc; + cout << options_visible; } else if (vm.count("version") != 0) {