Crates.io | mdtrans |
lib.rs | mdtrans |
version | 0.1.6 |
source | src |
created_at | 2024-01-15 13:24:39.373244 |
updated_at | 2024-12-01 11:35:36.270198 |
description | Markdown parser and transformer using `pest.rs`, focused on flexibility to a project's needs |
homepage | |
repository | https://github.com/litchipi/mdtrans |
max_upload_size | |
id | 1100330 |
size | 88,531 |
Markdown parser and transformer, in Rust, using Pest
This is not the fastest parser / transformer, but it's built in order to provide the most flexibility to your needs.
#[derive(Default)]
pub struct MyOwnTransformer {
image_count: usize,
image_trans: usize,
}
impl MarkdownTransformer for MyOwnTransformer {
fn peek_image(&mut self, alt: String, url: String, add_tags: HashMap<String, String>) {
self.image_count_total += 1;
}
fn tranform_image(&mut self, alt: String, url: String, add_tags: HashMap<String, String>) -> String {
self.image_trans += 1;
format!("Image {}/{} <img alt=\"{alt}\" href=\"{url}\">", self.image_trans, self.image_count)
}
}
fn main() {
let trans = MyOwnTransformer::default();
let input = " ... ".to_string();
let output = transform_markdown_string(input, &mut trans).unwrap();
println!("{output}");
}
Inside the transform_markdown_string
function, the transformer will perform all peek
functions before.
This means that in this code we first count the total number of images, and then transform each one of them.
The result will be something like:
Image 1/2 <img alt="toto" href="url">
Image 2/2 <img alt="tutu" href="url">
For an example of Markdown-to-HTML implementation, see this file
For the definition of the trait itself, see this file
This is a hobby side-project, but you can contribute if you feel like it !