Removes the need for an extra object for the tag array in the custom emoji nip
This commit is contained in:
@@ -375,7 +375,7 @@ fun CustomEmojiChecker(
|
|||||||
onEmojiText: @Composable (ImmutableList<CustomEmoji.Renderable>) -> Unit,
|
onEmojiText: @Composable (ImmutableList<CustomEmoji.Renderable>) -> Unit,
|
||||||
) {
|
) {
|
||||||
val mayContainEmoji by remember(text, tags) {
|
val mayContainEmoji by remember(text, tags) {
|
||||||
mutableStateOf(CustomEmoji.fastMightContainEmoji(text, tags))
|
mutableStateOf(CustomEmoji.fastMightContainEmoji(text, tags?.lists))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mayContainEmoji) {
|
if (mayContainEmoji) {
|
||||||
@@ -385,7 +385,7 @@ fun CustomEmojiChecker(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(text, tags) {
|
LaunchedEffect(text, tags) {
|
||||||
val newEmojiList = CustomEmoji.assembleAnnotatedList(text, tags)
|
val newEmojiList = CustomEmoji.assembleAnnotatedList(text, tags?.lists)
|
||||||
if (newEmojiList != null) {
|
if (newEmojiList != null) {
|
||||||
emojiList = newEmojiList
|
emojiList = newEmojiList
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -140,7 +140,7 @@ class RichTextParser {
|
|||||||
val imageUrls = imagesForPager.filterValues { it is MediaUrlImage }.keys
|
val imageUrls = imagesForPager.filterValues { it is MediaUrlImage }.keys
|
||||||
val videoUrls = imagesForPager.filterValues { it is MediaUrlVideo }.keys
|
val videoUrls = imagesForPager.filterValues { it is MediaUrlVideo }.keys
|
||||||
|
|
||||||
val emojiMap = CustomEmoji.createEmojiMap(tags)
|
val emojiMap = CustomEmoji.createEmojiMap(tags.lists)
|
||||||
|
|
||||||
val segments = findTextSegments(content, imageUrls, videoUrls, urlSet, emojiMap, tags)
|
val segments = findTextSegments(content, imageUrls, videoUrls, urlSet, emojiMap, tags)
|
||||||
|
|
||||||
|
|||||||
+6
-7
@@ -21,7 +21,6 @@
|
|||||||
package com.vitorpamplona.quartz.nip30CustomEmoji
|
package com.vitorpamplona.quartz.nip30CustomEmoji
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.ImmutableListOfLists
|
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
@@ -32,10 +31,10 @@ class CustomEmoji {
|
|||||||
|
|
||||||
fun fastMightContainEmoji(
|
fun fastMightContainEmoji(
|
||||||
input: String,
|
input: String,
|
||||||
allTags: ImmutableListOfLists<String>?,
|
allTags: Array<Array<String>>?,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (allTags == null) return false
|
if (allTags == null) return false
|
||||||
if (allTags.lists.any { it.size > 2 && it[0] == EmojiUrlTag.TAG_NAME }) return true
|
if (allTags.any { it.size > 2 && it[0] == EmojiUrlTag.TAG_NAME }) return true
|
||||||
return input.contains(":")
|
return input.contains(":")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +46,7 @@ class CustomEmoji {
|
|||||||
return input.contains(":")
|
return input.contains(":")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createEmojiMap(tags: ImmutableListOfLists<String>): Map<String, String> = tags.lists.filter { it.size > 2 && it[0] == EmojiUrlTag.TAG_NAME }.associate { ":${it[1]}:" to it[2] }
|
fun createEmojiMap(tags: Array<Array<String>>): Map<String, String> = tags.filter { it.size > 2 && it[0] == EmojiUrlTag.TAG_NAME }.associate { ":${it[1]}:" to it[2] }
|
||||||
|
|
||||||
fun findAllEmojis(input: String): List<String> {
|
fun findAllEmojis(input: String): List<String> {
|
||||||
val matcher = customEmojiPattern.findAll(input)
|
val matcher = customEmojiPattern.findAll(input)
|
||||||
@@ -67,11 +66,11 @@ class CustomEmoji {
|
|||||||
|
|
||||||
fun assembleAnnotatedList(
|
fun assembleAnnotatedList(
|
||||||
input: String,
|
input: String,
|
||||||
allTags: ImmutableListOfLists<String>?,
|
tags: Array<Array<String>>?,
|
||||||
): ImmutableList<Renderable>? {
|
): ImmutableList<Renderable>? {
|
||||||
if (allTags == null || allTags.lists.isEmpty()) return null
|
if (tags == null || tags.isEmpty()) return null
|
||||||
|
|
||||||
val emojiPairs = createEmojiMap(allTags)
|
val emojiPairs = createEmojiMap(tags)
|
||||||
|
|
||||||
return assembleAnnotatedList(input, emojiPairs)
|
return assembleAnnotatedList(input, emojiPairs)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.quartz.nip30CustomEmoji
|
package com.vitorpamplona.quartz.nip30CustomEmoji
|
||||||
|
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.ImmutableListOfLists
|
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
import kotlin.test.assertNull
|
import kotlin.test.assertNull
|
||||||
@@ -150,7 +149,7 @@ class Nip30Test {
|
|||||||
"#ioメシヨソイゲーム\n" +
|
"#ioメシヨソイゲーム\n" +
|
||||||
"https://misskey.io/play/9g3qza4jow"
|
"https://misskey.io/play/9g3qza4jow"
|
||||||
|
|
||||||
val result = CustomEmoji.assembleAnnotatedList(input, ImmutableListOfLists(tags))
|
val result = CustomEmoji.assembleAnnotatedList(input, tags)
|
||||||
|
|
||||||
assertEquals(9, result!!.size)
|
assertEquals(9, result!!.size)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user