getLineStartOffset method

int getLineStartOffset(
  1. int lineIndex
)

Gets the character offset where a line starts.

lineIndex is zero-based (0 for the first line).

Implementation

int getLineStartOffset(int lineIndex) {
  if (_bufferLineIndex != null && _bufferDirty) {
    final newLines = '\n'.allMatches(_bufferLineText!).length;
    if (newLines > 0) {
      if (lineIndex == _bufferLineIndex!) {
        return _bufferLineRopeStart;
      } else if (lineIndex > _bufferLineIndex! &&
          lineIndex <= _bufferLineIndex! + newLines) {
        final lines = _bufferLineText!.split('\n');
        int offset = _bufferLineRopeStart;
        for (int i = 0; i < lineIndex - _bufferLineIndex!; i++) {
          offset += lines[i].length + 1;
        }
        return offset;
      } else if (lineIndex > _bufferLineIndex! + newLines) {
        final delta = _bufferLineText!.length - _bufferLineOriginalLength;
        return _rope.getLineStartOffset(lineIndex - newLines) + delta;
      }
    } else {
      if (lineIndex == _bufferLineIndex!) return _bufferLineRopeStart;
      if (lineIndex > _bufferLineIndex!) {
        final delta = _bufferLineText!.length - _bufferLineOriginalLength;
        return _rope.getLineStartOffset(lineIndex) + delta;
      }
    }
  }
  return _rope.getLineStartOffset(lineIndex);
}