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;
}