private static IEnumerable<Tuple<int, int>> GetOffsetForLinesInSegmentInDocument(TextDocument textDocument,
ISegment segment, bool extendToFullWidthAtLineEnd = false)
{
var segmentStart = segment.Offset;
var segmentEnd = segment.Offset + segment.Length;
if (segmentStart > textDocument.TextLength)
{
segmentStart = textDocument.TextLength;
}
if (segmentEnd > textDocument.TextLength)
{
segmentEnd = textDocument.TextLength;
}
var start = new TextViewPosition(textDocument.GetLocation(segmentStart));
var end = new TextViewPosition(textDocument.GetLocation(segmentEnd));
foreach (var line in textDocument.Lines)
{
if (!line.IsDeleted)
{
if (line.Offset > segmentEnd)
{
break;
}
if (line.EndOffset < segmentStart)
{
continue;
}
// find start and begining in current line.
var lineStartOffset = line.Offset;
if (segment.Offset > line.Offset)
{
lineStartOffset = line.Offset + (segment.Offset - line.Offset);
}
var lineEndOffset = line.EndOffset;
if (segment.EndOffset < line.EndOffset)
{
lineEndOffset = line.EndOffset - (line.EndOffset - segment.EndOffset);
}
// generate rect for section in this line.
yield return new Tuple<int, int>(lineStartOffset, lineEndOffset);
}
}
}