TextSegment?GetSegmentForLine(TextSegment segment, DocumentLine line) { var start = Math.Max(segment.Offset, line.Offset); if (!segment.Contains(start)) { return(null); } var end = Math.Min(segment.EndOffset, line.EndOffset); if (!segment.Contains(end - 1)) { return(null); } return(TextSegment.FromBounds(start, end)); }
TextSegment GetFirstSearchResult (int startOffset, int endOffset) { if (startOffset < endOffset && this.selectedRegions.Count > 0) { var region = new TextSegment (startOffset, endOffset - startOffset); int min = 0; int max = selectedRegions.Count - 1; do { int mid = (min + max) / 2; TextSegment segment = selectedRegions [mid]; if (segment.Contains (startOffset) || segment.Contains (endOffset) || region.Contains (segment)) { if (mid == 0) return segment; TextSegment prevSegment = selectedRegions [mid - 1]; if (!(prevSegment.Contains (startOffset) || prevSegment.Contains (endOffset) || region.Contains (prevSegment))) return segment; max = mid - 1; continue; } if (segment.Offset < endOffset) { min = mid + 1; } else { max = mid - 1; } } while (min <= max); } return TextSegment.Invalid; }
TextSegment? GetSegmentForLine(TextSegment segment, DocumentLine line) { var start = Math.Max(segment.Offset, line.Offset); if (!segment.Contains(start)) { return null; } var end = Math.Min(segment.EndOffset, line.EndOffset); if (!segment.Contains(end - 1)) { return null; } return TextSegment.FromBounds(start, end); }