From 482c7eb92c721060cbb8568b53d3199b1af18c78 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 19 Nov 2019 09:57:55 +0100 Subject: [PATCH] Fixed encoding plain text messages --- .../java/eu/faircode/email/HtmlHelper.java | 131 +++++++++--------- .../java/eu/faircode/email/MessageHelper.java | 2 +- 2 files changed, 67 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 56cb34ceef..d81d9b3c21 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -135,7 +135,6 @@ public class HtmlHelper { Whitelist whitelist = Whitelist.relaxed() .addTags("hr", "abbr", "big", "font") - .addAttributes("pre", "plain") .removeTags("col", "colgroup", "thead", "tbody") .removeAttributes("table", "width") .removeAttributes("td", "colspan", "rowspan", "width") @@ -268,70 +267,8 @@ public class HtmlHelper { // Pre formatted text for (Element pre : document.select("pre")) { - int level = 0; - StringBuilder sb = new StringBuilder(); - String[] lines = pre.wholeText().split("\\r?\\n"); - for (String line : lines) { - // Opening quotes - int tlevel = 0; - while (line.startsWith(">")) { - tlevel++; - if (tlevel > level) - sb.append("
"); - - line = line.substring(1); // > - - if (line.startsWith(" ")) - line = line.substring(1); - } - - // Closing quotes - for (int i = 0; i < level - tlevel; i++) - sb.append("
"); - level = tlevel; - - // Tabs characters - StringBuilder l = new StringBuilder(); - for (int j = 0; j < line.length(); j++) { - char kar = line.charAt(j); - if (kar == '\t') { - l.append(' '); - while (l.length() % TAB_SIZE != 0) - l.append(' '); - } else - l.append(kar); - } - line = l.toString(); - - // Html characters - line = Html.escapeHtml(line); - - // Space characters - int len = line.length(); - for (int j = 0; j < len; j++) { - char kar = line.charAt(j); - if (kar == ' ') { - // Prevent trimming start - // Keep one space for word wrapping - if (j == 0 || (j + 1 < len && line.charAt(j + 1) == ' ')) - sb.append(" "); - else - sb.append(' '); - } else - sb.append(kar); - } - - sb.append("
"); - } - - // Closing quotes - for (int i = 0; i < level; i++) - sb.append(""); - - String plain = pre.attr("plain"); - pre.tagName(Boolean.parseBoolean(plain) ? "div" : "tt"); - - pre.html(sb.toString()); + pre.html(formatPre(pre.wholeText())); + pre.tagName("tt"); } // Code @@ -552,6 +489,70 @@ public class HtmlHelper { return false; } + static String formatPre(String text) { + int level = 0; + StringBuilder sb = new StringBuilder(); + String[] lines = text.split("\\r?\\n"); + for (String line : lines) { + // Opening quotes + int tlevel = 0; + while (line.startsWith(">")) { + tlevel++; + if (tlevel > level) + sb.append("
"); + + line = line.substring(1); // > + + if (line.startsWith(" ")) + line = line.substring(1); + } + + // Closing quotes + for (int i = 0; i < level - tlevel; i++) + sb.append("
"); + level = tlevel; + + // Tabs characters + StringBuilder l = new StringBuilder(); + for (int j = 0; j < line.length(); j++) { + char kar = line.charAt(j); + if (kar == '\t') { + l.append(' '); + while (l.length() % TAB_SIZE != 0) + l.append(' '); + } else + l.append(kar); + } + line = l.toString(); + + // Html characters + line = Html.escapeHtml(line); + + // Space characters + int len = line.length(); + for (int j = 0; j < len; j++) { + char kar = line.charAt(j); + if (kar == ' ') { + // Prevent trimming start + // Keep one space for word wrapping + if (j == 0 || (j + 1 < len && line.charAt(j + 1) == ' ')) + sb.append(" "); + else + sb.append(' '); + } else + sb.append(kar); + } + + sb.append("
"); + } + + // Closing quotes + for (int i = 0; i < level; i++) + sb.append(""); + + return sb.toString(); + } + static void removeTrackingPixels(Context context, Document document) { Drawable d = ContextCompat.getDrawable(context, R.drawable.baseline_my_location_24); d.setTint(Helper.resolveColor(context, R.attr.colorWarning)); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 54bd6585d9..fe27867b6a 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -1045,7 +1045,7 @@ public class MessageHelper { } if (part == plain) - result = "
" + result + "
"; + result = "
" + HtmlHelper.formatPre(result) + "
"; return result; }