From de20c47e94b75100ab2b24c2afad62127eb1bda2 Mon Sep 17 00:00:00 2001 From: Bret Curtis Date: Tue, 25 Apr 2023 22:26:29 +0200 Subject: [PATCH] initial conversion to cxxopts for mwiniimporter --- apps/mwiniimporter/main.cpp | 75 +++++++++++++++---------------------- 1 file changed, 31 insertions(+), 44 deletions(-) diff --git a/apps/mwiniimporter/main.cpp b/apps/mwiniimporter/main.cpp index 0beb2b38cc..44d61575e6 100644 --- a/apps/mwiniimporter/main.cpp +++ b/apps/mwiniimporter/main.cpp @@ -4,12 +4,11 @@ #include #include -#include +#include #include #include -namespace bpo = boost::program_options; namespace sfs = std::filesystem; #ifndef _WIN32 @@ -62,57 +61,45 @@ int wmain(int argc, wchar_t* wargv[]) try { - bpo::options_description desc("Syntax: openmw-iniimporter inifile configfile\nAllowed options"); - bpo::positional_options_description p_desc; - auto addOption = desc.add_options(); - addOption("help,h", "produce help message"); - addOption("verbose,v", "verbose output"); - addOption("ini,i", bpo::value(), "morrowind.ini file"); - addOption("cfg,c", bpo::value(), "openmw.cfg file"); - addOption("output,o", bpo::value()->default_value({}), "openmw.cfg file"); - addOption("game-files,g", "import esm and esp files"); - addOption("fonts,f", "import bitmap fonts"); - addOption("no-archives,A", "disable bsa archives import"); - addOption("encoding,e", bpo::value()->default_value("win1252"), + cxxopts::Options options("Syntax: openmw-iniimporter inifile configfile\nAllowed options"); + + options.add_options() + ("h,help", "produce help message") + ("v,verbose", "verbose output") + ("i,ini", "morrowind.ini file", cxxopts::value()) + ("c,cfg", "openmw.cfg file", cxxopts::value()) + ("o,output", "openmw.cfg file", cxxopts::value()->default_value("")) + ("g,game-files", "import esm and esp files") + ("f,fonts", "import bitmap fonts") + ("A,no-archives", "disable bsa archives import") + ("e,encoding", "Character encoding used in OpenMW game messages", cxxopts::value()->default_value("win1252")) + ; + + /* "Character encoding used in OpenMW game messages:\n" "\n\twin1250 - Central and Eastern European such as Polish, Czech, Slovak, Hungarian, Slovene, Bosnian, " "Croatian, Serbian (Latin script), Romanian and Albanian languages\n" "\n\twin1251 - Cyrillic alphabet such as Russian, Bulgarian, Serbian Cyrillic and other languages\n" "\n\twin1252 - Western European (Latin) alphabet, used by default"); - ; - p_desc.add("ini", 1).add("cfg", 1); + */ - bpo::variables_map vm; + options.parse_positional({"ini", "cfg"}); - bpo::parsed_options parsed = bpo::command_line_parser(argc, argv).options(desc).positional(p_desc).run(); - bpo::store(parsed, vm); + auto result = options.parse(argc, argv); - if (vm.count("help") || !vm.count("ini") || !vm.count("cfg")) + if (result.count("help") || !result.count("ini") || !result.count("cfg")) { - std::cout << desc; + std::cout << options.help() << std::endl; return 0; } - bpo::notify(vm); + std::filesystem::path iniFile(result["ini"].as().u8string()); + std::filesystem::path cfgFile(result["cfg"].as().u8string()); - std::filesystem::path iniFile( - vm["ini"].as().u8string()); // This call to u8string is redundant, but required to - // build on MSVC 14.26 due to implementation bugs. - std::filesystem::path cfgFile( - vm["cfg"].as().u8string()); // This call to u8string is redundant, but required to - // build on MSVC 14.26 due to implementation bugs. - - // if no output is given, write back to cfg file - std::filesystem::path outputFile = vm["output"] - .as() - .u8string(); // This call to u8string is redundant, but required to build - // on MSVC 14.26 due to implementation bugs. - if (vm["output"].defaulted()) + std::filesystem::path outputFile = result["output"].as().u8string(); + if (outputFile.empty()) { - outputFile = vm["cfg"] - .as() - .u8string(); // This call to u8string is redundant, but required to build on MSVC 14.26 due - // to implementation bugs. + outputFile = cfgFile; } if (!std::filesystem::exists(iniFile)) @@ -124,16 +111,16 @@ int wmain(int argc, wchar_t* wargv[]) std::cerr << "cfg file does not exist" << std::endl; MwIniImporter importer; - importer.setVerbose(vm.count("verbose") != 0); + importer.setVerbose(result["verbose"].as()); // Font encoding settings - std::string encoding(vm["encoding"].as()); + std::string encoding(result["encoding"].as()); importer.setInputEncoding(ToUTF8::calculateEncoding(encoding)); MwIniImporter::multistrmap ini = importer.loadIniFile(iniFile); MwIniImporter::multistrmap cfg = importer.loadCfgFile(cfgFile); - if (!vm.count("fonts")) + if (!result["fonts"].as()) { ini.erase("Fonts:Font 0"); ini.erase("Fonts:Font 1"); @@ -143,12 +130,12 @@ int wmain(int argc, wchar_t* wargv[]) importer.merge(cfg, ini); importer.mergeFallback(cfg, ini); - if (vm.count("game-files")) + if (result["game-files"].as()) { importer.importGameFiles(cfg, ini, iniFile); } - if (!vm.count("no-archives")) + if (!result["no-archives"].as()) { importer.importArchives(cfg, ini); }