[Gtk-sharp-list] need help with TextBuffers and TextIters
Mike H
MikeH@daemonix.net
Fri, 21 Nov 2003 16:10:08 -0600
Hello, Not to sound stupid but where does the "gtksourceview-sharp dll"
come from? Your file won't compile without it. Is it in GTK# .14?
Mike H
On Fri, 2003-11-21 at 12:23, Patrik Olterman wrote:
> Hello all
>
> I have for a while been working on a low end C# editor in GTK#
> I am struggling to make syntax highlighting to work due to the
> lack of documentation on TextIters and TextBuffers. The full code can be
> found in a subversion repository on
> http://www.olterman.se:8080/repos/mono/ezsharp/ezsharp.cs
>
> heres what I have so far as to syntax highlighting as you can see its
> far from perfect, right now it highlights oneline comments and strings
> if there is only one string on a line. Hopefully this will give us a
> working little editor and some documentation on buffers and iters.
>
> Please help
> ----------------------------------------------------------------------
> class Hilite
> {
> public TextTagTable tt;
> public TextTag string_tag, comment_tag;
> public bool commentBit;
>
> public Hilite()
> {
> tt = new TextTagTable();
> // text tags for syntax highlighting
> // strings
> string_tag = new TextTag(null);
> string_tag.Foreground = "blue";
> tt.Add(string_tag);
> // coments
> comment_tag = new TextTag(null);
> comment_tag.Foreground = "darkgreen";
> tt.Add(comment_tag);
> }
>
> public void hilite_all()
> {
>
> //Console.WriteLine("Hilite event");
> TextIter begin = new TextIter();
> begin = App.editor.buf.StartIter;
> TextIter stop = new TextIter();
> stop = App.editor.buf.StartIter;
> stop.ForwardLine();
> //Console.WriteLine(buf.GetText(begin, stop, false));
> for (int i = 1; i < App.editor.buf.LineCount; i++)
> {
> // get the txt
> //Console.Write(buf.GetText(begin, stop, false));
> string txt = App.editor.buf.GetText(begin, stop, true);
> //
> if(txt != "") {
>
> // checking for strings
> Regex reg_string = new Regex("(\".*\")");
> Match mat_string = reg_string.Match(txt);
> if(mat_string.Success==true) {
> char fnutt= '"';
> TextIter begin_string = begin.Copy();
> TextIter stop_string = stop.Copy();
> while( true==true ) {
> begin_string.ForwardChar();
> string control = App.editor.buf.GetText(begin_string,
> stop_string, true);
> if ( control[0] == fnutt ) {
> break;
> }
> }
> while( true==true ) {
> stop_string.BackwardChar();
> string control = App.editor.buf.GetText(begin_string,
> stop_string, true);
> int end = control.Length-1;
> if ( control[end] == fnutt ) {
> break;
> }
> }
>
> //applying string tag
> App.editor.buf.ApplyTag (string_tag, begin_string, stop_string);
> }
> // checking for comments
> Regex reg_comment = new Regex("(\\s)*(//)");
> Match mat_comment = reg_comment.Match(txt);
> if(mat_comment.Success==true) {
> string slash = "//";
> TextIter begin_comment = begin.Copy();
> while( true==true ) {
>
> TextIter control_it = begin_comment.Copy();
> control_it.ForwardChar();
> control_it.ForwardChar();
> string control = App.editor.buf.GetText(begin_comment,
> control_it, true);
> if ( control == slash ) {
> break;
> }
> begin_comment.ForwardChar();
> }
> //applying comment tag
> App.editor.buf.ApplyTag (comment_tag, begin_comment, stop);
> }
> }
> // move iters forward one line
> begin.ForwardLine();
> stop.ForwardLine();
> }
>
> /*
> TextIter it_a = new TextIter();
> it_a = App.editor.buf.StartIter;
> TextIter it_b = new TextIter();
> it_b = App.editor.buf.StartIter;
> it_b.ForwardChar();
> TextIter it_end = new TextIter();
> it_end = App.editor.buf.EndIter;
>
> // looping through each char of the code
> while (it_b != it_end)
> {
> //Console.WriteLine(App.editor.buf.GetText(it_a, it_b, true));
>
>
> // moving iters forward
> it_a.ForwardChar();
> it_b.ForwardChar();
> }
> */
> }
>
> public void hilite_last_word()
> {
>
> }
>
> public void hilite_remove()
> {
> TextIter first = new TextIter();
> first = App.editor.buf.StartIter;
> TextIter last = new TextIter();
> last = App.editor.buf.EndIter;
>
> App.editor.buf.RemoveAllTags(first, last);
> }
> }
>
>
> _______________________________________________
> Gtk-sharp-list maillist - Gtk-sharp-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/gtk-sharp-list
>