diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8c03abe --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 youmetme + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 8c83772..f255086 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,169 @@ int main(int argc, char *argv[]) { ```bash example -h ``` -![帮助信息](docs/images/help.png) \ No newline at end of file +![帮助信息](docs/images/help.png) + + +# API +该API将分为两类,一类是用于构造解析器,另一类将用于解析参数 + +## 构造解析器 + +1. 初始化解析器 +```c +ArgParse *argParseInit(char *documentation); +``` +- `documentation` 解析器的文档信息 + +2. 添加命令 +```c +Command *argParseAddCommand(ArgParse *argParse, + char *name, + char *help, + char *default_val, + ArgParseCallback callback, + CommandGroup *group, + ArgParseValueType value_type); +``` +- `argParse` 解析器 +- `name` 命令名称 +- `help` 命令帮助信息 +- `defaultVal` 默认值 +- `callback` 命令回调函数(可选) +- `group` 命令组(可选) +- `valueType` 命令参数类型 + +3. 添加命令参数 +```c +CommandArgs *argParseAddArg(Command *command, + char *short_opt, + char *long_opt, + char *help, + char *default_val, + ArgParseCallback callback, + bool required, + ArgParseValueType value_type); +``` +- `command` 命令 +- `shortOpt` 短选项 +- `longOpt` 长选项 +- `help` 帮助信息 +- `defaultVal` 默认值 +- `callback` 回调函数(可选) +- `required` 是否必须 +- `valueType` 参数类型 + +4. 添加子命令 +```c +Command *argParseAddSubCommand(Command *Parent, + char *name, + char *help, + char *default_val, + ArgParseCallback callback, + CommandGroup *group, + ArgParseValueType value_type); +``` +- `Parent` 父命令 +- `name` 命令名称 +- `help` 命令帮助信息 +- `defaultVal` 默认值 +- `callback` 回调函数(可选) +- `group` 命令组(可选) +- `valueType` 命令参数类型 + +5. 添加全局参数 +```c +CommandArgs *argParseAddGlobalArg(ArgParse *argParse, + char *short_opt, + char *long_opt, + char *help, + char *default_val, + ArgParseCallback callback, + bool required, + ArgParseValueType value_type); +``` +- `argParse` 解析器 +- `shortOpt` 短选项 +- `longOpt` 长选项 +- `help` 帮助信息 +- `defaultVal` 默认值 +- `callback` 回调函数(可选) +- `required` 是否必须 +- `valueType` 参数类型 + +## 解析参数API +1. 解析参数 +```c +void argParseParse(ArgParse *argParse, int argc, char *argv[]); +``` +- `argParse` 解析器 +- `argc` 参数个数 +- `argv` 参数列表 + +2. 获取当前解析到的命令名字 +```c +char *argParseGetCurCommandName(ArgParse *argParse); +``` +- `argParse` 解析器 +> 注意,解析到的命令为最后一次出现的命令,也可能是子命令 + + +3. 获取当前命令的值 +```c +char *argParseGetCurCommandValue(ArgParse *argParse); +``` +- `argParse` 解析器 +> 注意,解析到的命令为最后一次出现的命令,也可能是子命令 + +4. 获取当前命令的某个参数的值 +```c +char *argParseGetCurArg(ArgParse *argParse, char *opt); +``` +- `argParse` 解析器 +- `opt` 参数选项 + +5. 获取当前命令的某个选项的值列表(当为多值类型时使用该函数) +```c +char **argParseGetCurArgList(ArgParse *argParse, char *opt, int *len); +``` +- `argParse` 解析器 +- `opt` 参数选项 +- `len` 参数个数 + +6. 获取全局选项的值 +```c +char *argParseGetGlobalArg(ArgParse *argParse, char *opt); +``` +- `argParse` 解析器 +- `opt` 参数选项 + +7. 获取全局选项的值列表 +```c +char **argParseGetGlobalArgList(ArgParse *argParse, char *opt, int *len); +``` +- `argParse` 解析器 +- `opt` 参数选项 +- `len` 参数个数 + +### 触发检测API +1. 检测当前检测的命令的某个选项是否触发 +```c +bool argParseCheckCurArgTriggered(ArgParse *argParse, char *opt); +``` +- `argParse` 解析器 +- `opt` 参数选项 + + +2. 检测某个命令是否被触发 +```c +bool argParseCheckCommandTriggered(ArgParse *argParse, char *command_name); +``` +- `argParse` 解析器 +- `command_name` 命令名称 + +3. 检测某个全局选项是否被触发 +```c +bool argParseCheckGlobalTriggered(ArgParse *argParse, char *opt); +``` +- `argParse` 解析器 +- `opt` 参数选项 \ No newline at end of file