From 358e17ef83495552153c0ae8d4b9840d4140ca80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ci=C4=99=C5=BCarkiewicz?= Date: Mon, 3 Feb 2025 18:52:07 -0800 Subject: [PATCH] feat: add `jotdown` for comparison Djot is a "kind-of-more-strict-Markdown" that is (supposedly) make it faster and easier to parse. I am curious myself how well it performs. --- Cargo.lock | 13 +++++++++++++ examples/jotdown-app/Cargo.toml | 10 ++++++++++ examples/jotdown-app/app.rs | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 examples/jotdown-app/Cargo.toml create mode 100644 examples/jotdown-app/app.rs diff --git a/Cargo.lock b/Cargo.lock index 0426734..9de0836 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -385,6 +385,19 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +[[package]] +name = "jotdown" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5afa77b05ee2811a1c1f4d6b7dce44b65bad966c81072e55ea604d084ad4162b" + +[[package]] +name = "jotdown-app" +version = "0.0.0" +dependencies = [ + "jotdown", +] + [[package]] name = "lazy_static" version = "1.4.0" diff --git a/examples/jotdown-app/Cargo.toml b/examples/jotdown-app/Cargo.toml new file mode 100644 index 0000000..0671d47 --- /dev/null +++ b/examples/jotdown-app/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "jotdown-app" +edition.workspace = true + +[[bin]] +name = "jotdown-app" +path = "app.rs" + +[dependencies] +jotdown = "0.7.0" diff --git a/examples/jotdown-app/app.rs b/examples/jotdown-app/app.rs new file mode 100644 index 0000000..3d303b8 --- /dev/null +++ b/examples/jotdown-app/app.rs @@ -0,0 +1,32 @@ +use std::io::Write; + +fn main() -> Result<(), Box> { + let mut args = std::env::args_os(); + let _bin = args.next(); + let path = args.next().expect("no markdown path given"); + let raw = std::fs::read_to_string(path)?; + #[cfg(debug_assertions)] + { + let stdout = std::io::stdout(); + let mut stdout = stdout.lock(); + render(&mut stdout, &raw)?; + } + #[cfg(not(debug_assertions))] + { + let mut buffer = Vec::new(); + render(&mut buffer, &raw)?; + std::hint::black_box(buffer); + } + Ok(()) +} + +fn render( + writer: &mut dyn Write, + raw: &str, +) -> Result<(), Box> { + let events = jotdown::Parser::new(raw); + let html = jotdown::html::render_to_string(events); + let _ = writeln!(writer, "{:?}", html); + + Ok(()) +}