diff --git a/src/dc_simplify.rs b/src/dc_simplify.rs
index 33f6b4721..142ca7349 100644
--- a/src/dc_simplify.rs
+++ b/src/dc_simplify.rs
@@ -1,5 +1,3 @@
-use crate::dehtml::*;
-
/// Remove standard (RFC 3676, §4.3) footer if it is found.
fn remove_message_footer<'a>(lines: &'a [&str]) -> &'a [&'a str] {
for (ix, &line) in lines.iter().enumerate() {
@@ -38,15 +36,9 @@ fn split_lines(buf: &str) -> Vec<&str> {
/// Simplify message text for chat display.
/// Remove quotes, signatures, trailing empty lines etc.
-pub fn simplify(input: &str, is_html: bool, is_chat_message: bool) -> (String, bool) {
- let mut out = if is_html {
- dehtml(input)
- } else {
- input.to_string()
- };
-
- out.retain(|c| c != '\r');
- let lines = split_lines(&out);
+pub fn simplify(mut input: String, is_chat_message: bool) -> (String, bool) {
+ input.retain(|c| c != '\r');
+ let lines = split_lines(&input);
let (lines, is_forwarded) = skip_forward_header(&lines);
let lines = remove_message_footer(lines);
@@ -207,61 +199,29 @@ mod tests {
#[test]
// proptest does not support [[:graphical:][:space:]] regex.
fn test_simplify_plain_text_fuzzy(input in "[!-~\t \n]+") {
- let (output, _is_forwarded) = simplify(&input, false, true);
+ let (output, _is_forwarded) = simplify(input, true);
assert!(output.split('\n').all(|s| s != "-- "));
}
}
#[test]
fn test_simplify_trim() {
- let html = "\r\r\nline1
\r\n\r\n\r\rline2\n\r";
- let (plain, is_forwarded) = simplify(html, true, false);
+ let input = "line1\n\r\r\rline2".to_string();
+ let (plain, is_forwarded) = simplify(input, false);
assert_eq!(plain, "line1\nline2");
assert!(!is_forwarded);
}
- #[test]
- fn test_simplify_parse_href() {
- let html = "text]>text bold]]>";
- let (plain, is_forwarded) = simplify(html, true, false);
-
- assert_eq!(plain, "text *bold*<>");
- assert!(!is_forwarded);
- }
-
#[test]
fn test_simplify_forwarded_message() {
- let text = "---------- Forwarded message ----------\r\nFrom: test@example.com\r\n\r\nForwarded message\r\n-- \r\nSignature goes here";
- let (plain, is_forwarded) = simplify(text, false, false);
+ let input = "---------- Forwarded message ----------\r\nFrom: test@example.com\r\n\r\nForwarded message\r\n-- \r\nSignature goes here".to_string();
+ let (plain, is_forwarded) = simplify(input, false);
assert_eq!(plain, "Forwarded message");
assert!(is_forwarded);
}
- #[test]
- fn test_simplify_html_encoded() {
- let html =
- "<>"'& äÄöÖüÜß fooÆçÇ ♦&noent;";
-
- let (plain, is_forwarded) = simplify(html, true, false);
-
- assert_eq!(
- plain,
- "<>\"\'& äÄöÖüÜß fooÆçÇ \u{2666}\u{200e}\u{200f}\u{200c}&noent;\u{200d}"
- );
- assert!(!is_forwarded);
- }
-
#[test]
fn test_simplify_utilities() {
assert!(is_empty_line(" \t"));
diff --git a/src/dehtml.rs b/src/dehtml.rs
index 8cdaacb13..0b2f5435f 100644
--- a/src/dehtml.rs
+++ b/src/dehtml.rs
@@ -188,4 +188,41 @@ mod tests {
assert_eq!(dehtml(input), output);
}
}
+
+ #[test]
+ fn test_dehtml_parse_br() {
+ let html = "\r\r\nline1
\r\n\r\n\r\rline2\n\r";
+ let plain = dehtml(html);
+
+ assert_eq!(plain, "line1\n\r\r\rline2");
+ }
+
+ #[test]
+ fn test_dehtml_parse_href() {
+ let html = "text]>text bold]]>";
+ let plain = dehtml(html);
+
+ assert_eq!(plain, "text *bold*<>");
+ }
+
+ #[test]
+ fn test_dehtml_html_encoded() {
+ let html =
+ "<>"'& äÄöÖüÜß fooÆçÇ ♦&noent;";
+
+ let plain = dehtml(html);
+
+ assert_eq!(
+ plain,
+ "<>\"\'& äÄöÖüÜß fooÆçÇ \u{2666}\u{200e}\u{200f}\u{200c}&noent;\u{200d}"
+ );
+ }
}
diff --git a/src/mimeparser.rs b/src/mimeparser.rs
index e86af1fe2..e3685ec4e 100644
--- a/src/mimeparser.rs
+++ b/src/mimeparser.rs
@@ -12,6 +12,7 @@ use crate::contact::*;
use crate::context::Context;
use crate::dc_simplify::*;
use crate::dc_tools::*;
+use crate::dehtml::dehtml;
use crate::e2ee;
use crate::error::Result;
use crate::events::Event;
@@ -580,7 +581,12 @@ impl<'a> MimeParser<'a> {
("".into(), false)
} else {
let is_html = mime_type == mime::TEXT_HTML;
- simplify(&decoded_data, is_html, self.has_chat_version())
+ let out = if is_html {
+ dehtml(&decoded_data)
+ } else {
+ decoded_data.clone()
+ };
+ simplify(out, self.has_chat_version())
};
if !simplified_txt.is_empty() {