/* This file is part of epubgrep. * Copyright © 2021 tastytea * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include "options.hpp" #include "fs-compat.hpp" #include "version.hpp" #include #include #include #include #include #include #include #include namespace epubgrep { namespace po = boost::program_options; using boost::locale::translate; using std::cout; po::variables_map parse_options(int argc, char *argv[]) { po::options_description desc(translate("Available options")); // clang-format off desc.add_options() ("help", translate("Display this help and exit").str().data()) ("version", translate("Display version information and exit").str().data()) ("extended-regexp", translate("PATTERNS are extended regular expressions").str().data()) ("perl-regexp", translate("PATTERNS are Perl regular expressions").str().data()) ("ignore-case", translate("Ignore case distinctions in patterns and data") .str().data()) ; // clang-format on po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); std::ifstream configfile(get_config_path()); po::store(po::parse_config_file(configfile, desc, true), vm); configfile.close(); po::notify(vm); if (vm.count("help") != 0) { cout << translate("Usage: epubgrep [OPTION]… PATTERNS [FILE]…\n"); cout << desc; } else if (vm.count("version") != 0) { cout << "epubgrep " << epubgrep::version << '\n'; cout << translate( "Copyright © 2021 tastytea \n" "License AGPL-3.0-only .\n" "This program comes with ABSOLUTELY NO WARRANTY. This is " "free software,\n" "and you are welcome to redistribute it under certain " "conditions.\n"); } return vm; } fs::path get_config_path() { auto get_env = [](std::string const &name) { const char *env = std::getenv(name.c_str()); if (env != nullptr) { return env; } return ""; }; fs::path path{get_env("XDG_CONFIG_HOME")}; if (path.empty()) { path = get_env("HOME"); if (!path.empty()) { path /= ".config"; } } if (!path.empty()) { return path /= "epubgrep.conf"; } return "epubgrep.conf"; } } // namespace epubgrep