提交 5d9a6422 编写于 作者: C Chris Bracken 提交者: GitHub

Update selection base when deleting surrogates (#3558)

Ensure selection base is updated when deleting surrogates

This fixes a bug in which the selection base was not updated when
deleting at index of the trailing char of a Unicode surrogate,
introduced in 38664ac3.

Minor refactor to consolidate logic around NSRange.
上级 5b51394b
......@@ -112,18 +112,16 @@ static UIKeyboardType ToUIKeyboardType(NSString* inputType) {
- (void)deleteBackward {
int start = std::max(0, std::min(_selectionBase, _selectionExtent));
int end = std::max(0, std::max(_selectionBase, _selectionExtent));
int len = end - start;
if (len > 0) {
NSRange selRange = [self.text
rangeOfComposedCharacterSequencesForRange:NSMakeRange(start, len)];
[self.text deleteCharactersInRange:selRange];
} else if (start > 0) {
start -= 1;
NSRange charRange = [self.text rangeOfComposedCharacterSequenceAtIndex:start];
[self.text deleteCharactersInRange:charRange];
NSRange deleteRange = NSMakeRange(start, end - start);
if (deleteRange.length > 0) {
deleteRange = [self.text rangeOfComposedCharacterSequencesForRange:deleteRange];
[self.text deleteCharactersInRange:deleteRange];
} else if (deleteRange.location > 0) {
deleteRange = [self.text rangeOfComposedCharacterSequenceAtIndex:deleteRange.location - 1];
[self.text deleteCharactersInRange:deleteRange];
}
_selectionBase = start;
_selectionExtent = start;
_selectionBase = deleteRange.location;
_selectionExtent = deleteRange.location;
_selectionAffinity = _kTextAffinityDownstream;
[self updateEditingState];
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册