public TextImageLine GetLineFromLineNumber(int lineNumber) { if (TextBuffer.IsSafeToAccessDocumentFromSnapshot(this)) { var docLine = TextBuffer.Document.GetLineByNumber(lineNumber + 1); return(new TextImageLine(this, lineNumber, new Span(docLine.Offset, docLine.Length), docLine.DelimiterLength)); } if (lineOffsets is null) { lineOffsets = TextImageUtils.CreateLineOffsets(this); } TextImageUtils.GetLineInfo(lineOffsets, lineNumber, Length, out int start, out int end, out int lineBreakLength); return(new TextImageLine(this, lineNumber, new Span(start, end - start), lineBreakLength)); }
public int GetLineNumberFromPosition(int position) { if ((uint)position > (uint)Length) { throw new ArgumentOutOfRangeException(nameof(position)); } if (TextBuffer.IsSafeToAccessDocumentFromSnapshot(this)) { return(TextBuffer.Document.GetLineByOffset(position).LineNumber - 1); } if (lineOffsets is null) { lineOffsets = TextImageUtils.CreateLineOffsets(this); } return(TextImageUtils.GetLineNumberFromPosition(lineOffsets, position, Length)); }
internal uint[] GetOrCreateLineOffsets() => lineOffsets ??= TextImageUtils.CreateLineOffsets(this);