use std::io::Write as _; use pulldown_cmark::{html, Event, Options, Parser, Tag}; fn main() { let markdown_input: &str = "This is Peter on ![holiday in Greece](pearl_beach.jpg)."; println!("Parsing the following markdown string:\n{}", markdown_input); // Set up parser. We can treat is as any other iterator. We replace Peter by John // and image by its alt text. let parser = Parser::new_ext(markdown_input, Options::empty()) .map(|event| match event { Event::Text(text) => Event::Text(text.replace("Peter", "John").into()), _ => event, }) .filter(|event| match event { Event::Start(Tag::Image(..)) | Event::End(Tag::Image(..)) => false, _ => true, }); // Write to anything implementing the `Write` trait. This could also be a file // or network socket. let stdout = std::io::stdout(); let mut handle = stdout.lock(); handle.write_all(b"\nHTML output:\n").unwrap(); html::write_html(&mut handle, parser).unwrap(); }