| #ifndef RECORDER_ARGUMENTS_HPP | |
| #define RECORDER_ARGUMENTS_HPP | |
| #include <iostream> | |
| #include <string> | |
| #include <unordered_map> | |
| #include "args.hxx" | |
| class FontArguments | |
| { | |
| public: | |
| FontArguments(int argc, const char** argv) : | |
| m_Parser("Convert a font file into the rive format.", "Experimental....") | |
| { | |
| args::HelpFlag help(m_Parser, "help", "Display this help menu", {'h', "help"}); | |
| args::Group required(m_Parser, "required arguments:", args::Group::Validators::All); | |
| args::Group optional(m_Parser, "optional arguments:", args::Group::Validators::DontCare); | |
| args::ValueFlag<std::string> source(required, "path", "source filename", {'s', "source"}); | |
| args::ValueFlag<std::string> destination(required, | |
| "path", | |
| "destination filename", | |
| {'d', "destination"}); | |
| args::ValueFlag<std::string> charset(optional, | |
| "path", | |
| "charset filename", | |
| {'c', "charset"}); | |
| args::CompletionFlag completion(m_Parser, {"complete"}); | |
| try | |
| { | |
| m_Parser.ParseCLI(argc, argv); | |
| } | |
| catch (const std::invalid_argument e) | |
| { | |
| std::cout << e.what(); | |
| throw; | |
| } | |
| catch (const args::Completion& e) | |
| { | |
| std::cout << e.what(); | |
| throw; | |
| } | |
| catch (const args::Help&) | |
| { | |
| std::cout << m_Parser; | |
| throw; | |
| } | |
| catch (const args::ParseError& e) | |
| { | |
| std::cerr << e.what() << std::endl; | |
| std::cerr << m_Parser; | |
| throw; | |
| } | |
| catch (args::ValidationError e) | |
| { | |
| std::cerr << e.what() << std::endl; | |
| std::cerr << m_Parser; | |
| throw; | |
| } | |
| m_Destination = args::get(destination); | |
| m_Source = args::get(source); | |
| m_Charset = args::get(charset); | |
| } | |
| const std::string& destination() const { return m_Destination; } | |
| const std::string& source() const { return m_Source; } | |
| const std::string& charset() const { return m_Charset; } | |
| private: | |
| args::ArgumentParser m_Parser; | |
| std::string m_Destination; | |
| std::string m_Source; | |
| std::string m_Charset; | |
| }; | |
| #endif |