From ed7a5cfe5508f3b7b1f79149c4436679b191f4fd Mon Sep 17 00:00:00 2001 From: memdmp Date: Wed, 15 Jan 2025 13:46:53 +0100 Subject: feat: markdown tool --- markdown-tool/Cargo.lock | 62 ++++++++++++++++++++++++++++++++++++++++++++++ markdown-tool/Cargo.toml | 14 +++++++++++ markdown-tool/rustfmt.toml | 1 + markdown-tool/src/main.rs | 26 +++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 markdown-tool/Cargo.lock create mode 100644 markdown-tool/Cargo.toml create mode 100644 markdown-tool/rustfmt.toml create mode 100644 markdown-tool/src/main.rs diff --git a/markdown-tool/Cargo.lock b/markdown-tool/Cargo.lock new file mode 100644 index 0000000..fd19dc8 --- /dev/null +++ b/markdown-tool/Cargo.lock @@ -0,0 +1,62 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "markdown-tool" +version = "0.1.0" +dependencies = [ + "pulldown-cmark", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "pulldown-cmark" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14" +dependencies = [ + "bitflags", + "getopts", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" diff --git a/markdown-tool/Cargo.toml b/markdown-tool/Cargo.toml new file mode 100644 index 0000000..e8becf2 --- /dev/null +++ b/markdown-tool/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "markdown-tool" +version = "0.1.0" +edition = "2021" + +[dependencies] +pulldown-cmark = "0.12.2" + +[profile.release] +strip = true +opt-level = 3 +lto = true +codegen-units = 1 +panic = "abort" diff --git a/markdown-tool/rustfmt.toml b/markdown-tool/rustfmt.toml new file mode 100644 index 0000000..b196eaa --- /dev/null +++ b/markdown-tool/rustfmt.toml @@ -0,0 +1 @@ +tab_spaces = 2 diff --git a/markdown-tool/src/main.rs b/markdown-tool/src/main.rs new file mode 100644 index 0000000..f321c63 --- /dev/null +++ b/markdown-tool/src/main.rs @@ -0,0 +1,26 @@ +use std::io::BufRead; + +use pulldown_cmark::{html, Options, Parser}; + +fn main() { + let stdin = std::io::stdin(); + let mut markdown_input = format!(""); + for line in stdin.lock().lines() { + markdown_input = format!("{markdown_input}{}\n", line.unwrap()) + } + + let mut options = Options::empty(); + options.insert(Options::ENABLE_STRIKETHROUGH); + options.insert(Options::ENABLE_FOOTNOTES); + options.insert(Options::ENABLE_TABLES); + options.insert(Options::ENABLE_TASKLISTS); + options.insert(Options::ENABLE_YAML_STYLE_METADATA_BLOCKS); + options.insert(Options::ENABLE_GFM); + let parser = Parser::new_ext(&markdown_input, options); + let mut html_output: String = String::with_capacity(markdown_input.len() * 3 / 2); + html::push_html(&mut html_output, parser); + println!( + " +{html_output}" + ) +} -- cgit v1.2.3