Resolve fatal crash due to text insertion
This commit is contained in:
parent
88676362b4
commit
45a2b72bfd
@ -38,14 +38,22 @@ class TextInsertionFormatter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cursorPosition = rangeValue.location
|
let cursorPosition = rangeValue.location
|
||||||
let beforeStart = max(0, cursorPosition - 100)
|
|
||||||
let textBefore = String(text[text.index(text.startIndex, offsetBy: beforeStart)..<text.index(text.startIndex, offsetBy: cursorPosition)])
|
|
||||||
|
|
||||||
let afterEnd = min(text.count, cursorPosition + 100)
|
guard let cursorUTF16Index = text.utf16.index(text.utf16.startIndex, offsetBy: cursorPosition, limitedBy: text.utf16.endIndex),
|
||||||
let textAfter = String(text[text.index(text.startIndex, offsetBy: cursorPosition)..<text.index(text.startIndex, offsetBy: afterEnd)])
|
let cursorStringIndex = cursorUTF16Index.samePosition(in: text) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
let charBefore = cursorPosition > 0 ? text[text.index(text.startIndex, offsetBy: cursorPosition - 1)] : nil
|
let searchRangeLength = 100
|
||||||
let charAfter = cursorPosition < text.count ? text[text.index(text.startIndex, offsetBy: cursorPosition)] : nil
|
|
||||||
|
let beforeStartIndex = text.index(cursorStringIndex, offsetBy: -searchRangeLength, limitedBy: text.startIndex) ?? text.startIndex
|
||||||
|
let textBefore = String(text[beforeStartIndex..<cursorStringIndex])
|
||||||
|
|
||||||
|
let afterEndIndex = text.index(cursorStringIndex, offsetBy: searchRangeLength, limitedBy: text.endIndex) ?? text.endIndex
|
||||||
|
let textAfter = String(text[cursorStringIndex..<afterEndIndex])
|
||||||
|
|
||||||
|
let charBefore = cursorStringIndex > text.startIndex ? text[text.index(before: cursorStringIndex)] : nil
|
||||||
|
let charAfter = cursorStringIndex < text.endIndex ? text[cursorStringIndex] : nil
|
||||||
|
|
||||||
return InsertionContext(
|
return InsertionContext(
|
||||||
textBefore: textBefore,
|
textBefore: textBefore,
|
||||||
@ -164,3 +172,4 @@ class TextInsertionFormatter {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user