Skip to content
Snippets Groups Projects
Verified Commit f12a1c1f authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

feat: improve irc format deserializer further

parent f9d81175
No related branches found
No related tags found
Loading
package de.justjanne.quasseldroid.util.extensions
fun <T> Sequence<T>.collapse(callback: (T, T) -> T?) = sequence<T> {
var prev: T? = null
for (item in iterator()) {
if (prev != null) {
val collapsed = callback(prev, item)
if (collapsed == null) {
yield(prev)
prev = item
} else {
prev = collapsed
}
} else {
prev = item
}
}
if (prev != null) {
yield(prev)
}
}
......@@ -20,6 +20,7 @@
package de.justjanne.quasseldroid.util.format
import androidx.compose.ui.graphics.Color
import de.justjanne.quasseldroid.util.extensions.collapse
import kotlin.math.min
/**
......@@ -67,8 +68,9 @@ object IrcFormatDeserializer {
i += foregroundData.length
val backgroundData =
if (content[i] == ',') content.substring(i + 1, min(i + length + 1, content.length))
.takeWhile(matcher)
if (i < content.length && content[i] == ',')
content.substring(i + 1, min(i + length + 1, content.length))
.takeWhile(matcher)
else null
val background = backgroundData
?.toIntOrNull(radix)
......@@ -141,6 +143,9 @@ object IrcFormatDeserializer {
if (lastProcessed != content.length) {
yield(IrcFormat.Span(content.substring(lastProcessed), current))
}
}.collapse { prev, current ->
if (prev.style == current.style) prev.copy(content = prev.content + current.content)
else null
}
private const val CODE_BOLD = 0x02.toChar()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment