diff --git a/crates/owlen-core/src/formatting.rs b/crates/owlen-core/src/formatting.rs index 910dd40..045d838 100644 --- a/crates/owlen-core/src/formatting.rs +++ b/crates/owlen-core/src/formatting.rs @@ -36,50 +36,6 @@ impl MessageFormatter { } pub fn format_message(&self, message: &Message) -> Vec { - // 1) Normalize line breaks to '\n' (handles CR, NEL, LS, PS) - let normalized: String = message - .content - .chars() - .map(|ch| match ch { - '\r' | '\u{0085}' | '\u{2028}' | '\u{2029}' => '\n', - _ => ch, - }) - .collect(); - - // 2) Collapse: remove whitespace-only lines; keep exactly one '\n' between content lines - let mut content = normalized - .split('\n') - .map(|l| l.trim_end()) // trim trailing spaces per line - .filter(|l| !l.trim().is_empty()) // drop blank/whitespace-only lines - .collect::>() - .join("\n") - .trim() // trim leading/trailing whitespace - .to_string(); - - if content.is_empty() && self.preserve_empty_lines { - content.push(' '); - } - - // 3) Wrap - let options = Options::new(self.wrap_width) - .break_words(true) - .word_separator(textwrap::WordSeparator::UnicodeBreakProperties); - - // 4) Post: rtrim each visual line; drop any whitespace-only lines - let mut lines: Vec = wrap(&content, &options) - .into_iter() - .map(|s| s.trim_end().to_string()) - .filter(|s| !s.trim().is_empty()) - .collect(); - - // 5) Belt & suspenders: remove leading/trailing blanks if any survived - while lines.first().map_or(false, |s| s.trim().is_empty()) { - lines.remove(0); - } - while lines.last().map_or(false, |s| s.trim().is_empty()) { - lines.pop(); - } - - lines + message.content.trim().lines().map(|s| s.to_string()).collect() } }