From 0c9450953ce81e640e0ab0d25c837d8abd488970 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 25 Dec 2021 10:28:04 +0100 Subject: [PATCH] Allow formatted pre --- .../java/eu/faircode/email/HtmlHelper.java | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index b4700120d7..1632fda110 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -958,7 +958,45 @@ public class HtmlHelper { // Pre formatted text // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre for (Element pre : document.select("pre")) { - pre.html(formatPre(pre.wholeText())); + NodeTraversor.traverse(new NodeVisitor() { + private int index = 0; + private boolean inElement = false; + + @Override + public void head(Node node, int depth) { + if (node instanceof Element) + inElement = true; + else if (node instanceof TextNode) { + if (inElement) { + TextNode tnode = (TextNode) node; + StringBuilder sb = new StringBuilder(); + for (Character c : tnode.getWholeText().toCharArray()) { + if (c == '\t') + do { + index++; + sb.append(' '); + } + while ((index % TAB_SIZE) != 0); + else { + if (c == '\n') + index = 0; + else + index++; + sb.append(c); + } + } + tnode.text(sb.toString()); + } + } + } + + @Override + public void tail(Node node, int depth) { + if (node instanceof Element) + inElement = false; + } + }, pre); + pre.tagName("div"); pre.attr("x-plain", "true"); }