feat: parser settings.

This commit is contained in:
2026-05-13 13:05:51 +04:00
parent 8a57dca32e
commit 3f63bf958f
4 changed files with 42 additions and 18 deletions

View File

@@ -15,7 +15,7 @@ namespace argument_parser {
}
namespace v2 {
linux_parser::linux_parser(bool should_exit) {
linux_parser::linux_parser(parser_settings const &settings) {
std::ifstream command_line_file{"/proc/self/cmdline"};
std::string program_name;
std::getline(command_line_file, program_name, '\0');
@@ -25,7 +25,7 @@ namespace argument_parser {
ref_parsed_args().emplace_back(line);
}
prepare_help_flag(should_exit);
prepare_help_flag(settings.should_exit_on_help);
}
} // namespace v2
} // namespace argument_parser

View File

@@ -6,13 +6,16 @@
#define MACOS_GETARGS_LOOP(argc_name, argv_name, before_for, for_body) \
do { \
const int (argc_name) = *_NSGetArgc(); \
if (char **(argv_name) = *_NSGetArgv(); (argc_name) > 0 && (argv_name) != nullptr && (argv_name)[0] != nullptr) { \
const int(argc_name) = *_NSGetArgc(); \
if (char **(argv_name) = *_NSGetArgv(); \
(argc_name) > 0 && (argv_name) != nullptr && (argv_name)[0] != nullptr) { \
do { \
(before_for); \
(before_for); \
} while (false); \
for (int i = 1; i < (argc_name); ++i) { \
{for_body} \
for (int i = 1; i < (argc_name); ++i) { \
{ \
for_body \
} \
} \
} \
} while (false)
@@ -26,12 +29,13 @@ namespace argument_parser {
}
namespace v2 {
macos_parser::macos_parser(const bool should_exit) {
macos_parser::macos_parser(parser_settings const &settings) {
MACOS_GETARGS_LOOP(argc, argv, set_program_name(argv[0]), {
if (argv[i] != nullptr)
ref_parsed_args().emplace_back(argv[i]);
});
prepare_help_flag(should_exit);
prepare_help_flag(settings.should_exit_on_help);
set_settings(settings);
}
} // namespace v2
} // namespace argument_parser

View File

@@ -95,11 +95,11 @@ namespace argument_parser {
} // namespace argument_parser
namespace argument_parser::v2 {
windows_parser::windows_parser(bool should_exit) {
windows_parser::windows_parser(parser_settings const &settings) {
parse_windows_arguments(ref_parsed_args(),
[this](std::string const &program_name) { this->set_program_name(program_name); });
prepare_help_flag(should_exit);
prepare_help_flag(settings.should_exit_on_help);
}
} // namespace argument_parser::v2