From 929ffb0c03d72ffdc926bc624a1c0811d9ec9abd Mon Sep 17 00:00:00 2001 From: RivoLink Date: Tue, 12 May 2026 20:30:53 +0300 Subject: [PATCH] fix: long paragraphs cutoff --- src/markdown/blocks.rs | 4 +--- src/markdown/wrapping.rs | 11 +++++++++++ src/tests/markdown_links.rs | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/markdown/blocks.rs b/src/markdown/blocks.rs index a3da9a8..bd286bf 100644 --- a/src/markdown/blocks.rs +++ b/src/markdown/blocks.rs @@ -59,9 +59,7 @@ pub(super) fn flush_wrapped_spans( render_width, ); } else if !spans.is_empty() { - let mut all = block_prefix(false, theme); - all.append(spans); - lines.push(Line::from(all)); + push_wrapped_prefixed_lines(lines, spans, vec![], vec![], render_width); } } diff --git a/src/markdown/wrapping.rs b/src/markdown/wrapping.rs index 350d98f..86e5a8d 100644 --- a/src/markdown/wrapping.rs +++ b/src/markdown/wrapping.rs @@ -28,6 +28,17 @@ pub(super) fn push_wrapped_prefixed_lines( .saturating_sub(first_prefix_width.max(continuation_prefix_width)) .max(8); + let total_width: usize = body_spans + .iter() + .map(|s| display_width(s.content.as_ref())) + .sum(); + if total_width <= max_width { + let mut all = first_prefix; + all.append(body_spans); + lines.push(Line::from(all)); + return; + } + let mut current_prefix = first_prefix.clone(); let mut next_prefix = continuation_prefix.clone(); let mut current_width = 0usize; diff --git a/src/tests/markdown_links.rs b/src/tests/markdown_links.rs index bd075f5..06d1fef 100644 --- a/src/tests/markdown_links.rs +++ b/src/tests/markdown_links.rs @@ -16,7 +16,7 @@ fn blockquote_bold_link_preserves_link_color() { let theme_colors = &app_theme.markdown; let bq_line = &lines[0]; - let link_span = bq_line.spans.iter().find(|s| s.content.as_ref() == "lien"); + let link_span = bq_line.spans.iter().find(|s| s.content.contains("lien")); assert!(link_span.is_some(), "should find 'lien' span"); let span = link_span.unwrap(); assert_eq!(