From 899b4f7c909bfe9f31b1c501540160a2692e5401 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 13 Jul 2023 11:19:07 -0400 Subject: [PATCH] Quick fix for multiple emoji's in one line --- .../com/vitorpamplona/amethyst/service/StringUtils.kt | 11 +++++++++-- .../java/com/vitorpamplona/amethyst/CharsetTest.kt | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/StringUtils.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/StringUtils.kt index fc3ff514d..32c1779a9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/StringUtils.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/StringUtils.kt @@ -27,6 +27,7 @@ fun String.firstFullCharOld(): String { fun String.firstFullChar(): String { var isInJoin = false + var hasHadSecondChance = false var start = 0 var previousCharLength = 0 var next: Int @@ -48,8 +49,14 @@ fun String.firstFullChar(): String { isInJoin = true } else { // stops when two chars are not joined together - if ((previousCharLength > 0) && (!isInJoin) && Character.charCount(codePoint) == 1) { - break + if (previousCharLength > 0 && !isInJoin) { + if (Character.charCount(codePoint) == 1 || hasHadSecondChance) { + break + } else { + hasHadSecondChance = true + } + } else { + hasHadSecondChance = false } isInJoin = false diff --git a/app/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt b/app/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt index e3bd206ad..37bd5e10a 100644 --- a/app/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt +++ b/app/src/test/java/com/vitorpamplona/amethyst/CharsetTest.kt @@ -20,6 +20,11 @@ class CharsetTest { Assert.assertEquals("\uD83E\uDDD1\uD83C\uDFFE", "\uD83E\uDDD1\uD83C\uDFFEHi".firstFullChar()) } + @Test + fun testUTF32JoinChar2() { + Assert.assertEquals("\uD83E\uDDD1\uD83C\uDFFE", "\uD83E\uDDD1\uD83C\uDFFEHi".firstFullChar()) + } + @Test fun testAsciiWithUTF32Char() { Assert.assertEquals("H", "Hi\uD83E\uDDD1\uD83C\uDFFEHi".firstFullChar()) @@ -54,4 +59,9 @@ class CharsetTest { fun testVariation() { Assert.assertEquals("\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68", "\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68ddd".firstFullChar()) } + + @Test + fun testMultipleEmoji() { + Assert.assertEquals("\uD83E\uDEC2\uD83E\uDEC2", "\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2\uD83E\uDEC2".firstFullChar()) + } }