From 7d2bfa0b13a51292bcbcf69bc777594513a713b7 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 6 Dec 2023 12:21:33 +0100 Subject: [PATCH] Single script exceptions --- .../java/eu/faircode/email/TextHelper.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/TextHelper.java b/app/src/main/java/eu/faircode/email/TextHelper.java index 2fb614d3d3..88897b61f3 100644 --- a/app/src/main/java/eu/faircode/email/TextHelper.java +++ b/app/src/main/java/eu/faircode/email/TextHelper.java @@ -138,27 +138,38 @@ public class TextHelper { return true; int codepoint; - Character.UnicodeScript us; - Character.UnicodeScript script = null; + Character.UnicodeScript script; + List scripts = new ArrayList<>(); for (int i = 0; i < s.length(); ) { codepoint = s.codePointAt(i); i += Character.charCount(codepoint); - us = Character.UnicodeScript.of(codepoint); - if (Character.isSpaceChar(codepoint)) { - script = null; + if (Character.isSpaceChar(codepoint)) continue; - } - if (Character.UnicodeScript.COMMON.equals(us)) + script = Character.UnicodeScript.of(codepoint); + + if (Character.UnicodeScript.COMMON.equals(script)) continue; - if (script == null) - script = us; - else if (!us.equals(script)) - return false; + if (!scripts.contains(script)) + scripts.add(script); } - return true; + + if (scripts.size() <= 1) + return true; + + scripts.remove(Character.UnicodeScript.HAN); // Chinese/Japanese + scripts.remove(Character.UnicodeScript.HIRAGANA); // Japanese + scripts.remove(Character.UnicodeScript.KATAKANA); // Japanese + + if (scripts.size() == 0) + return true; // All Chinese/Japanese + if (scripts.size() > 1) + return false; + + // Chinese/Japanese + Latin + return Character.UnicodeScript.LATIN.equals(scripts.get(0)); } static String getNonLatinCodepoints(String text) {