From 3f1f8da05cd0df729c786bd7d428186f12dfc2c0 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 5 May 2020 16:15:49 +0200 Subject: [PATCH] Skip normalizing plain text --- .../eu/faircode/email/EditTextCompose.java | 2 +- .../eu/faircode/email/FragmentMessages.java | 2 +- .../java/eu/faircode/email/HtmlHelper.java | 20 +++++++++++++------ .../java/eu/faircode/email/MessageHelper.java | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EditTextCompose.java b/app/src/main/java/eu/faircode/email/EditTextCompose.java index 6791f79948..8bb1a6cf81 100644 --- a/app/src/main/java/eu/faircode/email/EditTextCompose.java +++ b/app/src/main/java/eu/faircode/email/EditTextCompose.java @@ -75,7 +75,7 @@ public class EditTextCompose extends FixedEditText { CharSequence text = item.getText(); if (text == null) return false; - html = "
" + HtmlHelper.formatPre(text.toString()) + "
"; + html = "
" + HtmlHelper.formatPre(text.toString()) + "
"; } Document document = HtmlHelper.sanitizeCompose(context, html, false); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 6ab4af46ff..83080eedcb 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -5272,7 +5272,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. // Write decrypted body String text = Helper.readText(plain); - String html = "
" + HtmlHelper.formatPre(text) + "
"; + String html = "
" + HtmlHelper.formatPre(text) + "
"; Helper.writeText(message.getFile(context), html); db.message().setMessageStored(message.id, new Date().getTime()); db.message().setMessageFts(message.id, false); diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index d8e5e8cf6a..840d3c3211 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -446,6 +446,7 @@ public class HtmlHelper { .addAttributes(":all", "class") .addAttributes(":all", "style") .addAttributes("font", "size") + .addAttributes("div", "plain") .removeTags("col", "colgroup", "thead", "tbody") .removeAttributes("table", "width") .removeAttributes("td", "colspan", "rowspan", "width") @@ -731,6 +732,7 @@ public class HtmlHelper { for (Element pre : document.select("pre")) { pre.html(formatPre(pre.wholeText())); pre.tagName("div"); + pre.attr("plain", "true"); } // Code @@ -1311,9 +1313,9 @@ public class HtmlHelper { for (int j = 0; j < line.length(); j++) { char kar = line.charAt(j); if (kar == '\t') { - l.append('\u00A0'); + l.append(' '); while (l.length() % TAB_SIZE != 0) - l.append('\u00A0'); + l.append(' '); } else l.append(kar); } @@ -1764,9 +1766,10 @@ public class HtmlHelper { // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements NodeTraversor.traverse(new NodeVisitor() { private Element element; + private int plain = 0; private List block = new ArrayList<>(); - private String WHITESPACE = " \t\f"; + private String WHITESPACE = " \t\f\u00A0"; private String WHITESPACE_NL = WHITESPACE + "\r\n"; private Pattern TRIM_WHITESPACE_NL = Pattern.compile("[" + WHITESPACE + "]*\\r?\\n[" + WHITESPACE + "]*"); @@ -1781,10 +1784,13 @@ public class HtmlHelper { @Override public void head(Node node, int depth) { - if (node instanceof TextNode) - block.add((TextNode) node); - else if (node instanceof Element) { + if (node instanceof TextNode) { + if (plain == 0) + block.add((TextNode) node); + } else if (node instanceof Element) { element = (Element) node; + if ("true".equals(element.attr("plain"))) + plain++; if (BLOCK_START.contains(element.tagName())) { normalizeText(block); block.clear(); @@ -1796,6 +1802,8 @@ public class HtmlHelper { public void tail(Node node, int depth) { if (node instanceof Element) { element = (Element) node; + if ("true".equals(element.attr("plain"))) + plain--; if (BLOCK_END.contains(element.tagName())) { normalizeText(block); block.clear(); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 0007b132c9..696a50462d 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -1591,7 +1591,7 @@ public class MessageHelper { if (part.isMimeType("text/plain")) { if ("flowed".equalsIgnoreCase(ct.getParameter("format"))) result = HtmlHelper.flow(result); - result = "
" + HtmlHelper.formatPre(result) + "
"; + result = "
" + HtmlHelper.formatPre(result) + "
"; } else if (part.isMimeType("text/html")) { if (TextUtils.isEmpty(charset)) { //