#generator #text-file #source-file #template #c #generate #variables

bin+lib cyagen

基于 C 文件和模板的文本文件生成器

11 个版本

0.1.10 2023年7月5日
0.1.9 2023年4月22日
0.1.6 2022年6月26日
0.1.5 2022年2月16日

#888 in 命令行工具

MIT 许可证

48KB
1K SLoC

cyagen

C 语言代码的 Yet Another GENerator

通过 C 源文件减少手动准备包含 C 代码信息的脚本文件的劳动强度。

  • 使用简单的模式匹配扫描 C 源文件以捕获代码中的元素
  • 使用模板文件生成文本文件
  • 支持包含、局部变量和函数等元素

在模板文件中更好地使用 jinja2 格式

  • 从 0.1.19 版本开始,cyagen 使用 tera 支持 jinja2 格式的模板文件
  • 如果模板文件扩展名是 .j2 或 .tera,cyagen 将使用 tera 引擎生成目标文件
  • 示例: 基于 C 代码创建 googletest 脚本框架和 CMakeLists.txt
$ cyagen --source ./example/source/sample.c --temp-dir ./example/template --output-dir ./.output
$ cd .output
$ cmake -S . -B build
$ cmake --build build
$ cd build && ctest

模板文件中可用的标识符

所有可用的标识符可以在 docs.rs 上找到

注意:所有新标识符在旧风格的模板(非 jinja2 格式)中均不受支持。

示例

let sourcename = "source";
let code = "\
#include <stdio.h>
static int var = 1;
static int func1(void)
{
    return 0;
}
int func2(char c)
{
    return func1();
}
";
let temp = "\
// include
{%- for inc in incs %}
{{ inc.captured | safe }}
{%- endfor %}

// local variables
{%- for var in static_vars %}
{{ var.dtype }} {{ var.name }};
{%- endfor %}

// functions
{%- for fnc in fncs %}
{{ fnc.rtype }} {{ fnc.name }}({{ fnc.args }});
{%- endfor %}
";
let parser = cyagen::Parser::parse(code);
let gen = cyagen::generate_using_tera(&parser, temp, sourcename);
println!("{}", gen);

结果

// include
#include <stdio.h>

// local variables
int var;

// functions
int func1();
int func2(char c);

默认应用程序命令行使用方法

$ cyagen --help
cyagen 0.1.10
Text file generator based on C file and templates

USAGE:
    cyagen [OPTIONS] --source <SOURCE>

OPTIONS:
    -s, --source <SOURCE>               source file path
    -t, --temp-dir <TEMP_DIR>           template directory
    -o, --output-dir <OUTPUT_DIR>       output directory
    -j, --json-filepath <JSON_FILEPATH> output json file path
    -h, --help                          Print help
    -V, --version                       Print version
$

依赖项

~9–19MB
~254K SLoC