getLineBoundary method

BufferRangeLine? getLineBoundary(
  1. CellOffset position
)

Implementation

BufferRangeLine? getLineBoundary(CellOffset position) {
  if (position.y < 0 || position.y >= lines.length) {
    return null;
  }

  var startLine = position.y;
  while (_lineContinuesFromPrevious(startLine)) {
    startLine--;
  }

  var endLine = position.y;
  while (_lineContinuesToNext(endLine)) {
    endLine++;
  }

  while (startLine < endLine && _lineHasOnlyWhitespace(startLine)) {
    startLine++;
  }

  while (endLine > startLine && _lineHasOnlyWhitespace(endLine)) {
    endLine--;
  }

  final startColumn = _firstNonWhitespaceColumn(startLine);
  final endColumn = _lastNonWhitespaceColumnEnd(endLine);
  if (startColumn == viewWidth && endColumn == 0) {
    return BufferRangeLine(
      CellOffset(0, startLine),
      CellOffset(viewWidth, endLine),
    );
  }

  return BufferRangeLine(
    CellOffset(startColumn, startLine),
    CellOffset(endColumn, endLine),
  );
}