Fixed pre processing

pull/178/head
M66B 5 years ago
parent a1aff11987
commit 96b37e9658

@ -5268,7 +5268,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
// Write decrypted body // Write decrypted body
String text = Helper.readText(plain); String text = Helper.readText(plain);
String html = "<pre>" + HtmlHelper.formatPre(text) + "</pre>"; String html = "<div>" + HtmlHelper.formatPre(text) + "</div>";
Helper.writeText(message.getFile(context), html); Helper.writeText(message.getFile(context), html);
db.message().setMessageStored(message.id, new Date().getTime()); db.message().setMessageStored(message.id, new Date().getTime());
db.message().setMessageFts(message.id, false); db.message().setMessageFts(message.id, false);

@ -697,11 +697,10 @@ public class HtmlHelper {
// Pre formatted text // Pre formatted text
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre
if (!view) for (Element pre : document.select("pre")) {
for (Element pre : document.select("pre")) { pre.html(formatPre(pre.wholeText()));
pre.html(formatPre(pre.wholeText())); pre.tagName("div");
pre.tagName("div"); }
}
// Code // Code
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code
@ -1275,9 +1274,9 @@ public class HtmlHelper {
for (int j = 0; j < line.length(); j++) { for (int j = 0; j < line.length(); j++) {
char kar = line.charAt(j); char kar = line.charAt(j);
if (kar == '\t') { if (kar == '\t') {
l.append(' '); l.append('\u00A0');
while (l.length() % TAB_SIZE != 0) while (l.length() % TAB_SIZE != 0)
l.append(' '); l.append('\u00A0');
} else } else
l.append(kar); l.append(kar);
} }
@ -1724,35 +1723,31 @@ public class HtmlHelper {
// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements
NodeTraversor.traverse(new NodeVisitor() { NodeTraversor.traverse(new NodeVisitor() {
private int pre = 0;
private Element element; private Element element;
private List<TextNode> block = new ArrayList<>(); private List<TextNode> block = new ArrayList<>();
private String WHITESPACE = " \t\f\u00A0"; private String WHITESPACE = " \t\f";
private String WHITESPACE_NL = WHITESPACE + "\r\n"; private String WHITESPACE_NL = WHITESPACE + "\r\n";
private Pattern TRIM_WHITESPACE_NL = private Pattern TRIM_WHITESPACE_NL =
Pattern.compile("[" + WHITESPACE + "]*\\r?\\n[" + WHITESPACE + "]*"); Pattern.compile("[" + WHITESPACE + "]*\\r?\\n[" + WHITESPACE + "]*");
private List<String> BLOCK_START = Collections.unmodifiableList(Arrays.asList( private List<String> BLOCK_START = Collections.unmodifiableList(Arrays.asList(
"body", "blockquote", "h1", "h2", "h3", "h4", "h5", "h6", "li", "ol", "ul", "pre" "body", "blockquote", "h1", "h2", "h3", "h4", "h5", "h6", "li", "ol", "ul"
)); ));
private List<String> BLOCK_END = Collections.unmodifiableList(Arrays.asList( private List<String> BLOCK_END = Collections.unmodifiableList(Arrays.asList(
"body", "blockquote", "br", "h1", "h2", "h3", "h4", "h5", "h6", "li", "ol", "ul", "pre" "body", "blockquote", "br", "h1", "h2", "h3", "h4", "h5", "h6", "li", "ol", "ul"
)); ));
@Override @Override
public void head(Node node, int depth) { public void head(Node node, int depth) {
if (node instanceof TextNode) { if (node instanceof TextNode)
if (pre == 0) block.add((TextNode) node);
block.add((TextNode) node); else if (node instanceof Element) {
} else if (node instanceof Element) {
element = (Element) node; element = (Element) node;
if (BLOCK_START.contains(element.tagName())) { if (BLOCK_START.contains(element.tagName())) {
normalizeText(block); normalizeText(block);
block.clear(); block.clear();
} }
if ("pre".equals(element.tagName()))
pre++;
} }
} }
@ -1764,8 +1759,6 @@ public class HtmlHelper {
normalizeText(block); normalizeText(block);
block.clear(); block.clear();
} }
if ("pre".equals(element.tagName()))
pre--;
} }
} }
@ -1974,9 +1967,6 @@ public class HtmlHelper {
newline(start); newline(start);
newline(ssb.length()); newline(ssb.length());
break; break;
case "pre":
// Do nothing
break;
case "small": case "small":
ssb.setSpan(new RelativeSizeSpan(FONT_SMALL), start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.setSpan(new RelativeSizeSpan(FONT_SMALL), start, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
break; break;

@ -1589,7 +1589,7 @@ public class MessageHelper {
if (part.isMimeType("text/plain")) { if (part.isMimeType("text/plain")) {
if ("flowed".equalsIgnoreCase(ct.getParameter("format"))) if ("flowed".equalsIgnoreCase(ct.getParameter("format")))
result = HtmlHelper.flow(result); result = HtmlHelper.flow(result);
result = "<pre>" + HtmlHelper.formatPre(result) + "</pre>"; result = "<div>" + HtmlHelper.formatPre(result) + "</div>";
} else if (part.isMimeType("text/html")) { } else if (part.isMimeType("text/html")) {
if (TextUtils.isEmpty(charset)) { if (TextUtils.isEmpty(charset)) {
// <meta charset="utf-8" /> // <meta charset="utf-8" />

Loading…
Cancel
Save