From e35659e251284f0c6051b66c87c2aed6fca3f5b6 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 17 Jul 2022 16:32:03 +0200 Subject: [PATCH] Use MaterialDings, except for emoticons --- ATTRIBUTION.md | 1 + app/src/main/assets/ATTRIBUTION.md | 1 + .../java/eu/faircode/email/HtmlHelper.java | 52 ++++++------------ app/src/main/res/font/materialdings.ttf | Bin 0 -> 37820 bytes app/src/main/res/font/wingdings.xml | 7 +++ 5 files changed, 27 insertions(+), 34 deletions(-) create mode 100644 app/src/main/res/font/materialdings.ttf create mode 100644 app/src/main/res/font/wingdings.xml diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 81c72ff1e2..04fbee9c76 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -44,3 +44,4 @@ FairEmail uses: * [Apache Commons Compress](https://commons.apache.org/proper/commons-compress/). Copyright © 2002-2021 The Apache Software Foundation. All Rights Reserved. [Apache License 2.0](https://www.apache.org/licenses/). * [LeakCanary](https://github.com/square/leakcanary). Copyright 2015 Square, Inc. [Apache License 2.0](https://github.com/square/leakcanary/blob/main/LICENSE.txt). * [IPAddress](https://github.com/seancfoley/IPAddress). Copyright 2016-2018 Sean C Foley. [Apache License 2.0](https://github.com/seancfoley/IPAddress/blob/master/LICENSE). +* [MaterialDings](https://github.com/Accusoft/MaterialDings). Copyright (c) 2018 Accusoft Corporation. [MIT License](https://github.com/Accusoft/MaterialDings/blob/master/LICENSE.md). diff --git a/app/src/main/assets/ATTRIBUTION.md b/app/src/main/assets/ATTRIBUTION.md index 81c72ff1e2..04fbee9c76 100644 --- a/app/src/main/assets/ATTRIBUTION.md +++ b/app/src/main/assets/ATTRIBUTION.md @@ -44,3 +44,4 @@ FairEmail uses: * [Apache Commons Compress](https://commons.apache.org/proper/commons-compress/). Copyright © 2002-2021 The Apache Software Foundation. All Rights Reserved. [Apache License 2.0](https://www.apache.org/licenses/). * [LeakCanary](https://github.com/square/leakcanary). Copyright 2015 Square, Inc. [Apache License 2.0](https://github.com/square/leakcanary/blob/main/LICENSE.txt). * [IPAddress](https://github.com/seancfoley/IPAddress). Copyright 2016-2018 Sean C Foley. [Apache License 2.0](https://github.com/seancfoley/IPAddress/blob/master/LICENSE). +* [MaterialDings](https://github.com/Accusoft/MaterialDings). Copyright (c) 2018 Accusoft Corporation. [MIT License](https://github.com/Accusoft/MaterialDings/blob/master/LICENSE.md). diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 09175535f6..60926c7863 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -55,6 +55,7 @@ import android.text.style.StrikethroughSpan; import android.text.style.StyleSpan; import android.text.style.SubscriptSpan; import android.text.style.SuperscriptSpan; +import android.text.style.TypefaceSpan; import android.text.style.URLSpan; import android.text.style.UnderlineSpan; import android.util.Base64; @@ -64,6 +65,7 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.FileProvider; +import androidx.core.content.res.ResourcesCompat; import androidx.core.graphics.ColorUtils; import androidx.core.util.PatternsCompat; import androidx.preference.PreferenceManager; @@ -342,37 +344,7 @@ public class HtmlHelper { x11ColorMap.put("yellowgreen", 0x9ACD32); } - // https://unicode.org/L2/L2011/11052r-wingding.pdf - static int[] WINGDING_TO_UNICODE = { - 0x0020, 0x270E, 0x2702, 0x2701, 0x1F453, 0x1F514, 0x1F4D6, 0x1F56F, // 32-39 - 0x260E, 0x2706, 0x2709, 0x1F4E8, 0x1F4EA, 0x1F4EB, 0x1F4EC, 0x1F4ED, // 40-47 - 0x1F4C1, 0x1F4C2, 0x1F4C4, 0x1F4C3, 0x1F4D1, 0x1F5C4, 0x231B, 0x2328, // 48-55 - 0x1F5B1, 0x1F5B2, 0x1F4BB, 0x1F4BD, 0x1F4BE, 0x1F4BE, 0x2707, 0x270D, // 56-63 - 0x270D, 0x270C, 0x1F44C, 0x1F44D, 0x1F44E, 0x261C, 0x261E, 0x261D, // 64-71 - 0x261F, 0x270B, 0x263A, 0x1F610, 0x2639, 0x1F4A3, 0x2620, 0x2690, // 72-79 - 0x1F6A9, 0x2708, 0x263C, 0x1F4A7, 0x2744, 0x271E, 0x271E, 0x2626, // 80-87 - 0x2720, 0x2721, 0x262A, 0x262F, 0x0950, 0x2638, 0x2648, 0x2649, // 88-95 - 0x264A, 0x264B, 0x264C, 0x264D, 0x264E, 0x264F, 0x2650, 0x2651, // 96-103 - 0x2652, 0x2653, 0x0026, 0x0026, 0x25CF, 0x274D, 0x25A0, 0x25A1, // 104-111 - 0x25A1, 0x2751, 0x2752, 0x2B27, 0x29EB, 0x25C6, 0x2756, 0x2B29, // 112-119 - 0x2612, 0x2353, 0x2318, 0x2740, 0x2741, 0x275D, 0x275E, 0x003F, // 120-127 - 0x24EA, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, // 128-135 - 0x2467, 0x2468, 0x2469, 0x24FF, 0x2776, 0x2777, 0x2778, 0x2779, // 136-143 - 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F, 0x1F662, 0x1F660, // 144-151 - 0x1F661, 0x1F663, 0x1F65E, 0x1F65C, 0x1F65D, 0x1F65F, 0x22C5, 0x2981, // 152-159 - 0x2B1D, 0x2B58, 0x2B58, 0x2B58, 0x2299, 0x2B57, 0x274D, 0x25AA, // 160-167 - 0x25A1, 0x2726, 0x2726, 0x2605, 0x2736, 0x2738, 0x2739, 0x2735, // 168-175 - 0x2316, 0x2316, 0x2727, 0x2311, 0x2370, 0x272A, 0x2730, 0x1F550, // 176-183 - 0x1F551, 0x1F552, 0x1F553, 0x1F554, 0x1F555, 0x1F556, 0x1F557, 0x1F558, // 184-191 - 0x1F559, 0x1F55A, 0x1F55B, 0x2BB0, 0x2BB1, 0x2BB2, 0x2BB3, 0x2BB4, // 192-199 - 0x2BB5, 0x2BB6, 0x2BB7, 0x1F66A, 0x1F66B, 0x1F655, 0x1F654, 0x1F657, // 200-207 - 0x1F656, 0x1F650, 0x1F651, 0x1F652, 0x1F653, 0x232B, 0x2326, 0x2B98, // 208-215 - 0x27A2, 0x2B99, 0x2B9B, 0x2B88, 0x2B8A, 0x2B89, 0x2B8B, 0x2190, // 216-223 - 0x2192, 0x2191, 0x2193, 0x2196, 0x2197, 0x2199, 0x2198, 0x21D0, // 224-231 - 0x21D2, 0x21D1, 0x21D3, 0x21D6, 0x21D7, 0x21D9, 0x21D8, 0x21E6, // 232-239 - 0x21E8, 0x21E7, 0x21E9, 0x2B04, 0x21F3, 0x2B00, 0x2B01, 0x2B03, // 240-247 - 0x2B02, 0x25AD, 0x25FD, 0x2717, 0x2713, 0x2612, 0x2611, 0x0077 // 248-255 - }; + static int[] WINGDINGS_EMOTICONS = {0x1F642, 0x1F610, 0x1F641}; private static final List TRACKING_HOSTS = Collections.unmodifiableList(Arrays.asList( "www.google-analytics.com" @@ -3225,14 +3197,26 @@ public class HtmlHelper { break; case "font-family": if ("wingdings".equalsIgnoreCase(value)) { - for (int i = ssb.length() - 1; i >= start; i--) { + Typeface wingdings = ResourcesCompat.getFont(context.getApplicationContext(), R.font.wingdings); + int from = start; + for (int i = start; i < ssb.length(); i++) { int kar = ssb.charAt(i); - if (kar >= 0x20 && kar < 0x20 + WINGDING_TO_UNICODE.length) { - int codepoint = WINGDING_TO_UNICODE[kar - 0x20]; + if (kar >= 74 && kar <= 76) { + if (from < i) { + TypefaceSpan span = new CustomTypefaceSpan("wingdings", wingdings); + setSpan(ssb, span, from, i); + } + int codepoint = WINGDINGS_EMOTICONS[kar - 74]; String replacement = new String(Character.toChars(codepoint)); ssb.replace(i, i + 1, replacement); + i += replacement.length() - 1; + from = i + 1; } } + if (from < ssb.length()) { + TypefaceSpan span = new CustomTypefaceSpan("wingdings", wingdings); + setSpan(ssb, span, from, ssb.length()); + } } else setSpan(ssb, StyleHelper.getTypefaceSpan(value, context), start, ssb.length()); break; diff --git a/app/src/main/res/font/materialdings.ttf b/app/src/main/res/font/materialdings.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1ff090a2a64916265cf78ed7cde44a181e2dcd91 GIT binary patch literal 37820 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/font/wingdings.xml b/app/src/main/res/font/wingdings.xml new file mode 100644 index 0000000000..2ce51f0563 --- /dev/null +++ b/app/src/main/res/font/wingdings.xml @@ -0,0 +1,7 @@ + + + +