예제 #1
0
    public void FindMatchesInBuffer(TextBuffer buffer)
    {
        textview3.Buffer.RemoveAllTags(buffer.StartIter, buffer.EndIter);

        Gtk.TextIter searchiter = buffer.GetIterAtOffset(0);
        Gtk.TextIter aux = buffer.GetIterAtOffset(0);
        Gtk.TextIter PrimerInicioiter, PrimerFinaliter, SegundoInicioiter, SegundoFinaliter;
        bool         inicio = true;

        while (true)
        {
            if (inicio)
            {
                bool word_found = searchiter.ForwardSearch("//", TextSearchFlags.VisibleOnly, out PrimerInicioiter, out PrimerFinaliter, buffer.EndIter);
                if (word_found)
                {
                    inicio = false;
                    textview3.Buffer.ApplyTag("Comment", PrimerInicioiter, PrimerFinaliter);
                    aux        = PrimerInicioiter;
                    searchiter = PrimerFinaliter;
                }
                else
                {
                    break;
                }
            }
            else
            {
                bool word_found = searchiter.ForwardSearch("\n", TextSearchFlags.VisibleOnly, out PrimerInicioiter, out PrimerFinaliter, buffer.EndIter);
                if (word_found)
                {
                    textview3.Buffer.ApplyTag("Comment", aux, PrimerFinaliter);
                    inicio = true;
                }
                else
                {
                    textview3.Buffer.ApplyTag("Comment", searchiter, searchiter.Buffer.EndIter);
                    break;
                }
            }
        }

        searchiter = buffer.GetIterAtOffset(0);
        inicio     = true;

        while (true)
        {
            if (inicio)
            {
                bool word_found = searchiter.ForwardSearch("/*", TextSearchFlags.VisibleOnly, out PrimerInicioiter, out PrimerFinaliter, buffer.EndIter);
                bool Linea      = false;

                if (word_found)
                {
                    inicio     = false;
                    aux        = PrimerInicioiter;
                    searchiter = PrimerFinaliter;

                    if (PrimerInicioiter.BackwardChar())
                    {
                        if (PrimerInicioiter.Char != "\n")
                        {
                            while (PrimerInicioiter.Char != "\n" && !PrimerInicioiter.IsStart)
                            {
                                Console.WriteLine(PrimerInicioiter.CharsInLine);
                                Console.WriteLine(PrimerInicioiter.Char);


                                if (PrimerInicioiter.Char == "/" && Linea == true)
                                {
                                    Console.WriteLine(PrimerInicioiter.Char);
                                    inicio     = true;
                                    aux        = PrimerFinaliter;
                                    searchiter = PrimerFinaliter;
                                    break;
                                }
                                else
                                {
                                    Linea = false;
                                }

                                if (PrimerInicioiter.Char == "/" && Linea == false)
                                {
                                    Console.WriteLine(PrimerInicioiter.Char);
                                    Linea = true;
                                }

                                PrimerInicioiter.BackwardChar();
                            }
                        }
                    }
                }
                else
                {
                    break;
                }
            }
            else
            {
                bool word_found = searchiter.ForwardSearch("*/", TextSearchFlags.VisibleOnly, out SegundoInicioiter, out SegundoFinaliter, buffer.EndIter);
                if (word_found)
                {
                    textview3.Buffer.ApplyTag("Comment", aux, SegundoFinaliter);
                    inicio     = true;
                    searchiter = SegundoFinaliter;
                }
                else
                {
                    textview3.Buffer.ApplyTag("Comment", aux, buffer.EndIter);
                    break;
                }
            }
        }


        foreach (string word in PalabrasReservadas)
        {
            if (word == String.Empty)
            {
                continue;
            }

            searchiter = buffer.GetIterAtOffset(0);
            while (true)
            {
                Gtk.TextIter startiter, enditer;
                bool         word_found = searchiter.ForwardSearch(word, TextSearchFlags.VisibleOnly, out startiter, out enditer, buffer.EndIter);

                if (!word_found)
                {
                    break;
                }
                TextIter start;
                start = startiter;
                if (!start.BackwardChar())
                {
                    Console.WriteLine("entro");
                    char[] arrayChar = enditer.Char.ToCharArray();
                    if (enditer.Char == "" || !Char.IsLetterOrDigit(arrayChar[0]))
                    {
                        textview3.Buffer.ApplyTag("Special", startiter, enditer);
                        searchiter = enditer;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    char[] arrayCharStart = start.Char.ToCharArray();
                    char[] arrayCharEnd   = enditer.Char.ToCharArray();
                    if (enditer.Char == "" || !Char.IsLetterOrDigit(arrayCharEnd[0]))
                    {
                        if (start.Char == "" || !Char.IsLetterOrDigit(arrayCharStart[0]))
                        {
                            textview3.Buffer.ApplyTag("Special", startiter, enditer);
                            searchiter = enditer;
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
    }
        // get next SQL statement.  Requires GetSqlStatementAtCursor having been called first
        public string GetNextSqlStatement(TextBuffer sqlTextBuffer, ref TextIter iter)
        {
            TextIter start_iter, end_iter;
            TextIter match_start2, match_end2;
            TextIter finish_iter;
            string text = String.Empty;
            int char_count = 0;

            char_count = sqlTextBuffer.CharCount;
            end_iter = sqlTextBuffer.GetIterAtOffset (char_count);
            if (iter.IsEnd == false) {
                iter.ForwardChars (1);
                if (sqlTextBuffer.GetText (iter, end_iter, false).Equals (";"))
                    iter.ForwardChars (1);
            }

            if (iter.IsEnd == true)
                return "";

            start_iter = iter;
            match_start2 = iter;
            match_end2 = sqlTextBuffer.GetIterAtOffset (char_count);
            finish_iter = sqlTextBuffer.GetIterAtOffset (char_count);

            if (start_iter.IsEnd == false) {
                if (iter.ForwardSearch (";", TextSearchFlags.TextOnly,
                        out match_start2, out match_end2, end_iter) == true) 	{
                    finish_iter = match_end2;
                    finish_iter.BackwardChars (1);
                }

                text = sqlTextBuffer.GetText (iter, finish_iter, false);
                iter = finish_iter;

                if(text.Length > 0) {
                    // search does not work if what you are searching for is
                    // at the end of the buffer,
                    // this compensates for this
                    int j = text.Length;
                    int cont = 1;
                    for(int i = text.Length - 1; cont == 1 && i >= 0; i--) {
                        char ch = text[i];
                        switch(ch) {
                        case ' ':
                        case ';':
                            j--;
                            break;
                        default:
                            cont = 0;
                            break;
                        }
                    }

                    if(j != text.Length) {
                        string t = text.Substring(0, j);
                        text = t;
                    }
                }
            }

            return text;
        }
예제 #3
0
파일: Main.cs 프로젝트: col42dev/mono-tools
	public void OnFindNextButtonClick (object sender, EventArgs args)
	{
		if (findentry.Text.Length < 1) {
			return;
		}

		try {
			TextIter start;
			TextIter end;
			bool found = findfwd.ForwardSearch (findentry.Text, tsf, out start, out end, textview1.Buffer.EndIter);
			if (!found) {
				WarnWrapBuffer (true);
				findfwd = textview1.Buffer.StartIter;
				findfwd.ForwardSearch (findentry.Text, tsf, out start, out end, textview1.Buffer.EndIter);
			}
			UpdateSelection (found, start, end);
		}
		catch (Exception e) {
			// safety net
			Console.Error.WriteLine (e);
		}
	}