public SearchResult FindPrevious (bool setSelection)
{
if (SearchEngine.SearchRequest == null || string.IsNullOrEmpty (SearchEngine.SearchRequest.SearchPattern))
return null;
int startOffset = Caret.Offset - SearchEngine.SearchRequest.SearchPattern.Length;
if (IsSomethingSelected && IsMatchAt (MainSelection.GetAnchorOffset (this)))
startOffset = MainSelection.GetAnchorOffset (this);
int searchOffset;
if (startOffset < 0) {
searchOffset = Document.TextLength - 1;
} else {
searchOffset = (startOffset + Document.TextLength - 1) % Document.TextLength;
}
SearchResult result = SearchBackward (searchOffset);
if (result != null) {
result.SearchWrapped = result.EndOffset > startOffset;
Caret.Offset = result.Offset + result.Length;
if (setSelection)
MainSelection = new Selection (Document.OffsetToLocation (result.Offset), Caret.Location);
}
return result;
}