comp.lang.ada
 help / color / mirror / Atom feed
From: jpablo <jpablo.lucero@gmail.com>
Subject: Re: gtksourceview for gtkada
Date: Thu, 16 Jul 2009 07:47:23 -0700 (PDT)
Date: 2009-07-16T07:47:23-07:00	[thread overview]
Message-ID: <94bcf77a-cca0-4091-886b-c42d75df4536@c2g2000yqi.googlegroups.com> (raw)
In-Reply-To: bfd9d9ff-112c-423e-a91e-6ca699bf71e1@a26g2000yqn.googlegroups.com

Oh, thanks for your answer, but it's for a large work and it must be
done in GTK.


On Jul 14, 4:29 pm, Vadim Godunko <vgodu...@gmail.com> wrote:
> On Jul 14, 10:09 pm, jpablo <jpablo.luc...@gmail.com> wrote:> Hi,
>
> > I'm trying to make a simple text editor with syntax highlighting for a
> > specific language, and I'm using gtkada2 for it. The problem is that
> > gtkada2 doesn't seem to have the gtksourceview widget, that exists for
> > C, C++, python, etc.
>
> > Does anyone knows if that widget has been added by someone to the
> > usual widgets of the gtkada2 package?
>
> Alternatively, you can use QtAda and its QPlainTextEditor class. All
> you will need to do is provide your own subclass from
> QSyntaxHighlighter:
>
> 1       with Qt4.Objects;
> 2       with Qt4.Strings;
> 3       with Qt4.Syntax_Highlighters.Impl;
> 4       with Qt4.Text_Documents;
> 5
> 6       package Ada_Syntax_Highlighters is
> 7
> 8          type Ada_Syntax_Highlighter is new
> 9            Qt4.Syntax_Highlighters.Impl.Q_Syntax_Highlighter_Impl with
> null record;
> 10
> 11         overriding
> 12         procedure Highlight_Block
> 13          (Self : not null access Ada_Syntax_Highlighter;
> 14           Text : in              Qt4.Strings.Q_String);
> 15
> 16         type Ada_Syntax_Highlighter_Access is access
> Ada_Syntax_Highlighter;
> 17
> 18         function Create
> 19           (Parent : access Qt4.Text_Documents.Q_Text_Document'Class :=
> null)
> 20            return not null Ada_Syntax_Highlighter_Access;
> 21
> 22      end;
>
> 1       with Qt4.Colors;
> 2       with Ada_Syntax_Highlighters.Moc;
> 3       with Ada.Wide_Text_IO;
> 4
> 5       with Asis.Extensions.Syntax_Highlight;
> 6
> 7       package body Ada_Syntax_Highlighters is
> 8
> 9          ---------------------
> 10         -- Highlight_Block --
> 11         ---------------------
> 12
> 13         procedure Highlight_Block
> 14           (Self : not null access Ada_Syntax_Highlighter;
> 15            Text : in              Qt4.Strings.Q_String)
> 16         is
> 17            use type Qt4.Q_Integer;
> 18            use Asis.Extensions.Syntax_Highlight;
> 19
> 20      --      Length : constant Qt4.Q_Integer := Qt4.Strings.Length
> (Text);
> 21
> 22            Colors : constant array (Token_Kinds) of
> Qt4.Colors.Q_Color :=
> 23              (Comment     => Qt4.Colors.Create (0, 128, 128),
> 24               Identifier  => Qt4.Colors.Create (0, 0, 128),
> 25               Literal     => Qt4.Colors.Create (0, 128, 0),
> 26               Delimiter   => Qt4.Colors.Create (128, 128, 0),
> 27               Keyword     => Qt4.Colors.Create (128, 0, 128),
> 28               Error       => Qt4.Colors.Create (255, 0, 0));
> 29
> 30            procedure Set_Token
> 31              (From : Positive;
> 32               Count : Positive;
> 33               Kind : Token_Kinds) is
> 34            begin
> 35               Set_Format (Self,
> 36                           Qt4.Q_Integer (From) - 1,  -- zero based index
> 37                           Qt4.Q_Integer (Count),
> 38                           Colors (Kind));
> 39            end Set_Token;
> 40
> 41            procedure Go is new Parse (Set_Token);
> 42
> 43            State : Integer := Integer (Previous_Block_State (Self));
> 44         begin
> 45            if State = -1 then
> 46               State := Default_State;
> 47            end if;
> 48
> 49            Go (Qt4.Strings.To_Utf_16 (Text), State);
> 50
> 51            Set_Current_Block_State (Self, Qt4.Q_Integer (State));
> 52            Ada.Wide_Text_IO.Put_Line (">" & Qt4.Strings.To_Utf_16
> (Text));
> 53         end Highlight_Block;
> 54
> 55         ------------
> 56         -- Create --
> 57         ------------
> 58
> 59         function Create
> 60           (Parent : access Qt4.Text_Documents.Q_Text_Document'Class :=
> null)
> 61            return not null Ada_Syntax_Highlighter_Access
> 62         is
> 63            Self : constant not null Ada_Syntax_Highlighter_Access
> 64              := new Ada_Syntax_Highlighter;
> 65
> 66         begin
> 67            Qt4.Syntax_Highlighters.Impl.Constructors.Initialize (Self,
> Parent);
> 68
> 69            return Self;
> 70         end Create;
> 71
> 72      end Ada_Syntax_Highlighters;
>
> And attach it to QPlainTextEditor
>
> 23      with Qt_Ada.Application;
> 24      with Qt4.Core_Applications;
> 25      with Qt4.Fonts;
> 26      with Qt4.Objects;
> 27      with Qt4.Plain_Text_Edits.Constructors;
> 28      with Qt4.Strings;
> 29
> 30      with Ada_Syntax_Highlighters;
> 31
> 32      procedure Main is
> 33         Editor      : Qt4.Plain_Text_Edits.Q_Plain_Text_Edit_Access;
> 34         Highlighter :
> Ada_Syntax_Highlighters.Ada_Syntax_Highlighter_Access;
> 35
> 36      begin
> 37         Qt_Ada.Application.Initialize;
> 38
> 39         Editor :=
> 40           Qt4.Plain_Text_Edits.Constructors.Create
> 41            (Qt4.Strings.From_Utf_16 ("Quit"));
> 42         Highlighter := Ada_Syntax_Highlighters.Create (Editor.Document);
> 43
> 44         Editor.Resize (800, 600);
> 45         Editor.Show;
> 46
> 47         Qt_Ada.Application.Execute;
> 48      end Main;
>
> That's all... ;-)




  reply	other threads:[~2009-07-16 14:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-14 18:09 gtksourceview for gtkada jpablo
2009-07-14 19:29 ` Vadim Godunko
2009-07-16 14:47   ` jpablo [this message]
2009-07-16 17:47 ` Dmitry A. Kazakov
2009-07-17 17:17   ` jpablo
2009-08-05 13:54     ` jpablo
2009-08-05 14:33       ` Dmitry A. Kazakov
2009-08-07 14:17         ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox