diff --git a/CLI.hpp b/CLI.hpp index 2931e58..daa0ab6 100644 --- a/CLI.hpp +++ b/CLI.hpp @@ -17,7 +17,7 @@ namespace { void logit(std::string output) { - std::cout << "\033[1;31m" << output << "\033[0m" << std::endl; + //std::cout << "\033[1;31m" << output << "\033[0m" << std::endl; } template @@ -64,51 +64,51 @@ namespace CLI { class Error : public std::runtime_error { public: - Error(std::string name) : runtime_error(name) {}; + Error(std::string parent, std::string name) : runtime_error(parent + ": " + name) {} }; class BadNameString : public Error { public: - BadNameString(std::string name) : Error("Failed to parse: " + name) {}; + BadNameString(std::string name) : Error("BadNameString", name) {} }; class CallForHelp : public Error { public: - CallForHelp() : Error("Help option passed") {}; + CallForHelp() : Error("CallForHelp","") {} }; class ParseError : public Error { public: - ParseError(std::string info="") : Error(info) {}; + ParseError(std::string name) : Error("ParseError", name) {} }; class OptionAlreadyAdded : public Error { public: - OptionAlreadyAdded(std::string name) : Error("Already added:" + name) {}; + OptionAlreadyAdded(std::string name) : Error("OptionAlreadyAdded", name) {} }; class OptionNotFound : public Error { public: - OptionNotFound(std::string name) : Error(name) {}; + OptionNotFound(std::string name) : Error("OptionNotFound", name) {} }; class RequiredError : public Error { public: - RequiredError(std::string name="") : Error(name) {}; + RequiredError(std::string name) : Error("RequiredError", name) {} }; class ExtraPositionalsError : public Error { public: - ExtraPositionalsError(std::string name="") : Error(name) {}; + ExtraPositionalsError(std::string name) : Error("ExtraPositionalsError", name) {} }; class HorribleError : public Error { public: - HorribleError(std::string name="") : Error("You should never see this error! "+name) {}; + HorribleError(std::string name) : Error("HorribleError", "(You should never see this error) " + name) {} }; class IncorrectConstruction : public Error { public: - IncorrectConstruction(std::string name="") : Error(name) {}; + IncorrectConstruction(std::string name) : Error("IncorrectConstruction", name) {} }; const std::regex reg_split{R"regex((?:([a-zA-Z0-9]?)(?:,|$)|^)([a-zA-Z0-9][a-zA-Z0-9_\-]*)?)regex"}; @@ -297,22 +297,21 @@ bool lexical_cast(std::string input, T& output) { enum class Classifer {NONE, POSITIONAL_MARK, SHORT, LONG, SUBCOMMAND}; +class App; /// Creates a command line program, with very few defaults. /** To use, create a new Program() instance with argc, argv, and a help discription. The templated * add_option methods make it easy to prepare options. Remember to call `.start` before starting your * program, so that the options can be evaluated and the help option doesn't accidentally run your program. */ class App { -public: - protected: std::string name; - std::string discription; + std::string prog_discription; std::vector