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

Correctly parse colors and links

parent 39721d8f
No related branches found
No related tags found
No related merge requests found
...@@ -126,6 +126,8 @@ dependencies { ...@@ -126,6 +126,8 @@ dependencies {
} }
implementation(project(":malheur")) implementation(project(":malheur"))
implementation("org.jetbrains", "annotations", "15.0")
testImplementation(appArch("persistence.room", "testing", "1.0.0")) testImplementation(appArch("persistence.room", "testing", "1.0.0"))
testImplementation("junit", "junit", "4.12") testImplementation("junit", "junit", "4.12")
......
...@@ -21,6 +21,7 @@ import de.kuschku.quasseldroid_ng.util.helper.styledAttributes ...@@ -21,6 +21,7 @@ import de.kuschku.quasseldroid_ng.util.helper.styledAttributes
import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid_ng.util.quassel.IrcUserUtils import de.kuschku.quasseldroid_ng.util.quassel.IrcUserUtils
import de.kuschku.quasseldroid_ng.util.ui.SpanFormatter import de.kuschku.quasseldroid_ng.util.ui.SpanFormatter
import org.intellij.lang.annotations.Language
import org.threeten.bp.ZoneId import org.threeten.bp.ZoneId
import org.threeten.bp.format.DateTimeFormatter import org.threeten.bp.format.DateTimeFormatter
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
...@@ -230,14 +231,20 @@ class QuasselMessageRenderer( ...@@ -230,14 +231,20 @@ class QuasselMessageRenderer(
} }
} }
@Language("RegExp")
private val scheme = "(?:(?:mailto:|(?:[+.-]?\\w)+://)|www(?=\\.\\S+\\.))" private val scheme = "(?:(?:mailto:|(?:[+.-]?\\w)+://)|www(?=\\.\\S+\\.))"
private val authority = "(?:(?:[,.;@:]?[-\\w]+)+\\.?|\\[[0-9a-f:.]+\\])(?::\\d+)?" @Language("RegExp")
private val authority = "(?:(?:[,.;@:]?[-\\w]+)+\\.?|\\[[0-9a-f:.]+])(?::\\d+)?"
@Language("RegExp")
private val urlChars = "(?:[,.;:]*[\\w~@/?&=+$()!%#*-])" private val urlChars = "(?:[,.;:]*[\\w~@/?&=+$()!%#*-])"
@Language("RegExp")
private val urlEnd = "((?:>|[,.;:\"]*\\s|\\b|$))" private val urlEnd = "((?:>|[,.;:\"]*\\s|\\b|$))"
private val urlPattern = Regex( private val urlPattern = Regex(
String.format("\\b(%s%s(?:/%s*)?)%s", scheme, authority, urlChars, urlEnd), "\\b($scheme$authority(?:/$urlChars*)?)$urlEnd",
RegexOption.IGNORE_CASE RegexOption.IGNORE_CASE
) )
private val channelPattern = Regex( private val channelPattern = Regex(
"((?:#|![A-Z0-9]{5})[^,:\\s]+(?::[^,:\\s]+)?)\\b", "((?:#|![A-Z0-9]{5})[^,:\\s]+(?::[^,:\\s]+)?)\\b",
RegexOption.IGNORE_CASE RegexOption.IGNORE_CASE
...@@ -248,11 +255,14 @@ class QuasselMessageRenderer( ...@@ -248,11 +255,14 @@ class QuasselMessageRenderer(
ircFormatDeserializer.formatString(content, renderingSettings.colorizeMirc) ircFormatDeserializer.formatString(content, renderingSettings.colorizeMirc)
) )
for (result in urlPattern.findAll(content)) { for (result in urlPattern.findAll(content)) {
val group = result.groups[1]
if (group != null) {
text.setSpan( text.setSpan(
URLSpan(result.value), result.range.start, result.range.start + result.value.length, URLSpan(group.value), group.range.start, group.range.start + group.value.length,
Spanned.SPAN_INCLUSIVE_INCLUSIVE Spanned.SPAN_INCLUSIVE_EXCLUSIVE
) )
} }
}
/* /*
for (result in channelPattern.findAll(content)) { for (result in channelPattern.findAll(content)) {
text.setSpan(URLSpan(result.value), result.range.start, result.range.endInclusive, Spanned.SPAN_INCLUSIVE_INCLUSIVE) text.setSpan(URLSpan(result.value), result.range.start, result.range.endInclusive, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment