From 222cecb668192e9903df5d70801ae14fe09f6a45 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 15 Oct 2024 13:00:00 +0200 Subject: [PATCH] Render markdown headings one level smaller (fixes #46) --- src/frontend/markdown.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/frontend/markdown.rs b/src/frontend/markdown.rs index a350682..695936c 100644 --- a/src/frontend/markdown.rs +++ b/src/frontend/markdown.rs @@ -1,6 +1,7 @@ use katex; use markdown_it::{ parser::inline::{InlineRule, InlineState}, + plugins::cmark::block::{heading::ATXHeading, lheading::SetextHeader}, MarkdownIt, Node, NodeValue, @@ -10,7 +11,19 @@ use once_cell::sync::OnceCell; pub fn render_markdown(text: &str) -> String { static INSTANCE: OnceCell = OnceCell::new(); - INSTANCE.get_or_init(markdown_parser).parse(text).render() + let mut parsed = INSTANCE.get_or_init(markdown_parser).parse(text); + + // Make markdown headings one level smaller, so that h1 becomes h2 etc, and markdown titles + // are smaller than page title. + parsed.walk_mut(|node, _| { + if let Some(heading) = node.cast_mut::() { + heading.level += 1; + } + if let Some(heading) = node.cast_mut::() { + heading.level += 1; + } + }); + parsed.render() } fn markdown_parser() -> MarkdownIt {