8个版本 (4个稳定版)
1.2.0 | 2024年7月29日 |
---|---|
1.1.0 | 2024年6月29日 |
0.5.0 | 2024年6月6日 |
0.1.10 |
|
#323 in 解析器实现
每月316次下载
用于metatron
245KB
5K SLoC
Shiva
Shiva库:实现任何类型文档的解析器和生成器
功能
- 适用于所有文档类型的通用文档模型(CDM)
- 解析器生成CDM
- 生成器消费CDM
通用文档模型
支持的文档类型
文档类型 | 解析 | 生成 |
---|---|---|
纯文本 | + | + |
Markdown | + | + |
HTML | + | + |
+ | + | |
JSON | + | + |
XML | + | + |
CSV | + | + |
RTF | + | + |
DOCX | + | + |
XLS | + | - |
XLSX | + | + |
ODS | + | + |
Typst | - | + |
解析文档功能
文档类型 | 标题 | 段落 | 列表 | 表格 | 图片 | 超链接 | 页眉 | 页脚 |
---|---|---|---|---|---|---|---|---|
纯文本 | - | + | - | - | - | - | - | - |
Markdown | + | + | + | + | + | + | - | - |
HTML | + | + | + | + | + | + | - | - |
- | + | + | - | - | - | - | - | |
DOCX | + | + | + | + | - | + | - | - |
RTF | + | + | + | + | - | + | + | + |
JSON | + | + | + | + | - | + | + | + |
XML | + | + | + | + | + | + | + | + |
CSV | - | - | - | + | - | - | - | - |
XLS | - | - | - | + | - | - | - | - |
XLSX | - | - | - | + | - | - | - | - |
ODS | - | - | - | + | - | - | - | - |
生成文档功能
文档类型 | 标题 | 段落 | 列表 | 表格 | 图片 | 超链接 | 页眉 | 页脚 |
---|---|---|---|---|---|---|---|---|
纯文本 | + | + | + | + | - | + | + | + |
Markdown | + | + | + | + | + | + | + | + |
HTML | + | + | + | + | + | + | - | - |
+ | + | + | + | + | + | + | + | |
DOCX | + | + | + | + | + | + | - | - |
RTF | + | + | + | + | + | + | - | - |
JSON | + | + | + | + | - | + | + | + |
XML | + | + | + | + | + | + | + | + |
CSV | - | - | - | + | - | - | - | - |
XLSX | - | - | - | + | - | - | - | - |
ODS | - | - | - | + | - | - | - | - |
Typst | + | + | + | + | + | + | + | + |
使用Shiva库
Cargo.toml
[dependencies]
shiva = { version = "1.2.0", features = ["html", "markdown", "text", "pdf", "json",
"csv", "rtf", "docx", "xml", "xls", "xlsx", "ods", "typst"] }
main.rs
fn main() {
let input_vec = std::fs::read("input.html").unwrap();
let input_bytes = bytes::Bytes::from(input_vec);
let document = shiva::html::Transformer::parse(&input_bytes).unwrap();
let output_bytes = shiva::markdown::Transformer::generate(&document).unwrap();
std::fs::write("out.md", output_bytes).unwrap();
}
Shiva CLI & 服务器
构建可执行的Shiva CLI和Shiva服务器
git clone https://github.com/igumnoff/shiva.git
cd shiva/cli
cargo build --release
运行可执行的Shiva CLI
cd ./target/release/
./shiva --input-format=markdown --output-format=html --input-file=README.md --output-file=README.html
运行Shiva服务器
cd ./target/release/
./shiva-server --port=8080 --host=127.0.0.1
谁使用Shiva
贡献
我非常欢迎社区的贡献。如果您遇到bug,请随时提出问题。如果您想实现新功能或修复bug,请按照以下步骤操作
- 阅读"贡献者许可协议(CLA)"
- 通过telegram @ievkz 或 discord @igumnovnsk与我联系
- 在仓库中确认电子邮件邀请
- 执行"git clone"(您不需要分支!)
- 创建包含您分配的问题的分支
- 向主分支创建拉取请求
对于贡献者
如果您想添加新的文档类型,您需要实现以下特性
必需:shiva::core::TransformerTrait
pub trait TransformerTrait {
fn parse(document: &Bytes) -> anyhow::Result<Document>;
fn generate(document: &Document) -> anyhow::Result<Bytes>;
}
可选:shiva::core::TransformerWithImageLoaderSaverTrait(如果图像存储在文档外部,例如HTML,Markdown)
pub trait TransformerWithImageLoaderSaverTrait {
fn parse_with_loader<F>(document: &Bytes, image_loader: F) -> anyhow::Result<Document>
where F: Fn(&str) -> anyhow::Result<Bytes>;
fn generate_with_saver<F>(document: &Document, image_saver: F) -> anyhow::Result<Bytes>
where F: Fn(&Bytes, &str) -> anyhow::Result<()>;
}
依赖
~2–26MB
~322K SLoC