#preprocessor #file #command #lib #define #gimura #peprocessing

gimura-preprocessor-lib

一个用于文件预处理的轻量级库

3 个版本

0.1.2 2024 年 7 月 30 日
0.1.1 2024 年 7 月 30 日
0.1.0 2024 年 7 月 30 日

20#define

Download history 324/week @ 2024-07-29

每月 324 次下载

MIT 许可证

16KB
261

Gimura 预处理器库

一个用于文件预处理的轻量级库。

特性

  • C 预处理器的命令(includedefineifdef 等)
  • 与任何文件(着色器、配置文件等)一起工作

安装

运行 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