Always use shortest ASCII emoji variation

Signed-off-by: Alik Aslanyan <inline0@pm.me>
This commit is contained in:
Alik Aslanyan
2025-08-01 22:28:47 +02:00
committed by José Rebelo
parent a00da2ee25
commit 8c98a81ba5
2 changed files with 25 additions and 3 deletions
@@ -1,12 +1,34 @@
package nodomain.freeyourgadget.gadgetbridge.util.language.impl;
import net.fellbaum.jemoji.EmojiManager;
import java.util.Comparator;
import java.util.Objects;
import nodomain.freeyourgadget.gadgetbridge.util.language.Transliterator;
public class EmojiTransliterator implements Transliterator {
private static boolean isAllASCII(String input) {
boolean isASCII = true;
for (int i = 0; i < input.length(); i++) {
int c = input.charAt(i);
if (c > 0x7F) {
isASCII = false;
break;
}
}
return isASCII;
}
@Override
public String transliterate(String txt) {
return EmojiManager.replaceAllEmojis(txt, emoji -> Objects.requireNonNullElse(emoji.getAllAliases().get(0), ""));
return EmojiManager.replaceAllEmojis(txt, emoji -> Objects.requireNonNullElse(
emoji.getAllAliases()
.stream()
.filter(Objects::nonNull)
// This is required, because in another case emoji's will be returned
.filter(EmojiTransliterator::isAllASCII)
.min(Comparator.comparingInt(String::length))
.orElse(""), ""));
}
}
@@ -10,12 +10,12 @@ public class EmojiTransliteratorTest extends TestCase {
@Test
public void testSimpleEmoji() {
Assert.assertEquals(":heart:", new EmojiTransliterator().transliterate("\uFE0F"));
Assert.assertEquals("<3", new EmojiTransliterator().transliterate("\uFE0F"));
Assert.assertEquals(":grinning:", new EmojiTransliterator().transliterate("\uD83D\uDE00"));
}
@Test
public void testCompoundEmoji() {
Assert.assertEquals(":factory_worker::skin-tone-4:", new EmojiTransliterator().transliterate("\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFED"));
Assert.assertEquals(":factory_worker_tone4:", new EmojiTransliterator().transliterate("\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFED"));
}
}