textTransposeBackward function
TextCommandResult
textTransposeBackward({
- required TextDocument document,
- required TextOffsetStateSnapshot state,
Implementation
TextCommandResult textTransposeBackward({
required TextDocument document,
required TextOffsetStateSnapshot state,
}) {
final cursor = document.positionForOffset(state.cursorOffset);
final lineLength = document.lineLength(cursor.line);
if (lineLength == 0 || cursor.column == 0) {
return _unchangedDocumentCommandResult(document, state);
}
final atColumn = math.min(cursor.column, lineLength - 1);
final beforeColumn = atColumn - 1;
if (beforeColumn < 0) {
return _unchangedDocumentCommandResult(document, state);
}
final lineStartOffset = document.offsetForPosition(
TextPosition(line: cursor.line, column: 0),
);
final beforeOffset = lineStartOffset + beforeColumn;
final atOffset = lineStartOffset + atColumn;
final beforeGrapheme = document.graphemeAt(beforeOffset);
final atGrapheme = document.graphemeAt(atOffset);
if (beforeGrapheme == null || atGrapheme == null) {
return _unchangedDocumentCommandResult(document, state);
}
final working = document.copy();
final result = edit_ops.replaceDocumentRange(
working,
start: beforeOffset,
end: atOffset + 1,
replacement: [atGrapheme, beforeGrapheme],
cursorOffset: lineStartOffset + math.min(atColumn + 1, lineLength),
);
return _documentCommandResult(
working,
cursorOffset: result.cursorOffset,
selectionBaseOffset: state.selectionBaseOffset,
selectionExtentOffset: state.selectionExtentOffset,
documentChange: result.change,
changed: result.changed,
);
}