#text-image #text-parser #compose #fields #grammar #syntax #jetpack

bin+lib compose_parser

用于解析 Jetpack Compose 文本和图像的 Rust 解析器

8 个版本 (5 个稳定版)

2.1.0 2023年11月14日
2.0.1 2023年11月12日
1.0.1 2023年11月7日
0.1.2 2023年11月7日

#12 in #compose

Download history 2/week @ 2024-03-09 2/week @ 2024-03-30 1/week @ 2024-04-06

每月56 次下载

MIT 许可证

11KB
181 代码行

Jetpack Compose Rust 解析器

链接: https://crates.io/crates/compose_parser 文档: https://docs.rs/compose_parser/latest/compose_parser/

简介

  • 创建用于解析 Jetpack Compose 文本/图像视图并获取所有文本字段和图像的 Rust 解析器
  • 函数必须以 @Composable 开头,并且具有任何名称
  • 此外,使用 Kotlin 语法

语法

compose_function = { function_declaration }
function_declaration = { "@Composable\nfun " ~ function_name ~ "() " ~ block }
function_name = { identifier }
block = { "{\n" ~ statement* ~ "}" }
statement = { text_function | image_function }
text_function = { "    Text(text = " ~ string ~ ")\n" }
image_function = { "    Image(image = " ~ string_image ~ ")\n" }
string = { "\"" ~ (ASCII_ALPHANUMERIC | " ")* ~ "\"" }
string_image = { "\"" ~ ASCII_ALPHANUMERIC* ~ ".png\"" }
identifier = { ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | "_")* }
  • compose_function - 包含所有函数的主要函数
  • function_declaration - 包含名称和块的函数声明
  • function_name - 函数名称
  • block - 包含语句的块,包含文本或图像
  • statement - 文本或图像
  • text_function - 包含字符串的文本函数
  • image_function - 包含字符串和 png 前缀的图像函数
  • string - 包含文本的字符串
  • string_image - 包含 png 的字符串
  • identifier - 函数名称

技术

  • Rust 和 pest
  • composable.pest 文件包含语法规则
  • 创建包含解析器的 lib.rs 文件
  • 创建包含测试语法规则的 tests.rs 文件
  • 创建包含 CLI 的 cli.rs 文件

通过 CLI 使用

./compose_parser -h or --help # show help
./compose_parser --file <path> # parse file (example.txt)
./compose_parser --author # show author

./compose_parser without any arguments # show help

示例

./compose_parser --file example.kt

@Composable
fun Example() {
    Text(text = "World")
    Image(image = "url.png")
    Image(image = "image.png")
}

// In result you have function name and text and image fields 

Function: Example
Text: World
Image: url.png
Image: image.png

作者

依赖项

~4MB
~85K SLoC