5 个版本
0.2.2 | 2021年2月14日 |
---|---|
0.2.1 | 2021年2月14日 |
0.2.0 | 2021年2月6日 |
0.1.1 | 2020年8月13日 |
0.1.0 | 2020年8月13日 |
#1173 在 解析实现
50KB
1K SLoC
rust-gedcom
用 rust 编写的 gedcom 解析器 🦀
关于此项目
GEDCOM 是一种用于共享家谱信息(如家谱)的文件格式!它正被 GEDCOM-X 所取代,但仍在许多家谱程序中广泛使用。
我想通过 Rust 来玩解析器和表示树结构,并注意到还没有为 Rust 编写的解析器。因此,这个项目诞生了!这是一个有趣的实验,用来练习我的 Rust 能力。
它希望与 Gedcom 5.5.1 规范 大部分兼容。
我发现这个 5.5.2 规范 在评估哪些标签值得支持或不值得支持方面很有用。
用法
这个 crate 包含两部分。第一部分是一个名为 parse_gedcom
的二进制文件,主要用于我的测试和开发。它打印出 GedcomData
对象以及传入的 gedcom 文件的一些统计信息
parse_gedcom ./tests/fixtures/sample.ged
# outputs tree data here w/ stats
# ----------------------
# | Gedcom Data Stats: |
# ----------------------
# submitters: 1
# individuals: 3
# families: 2
# repositories: 1
# sources: 1
# multimedia: 0
# ----------------------
第二部分是一个包含解析器的库。
使用 serde
进行 JSON 序列化和反序列化
这个 crate 有一个可选特性 json
,它实现了 gedcom 数据结构的 Serialize
和 Deserialize
。这使得您可以轻松地将它与网络集成。
有关 serde 的更多信息,请 查看它们!
默认情况下不启用此特性。仅使用 gedcom 解析功能时没有依赖项。
通过在 Cargo.toml 中添加以下内容来使用 json 特性,版本 > = 0.2.1
gedcom = { version = "<version>", features = ["json"] }
🚧 进度 🚧
规范中仍有部分尚未实现,该项目可能发生变化。我一直在开发的方法是获取一个 gedcom 文件,尝试解析它,并处理发生的任何错误或遗漏。在其当前状态下,它可以完整地解析 sample.ged 文件。
以下是关于解析数据和标签的一些说明。页面引用的是 Gedcom 5.5.1 规范。
顶级标签
HEAD.SOUR
- 第42页 - 当前跳过了标题中的源信息。SUBMISSION_RECORD
- 第28页 - 没有对此进行处理。MULTIMEDIA_RECORD
- 第26页 - 多媒体(OBJE
)目前未解析。NOTE_RECORD
- 第27页 - 注释(NOTE
)也未被处理。(除标题外)
处理了家族(FAM
)、个人(IND
)、仓库(REPO
)、源(SOUR
)和提交者(SUBM
)的标签。这些标签的大多数常见子标签都已处理,但有些可能尚未解析。效果可能会有所不同。
个人备注
- 考虑创建一些特性来处理更改日期、注释、源引用和其他常见字段。
许可证
© 2021, Robert Pirtle. 在 MIT 许可下。
依赖项
~0–300KB