AvalonStudio.TextEditor.Rendering.VisualLineGeometryBuilder.GetOffsetForLinesInSegmentInDocument C# (CSharp) Method

GetOffsetForLinesInSegmentInDocument() private static method

private static GetOffsetForLinesInSegmentInDocument ( TextDocument textDocument, ISegment segment, bool extendToFullWidthAtLineEnd = false ) : int>>.IEnumerable
textDocument AvalonStudio.TextEditor.Document.TextDocument
segment ISegment
extendToFullWidthAtLineEnd bool
return int>>.IEnumerable
        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);
                }
            }
        }