mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-11-10 11:47:24 +01:00
Moves emoji parsers to commons and
This commit is contained in:
@@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.commons
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.vitorpamplona.quartz.events.EmptyTagList
|
||||
import com.vitorpamplona.quartz.events.ImmutableListOfLists
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -4242,6 +4243,44 @@ class RichTextParserTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJapaneseWithEmojis() {
|
||||
val tags =
|
||||
arrayOf(
|
||||
arrayOf("t", "ioメシヨソイゲーム"),
|
||||
arrayOf("emoji", "_ri", "https://media.misskeyusercontent.com/emoji/_ri.png"),
|
||||
arrayOf("emoji", "petthex_japanesecake", "https://media.misskeyusercontent.com/emoji/petthex_japanesecake.gif"),
|
||||
arrayOf("emoji", "ai_nomming", "https://media.misskeyusercontent.com/misskey/f6294900-f678-43cc-bc36-3ee5deeca4c2.gif"),
|
||||
arrayOf("proxy", "https://misskey.io/notes/9q0x6gtdysir03qh", "activitypub"),
|
||||
)
|
||||
val text =
|
||||
"\u200B:_ri:\u200B\u200B:_ri:\u200Bはベイクドモチョチョ\u200B:petthex_japanesecake:\u200Bを食べました\u200B:ai_nomming:\u200B\n" +
|
||||
"#ioメシヨソイゲーム\n" +
|
||||
"https://misskey.io/play/9g3qza4jow"
|
||||
|
||||
val state =
|
||||
RichTextParser().parseText(text, ImmutableListOfLists(tags))
|
||||
|
||||
printStateForDebug(state)
|
||||
|
||||
val expectedResult =
|
||||
listOf<String>(
|
||||
"Emoji(\u200B:_ri:\u200B\u200B:_ri:\u200Bはベイクドモチョチョ\u200B:petthex_japanesecake:\u200Bを食べました\u200B:ai_nomming:\u200B)",
|
||||
"HashTag(#ioメシヨソイゲーム)",
|
||||
"Link(https://misskey.io/play/9g3qza4jow)",
|
||||
)
|
||||
|
||||
state.paragraphs
|
||||
.map { it.words }
|
||||
.flatten()
|
||||
.forEachIndexed { index, seg ->
|
||||
org.junit.Assert.assertEquals(
|
||||
expectedResult[index],
|
||||
"${seg.javaClass.simpleName.replace("Segment", "")}(${seg.segmentText})",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun printStateForDebug(state: com.vitorpamplona.amethyst.commons.RichTextViewerState) {
|
||||
state.paragraphs.forEach { paragraph ->
|
||||
paragraph.words.forEach { seg ->
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.util.Log
|
||||
import android.util.Patterns
|
||||
import com.linkedin.urls.detection.UrlDetector
|
||||
import com.linkedin.urls.detection.UrlDetectorOptions
|
||||
import com.vitorpamplona.quartz.encoders.Nip30CustomEmoji
|
||||
import com.vitorpamplona.quartz.encoders.Nip54
|
||||
import com.vitorpamplona.quartz.encoders.Nip92
|
||||
import com.vitorpamplona.quartz.events.FileHeaderEvent
|
||||
@@ -108,8 +109,7 @@ class RichTextParser() {
|
||||
urlSet.mapNotNull { fullUrl -> parseMediaUrl(fullUrl, tags) }.associateBy { it.url }
|
||||
val imageList = imagesForPager.values.toList()
|
||||
|
||||
val emojiMap =
|
||||
tags.lists.filter { it.size > 2 && it[0] == "emoji" }.associate { ":${it[1]}:" to it[2] }
|
||||
val emojiMap = Nip30CustomEmoji.createEmojiMap(tags)
|
||||
|
||||
val segments = findTextSegments(content, imagesForPager.keys, urlSet, emojiMap, tags)
|
||||
|
||||
@@ -205,7 +205,7 @@ class RichTextParser() {
|
||||
|
||||
if (urls.contains(word)) return LinkSegment(word)
|
||||
|
||||
if (word.startsWith(":") && emojis.any { word.contains(it.key) }) return EmojiSegment(word)
|
||||
if (Nip30CustomEmoji.fastMightContainEmoji(word, emojis) && emojis.any { word.contains(it.key) }) return EmojiSegment(word)
|
||||
|
||||
if (word.startsWith("lnbc", true)) return InvoiceSegment(word)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user