public ForwardTextIterator(IDocumentInformation docInfo, Gtk.TextView document, int endOffset)
        {
            Debug.Assert(endOffset >= 0 && endOffset < BufferLength);

            this.docInfo = docInfo;
            this.textBuffer = document.Buffer;
            this.endOffset = endOffset;
            Reset();
        }
 public DefaultSearchResult(ITextIterator iter, int length)
 {
     position = iter.Position;
     offset = iter.DocumentOffset;
     line = iter.Line + 1;
     column = iter.Column + 1;
     this.length = length;
     documentInformation = iter.DocumentInformation;
 }
 public ForwardTextFileIterator(IDocumentInformation document, string fileName)
 {
     this.document = document;
     this.fileName = fileName;
     stream = new FileStream (fileName, FileMode.Open, FileAccess.Read);
     streamReader = new StreamReader (stream);
     reader = new ExtendedStreamReader (streamReader);
     Reset();
     line = lineStartOffset = 0;
     lineInSync = true;
 }
 public SourceViewTextIterator(IDocumentInformation docInfo, Gtk.TextView document, int endOffset)
     : base(docInfo, document, endOffset)
 {
 }
Ejemplo n.º 5
0
        public ISearchResult Find(SearchOptions options, bool reverse)
        {
            // insanity check
            Debug.Assert(searchStrategy      != null);
            Debug.Assert(documentIterator    != null);
            Debug.Assert(options             != null);

            while (!cancelled)
            {
                if (info != null && textIterator != null && documentIterator.CurrentFileName != null) {
                    if (info.FileName != documentIterator.CurrentFileName || lastWasReverse != reverse) {
                        // create new iterator, if document changed or search direction has changed.
                        info = documentIterator.Current;
                        textIterator = info.GetTextIterator ();
                        reverseSearchMap = null;
                        lastResultPos = -1;
                        if (reverse)
                            textIterator.MoveToEnd ();
                    }

                    ISearchResult result;
                    if (!reverse)
                        result = searchStrategy.FindNext (textIterator, options, false);
                    else {
                        if (searchStrategy.SupportsReverseSearch (textIterator, options)) {
                            result = searchStrategy.FindNext (textIterator, options, true);
                        }
                        else {
                            if (reverseSearchMap == null) {
                                reverseSearchMap = new SearchMap ();
                                reverseSearchMap.Build (searchStrategy, textIterator, options);
                            }
                            if (lastResultPos == -1)
                                lastResultPos = textIterator.Position;
                            result = reverseSearchMap.GetPreviousMatch (lastResultPos);
                            if (result != null)
                                textIterator.Position = result.Position;
                        }
                    }

                    if (result != null) {
                        matches++;
                        lastResultPos = result.Position;
                        lastWasReverse = reverse;
                        return result;
                    }
                }

                if (textIterator != null) textIterator.Close ();

                // not found or first start -> move forward to the next document
                bool more = !reverse ? documentIterator.MoveForward () : documentIterator.MoveBackward ();
                if (more) {
                    searchedFiles++;
                    info = documentIterator.Current;
                    textIterator = info.GetTextIterator ();
                    reverseSearchMap = null;
                    lastResultPos = -1;
                    if (reverse)
                        textIterator.MoveToEnd ();
                }
                else
                    cancelled = true;

                lastWasReverse = reverse;
            }

            cancelled = false;
            return null;
        }
		public SourceViewTextIterator (IDocumentInformation docInfo, Gtk.TextView document, int endOffset)
		: base (docInfo, document, endOffset)
		{
			// Make sure the iterator is ready for use
			this.MoveAhead(1);
			this.hasWrapped = false;
		}