1 个不稳定版本
0.1.0 | 2023 年 11 月 20 日 |
---|
#718 in 图像
20KB
276 行
SVG 文件解析器
简要描述
- 基于 Rust 的 SVG 解析器,旨在解析可缩放矢量图形(SVG)文件。
- 能够提取结构信息,如 SVG 元素、属性和文本内容。
- 使用 Pest 解析器生成器解析 SVG 语法。
- 输出 SVG 内容的结构表示,包括元素、属性和文本。
- 适用于处理 SVG 文件的 Rust 开发者,为进一步操作或分析 SVG 数据提供基础。
命令行界面
- 帮助
显示帮助信息
cargo run -- help
- 解析
解析 SVG 文件并输出文件内容。
cargo run -- parse -i input.svg -o src/output.txt
如果您未指定输出文件,文件内容将被写入您的命令行界面。
cargo run -- parse -i input.svg
语法
svg_file = { svg_open ~ svg_content ~ svg_close }
svg_open = { "<svg" ~ attribute* ~ ">" ~ NEWLINE }
svg_content = { ((element | text_content ) ~ NEWLINE)* }
svg_close = { "</svg>" }
element = { circle | rect | line | ellipse }
circle = { "<circle" ~ attribute+ ~ "/>" }
rect = { "<rect" ~ attribute+ ~ "/>" }
line = { "<line" ~ attribute+ ~ "/>" }
ellipse = { "<ellipse" ~ attribute+ ~ "/>" }
attribute = { attribute_name ~ "=" ~ "\"" ~ attribute_value ~ "\"" }
attribute_name = { ASCII_ALPHA ~ ASCII_ALPHANUMERIC* }
attribute_value = { ASCII_ALPHANUMERIC* }
text_content = { (PUNCTUATION | ASCII_ALPHANUMERIC)+ ~ (PUNCTUATION | ASCII_ALPHANUMERIC)*}
WHITESPACE = _{ " " }
- svg_file: 代表完整的 SVG 文件,由一个开标签(svg_open)、内容(svg_content)和一个闭标签(svg_close)组成。
- svg_open: 定义 SVG 元素的开标签,允许有属性并以换行符结尾。
- svg_content: 描述 SVG 文件的内容,可以是 SVG 元素(element)或文本内容(text_content)的序列。每行以换行符结尾。
- svg_close: 指定 SVG 元素的闭标签。
- element: 代表不同的 SVG 元素,包括圆形、矩形、直线和椭圆。
- circle, rect, line, ellipse: 使用各自的属性定义特定的 SVG 元素,包含在开标签和闭标签中。
- attribute: 代表 SVG 元素内的键值对,具有名称(attribute_name)和值(attribute_value)。
- attribute_name: 指定属性的名称,以字母字符开头,后跟字母数字字符。
- attribute_value: 代表属性的值,由字母数字字符组成。
- text_content: 描述 SVG 文件内的文本内容,允许混合标点和字母数字字符。
- WHITESPACE: 代表可选的空白。
示例
<svg>
<circle cx="10" cy="10" r="5" />
<rect x="20" y="20" width="10" height="10" />
Some text content
</svg>
Result:
[
Svg(
[],
),
Circle(
[
(
"cx",
"10",
),
(
"cy",
"10",
),
(
"r",
"5",
),
],
),
Rect(
[
(
"x",
"20",
),
(
"y",
"20",
),
(
"width",
"10",
),
(
"height",
"10",
),
],
),
Text(
"Some text content",
),
]
依赖项
~4MB
~78K SLoC