Crates.io | shiva |
lib.rs | shiva |
version | 1.4.9 |
source | src |
created_at | 2024-03-19 03:29:57.042916 |
updated_at | 2024-11-07 04:27:17.895779 |
description | Shiva library: Implementation in Rust of a parser and generator for documents of any type |
homepage | |
repository | https://github.com/igumnoff/shiva |
max_upload_size | |
id | 1178833 |
size | 282,134 |
Shiva library: Implementation in Rust of a parser and generator for documents of any type
Document type | Parse | Generate |
---|---|---|
Plain text | + | + |
Markdown | + | + |
HTML | + | + |
+ | + | |
JSON | + | + |
XML | + | + |
CSV | + | + |
RTF | + | + |
DOCX | + | + |
XLS | + | - |
XLSX | + | + |
ODS | + | + |
Typst | - | + |
Document type | Header | Paragraph | List | Table | Image | Hyperlink | PageHeader | PageFooter |
---|---|---|---|---|---|---|---|---|
Plain text | - | + | - | - | - | - | - | - |
Markdown | + | + | + | + | + | + | - | - |
HTML | + | + | + | + | + | + | - | - |
- | + | + | - | - | - | - | - | |
DOCX | + | + | + | + | - | + | - | - |
RTF | + | + | + | + | - | + | + | + |
JSON | + | + | + | + | - | + | + | + |
XML | + | + | + | + | + | + | + | + |
CSV | - | - | - | + | - | - | - | - |
XLS | - | - | - | + | - | - | - | - |
XLSX | - | - | - | + | - | - | - | - |
ODS | - | - | - | + | - | - | - | - |
Document type | Header | Paragraph | List | Table | Image | Hyperlink | PageHeader | PageFooter |
---|---|---|---|---|---|---|---|---|
Plain text | + | + | + | + | - | + | + | + |
Markdown | + | + | + | + | + | + | + | + |
HTML | + | + | + | + | + | + | - | - |
+ | + | + | + | + | + | + | + | |
DOCX | + | + | + | + | + | + | - | - |
RTF | + | + | + | + | + | + | - | - |
JSON | + | + | + | + | - | + | + | + |
XML | + | + | + | + | + | + | + | + |
CSV | - | - | - | + | - | - | - | - |
XLSX | - | - | - | + | - | - | - | - |
ODS | - | - | - | + | - | - | - | - |
Typst | + | + | + | + | + | + | + | + |
Cargo.toml
[dependencies]
shiva = { version = "1.4.9", 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();
}
git clone https://github.com/igumnoff/shiva.git
cd shiva/cli
cargo build --release
cd ./target/release/
./shiva README.md README.html
cd ./target/release/
./shiva-server --port=8080 --host=127.0.0.1
I would love to see contributions from the community. If you experience bugs, feel free to open an issue. If you would like to implement a new feature or bug fix, please follow the steps:
Do fork
Add comment to the issue that you are going to work on it
Create pull request
If you would like add new document type, you need to implement the following traits:
pub trait TransformerTrait {
fn parse(document: &Bytes) -> anyhow::Result<Document>;
fn generate(document: &Document) -> anyhow::Result<Bytes>;
}
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<()>;
}