#include //////////////////////////////////////////////////////////////////////////////////////////////////// // // Option Groups // //////////////////////////////////////////////////////////////////////////////////////////////////// void OptionGroupBasic::addTo(cxxopts::Options &options) { options.add_options("basic") ("h,help", "Display this help message") ("v,version", "Display version information") ("warnings-as-errors", "Treat warnings as errors"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void OptionGroupBasic::parse(cxxopts::Options &options) { help = options["help"].as(); version = options["version"].as(); warningsAsErrors = options["warnings-as-errors"].as(); } //////////////////////////////////////////////////////////////////////////////////////////////////// void OptionGroupOutput::addTo(cxxopts::Options &options) { options.add_options("output") ("color", "Colorize output (always, never, auto)", cxxopts::value()->default_value("auto")) ("p,log-priority", "Log messages starting from this priority (debug, info, warning, error)", cxxopts::value()->default_value("info")); } //////////////////////////////////////////////////////////////////////////////////////////////////// void OptionGroupOutput::parse(cxxopts::Options &options) { const auto colorPolicyString = options["color"].as(); if (colorPolicyString == "auto") colorPolicy = colorlog::ColorStream::ColorPolicy::Auto; else if (colorPolicyString == "never") colorPolicy = colorlog::ColorStream::ColorPolicy::Never; else if (colorPolicyString == "always") colorPolicy = colorlog::ColorStream::ColorPolicy::Always; else throw OptionException("unknown color policy “" + colorPolicyString + "”"); const auto logPriorityString = options["log-priority"].as(); try { logPriority = colorlog::priorityFromName(logPriorityString.c_str()); } catch (const std::exception &e) { throw OptionException(e.what()); } } //////////////////////////////////////////////////////////////////////////////////////////////////// void OptionGroupParser::addTo(cxxopts::Options &options) { options.add_options("parser") ("i,input", "Input files (in PDDL or SAS format)", cxxopts::value>()) ("parsing-mode", "Parsing mode (strict, compatibility)", cxxopts::value()->default_value("strict")) ("l,language", "Input language (pddl, sas, auto)", cxxopts::value()->default_value("auto")); options.parse_positional("input"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void OptionGroupParser::parse(cxxopts::Options &options) { const auto parsingModeString = options["parsing-mode"].as(); if (parsingModeString == "compatibility") parsingMode = pddl::Mode::Compatibility; else if (parsingModeString != "strict") throw OptionException("unknown parsing mode “" + parsingModeString + "”"); if (options.count("input")) inputFiles = options["input"].as>(); const auto languageName = options["language"].as(); language = plasp::Language::fromString(languageName); if (language == plasp::Language::Type::Unknown) throw OptionException("unknown input language “" + languageName + "”"); }