#svg #parser #tokenizer

svgparser

功能丰富、基于拉取、无内存分配的SVG解析器

20个版本 (8个重大更改)

使用旧的Rust 2015

0.8.1 2018年4月21日
0.7.0 2018年3月11日
0.6.2 2017年12月16日
0.5.0 2017年9月26日
0.1.0 2016年10月9日

#143 in 数据格式

Download history 352/week @ 2024-04-16 380/week @ 2024-04-23 321/week @ 2024-04-30 305/week @ 2024-05-07 318/week @ 2024-05-14 321/week @ 2024-05-21 345/week @ 2024-05-28 145/week @ 2024-06-04 436/week @ 2024-06-11 282/week @ 2024-06-18 331/week @ 2024-06-25 85/week @ 2024-07-02 219/week @ 2024-07-09 331/week @ 2024-07-16 262/week @ 2024-07-23 415/week @ 2024-07-30

每月1,277次下载

MIT/Apache

160KB
4K SLoC

svgparser

Build Status Crates.io Documentation

已弃用。请使用 svgtypes 代替。

svgparser 是一个基于拉取的解析器,用于解析没有堆分配的 SVG 1.1 Full 数据格式。

它不是一个XML解析器,因为它不仅将内容分割成XML节点,还支持 SVG类型 解析。

目录

支持的SVG类型

详细信息请参阅文档。

优点

  • 大多数常见数据都解析为内部表示,而不仅仅是作为字符串(与典型的XML解析器不同)。标签名称、属性名称、属性值等。
  • 完全支持路径,因此如 M10-20A5.5.3-4 110-.1 这样的数据将被正确解析。
  • 用于表示属性的 预定义SVG值,如 autonormalnoneinherit 等,作为 enum 解析,而不是作为 String
  • 每种类型都可以单独解析,因此您可以只解析路径、转换或任何其他SVG值。
  • 良好的错误处理。所有错误类型都包含错误发生的位置(行:列)。
  • 没有堆分配。
  • 非常快。

局限性

  • 所有关键字都必须小写。仅支持颜色的不区分大小写的解析(需要为命名颜色分配空间)。尽管如此,这种情况非常罕见。
  • 紧随其后的是 <tt class="txt-html txt-html-bas"><color>,然后是 <tt class="txt-html txt-html-bas"><icccolor>,这是不支持的。就像 <tt class="txt-html txt-html-bas"><icccolor> 一样。
  • 从 DOCTYPE 中只解析 ENTITY 对象。其他对象被忽略。
  • CSS 样式不处理。您应该使用外部 CSS 解析器。
  • 仅支持 style 属性值中的注释。
  • 系统颜色,如 fill="AppWorkspace",不支持。
  • 没有单独的 opacity-value 类型。它将被解析为 <tt class="txt-html txt-html-bas"><number>,但将被绑定到 0..1 范围。
  • 不支持隐式路径命令。所有命令都按显式命令解析。
  • 隐式 MoveTo 命令将自动转换为显式 LineTo。

安全性

  • 库不应该崩溃。任何崩溃都被视为关键错误,应该报告。
  • 库禁止不安全代码。

替代方案

  • svg,它拥有约 10% 的 svgparser 功能。还具有最小写入能力,而 svgparser 仅是解析器。

如果您需要写入和 DOM 操作,请查看 svgdom crate,它是建立在 svgparser 之上的。

如果您知道其他替代方案,请发送 pull request。

用法

依赖项:Rust >= 1.18

将其添加到您的 Cargo.toml

[dependencies]
svgparser = "0.8"

许可

许可协议为以下之一:

任选其一。

贡献

除非您明确表示,否则您提交的任何旨在包含在作品中的贡献(根据 Apache-2.0 许可证定义),均应按上述方式双重许可,无需任何附加条款或条件。

依赖项

~325KB