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; }
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); } }