@@ -196,6 +196,10 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
196196 }
197197 }
198198
199+ private val REGEXP_EMAIL = Regex (" ^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}$" ,
200+ setOf (RegexOption .DOT_MATCHES_ALL , RegexOption .IGNORE_CASE ))
201+ private val REGEXP_STANDALONE_URL = Regex (" ^(?:[a-z]+:|#|\\ ?|\\ .|/)" , RegexOption .DOT_MATCHES_ALL )
202+
199203 enum class EditorHasChanges {
200204 CHANGES , NO_CHANGES , UNKNOWN
201205 }
@@ -1426,6 +1430,17 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
14261430 onSelectionChanged(urlSpanBounds.first, urlSpanBounds.second)
14271431 }
14281432
1433+ private fun correctUrl (inputUrl : String ): String {
1434+ val url = inputUrl.trim()
1435+ if (REGEXP_EMAIL .matches(url)) {
1436+ return " mailto:$url "
1437+ }
1438+ if (! REGEXP_STANDALONE_URL .containsMatchIn(url)) {
1439+ return " http://$url "
1440+ }
1441+ return url
1442+ }
1443+
14291444 @SuppressLint(" InflateParams" )
14301445 fun showLinkDialog (presetUrl : String = "", presetAnchor : String = "") {
14311446 val urlAndAnchor = linkFormatter.getSelectedUrlWithAnchor()
@@ -1447,7 +1462,7 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
14471462 builder.setTitle(R .string.link_dialog_title)
14481463
14491464 builder.setPositiveButton(R .string.link_dialog_button_ok, { _, _ ->
1450- val linkText = urlInput.text.toString().trim { it <= ' ' }
1465+ val linkText = TextUtils .htmlEncode(correctUrl( urlInput.text.toString().trim { it <= ' ' }))
14511466 val anchorText = anchorInput.text.toString().trim { it <= ' ' }
14521467
14531468 link(linkText, anchorText)
0 commit comments