summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2023-08-14 11:43:04 +0200
committerThomas <tschneider.ac@gmail.com>2023-08-14 11:43:04 +0200
commit9b91ebf31711391cbaf7ca943135a254b0b7b8d6 (patch)
treee45329fc6942b86b15a72fc55d42e5c5c73b8bf6
parentac24e25da0fda97de3c06a788a1a8f987f2b5f45 (diff)
Fix tags issue with RTL and bookmark
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/helper/SpannableHelper.java24
1 files changed, 22 insertions, 2 deletions
diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/SpannableHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/SpannableHelper.java
index 3869b1bd2..25c118ed1 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/helper/SpannableHelper.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/helper/SpannableHelper.java
@@ -113,6 +113,22 @@ public class SpannableHelper {
return convert(context, text, status, account, announcement, viewWeakReference, callback, true);
}
+
+ public static boolean isRTL(String s) {
+ for (int i = 0; i < s.length(); i++) {
+ byte d = Character.getDirectionality(s.charAt(i));
+ if (d == Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
+ d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC ||
+ d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING ||
+ d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
+ ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
public static Spannable convert(Context context, String text,
Status status, Account account, Announcement announcement,
WeakReference<View> viewWeakReference, Status.Callback callback, boolean convertHtml) {
@@ -196,8 +212,12 @@ public class SpannableHelper {
String sb = Pattern.compile("\\A[A-Za-z0-9_]").matcher(markdownItem.code).find() ? "\\b" : "";
String eb = Pattern.compile("[A-Za-z0-9_]\\z").matcher(markdownItem.code).find() ? "\\b" : "\\B";
-
- Pattern p = Pattern.compile(sb + "(" + Pattern.quote(markdownItem.code) + ")" + eb, Pattern.CASE_INSENSITIVE);
+ Pattern p;
+ if (!isRTL(initialContent.toString())) {
+ p = Pattern.compile(sb + "(" + Pattern.quote(markdownItem.code) + ")" + eb, Pattern.UNICODE_CASE);
+ } else {
+ p = Pattern.compile(eb + "(" + Pattern.quote(markdownItem.code) + ")" + sb, Pattern.UNICODE_CASE);
+ }
Matcher m = p.matcher(content);
int fetchPosition = 1;
while (m.find()) {