diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 7122d8518f..1ecb7ad220 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -403,11 +403,23 @@ public class HtmlHelper { case "font-size": // https://developer.mozilla.org/en-US/docs/Web/CSS/font-size - if (element.parent() != null) { - Float fsize = getFontSize(value); + Element parent = element.parent(); + if (parent != null) { + Integer current = null; + while (parent != null) { + String xFontSize = parent.attr("x-font-size"); + if (!TextUtils.isEmpty(xFontSize)) { + current = Integer.parseInt(xFontSize); + break; + } + parent = parent.parent(); + } + + Float fsize = getFontSize(value, current); if (fsize != null && fsize != 0 && (fsize <= 0.8f || fsize >= 1.25)) { Element e = new Element(fsize < 1 ? "small" : "big"); + e.attr("x-font-size", Integer.toString(Math.round(16 * fsize))); element.replaceWith(e); e.appendChild(element); } @@ -450,7 +462,7 @@ public class HtmlHelper { //case "font-size": //case "line-height": if (element.parent() != null && !display_hidden) { - Float s = getFontSize(value); + Float s = getFontSize(value, null); if (s != null && s == 0) { Log.i("Removing no height/width " + element.tagName()); element.remove(); @@ -773,18 +785,18 @@ public class HtmlHelper { } - private static Float getFontSize(String value) { + private static Float getFontSize(String value, Integer current) { if (TextUtils.isEmpty(value)) return null; - value = value - .toLowerCase(Locale.ROOT) - .trim() - .replace("rem", "em"); + if (current == null) + current = 16; try { if (value.endsWith("em")) - return Float.parseFloat(value.substring(0, value.length() - 2).trim()); + return Float.parseFloat(value.substring(0, value.length() - 2).trim()) * current / 16f; + if (value.endsWith("rem")) + return Float.parseFloat(value.substring(0, value.length() - 3).trim()); if (value.endsWith("px")) return Integer.parseInt(value.substring(0, value.length() - 2).trim()) / 16f; return Integer.parseInt(value.trim()) / 16f;