feat(argparse): 实现高级命令行参数解析库

- 添加完整的参数解析API,支持子命令、选项和参数定义
- 实现多种数据类型支持:字符串、布尔值、整数、浮点数、枚举等
- 添加约束规范结构体,支持必填项、多值、隐藏选项等功能
- 实现国际化支持,包含中英文错误提示和帮助信息
- 添加模糊匹配功能,当用户输入错误参数时提供相似建议
- 实现详细的帮助信息打印功能,包括使用方法、选项说明等
- 修改底层optparse库,优化选项处理和错误报告机制
- 添加向量类型支持用于管理参数、选项和子命令集合
This commit is contained in:
zzy
2026-02-12 21:41:57 +08:00
parent 34d7eb3c42
commit 191cdcef53
6 changed files with 777 additions and 67 deletions

View File

@@ -5,15 +5,14 @@ typedef struct scc_optparse_opt {
char prefix;
char short_name;
const char *long_name;
const char *default_value;
void (*invoke)(void *value);
void (*handle)(void *user_data);
void *user_data;
int min_args;
int max_args;
} scc_optparse_opt_t;
#define SCC_OPTPARSE_OPT(prefix, short_name, long_name, min_args, max_args, \
default_value, invoke) \
{prefix, short_name, long_name, default_value, invoke, min_args, max_args}
#define SCC_OPTPARSE_OPT(prefix, short_name, long_name, min_args, max_args) \
{prefix, short_name, long_name, 0, 0, min_args, max_args}
#define SCC_OPTPARSE_OPT_END() {0}
typedef enum scc_optparse_error {
@@ -24,10 +23,18 @@ typedef enum scc_optparse_error {
SCC_OPT_ERROR_TOO_MANY_ARGS,
} scc_optparse_error_t;
typedef struct {
const scc_optparse_opt_t *opt;
int count; // check for min_args <= count <= max_args
int arg_pos; // for argv pos
int opt_pos; // for short pos
} scc_optparse_state_t;
typedef struct scc_optparse_result {
const scc_optparse_opt_t *opt;
const char *value;
int error;
const char *raw_arg;
} scc_optparse_result_t;
typedef struct {
@@ -36,12 +43,7 @@ typedef struct {
const scc_optparse_opt_t *opts;
int handle_positional;
int greedy_mode;
struct {
const scc_optparse_opt_t *opt;
int count; // check for min_args <= count <= max_args
int arg_pos; // for argv pos
int opt_pos; // for short pos
} current;
scc_optparse_state_t current;
} scc_optparse_t;
void scc_optparse_init(scc_optparse_t *parser, int argc, const char **argv);