From 536868d3e5ce9f93de9613812fbfe51a1a439583 Mon Sep 17 00:00:00 2001 From: tshinohara Date: Thu, 6 Jul 2023 01:20:54 +0900 Subject: [PATCH 1/5] Bugfix: Japanese url export disable. --- .../amethyst/service/CachedRichTextParser.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt index 5b5e03dc21..c8bee42dde 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt @@ -23,6 +23,8 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableMap import kotlinx.collections.immutable.toImmutableSet import java.util.regex.Pattern +import java.net.URI +import java.net.URISyntaxException @Immutable data class RichTextViewerState( @@ -67,8 +69,15 @@ class RichTextParser() { null } else if (isNumber(it.originalUrl)) { null + } else if (it.originalUrl.contains("。")) { + null } else { - it.originalUrl + val pattern = "^(http|https)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?".toRegex(RegexOption.IGNORE_CASE) + if (pattern.matches(it.originalUrl)) { + it.originalUrl + } else { + null + } } } From d369c2c658d53689402fff5a3d2b4522644f1e2e Mon Sep 17 00:00:00 2001 From: tshinohara Date: Thu, 6 Jul 2023 01:23:31 +0900 Subject: [PATCH 2/5] Bugfix: Japanese url export disable 2. --- .../com/vitorpamplona/amethyst/service/CachedRichTextParser.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt index c8bee42dde..a44b23b942 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt @@ -23,8 +23,6 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableMap import kotlinx.collections.immutable.toImmutableSet import java.util.regex.Pattern -import java.net.URI -import java.net.URISyntaxException @Immutable data class RichTextViewerState( From 014c613577fc652dcef25afaa0cf626d6878aa77 Mon Sep 17 00:00:00 2001 From: tshinohara Date: Thu, 6 Jul 2023 01:26:15 +0900 Subject: [PATCH 3/5] Bugfix: Change matching pattern. --- .../com/vitorpamplona/amethyst/service/CachedRichTextParser.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt index a44b23b942..a23cf5ef61 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt @@ -70,8 +70,7 @@ class RichTextParser() { } else if (it.originalUrl.contains("。")) { null } else { - val pattern = "^(http|https)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?".toRegex(RegexOption.IGNORE_CASE) - if (pattern.matches(it.originalUrl)) { + if (Patterns.WEB_URL.matcher(it.originalUrl).matches()) { it.originalUrl } else { null From f5c77d41f195a78a3031a10ce84536a3891df91b Mon Sep 17 00:00:00 2001 From: tshinohara Date: Thu, 6 Jul 2023 02:47:29 +0900 Subject: [PATCH 4/5] Bugfix: Url parse disabled in other texts. --- .../amethyst/service/CachedRichTextParser.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt index a23cf5ef61..4272c4ed11 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt @@ -52,7 +52,8 @@ val shortDatePattern: Pattern = Pattern.compile("^\\d{2}-\\d{2}-\\d{2}$") val numberPattern: Pattern = Pattern.compile("^(-?[\\d.]+)([a-zA-Z%]*)$") // Group 1 = url, group 4 additional chars -val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]+)*\\/?)(.*)") +//val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]+)*\\/?)(.*)") +val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]*[^\\p{IsHan}\\p{IsHiragana}\\p{IsKatakana}])*\\/?)(.*)") class RichTextParser() { fun parseText( @@ -70,7 +71,8 @@ class RichTextParser() { } else if (it.originalUrl.contains("。")) { null } else { - if (Patterns.WEB_URL.matcher(it.originalUrl).matches()) { + val pattern = "^((http|https)://)?([A-Za-z0-9-]+(\\.[A-Za-z0-9]+)+)(:[0-9]+)?(/[^?#]*)?(\\?[^#]*)?(#.*)?".toRegex(RegexOption.IGNORE_CASE) + if (pattern.matches(it.originalUrl)) { it.originalUrl } else { null @@ -178,7 +180,8 @@ class RichTextParser() { } else if (schemelessMatcher.find()) { val url = schemelessMatcher.group(1) // url val additionalChars = schemelessMatcher.group(4) // additional chars - if (url != null) { + val pattern = "^([A-Za-z0-9-]+(\\.[A-Za-z0-9]+)+)(:[0-9]+)?(/[^?#]*)?(\\?[^#]*)?(#.*)?".toRegex(RegexOption.IGNORE_CASE) + if (pattern.matches(word)) { SchemelessUrlSegment(word, url, additionalChars) } else { RegularTextSegment(word) From dc940c0608eaa20931251f9d1718c4db11ed7283 Mon Sep 17 00:00:00 2001 From: tshinohara Date: Thu, 6 Jul 2023 03:05:17 +0900 Subject: [PATCH 5/5] fix lint error. --- .../com/vitorpamplona/amethyst/service/CachedRichTextParser.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt index 4272c4ed11..f0994a937b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/CachedRichTextParser.kt @@ -52,7 +52,7 @@ val shortDatePattern: Pattern = Pattern.compile("^\\d{2}-\\d{2}-\\d{2}$") val numberPattern: Pattern = Pattern.compile("^(-?[\\d.]+)([a-zA-Z%]*)$") // Group 1 = url, group 4 additional chars -//val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]+)*\\/?)(.*)") +// val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]+)*\\/?)(.*)") val noProtocolUrlValidator = Pattern.compile("(([\\w\\d-]+\\.)*[a-zA-Z][\\w-]+[\\.\\:]\\w+([\\/\\?\\=\\&\\#\\.]?[\\w-]*[^\\p{IsHan}\\p{IsHiragana}\\p{IsKatakana}])*\\/?)(.*)") class RichTextParser() {