2
// <copyright see="prj:///doc/copyright.txt"/>
3
// <license see="prj:///doc/license.txt"/>
4
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
5
// <version value="$version"/>
8
using System.Collections;
9
using System.Diagnostics;
11
using MonoDevelop.Gui;
13
namespace MonoDevelop.TextEditor.Document
15
public class DefaultFind : IFind
17
ISearchStrategy searchStrategy = null;
18
IDocumentIterator documentIterator = null;
19
ITextIterator textIterator = null;
20
IDocumentInformation info = null;
25
public IDocumentInformation CurrentDocumentInformation {
31
public ITextIterator TextIterator {
37
public ISearchStrategy SearchStrategy {
39
return searchStrategy;
42
searchStrategy = value;
46
public IDocumentIterator DocumentIterator {
48
return documentIterator;
51
documentIterator = value;
55
public int SearchedFileCount {
56
get { return searchedFiles; }
59
public int MatchCount {
60
get { return matches; }
63
ISearchResult CreateNamedSearchResult(ISearchResult pos)
65
if (info == null || pos == null) {
68
pos.DocumentInformation = info;
74
documentIterator.Reset();
81
public void Replace (ISearchResult result, string pattern)
83
if (CurrentDocumentInformation != null && TextIterator != null) {
84
TextIterator.Position = result.Offset;
85
TextIterator.Replace (result.Length, pattern);
89
public ISearchResult FindNext(SearchOptions options)
92
Debug.Assert(searchStrategy != null);
93
Debug.Assert(documentIterator != null);
94
Debug.Assert(options != null);
98
if (info != null && textIterator != null && documentIterator.CurrentFileName != null) {
99
if (info.FileName != documentIterator.CurrentFileName) { // create new iterator, if document changed
100
info = documentIterator.Current;
101
textIterator = info.GetTextIterator ();
104
ISearchResult result = CreateNamedSearchResult(searchStrategy.FindNext(textIterator, options));
105
if (result != null) {
111
if (textIterator != null) textIterator.Close ();
113
// not found or first start -> move forward to the next document
114
if (documentIterator.MoveForward()) {
116
info = documentIterator.Current;
117
textIterator = info.GetTextIterator ();
126
public void Cancel ()