Beispiel #1
0
        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);
        }