From de720d301d0f1592edab21cf28859e799333853f Mon Sep 17 00:00:00 2001 From: trisua Date: Sat, 26 Jul 2025 12:54:27 -0400 Subject: [PATCH] fix: parser pre ignore in proc_str parsers --- app/public/style.css | 9 +++++++-- src/markdown.rs | 31 +++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/app/public/style.css b/app/public/style.css index 0be8b47..b50ca6e 100644 --- a/app/public/style.css +++ b/app/public/style.css @@ -357,7 +357,7 @@ p:last-child { ul, ol { - margin-left: var(--pad-4); + margin: var(--pad-2) 0 var(--pad-2) var(--pad-4); } pre { @@ -365,6 +365,7 @@ pre { border-left: solid 5px var(--color-primary); background: var(--color-surface); border-radius: var(--radius); + margin-bottom: var(--pad-4); } code { @@ -474,7 +475,7 @@ h3, h4, h5, h6 { - margin: 0; + margin: var(--pad-4) 0; font-weight: 700; width: -moz-max-content; position: relative; @@ -645,6 +646,10 @@ blockquote { color: var(--color-green) !important; } +.hljs-link { + color: var(--color-link) !important; +} + .CodeMirror-scroll { height: 100% !important; } diff --git a/src/markdown.rs b/src/markdown.rs index af272f6..d4ba1aa 100644 --- a/src/markdown.rs +++ b/src/markdown.rs @@ -630,21 +630,28 @@ macro_rules! parser_ignores_pre { output }}; - ($body:ident, $input:ident, ..) => {{ + ($body:ident, $input:ident, $id:literal, ..) => {{ let mut in_pre_block = false; let mut output = String::new(); let mut buffer = String::new(); let mut proc_str = String::new(); + let mut pre_blocks = Vec::new(); + let mut pre_idx = 0; for line in $input.split("\n") { if line.starts_with("```") | (line == "") { in_pre_block = !in_pre_block; - output.push_str(&format!("{line}\n")); + + pre_idx += 1; + pre_blocks.push(String::new()); + pre_blocks[pre_idx - 1] += &(line.to_string() + "\n"); + + proc_str += &format!("$pre:{}.{pre_idx}\n", $id); continue; } if in_pre_block { - output.push_str(&format!("{line}\n")); + pre_blocks[pre_idx - 1] += &(line.to_string() + "\n"); continue; } @@ -654,20 +661,32 @@ macro_rules! parser_ignores_pre { $body(&mut output, &mut buffer, &proc_str); output.push_str(&format!("{buffer}\n")); buffer.clear(); + + for (mut i, block) in pre_blocks.iter().enumerate() { + i += 1; + + if block == "```\n" { + output = output.replacen(&format!("$pre:{}.{i}", $id), "", 1); + continue; + } + + output = output.replacen(&format!("$pre:{}.{i}", $id), &format!("{block}```\n"), 1); + } + output }}; } pub fn parse_text_color(input: &str) -> String { - parser_ignores_pre!(parse_text_color_line, input, ..) + parser_ignores_pre!(parse_text_color_line, input, 0, ..) } pub fn parse_highlight(input: &str) -> String { - parser_ignores_pre!(parse_highlight_line, input, ..) + parser_ignores_pre!(parse_highlight_line, input, 1, ..) } pub fn parse_underline(input: &str) -> String { - parser_ignores_pre!(parse_underline_line, input, ..) + parser_ignores_pre!(parse_underline_line, input, 2, ..) } pub fn parse_comment(input: &str) -> String {