# TG **Repository Path**: MXuDong/TG ## Basic Information - **Project Name**: TG - **Description**: The TG - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TG ![](docs/tg.png) TG : Template Generator 根据模版,生成文件。 特点: - 支持插件开发 - 支持表达式运算 - 支持内部流程替换 - 扩展性极高 # 使用及开发扩展 ## 流程定义 1. 主程序启动 2. 检测基本参数 插件模式是否开启、目录文件、输出文件 3. 预加载流程启动 1. 加载内部API 2. 加载外部插件、API 3. 预加载流程结束-同时处理开始调用插件能力 4. 解析基本参数指令 5. 主功能引擎启动 6. 扫描参数指定的目录树 1. 扫描所有文件 2. 注册所有配置文件env.yaml 3. 注册所有模版文件*.temp 7. 执行模版生成 1. 搜索目标文件内的所有模版变量 2. 执行模版变量生成 3. 输出文件 ## 内部数据说明 ### 共享参数列表 | 参数名称 | 类 | 所在阶段 | 说明 | | :--- | :--- | :---: | :--- | | input_options | Options | init | 程序启动参数 | | tg_exit_code | String | 任意时间 | 程序终止参数 | ### 内部 API 列表及说明 可以通过插件复写API方式替换内部API,此API列表为默认API集合,插件可以进行完全替换,需要插件方法标注ExternalApi注解。 所有的内部API均被称为`Active`,每一个内部API均可以被外部Plugin使用ExternalApi注解覆盖。 | API 名称 | Api 参数说明 | Api简介 | | :--- | :--- | :---: | | parseTemplateValue | - String templateValue 模版内容 | 将会解析模版内容(此方法不会根据模版内容生成数据,仅将模版内容转换为可识别的数据结构:Option) | | start | - | 程序启动API,引导程序工作 | | generatorFile | - TempFile tf 目标模版文件的包装对象 | 生成对应的模版文件的内容 | | searchTemplateValue | - String fileValue 模版文件的内容 | 所有文本内容中所有的模版数据, 识别所有 `{{}}`并记录 | | createTempFile | - File targetFile 目标模版文件 | 生成模版文件的包装类 | | createTemplateValue | - String templateValue 模版数据
- int startIndex 起始位置
int endIndex 模版数据结束位置| 根据指定内容生成模版数据包装类 | | generatorTemplateValue | T- emplateValue tv 目标模版数据
- Map valueMap 变量 | 根据模版数据内容生成数据 | | writeTemplate | - File targetFile 模版文件
- String value 期望输出数据 | 根据程序启动参数指定的输入输出位置,将目标模版文件的所在位置映射到输出文件位置,并输出期望输出数据 | | readFile | - File targetFile 目标模版文件 | 读取目标模版文件 | | registryEnvFile | - File envFile 变量文件 | 读取变量文件,并将内容转换为内部数据结构 | | getValueMap | - String basePath 目标模版的路径 | 从根目录依次获取所有的变量文件,并且,子两文件将会覆盖父变量文件中已经存在的数据 | | scanFiles | - | 扫描所有的模版文件(.tmpl后缀的文件),从程序启动参数中获取根路径 | | scanEnvs | - | 扫描所有的变量文件(env.yaml),从程序启动参数重获取跟根路径| | DebugOutPut | - String outputValue 被输出内容 | 将数据打印到控制台中(`DEBUG`级别)需要启动时添加-d参数) | | InfoOutPut | - String infoValue 被输出内容 | 将数据打印到控制台中(`INFO`级别) | | setArgument | - String[] inputArgs 程序启动参数传入
- Options options 程序解析参数的Option| 设置所有程序参数 | | stopTG | - | 停止程序运行,当出现`tg_exit_code`时,该方法将会被调用 | | createBaseContext | - Options options 命令行解析工具 | 创建一个无父级别的程序上下文 | | loadInnerApi | - | 扫描所有内部API | | loadPlugins | - | 扫描并将所有的插件添加到程序中,只关注插件中的 `PluginApi` 和 `ExternalApi` 方法| ## 模版行为控制 模版的变量支持参数控制,类似于控制台参数设置方式。 部分参数冲突,将会选取优先级最高的参数进行设置 ### 输出模版内容 自上而下按照参数优先级从高到低排序 | 参数名称 | 参数类型 | 参数样例 | 参数说明 | | :--- | :---: | :--- | :--- | | -V | String | -V true
-V false | 表达式为真时,进行输出, 默认true | | -n | String | -n className | 如果数据不存在,返回空字符串,配置 -pr -po指令, 如果数据为数组,则将会为数组中的每个数据进行处理 | | -pr | String | -pr "import " | 参数为-n状态下,将会将pr参数添加到结果头,多用于数据状态 | | -po | String | -po "; \n " | 参数为-n状态下,将会将po参数添加到结果尾,多用于数组状态 | | -v | String | -v test
-v " test " | 将会直接输出后面的数据,不做任何替换 | ## 插件 本应用支持插件化开发。 ### 外部插件API开发 对于任意声明为`public static`的方法,并且使用`PluginApi`标注的方法均可以被认为是插件API方法。 插件方法必须声明被调用点以及前置、后置时机。 #### 注入目标Active 用`PluginApi`注解的`actives`属性进行声明,默认为所有`Active`。 使用示例: ```java public class PluginTest{ // 在 start active(actives = "start") 运行 前(point = PluginApiInfo.PRE_ACTIVE) 进行调用 @PluginApi(actives = "start", point = PluginApiInfo.PRE_ACTIVE) public static void OutputInnerApis(Context ctx) { return; } } ``` #### 调用时机 用`PluginApi`注解的`point`属性进行声明,默认`PluginApiInfo.NO_ACTIVE`。 支持四个调用时机,使用`io.github.a_donga.tg.api.apis.PluginApiInfo`的静态变量标示。 | 调用时机属性名 | 调用时机 | | ---: | :--- | | NO_ACTIVE | 不调用该API | | PRE_ACTIVE | 目标`Active`前调用 | | POST_ACTIVE | 目标`Active`后调用 | | BOTH_PRE_POS_ACTIVE | 目标`Active`前后均调用 |