You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.1 KiB
153 lines
4.1 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using ICSharpCode.Core; |
|
using ICSharpCode.Editor; |
|
using ICSharpCode.NRefactory; |
|
|
|
namespace ICSharpCode.SharpDevelop.Editor.Search |
|
{ |
|
public class SearchResultMatch |
|
{ |
|
ProvidedDocumentInformation providedDocumentInformation; |
|
int offset; |
|
int length; |
|
TextLocation startLocation; |
|
TextLocation endLocation; |
|
|
|
public ProvidedDocumentInformation ProvidedDocumentInformation { |
|
set { providedDocumentInformation = value; } |
|
} |
|
|
|
public FileName FileName { |
|
get { |
|
return providedDocumentInformation.FileName; |
|
} |
|
} |
|
|
|
public int Offset { |
|
get { |
|
if (offset < 0) |
|
offset = providedDocumentInformation.Document.GetOffset(startLocation); |
|
return offset; |
|
} |
|
} |
|
|
|
public int Length { |
|
get { |
|
if (length < 0) |
|
length = providedDocumentInformation.Document.GetOffset(endLocation) - this.Offset; |
|
return length; |
|
} |
|
} |
|
|
|
public TextLocation StartLocation { |
|
get { |
|
if (startLocation.IsEmpty) |
|
startLocation = providedDocumentInformation.Document.GetLocation(offset); |
|
return startLocation; |
|
} |
|
} |
|
|
|
public TextLocation EndLocation { |
|
get { |
|
if (endLocation.IsEmpty) |
|
endLocation = providedDocumentInformation.Document.GetLocation(offset + length); |
|
return endLocation; |
|
} |
|
} |
|
|
|
public virtual string TransformReplacePattern(string pattern) |
|
{ |
|
return pattern; |
|
} |
|
|
|
public IDocument CreateDocument() |
|
{ |
|
return providedDocumentInformation.Document; |
|
} |
|
|
|
public SearchResultMatch(int offset, int length) |
|
{ |
|
if (length < 0) |
|
throw new ArgumentOutOfRangeException("length"); |
|
if (offset < 0) |
|
throw new ArgumentOutOfRangeException("offset"); |
|
this.offset = offset; |
|
this.length = length; |
|
} |
|
|
|
public SearchResultMatch(ProvidedDocumentInformation providedDocumentInformation, int offset, int length) |
|
{ |
|
if (providedDocumentInformation == null) |
|
throw new ArgumentNullException("providedDocumentInformation"); |
|
if (length < 0) |
|
throw new ArgumentOutOfRangeException("length"); |
|
if (offset < 0) |
|
throw new ArgumentOutOfRangeException("offset"); |
|
this.providedDocumentInformation = providedDocumentInformation; |
|
this.offset = offset; |
|
this.length = length; |
|
} |
|
|
|
|
|
public SearchResultMatch(ProvidedDocumentInformation providedDocumentInformation, TextLocation startLocation, TextLocation endLocation) |
|
{ |
|
if (providedDocumentInformation == null) |
|
throw new ArgumentNullException("providedDocumentInformation"); |
|
if (length < 0) |
|
throw new ArgumentOutOfRangeException("length"); |
|
this.offset = -1; |
|
this.length = -1; |
|
this.providedDocumentInformation = providedDocumentInformation; |
|
this.startLocation = startLocation; |
|
this.endLocation = endLocation; |
|
} |
|
|
|
[Obsolete("Use the StartLocation property instead")] |
|
public virtual TextLocation GetStartPosition(IDocument document) |
|
{ |
|
return document.GetLocation(Math.Min(Offset, document.TextLength)); |
|
} |
|
|
|
[Obsolete("Use the EndLocation property instead")] |
|
public virtual TextLocation GetEndPosition(IDocument document) |
|
{ |
|
return document.GetLocation(Math.Min(Offset + Length, document.TextLength)); |
|
} |
|
|
|
/// <summary> |
|
/// Gets a special text to display, or null to display the line's content. |
|
/// </summary> |
|
public virtual string DisplayText { |
|
get { |
|
return null; |
|
} |
|
} |
|
|
|
public override string ToString() |
|
{ |
|
return String.Format("[{3}: FileName={0}, Offset={1}, Length={2}]", |
|
FileName, Offset, Length, |
|
GetType().Name); |
|
} |
|
} |
|
|
|
public class SimpleSearchResultMatch : SearchResultMatch |
|
{ |
|
string displayText; |
|
|
|
public override string DisplayText { |
|
get { |
|
return displayText; |
|
} |
|
} |
|
|
|
public SimpleSearchResultMatch(ProvidedDocumentInformation providedDocumentInformation, string displayText, TextLocation position) |
|
: base(providedDocumentInformation, position, position) |
|
{ |
|
this.displayText = displayText; |
|
} |
|
} |
|
}
|
|
|