6#include "os_detect.hpp"
14 std::option<std::string> argument;
19 std::option<std::string> argument;
30using cmdline_option = std::variant<cmline_executable, cmdline_short_option, cmdline_long_option, cmdline_argument>;
62 ttlet options_with_arguments_ = tt::to_u32string(options_with_arguments);
66 co_yield cmdln_option::executable{*it};
70 char32_t short_option_name = 0;
71 for (; it != last; ++it) {
72 if (short_option_name) {
74 co_yield cmdln_short_option{short_option_name, *it};
75 short_option_name = 0;
77 }
else if (*it ==
"--") {
80 }
else if (it->starts_with(
"--")) {
82 ttlet eq_index = it->find(
'=');
83 if (eq_index == std::string::npos) {
85 co_yield cmdln_long_option{it->substr(2), {}};
89 tt_axiom(eq_index >= 2);
90 ttlet name_length = eq_index - 2;
91 co_yield cmdln_long_option(it->substr(2, name_length), it->substr(eq_index + 1));
94 }
else if (it.front() ==
'-' || it.front() ==
'+') {
97 ttlet token = to_u32string(*it);
100 negative = it.front() ==
'+';
102 for (
auto jt = first_c; jt != last_c; ++jt) {
106 if (options_with_arguments_.find(c) == std::u32string::npos) {
108 co_yield cmdln_short_option(c, {});
112 short_option_name = c;
117 co_yield cmdln_short_option(c,
std::move(argument));
124 co_yield cmdln_non_option{*it};
129 for (;it != last; ++it) {
130 co_yield cmdln_non_option{*it};
133 if (short_option_name) {
134 throw parse_error(
"Missing argument for option -{}", short_option_name);
140 char32_t short_option;
174 static char32_t parse_short_option(std::string_view::iterator &it, std::string_view::iterator last)
176 if (it == last || *it !=
'-') {
183 throw parse_error(
"Missing character after '-'");
195#if TT_OPERATING_SYSTEM == TT_OS_WINDOWS
198 void parse(
int argc,
char **argv);
201 template<
typename... Args>
203 return _options.emplace(std::forward<Args>(args)...);
Definition command_line.hpp:12
Definition command_line.hpp:17
Definition command_line.hpp:22
Definition command_line.hpp:26
Definition command_line.hpp:138
constexpr command_line_option(std::string_view option_help)
Syntax:
Definition command_line.hpp:165
Command line parser.
Definition command_line.hpp:193
A return value for a generator-function.
Definition coroutine.hpp:24
Exception thrown during parsing on an error.
Definition exception.hpp:26
Definition notifier.hpp:17