diff --git a/include/Order.h b/include/Order.h index 1adee71..b9648f3 100644 --- a/include/Order.h +++ b/include/Order.h @@ -82,6 +82,9 @@ namespace ling { const std::string &getError() const; + /// 生成help内容 + std::string generateHelp(const std::string & title) const; + friend class Options; }; } // ling diff --git a/src/Order.cpp b/src/Order.cpp index 0ebbb38..8a3a42f 100644 --- a/src/Order.cpp +++ b/src/Order.cpp @@ -4,6 +4,9 @@ #include "../include/Order.h" +#include +#include +#include #include #define THROW(errStr) do{ this->err = errStr; return false; } while(false) @@ -144,4 +147,25 @@ namespace ling { const std::string &Order::getError() const { return err; } + + std::string Order::generateHelp(const std::string &title) const { + std::stringstream stream; + stream << title << std::endl; + std::cout << std::endl; + for (const auto &[fst, snd]: data) { + std::stringstream temp; + //即使参数有多个选项,也只输出前两个 + if (snd.options.size() == 2) { + temp << std::left << std::setw(7) << (snd.options[0] + ",") << std::left << std::setw(18) << snd.options[1]; + } else { + if (snd.options[0].at(0) == '-' && snd.options[0].at(1) == '-') + temp << std::left << std::setw(7) << "" << std::left << std::setw(18) << snd.options[0]; + else + temp << std::left << std::setw(25) << snd.options[0]; + } + temp << std::left << std::setw(55) << snd.memage; + stream << temp.str() << std::endl; + } + return stream.str(); + } } // ling diff --git a/test_main.cpp b/test_main.cpp index 63ddaa6..a23c5cf 100644 --- a/test_main.cpp +++ b/test_main.cpp @@ -97,3 +97,15 @@ TEST(Option, 匿名参数测试3) { if (order.analysis()) ASSERT_FALSE("匿名参数数量超出限制,但是没有抛出异常!"); } + + +TEST(Option, Help生成) { + ling::Order order({"-pts", "hello world!", "hello!", "--all", "--ok", "world"}); + order.addAnonymity(1); + const auto pts = order.addOption({"-pts", "--pts"}, ling::Order::Type::STRING, "测试参数"); + const auto all = order.addOption({"-all", "--all"},"测试参数"); + const auto ok = order.addOption({"-ok", "--ok"},"测试参数"); + const auto cancel = order.addOption({"--cancel"},"测试参数"); + auto help = order.generateHelp("test [选项] .. [参数]\n测试命令"); + std::cout << help << std::endl; +}