mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 06:35:51 +00:00
Various fixes
This commit is contained in:
@@ -376,6 +376,19 @@ private func refreshTextMentions(text: NSString, initialAttributedText: NSAttrib
|
||||
}
|
||||
}
|
||||
|
||||
private let textUrlEdgeCharacters: CharacterSet = {
|
||||
var set: CharacterSet = .alphanumerics
|
||||
set.formUnion(.symbols)
|
||||
set.formUnion(.punctuationCharacters)
|
||||
return set
|
||||
}()
|
||||
|
||||
private let textUrlCharacters: CharacterSet = {
|
||||
var set: CharacterSet = textUrlEdgeCharacters
|
||||
set.formUnion(.whitespacesAndNewlines)
|
||||
return set
|
||||
}()
|
||||
|
||||
private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributedString, attributedText: NSMutableAttributedString, fullRange: NSRange) {
|
||||
var textUrlRanges: [(NSRange, ChatTextInputTextUrlAttribute)] = []
|
||||
initialAttributedText.enumerateAttribute(ChatTextInputAttributes.textUrl, in: fullRange, options: [], using: { value, range, _ in
|
||||
@@ -392,7 +405,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
||||
var validLower = range.lowerBound
|
||||
inner1: for i in range.lowerBound ..< range.upperBound {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if alphanumericCharacters.contains(c) || c == " " as UnicodeScalar {
|
||||
if textUrlCharacters.contains(c) {
|
||||
validLower = i
|
||||
break inner1
|
||||
}
|
||||
@@ -403,7 +416,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
||||
var validUpper = range.upperBound
|
||||
inner2: for i in (validLower ..< range.upperBound).reversed() {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if alphanumericCharacters.contains(c) || c == " " as UnicodeScalar {
|
||||
if textUrlCharacters.contains(c) {
|
||||
validUpper = i + 1
|
||||
break inner2
|
||||
}
|
||||
@@ -415,7 +428,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
||||
let minLower = (i == 0) ? fullRange.lowerBound : textUrlRanges[i - 1].0.upperBound
|
||||
inner3: for i in (minLower ..< validLower).reversed() {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if alphanumericCharacters.contains(c) {
|
||||
if textUrlEdgeCharacters.contains(c) {
|
||||
validLower = i
|
||||
} else {
|
||||
break inner3
|
||||
@@ -428,7 +441,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
||||
let maxUpper = (i == textUrlRanges.count - 1) ? fullRange.upperBound : textUrlRanges[i + 1].0.lowerBound
|
||||
inner3: for i in validUpper ..< maxUpper {
|
||||
if let c = UnicodeScalar(text.character(at: i)) {
|
||||
if alphanumericCharacters.contains(c) {
|
||||
if textUrlEdgeCharacters.contains(c) {
|
||||
validUpper = i + 1
|
||||
} else {
|
||||
break inner3
|
||||
@@ -450,7 +463,7 @@ private func refreshTextUrls(text: NSString, initialAttributedText: NSAttributed
|
||||
var combine = true
|
||||
inner: for j in textUrlRanges[i].0.upperBound ..< textUrlRanges[i + 1].0.lowerBound {
|
||||
if let c = UnicodeScalar(text.character(at: j)) {
|
||||
if alphanumericCharacters.contains(c) || c == " " as UnicodeScalar {
|
||||
if textUrlCharacters.contains(c) {
|
||||
} else {
|
||||
combine = false
|
||||
break inner
|
||||
|
||||
Reference in New Issue
Block a user