Crate shiva

source ·
Expand description

§Shiva

shiva

Shiva library: Implementation in Rust of a parser and generator for documents of any type

§Features

  • Common Document Model (CDM) for all document types
  • Parsers produce CDM
  • Generators consume CDM

§Supported document types

Document typeParseGenerate
Plain text++
Markdown++
HTML++
PDF++
JSON++
XML++
CSV++
RTF+-
DOCX+-
XLS--
Typst--

§Parse document features

Document typeHeaderParagraphListTableImageHyperlinkPageHeaderPageFooter
Plain text-+------
Markdown++++++--
HTML++++++--
PDF-++-----
DOCX++++-+++
RTF++++-+++
JSON++++-+++
XML++---+++
CSV---+----

§Generate document features

Document typeHeaderParagraphListTableImageHyperlinkPageHeaderPageFooter
Plain text++++-+++
Markdown++++++++
HTML++++++--
PDF++++++++
JSON++++-+++
XML++---+++
CSV---+----

§Usage Shiva library

Cargo.toml

[dependencies]
shiva = {  version = "0.4.0", features = ["html", "markdown", "text", "pdf", "json", "csv", "rtf", "docx", "xml"] }

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, &HashMap::new()).unwrap();
    let output_bytes = shiva::markdown::Transformer::generate(&document, &HashMap::new()).unwrap();
    std::fs::write("out.md", output_bytes).unwrap();
}

§Shiva CLI & Server

§Build executable Shiva CLI and Shiva Server

git clone https://github.com/igumnoff/shiva.git
cd shiva/cli
cargo build --release

§Run executable Shiva CLI

cd ./target/release/
./shiva --input-format=markdown --output-format=html --input-file=README.md --output-file=README.html

§Run Shiva Server

cd ./target/release/
./shiva-server --port=8080 --host=127.0.0.1

§Contributing

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:

  1. Read “Contributor License Agreement (CLA)
  2. Contact with me via telegram @ievkz or discord @igumnovnsk
  3. Confirm e-mail invitation in repository
  4. Do “git clone”
  5. Create branch with your assigned issue
  6. Create pull request to main branch

§Who uses Shiva

Modules§