3 个版本
0.1.2 | 2024 年 7 月 30 日 |
---|---|
0.1.1 | 2024 年 7 月 30 日 |
0.1.0 | 2024 年 7 月 30 日 |
20 在 #define
每月 324 次下载
16KB
261 行
Gimura 预处理器库
一个用于文件预处理的轻量级库。
特性
- C 预处理器的命令(
include
、define
、ifdef
等) - 与任何文件(着色器、配置文件等)一起工作
安装
运行 cargo add gimura-preprocessor-lib
或将其添加到您的 Cargo.toml
文件的行 gimura-preprocessor-lib = "0.1.0"
。
示例
使用该库的示例可以在 examples 文件夹中找到,或者通过克隆仓库并运行命令 cargo run --example example_name
。
目前有以下示例
preprocess_glsl
- 预处理 glsl 着色器的简单示例。preprocess_json
- 预处理 JSON 格式配置文件的简单示例(实际上这不是一个非常好的示例,因为 JSON 格式中没有注释,预处理后的文件可能会被编辑器的解析器抱怨)
我建议我们在这里查看一个示例
use gimura_preprocessor_lib::prelude::*; // import prelude preprocessor
mod utils; // connection of the utility module, it is only needed to initialize the logger and to output files beautifully
fn main() {
utils::init_logger(); // logger initialization
let preprocessor_options = PreprocessorOptions::default(); // preprocessor options
// setting the preprocessor command start operator, at the moment it is not required since the `//!` operator is set by default and since glsl uses the `//` comment operator, no replacement is needed
// preprocessor_options.start_operator = ...
let mut preprocessor = Preporcessor::new(preprocessor_options); // creating a preprocessor structure
// adding libraries
preprocessor.add_source("main".to_string(), CodeSource::from_path("examples/preprocess_glsl/shaders".to_string())); // adding main library
let preprocessed = preprocessor.preprocess("main".to_string(), "main.glsl".to_string()); // preprocessing file `main.glsl` from `main` library
println!("{}", utils::format_text(preprocessed)); // text output
}
您可能已经注意到代码中提到了一些“库”,这将在下一节中详细介绍。
预处理器概念
本节描述了使用预处理器构建项目的语法和方法。
项目组织
预处理器可以管理的最小代码单位是文件,文件可以缩减为库,可以以任意数量添加到预处理器结构中,这是为了方便导入他人的代码。
例如,项目结构可能如下所示
preprocessor-root
|- main library
| |- main.glsl file
| |- unils.glsl file
|- std library
| |- rand.wgsl file
| |- constant.wgsl file
命令语法
为了使预处理器能够接受命令,必须在 PreprocessorOptions
结构的 start_operator
字段中指定的符号位于行的开头;默认情况下,这是 //!
。
接下来应该是预处理器命令,基本上命令的语法与 C 预处理器相同,但下面将列出语法不匹配的命令。
包含命令
允许您连接任何库中的任何文件,以下是语法示例
//! include "lib-name" "file-name"
定义命令
该命令允许您声明一个可以在代码中使用的常量变量,其语法如下
//! include VARIABLE_NAME "variable value"
2024 年由 _gimura_ 编写
依赖项
~135KB