From d6aeb753fc8aca3da41feee729b3a4f98ae618e6 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 10 Nov 2023 16:13:14 +0100 Subject: [PATCH] allow exclamation/question marks in pronouns --- .../joinmastodon/android/ui/utils/UiUtilsTest.java | 4 ++++ .../org/joinmastodon/android/ui/utils/UiUtils.java | 14 +++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mastodon/src/androidTest/java/org/joinmastodon/android/ui/utils/UiUtilsTest.java b/mastodon/src/androidTest/java/org/joinmastodon/android/ui/utils/UiUtilsTest.java index 4728a4861..d9ea49e14 100644 --- a/mastodon/src/androidTest/java/org/joinmastodon/android/ui/utils/UiUtilsTest.java +++ b/mastodon/src/androidTest/java/org/joinmastodon/android/ui/utils/UiUtilsTest.java @@ -257,5 +257,9 @@ public class UiUtilsTest { assertEquals("* (asterisk)", UiUtils.extractPronouns(MastodonApp.context, fakeAccount( makeField("pronouns", "-- * (asterisk) --") )).orElseThrow()); + + assertEquals("they/(she?)", UiUtils.extractPronouns(MastodonApp.context, fakeAccount( + makeField("pronouns", "they/(she?)...") + )).orElseThrow()); } } \ No newline at end of file diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index a33da0105..d5f3281ad 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -1683,7 +1683,9 @@ public class UiUtils { "pronouns.page/" }; - private static final Pattern trimPronouns=Pattern.compile("[^\\w*]*([\\w*].*[\\w*]|[\\w*])\\W*"); + private static final String PRONOUN_CHARS="\\w*¿¡!?"; + private static final Pattern trimPronouns= + Pattern.compile("[^"+PRONOUN_CHARS+"]*(["+PRONOUN_CHARS+"].*["+PRONOUN_CHARS+"]|["+PRONOUN_CHARS+"])\\W*"); private static String extractPronounsFromField(String localizedPronouns, AccountField field) { if(!field.name.toLowerCase().contains(localizedPronouns) && !field.name.toLowerCase().contains("pronouns")) return null; @@ -1707,14 +1709,20 @@ public class UiUtils { Matcher matcher=trimPronouns.matcher(text); if(!matcher.find()) return null; String pronouns=matcher.group(1); + // crude fix to allow for pronouns like "it(/she)" or "(de) sie/ihr" - int missingParens=0; + int missingParens=0, missingBrackets=0; for(char c : pronouns.toCharArray()){ if(c=='(') missingParens++; - if(c==')') missingParens--; + else if(c=='[') missingBrackets++; + else if(c==')') missingParens--; + else if(c==']') missingBrackets--; } if(missingParens > 0) pronouns+=")".repeat(missingParens); else if(missingParens < 0) pronouns="(".repeat(missingParens*-1)+pronouns; + if(missingBrackets > 0) pronouns+="]".repeat(missingBrackets); + else if(missingBrackets < 0) pronouns="[".repeat(missingBrackets*-1)+pronouns; + // if ends with an un-closed custom emoji if(pronouns.matches("^.*\\s+:[a-zA-Z_]+$")) pronouns+=':'; return pronouns;