duplicateSelectedLinesAbove function
TextLineCommandResult
duplicateSelectedLinesAbove(
- List<
String> lines, { - required TextPosition cursor,
- TextPosition? selectionBase,
- TextPosition? selectionExtent,
Implementation
TextLineCommandResult duplicateSelectedLinesAbove(
List<String> lines, {
required TextPosition cursor,
TextPosition? selectionBase,
TextPosition? selectionExtent,
}) {
final lineTexts = lines.isEmpty ? <String>[''] : List<String>.from(lines);
final clampedCursor = _clampPositionToLines(cursor, lineTexts);
final clampedBase = selectionBase == null
? null
: _clampPositionToLines(selectionBase, lineTexts);
final clampedExtent = selectionExtent == null
? null
: _clampPositionToLines(selectionExtent, lineTexts);
final span = _selectedLineSpan(
clampedCursor,
selectionBase: clampedBase,
selectionExtent: clampedExtent,
);
final startLine = span.startLine;
final endLine = span.endLine;
final blockHeight = endLine - startLine + 1;
final duplicatedLines = lineTexts
.sublist(startLine, endLine + 1)
.map((line) => line)
.toList(growable: false);
lineTexts.insertAll(startLine, duplicatedLines);
final nextCursor = _duplicateAbovePosition(
clampedCursor,
startLine: startLine,
endLine: endLine,
delta: blockHeight,
lines: lineTexts,
);
final nextBase = selectionBase == null
? null
: _duplicateAbovePosition(
clampedBase!,
startLine: startLine,
endLine: endLine,
delta: blockHeight,
lines: lineTexts,
);
final nextExtent = selectionExtent == null
? null
: _duplicateAbovePosition(
clampedExtent!,
startLine: startLine,
endLine: endLine,
delta: blockHeight,
lines: lineTexts,
);
return _lineResultFromSnapshot(
lineTexts,
TextLineStateSnapshot(
cursor: nextCursor,
selectionBase: nextBase,
selectionExtent: nextExtent,
),
);
}