Skip to content

Commit a9c5d3c

Browse files
committed
fix: detecting links
1 parent 1b80ae2 commit a9c5d3c

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

android/src/main/java/com/swmansion/reactnativerichtexteditor/ReactNativeRichTextEditorView.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ class ReactNativeRichTextEditorView : AppCompatEditText {
203203

204204
val finalText = currentText.replaceRange(start, end, item?.text.toString())
205205
setValue(finalText)
206+
parametrizedStyles?.detectAllLinks()
206207
}
207208

208209
fun requestFocusProgrammatically() {

android/src/main/java/com/swmansion/reactnativerichtexteditor/styles/ParametrizedStyles.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,27 @@ class ParametrizedStyles(private val editorView: ReactNativeRichTextEditorView)
5555
afterTextChangedMentions(result)
5656
}
5757

58+
fun detectAllLinks() {
59+
val spannable = editorView.text as Spannable
60+
61+
// TODO: Consider using more reliable regex, this one matches almost anything
62+
val urlPattern = android.util.Patterns.WEB_URL.matcher(spannable)
63+
64+
val spans = spannable.getSpans(0, spannable.length, EditorLinkSpan::class.java)
65+
for (span in spans) {
66+
spannable.removeSpan(span)
67+
}
68+
69+
while (urlPattern.find()) {
70+
val word = urlPattern.group()
71+
val start = urlPattern.start()
72+
val end = urlPattern.end()
73+
val span = EditorLinkSpan(word, editorView.richTextStyle)
74+
val (safeStart, safeEnd) = spannable.getSafeSpanBoundaries(start, end)
75+
spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
76+
}
77+
}
78+
5879
private fun getWordAtIndex(s: Editable, index: Int): Triple<String, Int, Int>? {
5980
if (index < 0 ) return null
6081

0 commit comments

Comments
 (0)