1-----------------------------------------------------------------------
2--              GtkAda - Ada95 binding for Gtk+/Gnome                --
3--                                                                   --
4--                 Copyright (C) 2001-2013, AdaCore                  --
5--                                                                   --
6-- This library is free software; you can redistribute it and/or     --
7-- modify it under the terms of the GNU General Public               --
8-- License as published by the Free Software Foundation; either      --
9-- version 2 of the License, or (at your option) any later version.  --
10--                                                                   --
11-- This library is distributed in the hope that it will be useful,   --
12-- but WITHOUT ANY WARRANTY; without even the implied warranty of    --
13-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU --
14-- General Public License for more details.                          --
15--                                                                   --
16-- You should have received a copy of the GNU General Public         --
17-- License along with this library; if not, write to the             --
18-- Free Software Foundation, Inc., 59 Temple Place - Suite 330,      --
19-- Boston, MA 02111-1307, USA.                                       --
20--                                                                   --
21-- As a special exception, if other files instantiate generics from  --
22-- this unit, or you link this unit with other files to produce an   --
23-- executable, this  unit  does not  by itself cause  the resulting  --
24-- executable to be covered by the GNU General Public License. This  --
25-- exception does not however invalidate any other reasons why the   --
26-- executable file  might be covered by the  GNU Public License.     --
27-----------------------------------------------------------------------
28
29with Gtkada.Bindings;      use Gtkada.Bindings;
30with Interfaces.C.Strings; use Interfaces.C.Strings;
31with System;
32with Gtk.Clipboard;        use Gtk.Clipboard;
33with Gtk.Text_Iter;        use Gtk.Text_Iter;
34with Gtk.Text_Tag;         use Gtk.Text_Tag;
35
36with Glib.Type_Conversion_Hooks;
37
38package body Gtk.Text_Buffer is
39
40   package Type_Conversion is new Glib.Type_Conversion_Hooks.Hook_Registrator
41     (Get_Type'Access, Gtk_Text_Buffer_Record);
42   pragma Warnings (Off, Type_Conversion);
43
44   -------------
45   -- Gtk_New --
46   -------------
47
48   procedure Gtk_New
49     (Buffer : out Gtk_Text_Buffer;
50      Table  : Gtk.Text_Tag_Table.Gtk_Text_Tag_Table := null) is
51   begin
52      Buffer := new Gtk_Text_Buffer_Record;
53      Initialize (Buffer, Table);
54   end Gtk_New;
55
56   ----------------
57   -- Initialize --
58   ----------------
59
60   procedure Initialize
61     (Buffer : access Gtk_Text_Buffer_Record'Class;
62      Table  : Gtk.Text_Tag_Table.Gtk_Text_Tag_Table := null)
63   is
64      function Internal (Table : System.Address) return System.Address;
65      pragma Import (C, Internal, "gtk_text_buffer_new");
66
67      use type Gtk.Text_Tag_Table.Gtk_Text_Tag_Table;
68
69   begin
70      if Table = null then
71         Set_Object (Buffer, Internal (System.Null_Address));
72      else
73         Set_Object (Buffer, Internal (Get_Object (Table)));
74      end if;
75   end Initialize;
76
77   --------------------
78   -- Get_Line_Count --
79   --------------------
80
81   function Get_Line_Count
82     (Buffer : access Gtk_Text_Buffer_Record) return Gint
83   is
84      function Internal (Buffer : System.Address) return Gint;
85      pragma Import (C, Internal, "gtk_text_buffer_get_line_count");
86
87   begin
88      return Internal (Get_Object (Buffer));
89   end Get_Line_Count;
90
91   --------------------
92   -- Get_Char_Count --
93   --------------------
94
95   function Get_Char_Count
96     (Buffer : access Gtk_Text_Buffer_Record) return Gint
97   is
98      function Internal (Buffer : System.Address) return Gint;
99      pragma Import (C, Internal, "gtk_text_buffer_get_char_count");
100
101   begin
102      return Internal (Get_Object (Buffer));
103   end Get_Char_Count;
104
105   -------------------
106   -- Get_Tag_Table --
107   -------------------
108
109   function Get_Tag_Table
110     (Buffer : access Gtk_Text_Buffer_Record)
111      return Gtk.Text_Tag_Table.Gtk_Text_Tag_Table
112   is
113      function Internal (Buffer : System.Address) return System.Address;
114      pragma Import (C, Internal, "gtk_text_buffer_get_tag_table");
115      Stub : Gtk.Text_Tag_Table.Gtk_Text_Tag_Table_Record;
116
117   begin
118      return Gtk.Text_Tag_Table.Gtk_Text_Tag_Table
119               (Get_User_Data_Fast (Internal (Get_Object (Buffer)), Stub));
120   end Get_Tag_Table;
121
122   --------------
123   -- Set_Text --
124   --------------
125
126   procedure Set_Text
127     (Buffer : access Gtk_Text_Buffer_Record;
128      Text   : UTF8_String)
129   is
130      procedure Internal
131        (Buffer : System.Address;
132         Text   : UTF8_String;
133         Len    : Gint);
134      pragma Import (C, Internal, "gtk_text_buffer_set_text");
135
136   begin
137      Internal (Get_Object (Buffer), Text, Text'Length);
138   end Set_Text;
139
140   ------------
141   -- Insert --
142   ------------
143
144   procedure Insert
145     (Buffer : access Gtk_Text_Buffer_Record;
146      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
147      Text   : UTF8_String)
148   is
149      procedure Internal
150        (Buffer : System.Address;
151         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
152         Text   : UTF8_String;
153         Len    : Gint);
154      pragma Import (C, Internal, "gtk_text_buffer_insert");
155
156   begin
157      Internal (Get_Object (Buffer), Iter, Text, Text'Length);
158   end Insert;
159
160   ------------
161   -- Insert --
162   ------------
163
164   procedure Insert
165     (Buffer : access Gtk_Text_Buffer_Record;
166      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
167      Text   : Gtkada.Types.Chars_Ptr)
168   is
169      procedure Internal
170        (Buffer : System.Address;
171         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
172         Text   : Gtkada.Types.Chars_Ptr;
173         Len    : Gint := -1);
174      pragma Import (C, Internal, "gtk_text_buffer_insert");
175
176   begin
177      Internal (Get_Object (Buffer), Iter, Text);
178   end Insert;
179
180   ----------------------
181   -- Insert_With_Tags --
182   ----------------------
183
184   procedure Insert_With_Tags
185     (Buffer : access Gtk_Text_Buffer_Record;
186      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
187      Text   : UTF8_String;
188      Tag    : Gtk_Text_Tag)
189   is
190      procedure Internal
191        (Buffer : System.Address;
192         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
193         Text   : UTF8_String;
194         Len    : Gint;
195         Tag    : System.Address);
196      pragma Import (C, Internal, "ada_gtk_text_buffer_insert_with_tags");
197
198   begin
199      Internal
200        (Get_Object (Buffer), Iter, Text, Text'Length, Get_Object (Tag));
201   end Insert_With_Tags;
202
203   ----------------------
204   -- Insert_With_Tags --
205   ----------------------
206
207   procedure Insert_With_Tags
208     (Buffer : access Gtk_Text_Buffer_Record;
209      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
210      Text   : Gtkada.Types.Chars_Ptr;
211      Tag    : Gtk.Text_Tag.Gtk_Text_Tag)
212   is
213      procedure Internal
214        (Buffer : System.Address;
215         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
216         Text   : Gtkada.Types.Chars_Ptr;
217         Len    : Gint := -1;
218         Tag    : System.Address);
219      pragma Import (C, Internal, "ada_gtk_text_buffer_insert_with_tags");
220
221   begin
222      Internal (Get_Object (Buffer), Iter, Text, Tag => Get_Object (Tag));
223   end Insert_With_Tags;
224
225   ------------------------------
226   -- Insert_With_Tags_By_Name --
227   ------------------------------
228
229   procedure Insert_With_Tags_By_Name
230     (Buffer : access Gtk_Text_Buffer_Record;
231      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
232      Text   : UTF8_String;
233      Tag_Name : String)
234   is
235      procedure Internal
236        (Buffer : System.Address;
237         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
238         Text   : UTF8_String;
239         Len    : Gint;
240         Name   : String);
241      pragma Import
242        (C, Internal, "ada_gtk_text_buffer_insert_with_tags_by_name");
243
244   begin
245      Internal
246        (Get_Object (Buffer), Iter, Text, Text'Length, Tag_Name & ASCII.NUL);
247   end Insert_With_Tags_By_Name;
248
249   ----------------------
250   -- Insert_At_Cursor --
251   ----------------------
252
253   procedure Insert_At_Cursor
254     (Buffer : access Gtk_Text_Buffer_Record;
255      Text   : UTF8_String)
256   is
257      procedure Internal
258        (Buffer : System.Address;
259         Text   : UTF8_String;
260         Len    : Gint);
261      pragma Import (C, Internal, "gtk_text_buffer_insert_at_cursor");
262
263   begin
264      Internal (Get_Object (Buffer), Text, Text'Length);
265   end Insert_At_Cursor;
266
267   procedure Insert_At_Cursor
268     (Buffer : access Gtk_Text_Buffer_Record;
269      Text   : Gtkada.Types.Chars_Ptr;
270      Len    : Gint := -1)
271   is
272      procedure Internal
273        (Buffer : System.Address;
274         Text   : Gtkada.Types.Chars_Ptr;
275         Len    : Gint);
276      pragma Import (C, Internal, "gtk_text_buffer_insert_at_cursor");
277
278   begin
279      Internal (Get_Object (Buffer), Text, Len);
280   end Insert_At_Cursor;
281
282   ------------------------
283   -- Insert_Interactive --
284   ------------------------
285
286   procedure Insert_Interactive
287     (Buffer           : access Gtk_Text_Buffer_Record;
288      Iter             : in out Gtk.Text_Iter.Gtk_Text_Iter;
289      Text             : UTF8_String;
290      Default_Editable : Boolean;
291      Result           : out Boolean)
292   is
293      function Internal
294        (Buffer           : System.Address;
295         Iter             : Gtk.Text_Iter.Gtk_Text_Iter;
296         Text             : UTF8_String;
297         Len              : Gint;
298         Default_Editable : Gboolean) return Gboolean;
299      pragma Import (C, Internal, "gtk_text_buffer_insert_interactive");
300
301   begin
302      Result :=
303          Internal (Get_Object (Buffer), Iter, Text, Text'Length,
304           Boolean'Pos (Default_Editable)) /= 0;
305   end Insert_Interactive;
306
307   ----------------------------------
308   -- Insert_Interactive_At_Cursor --
309   ----------------------------------
310
311   function Insert_Interactive_At_Cursor
312     (Buffer           : access Gtk_Text_Buffer_Record;
313      Text             : UTF8_String;
314      Default_Editable : Boolean) return Boolean
315   is
316      function Internal
317        (Buffer           : System.Address;
318         Text             : UTF8_String;
319         Len              : Gint;
320         Default_Editable : Gboolean) return Gboolean;
321      pragma Import
322        (C, Internal, "gtk_text_buffer_insert_interactive_at_cursor");
323
324   begin
325      return
326        Internal (Get_Object (Buffer), Text, Text'Length,
327         Boolean'Pos (Default_Editable)) /= 0;
328   end Insert_Interactive_At_Cursor;
329
330   ------------------
331   -- Insert_Range --
332   ------------------
333
334   procedure Insert_Range
335     (Buffer  : access Gtk_Text_Buffer_Record;
336      Iter    : in out Gtk.Text_Iter.Gtk_Text_Iter;
337      Start   : Gtk.Text_Iter.Gtk_Text_Iter;
338      The_End : Gtk.Text_Iter.Gtk_Text_Iter)
339   is
340      procedure Internal
341        (Buffer  : System.Address;
342         Iter    : Gtk.Text_Iter.Gtk_Text_Iter;
343         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
344         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
345      pragma Import (C, Internal, "gtk_text_buffer_insert_range");
346
347   begin
348      Internal (Get_Object (Buffer), Iter, Start, The_End);
349   end Insert_Range;
350
351   ------------------------------
352   -- Insert_Range_Interactive --
353   ------------------------------
354
355   procedure Insert_Range_Interactive
356     (Buffer           : access Gtk_Text_Buffer_Record;
357      Iter             : in out Gtk.Text_Iter.Gtk_Text_Iter;
358      Start            : Gtk.Text_Iter.Gtk_Text_Iter;
359      The_End          : Gtk.Text_Iter.Gtk_Text_Iter;
360      Default_Editable : Boolean;
361      Result           : out Boolean)
362   is
363      function Internal
364        (Buffer           : System.Address;
365         Iter             : Gtk.Text_Iter.Gtk_Text_Iter;
366         Start            : Gtk.Text_Iter.Gtk_Text_Iter;
367         The_End          : Gtk.Text_Iter.Gtk_Text_Iter;
368         Default_Editable : Gboolean) return Gboolean;
369      pragma Import (C, Internal, "gtk_text_buffer_insert_range_interactive");
370
371   begin
372      Result :=
373        Internal (Get_Object (Buffer),
374         Iter,
375         Start,
376         The_End,
377         Boolean'Pos (Default_Editable)) /= 0;
378   end Insert_Range_Interactive;
379
380   ------------
381   -- Delete --
382   ------------
383
384   procedure Delete
385     (Buffer  : access Gtk_Text_Buffer_Record;
386      Start   : in out Gtk.Text_Iter.Gtk_Text_Iter;
387      The_End : in out Gtk.Text_Iter.Gtk_Text_Iter)
388   is
389      procedure Internal
390        (Buffer  : System.Address;
391         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
392         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
393      pragma Import (C, Internal, "gtk_text_buffer_delete");
394
395   begin
396      Internal (Get_Object (Buffer), Start, The_End);
397   end Delete;
398
399   ------------------------
400   -- Delete_Interactive --
401   ------------------------
402
403   procedure Delete_Interactive
404     (Buffer           : access Gtk_Text_Buffer_Record;
405      Start_Iter       : in out Gtk.Text_Iter.Gtk_Text_Iter;
406      End_Iter         : in out Gtk.Text_Iter.Gtk_Text_Iter;
407      Default_Editable : Boolean;
408      Result           : out Boolean)
409   is
410      function Internal
411        (Buffer           : System.Address;
412         Start_Iter       : Gtk.Text_Iter.Gtk_Text_Iter;
413         End_Iter         : Gtk.Text_Iter.Gtk_Text_Iter;
414         Default_Editable : Gboolean) return Gboolean;
415      pragma Import (C, Internal, "gtk_text_buffer_delete_interactive");
416
417   begin
418      Result :=
419        Internal (Get_Object (Buffer),
420         Start_Iter,
421         End_Iter,
422         Boolean'Pos (Default_Editable)) /= 0;
423   end Delete_Interactive;
424
425   --------------
426   -- Get_Text --
427   --------------
428
429   function Get_Text
430     (Buffer               : access Gtk_Text_Buffer_Record;
431      Start                : Gtk.Text_Iter.Gtk_Text_Iter;
432      The_End              : Gtk.Text_Iter.Gtk_Text_Iter;
433      Include_Hidden_Chars : Boolean := False) return Gtkada.Types.Chars_Ptr
434   is
435      function Internal
436        (Buffer               : System.Address;
437         Start                : Gtk.Text_Iter.Gtk_Text_Iter;
438         The_End              : Gtk.Text_Iter.Gtk_Text_Iter;
439         Include_Hidden_Chars : Gboolean)
440         return Interfaces.C.Strings.chars_ptr;
441      pragma Import (C, Internal, "gtk_text_buffer_get_text");
442
443   begin
444      return Internal
445        (Get_Object (Buffer),
446         Start,
447         The_End,
448         Boolean'Pos (Include_Hidden_Chars));
449   end Get_Text;
450
451   function Get_Text
452     (Buffer               : access Gtk_Text_Buffer_Record;
453      Start                : Gtk.Text_Iter.Gtk_Text_Iter;
454      The_End              : Gtk.Text_Iter.Gtk_Text_Iter;
455      Include_Hidden_Chars : Boolean := False) return UTF8_String
456   is
457      Str : constant Interfaces.C.Strings.chars_ptr :=
458        Get_Text (Buffer, Start, The_End, Include_Hidden_Chars);
459      S : constant String := Interfaces.C.Strings.Value (Str);
460
461   begin
462      Gtkada.Types.g_free (Str);
463      return S;
464   end Get_Text;
465
466   ---------------
467   -- Get_Slice --
468   ---------------
469
470   function Get_Slice
471     (Buffer               : access Gtk_Text_Buffer_Record;
472      Start                : Gtk.Text_Iter.Gtk_Text_Iter;
473      The_End              : Gtk.Text_Iter.Gtk_Text_Iter;
474      Include_Hidden_Chars : Boolean := False) return Gtkada.Types.Chars_Ptr
475   is
476      function Internal
477        (Buffer               : System.Address;
478         Start                : Gtk.Text_Iter.Gtk_Text_Iter;
479         The_End              : Gtk.Text_Iter.Gtk_Text_Iter;
480         Include_Hidden_Chars : Gboolean)
481         return Interfaces.C.Strings.chars_ptr;
482      pragma Import (C, Internal, "gtk_text_buffer_get_slice");
483
484   begin
485      return Internal
486        (Get_Object (Buffer),
487         Start,
488         The_End,
489         Boolean'Pos (Include_Hidden_Chars));
490   end Get_Slice;
491
492   function Get_Slice
493     (Buffer               : access Gtk_Text_Buffer_Record;
494      Start                : Gtk.Text_Iter.Gtk_Text_Iter;
495      The_End              : Gtk.Text_Iter.Gtk_Text_Iter;
496      Include_Hidden_Chars : Boolean := False) return UTF8_String
497   is
498      Str : constant Interfaces.C.Strings.chars_ptr :=
499        Get_Slice (Buffer, Start, The_End, Include_Hidden_Chars);
500      S   : constant String := Interfaces.C.Strings.Value (Str);
501
502   begin
503      Gtkada.Types.g_free (Str);
504      return S;
505   end Get_Slice;
506
507   -------------------
508   -- Insert_Pixbuf --
509   -------------------
510
511   procedure Insert_Pixbuf
512     (Buffer : access Gtk_Text_Buffer_Record;
513      Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
514      Pixbuf : Gdk.Pixbuf.Gdk_Pixbuf)
515   is
516      procedure Internal
517        (Buffer : System.Address;
518         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
519         Pixbuf : System.Address);
520      pragma Import (C, Internal, "gtk_text_buffer_insert_pixbuf");
521
522   begin
523      Internal (Get_Object (Buffer), Iter, Get_Object (Pixbuf));
524   end Insert_Pixbuf;
525
526   -------------------------
527   -- Insert_Child_Anchor --
528   -------------------------
529
530   procedure Insert_Child_Anchor
531     (Buffer : access Gtk_Text_Buffer_Record;
532      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
533      Anchor : access Gtk.Text_Child.Gtk_Text_Child_Anchor_Record'Class)
534   is
535      procedure Internal
536        (Buffer : System.Address;
537         Iter   : Gtk.Text_Iter.Gtk_Text_Iter;
538         Anchor : System.Address);
539      pragma Import (C, Internal, "gtk_text_buffer_insert_child_anchor");
540
541   begin
542      Internal (Get_Object (Buffer), Iter, Get_Object (Anchor));
543   end Insert_Child_Anchor;
544
545   -------------------------
546   -- Create_Child_Anchor --
547   -------------------------
548
549   procedure Create_Child_Anchor
550     (Buffer : access Gtk_Text_Buffer_Record;
551      Iter   : in out Gtk.Text_Iter.Gtk_Text_Iter;
552      Result : out Gtk.Text_Child.Gtk_Text_Child_Anchor)
553   is
554      function Internal
555        (Buffer : System.Address;
556         Iter   : Gtk.Text_Iter.Gtk_Text_Iter) return System.Address;
557      pragma Import (C, Internal, "gtk_text_buffer_create_child_anchor");
558
559      Stub : Gtk.Text_Child.Gtk_Text_Child_Anchor_Record;
560   begin
561      Result := Gtk.Text_Child.Gtk_Text_Child_Anchor
562        (Get_User_Data_Fast (Internal (Get_Object (Buffer), Iter), Stub));
563   end Create_Child_Anchor;
564
565   -----------------
566   -- Create_Mark --
567   -----------------
568
569   function Create_Mark
570     (Buffer       : access Gtk_Text_Buffer_Record;
571      Mark_Name    : String := "";
572      Where        : Gtk.Text_Iter.Gtk_Text_Iter;
573      Left_Gravity : Boolean := True) return Gtk.Text_Mark.Gtk_Text_Mark
574   is
575      function Internal
576        (Buffer       : System.Address;
577         Mark_Name    : String;
578         Where        : Gtk.Text_Iter.Gtk_Text_Iter;
579         Left_Gravity : Gboolean) return System.Address;
580
581      function Internal
582        (Buffer       : System.Address;
583         Mark_Name    : System.Address := System.Null_Address;
584         Where        : Gtk.Text_Iter.Gtk_Text_Iter;
585         Left_Gravity : Gboolean) return System.Address;
586      pragma Import (C, Internal, "gtk_text_buffer_create_mark");
587
588      Stub : Gtk.Text_Mark.Gtk_Text_Mark_Record;
589
590   begin
591      if Mark_Name /= "" then
592         return
593           Gtk.Text_Mark.Gtk_Text_Mark
594             (Get_User_Data_Fast
595               (Internal
596                 (Get_Object (Buffer),
597                  Mark_Name & ASCII.NUL,
598                  Where,
599                  Boolean'Pos (Left_Gravity)),
600                  Stub));
601      else
602         return
603           Gtk.Text_Mark.Gtk_Text_Mark
604             (Get_User_Data_Fast
605               (Internal
606                  (Buffer => Get_Object (Buffer),
607                   Where => Where,
608                   Left_Gravity => Boolean'Pos (Left_Gravity)),
609                   Stub));
610      end if;
611   end Create_Mark;
612
613   ---------------
614   -- Move_Mark --
615   ---------------
616
617   procedure Move_Mark
618     (Buffer : access Gtk_Text_Buffer_Record;
619      Mark   : access Gtk.Text_Mark.Gtk_Text_Mark_Record'Class;
620      Where  : Gtk.Text_Iter.Gtk_Text_Iter)
621   is
622      procedure Internal
623        (Buffer : System.Address;
624         Mark   : System.Address;
625         Where  : Gtk.Text_Iter.Gtk_Text_Iter);
626      pragma Import (C, Internal, "gtk_text_buffer_move_mark");
627
628   begin
629      Internal (Get_Object (Buffer), Get_Object (Mark), Where);
630   end Move_Mark;
631
632   -----------------
633   -- Delete_Mark --
634   -----------------
635
636   procedure Delete_Mark
637     (Buffer : access Gtk_Text_Buffer_Record;
638      Mark   : access Gtk.Text_Mark.Gtk_Text_Mark_Record'Class)
639   is
640      procedure Internal
641        (Buffer : System.Address;
642         Mark   : System.Address);
643      pragma Import (C, Internal, "gtk_text_buffer_delete_mark");
644
645   begin
646      Internal (Get_Object (Buffer), Get_Object (Mark));
647   end Delete_Mark;
648
649   --------------
650   -- Get_Mark --
651   --------------
652
653   function Get_Mark
654     (Buffer : access Gtk_Text_Buffer_Record;
655      Name   : String) return Gtk.Text_Mark.Gtk_Text_Mark
656   is
657      function Internal
658        (Buffer : System.Address;
659         Name   : String) return System.Address;
660      pragma Import (C, Internal, "gtk_text_buffer_get_mark");
661
662      Stub : Gtk.Text_Mark.Gtk_Text_Mark_Record;
663   begin
664      return Gtk.Text_Mark.Gtk_Text_Mark
665               (Get_User_Data_Fast
666                 (Internal (Get_Object (Buffer), Name & ASCII.NUL),
667                  Stub));
668   end Get_Mark;
669
670   -----------------------
671   -- Move_Mark_By_Name --
672   -----------------------
673
674   procedure Move_Mark_By_Name
675     (Buffer : access Gtk_Text_Buffer_Record;
676      Name   : String;
677      Where  : Gtk.Text_Iter.Gtk_Text_Iter)
678   is
679      procedure Internal
680        (Buffer : System.Address;
681         Name   : String;
682         Where  : Gtk.Text_Iter.Gtk_Text_Iter);
683      pragma Import (C, Internal, "gtk_text_buffer_move_mark_by_name");
684
685   begin
686      Internal (Get_Object (Buffer), Name & ASCII.NUL, Where);
687   end Move_Mark_By_Name;
688
689   -------------------------
690   -- Delete_Mark_By_Name --
691   -------------------------
692
693   procedure Delete_Mark_By_Name
694     (Buffer : access Gtk_Text_Buffer_Record;
695      Name   : String)
696   is
697      procedure Internal
698        (Buffer : System.Address;
699         Name   : String);
700      pragma Import (C, Internal, "gtk_text_buffer_delete_mark_by_name");
701
702   begin
703      Internal (Get_Object (Buffer), Name & ASCII.NUL);
704   end Delete_Mark_By_Name;
705
706   ----------------
707   -- Get_Insert --
708   ----------------
709
710   function Get_Insert
711     (Buffer : access Gtk_Text_Buffer_Record)
712      return Gtk.Text_Mark.Gtk_Text_Mark
713   is
714      function Internal (Buffer : System.Address) return System.Address;
715      pragma Import (C, Internal, "gtk_text_buffer_get_insert");
716      Stub : Gtk.Text_Mark.Gtk_Text_Mark_Record;
717
718   begin
719      return Gtk.Text_Mark.Gtk_Text_Mark
720               (Get_User_Data_Fast (Internal (Get_Object (Buffer)), Stub));
721   end Get_Insert;
722
723   -------------------------
724   -- Get_Selection_Bound --
725   -------------------------
726
727   function Get_Selection_Bound (Buffer : access Gtk_Text_Buffer_Record)
728                                 return Gtk.Text_Mark.Gtk_Text_Mark
729   is
730      function Internal (Buffer : System.Address) return System.Address;
731      pragma Import (C, Internal, "gtk_text_buffer_get_selection_bound");
732      Stub : Gtk.Text_Mark.Gtk_Text_Mark_Record;
733   begin
734      return Gtk.Text_Mark.Gtk_Text_Mark
735               (Get_User_Data_Fast (Internal (Get_Object (Buffer)), Stub));
736   end Get_Selection_Bound;
737
738   ------------------
739   -- Place_Cursor --
740   ------------------
741
742   procedure Place_Cursor
743     (Buffer : access Gtk_Text_Buffer_Record;
744      Where  : Gtk.Text_Iter.Gtk_Text_Iter)
745   is
746      procedure Internal
747        (Buffer : System.Address;
748         Where  : Gtk.Text_Iter.Gtk_Text_Iter);
749      pragma Import (C, Internal, "gtk_text_buffer_place_cursor");
750
751   begin
752      Internal (Get_Object (Buffer), Where);
753   end Place_Cursor;
754
755   ---------------
756   -- Apply_Tag --
757   ---------------
758
759   procedure Apply_Tag
760     (Buffer  : access Gtk_Text_Buffer_Record;
761      Tag     : access Gtk.Text_Tag.Gtk_Text_Tag_Record'Class;
762      Start   : Gtk.Text_Iter.Gtk_Text_Iter;
763      The_End : Gtk.Text_Iter.Gtk_Text_Iter)
764   is
765      procedure Internal
766        (Buffer  : System.Address;
767         Tag     : System.Address;
768         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
769         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
770      pragma Import (C, Internal, "gtk_text_buffer_apply_tag");
771
772   begin
773      Internal (Get_Object (Buffer), Get_Object (Tag), Start, The_End);
774   end Apply_Tag;
775
776   ----------------
777   -- Remove_Tag --
778   ----------------
779
780   procedure Remove_Tag
781     (Buffer  : access Gtk_Text_Buffer_Record;
782      Tag     : access Gtk.Text_Tag.Gtk_Text_Tag_Record'Class;
783      Start   : Gtk.Text_Iter.Gtk_Text_Iter;
784      The_End : Gtk.Text_Iter.Gtk_Text_Iter)
785   is
786      procedure Internal
787        (Buffer  : System.Address;
788         Tag     : System.Address;
789         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
790         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
791      pragma Import (C, Internal, "gtk_text_buffer_remove_tag");
792   begin
793      Internal (Get_Object (Buffer), Get_Object (Tag), Start, The_End);
794   end Remove_Tag;
795
796   ---------------------
797   -- Remove_All_Tags --
798   ---------------------
799
800   procedure Remove_All_Tags
801     (Buffer  : access Gtk_Text_Buffer_Record;
802      Start    : Gtk.Text_Iter.Gtk_Text_Iter;
803      The_End : Gtk.Text_Iter.Gtk_Text_Iter)
804   is
805      procedure Internal
806        (Buffer  : System.Address;
807         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
808         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
809      pragma Import (C, Internal, "gtk_text_buffer_remove_all_tags");
810   begin
811      Internal (Get_Object (Buffer), Start, The_End);
812   end Remove_All_Tags;
813
814   -----------------------
815   -- Apply_Tag_By_Name --
816   -----------------------
817
818   procedure Apply_Tag_By_Name
819     (Buffer  : access Gtk_Text_Buffer_Record;
820      Name    : String;
821      Start   : Gtk.Text_Iter.Gtk_Text_Iter;
822      The_End : Gtk.Text_Iter.Gtk_Text_Iter)
823   is
824      procedure Internal
825        (Buffer  : System.Address;
826         Name    : String;
827         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
828         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
829      pragma Import (C, Internal, "gtk_text_buffer_apply_tag_by_name");
830
831   begin
832      Internal (Get_Object (Buffer), Name & ASCII.NUL, Start, The_End);
833   end Apply_Tag_By_Name;
834
835   ------------------------
836   -- Remove_Tag_By_Name --
837   ------------------------
838
839   procedure Remove_Tag_By_Name
840     (Buffer  : access Gtk_Text_Buffer_Record;
841      Name    : String;
842      Start   : Gtk.Text_Iter.Gtk_Text_Iter;
843      The_End : Gtk.Text_Iter.Gtk_Text_Iter)
844   is
845      procedure Internal
846        (Buffer  : System.Address;
847         Name    : String;
848         Start   : Gtk.Text_Iter.Gtk_Text_Iter;
849         The_End : Gtk.Text_Iter.Gtk_Text_Iter);
850      pragma Import (C, Internal, "gtk_text_buffer_remove_tag_by_name");
851
852   begin
853      Internal (Get_Object (Buffer), Name & ASCII.NUL, Start, The_End);
854   end Remove_Tag_By_Name;
855
856   -----------------------------
857   -- Get_Iter_At_Line_Offset --
858   -----------------------------
859
860   procedure Get_Iter_At_Line_Offset
861     (Buffer      : access Gtk_Text_Buffer_Record;
862      Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
863      Line_Number : Gint;
864      Char_Offset : Gint := 0)
865   is
866      procedure Internal
867        (Buffer      : System.Address;
868         Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
869         Line_Number : Gint;
870         Char_Offset : Gint);
871      pragma Import (C, Internal, "gtk_text_buffer_get_iter_at_line_offset");
872
873      Result : Boolean;
874   begin
875      --  Prevent critical crashes from gtk+ if Char_Offset is invalid
876      Internal (Get_Object (Buffer), Iter, Line_Number, 0);
877
878      if not Ends_Line (Iter) then
879         Forward_To_Line_End (Iter, Result);
880
881         if Char_Offset <= Get_Line_Offset (Iter) then
882            Internal (Get_Object (Buffer), Iter, Line_Number, Char_Offset);
883         end if;
884      end if;
885   end Get_Iter_At_Line_Offset;
886
887   ----------------------------
888   -- Get_Iter_At_Line_Index --
889   ----------------------------
890
891   procedure Get_Iter_At_Line_Index
892     (Buffer      : access Gtk_Text_Buffer_Record;
893      Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
894      Line_Number : Gint;
895      Byte_Index  : Gint := 0)
896   is
897      procedure Internal
898        (Buffer      : System.Address;
899         Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
900         Line_Number : Gint;
901         Byte_Index  : Gint);
902      pragma Import (C, Internal, "gtk_text_buffer_get_iter_at_line_index");
903
904   begin
905      Internal (Get_Object (Buffer), Iter, Line_Number, Byte_Index);
906   end Get_Iter_At_Line_Index;
907
908   ------------------------
909   -- Get_Iter_At_Offset --
910   ------------------------
911
912   procedure Get_Iter_At_Offset
913     (Buffer      : access Gtk_Text_Buffer_Record;
914      Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
915      Char_Offset : Gint)
916   is
917      procedure Internal
918        (Buffer      : System.Address;
919         Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
920         Char_Offset : Gint);
921      pragma Import (C, Internal, "gtk_text_buffer_get_iter_at_offset");
922
923   begin
924      Internal (Get_Object (Buffer), Iter, Char_Offset);
925   end Get_Iter_At_Offset;
926
927   ----------------------
928   -- Get_Iter_At_Line --
929   ----------------------
930
931   procedure Get_Iter_At_Line
932     (Buffer      : access Gtk_Text_Buffer_Record;
933      Iter        : out Gtk.Text_Iter.Gtk_Text_Iter;
934      Line_Number : Gint)
935   is
936      procedure Internal
937        (Buffer      : System.Address;
938         Iter        : System.Address;
939         Line_Number : Gint);
940      pragma Import (C, Internal, "gtk_text_buffer_get_iter_at_line");
941
942   begin
943      Internal (Get_Object (Buffer), Iter'Address, Line_Number);
944   end Get_Iter_At_Line;
945
946   --------------------
947   -- Get_Start_Iter --
948   --------------------
949
950   procedure Get_Start_Iter
951     (Buffer : access Gtk_Text_Buffer_Record;
952      Iter   : out Gtk.Text_Iter.Gtk_Text_Iter)
953   is
954      procedure Internal
955        (Buffer : System.Address;
956         Iter   : System.Address);
957      pragma Import (C, Internal, "gtk_text_buffer_get_start_iter");
958
959   begin
960      Internal (Get_Object (Buffer), Iter'Address);
961   end Get_Start_Iter;
962
963   ------------------
964   -- Get_End_Iter --
965   ------------------
966
967   procedure Get_End_Iter
968     (Buffer : access Gtk_Text_Buffer_Record;
969      Iter   : out Gtk.Text_Iter.Gtk_Text_Iter)
970   is
971      procedure Internal
972        (Buffer : System.Address;
973         Iter   : System.Address);
974      pragma Import (C, Internal, "gtk_text_buffer_get_end_iter");
975
976   begin
977      Internal (Get_Object (Buffer), Iter'Address);
978   end Get_End_Iter;
979
980   ----------------
981   -- Get_Bounds --
982   ----------------
983
984   procedure Get_Bounds
985     (Buffer  : access Gtk_Text_Buffer_Record;
986      Start   : out Gtk.Text_Iter.Gtk_Text_Iter;
987      The_End : out Gtk.Text_Iter.Gtk_Text_Iter)
988   is
989      procedure Internal
990        (Buffer  : System.Address;
991         Start   : System.Address;
992         The_End : System.Address);
993      pragma Import (C, Internal, "gtk_text_buffer_get_bounds");
994
995   begin
996      Internal (Get_Object (Buffer), Start'Address, The_End'Address);
997   end Get_Bounds;
998
999   ----------------------
1000   -- Get_Iter_At_Mark --
1001   ----------------------
1002
1003   procedure Get_Iter_At_Mark
1004     (Buffer : access Gtk_Text_Buffer_Record;
1005      Iter   : out Gtk.Text_Iter.Gtk_Text_Iter;
1006      Mark   : access Gtk.Text_Mark.Gtk_Text_Mark_Record'Class)
1007   is
1008      procedure Internal
1009        (Buffer : System.Address;
1010         Iter   : System.Address;
1011         Mark   : System.Address);
1012      pragma Import (C, Internal, "gtk_text_buffer_get_iter_at_mark");
1013
1014   begin
1015      Internal (Get_Object (Buffer), Iter'Address, Get_Object (Mark));
1016   end Get_Iter_At_Mark;
1017
1018   ------------------------------
1019   -- Get_Iter_At_Child_Anchor --
1020   ------------------------------
1021
1022   procedure Get_Iter_At_Child_Anchor
1023     (Buffer : access Gtk_Text_Buffer_Record;
1024      Iter   : out Gtk.Text_Iter.Gtk_Text_Iter;
1025      Anchor : access Gtk.Text_Child.Gtk_Text_Child_Anchor_Record'Class)
1026   is
1027      procedure Internal
1028        (Buffer : System.Address;
1029         Iter   : System.Address;
1030         Anchor : System.Address);
1031      pragma Import (C, Internal, "gtk_text_buffer_get_iter_at_child_anchor");
1032
1033   begin
1034      Internal (Get_Object (Buffer), Iter'Address, Get_Object (Anchor));
1035   end Get_Iter_At_Child_Anchor;
1036
1037   ------------------
1038   -- Get_Modified --
1039   ------------------
1040
1041   function Get_Modified
1042     (Buffer : access Gtk_Text_Buffer_Record) return Boolean
1043   is
1044      function Internal (Buffer : System.Address) return Gboolean;
1045      pragma Import (C, Internal, "gtk_text_buffer_get_modified");
1046
1047   begin
1048      return Internal (Get_Object (Buffer)) /= 0;
1049   end Get_Modified;
1050
1051   ------------------
1052   -- Set_Modified --
1053   ------------------
1054
1055   procedure Set_Modified
1056     (Buffer  : access Gtk_Text_Buffer_Record;
1057      Setting : Boolean := True)
1058   is
1059      procedure Internal (Buffer : System.Address; Setting : Gboolean);
1060      pragma Import (C, Internal, "gtk_text_buffer_set_modified");
1061
1062   begin
1063      Internal (Get_Object (Buffer), Boolean'Pos (Setting));
1064   end Set_Modified;
1065
1066   -------------------
1067   -- Cut_Clipboard --
1068   -------------------
1069
1070   procedure Cut_Clipboard
1071     (Buffer           : access Gtk_Text_Buffer_Record;
1072      Clipboard        : Gtk.Clipboard.Gtk_Clipboard;
1073      Default_Editable : Boolean := True)
1074   is
1075      procedure Internal
1076        (Buffer           : System.Address;
1077         Clipboard        : Gtk.Clipboard.Gtk_Clipboard;
1078         Default_Editable : Gboolean);
1079      pragma Import (C, Internal, "gtk_text_buffer_cut_clipboard");
1080
1081   begin
1082      Internal
1083        (Get_Object (Buffer), Clipboard, Boolean'Pos (Default_Editable));
1084   end Cut_Clipboard;
1085
1086   --------------------
1087   -- Copy_Clipboard --
1088   --------------------
1089
1090   procedure Copy_Clipboard
1091     (Buffer     : access Gtk_Text_Buffer_Record;
1092      Clipboard  : Gtk.Clipboard.Gtk_Clipboard)
1093   is
1094      procedure Internal
1095        (Buffer : System.Address; Clipboard : Gtk.Clipboard.Gtk_Clipboard);
1096      pragma Import (C, Internal, "gtk_text_buffer_copy_clipboard");
1097
1098   begin
1099      Internal (Get_Object (Buffer), Clipboard);
1100   end Copy_Clipboard;
1101
1102   ---------------------
1103   -- Paste_Clipboard --
1104   ---------------------
1105
1106   procedure Paste_Clipboard
1107     (Buffer            : access Gtk_Text_Buffer_Record;
1108      Clipboard         : Gtk.Clipboard.Gtk_Clipboard;
1109      Override_Location : Gtk.Text_Iter.Gtk_Text_Iter_Access := null;
1110      Default_Editable  : Boolean := True)
1111   is
1112      procedure Internal
1113        (Buffer            : System.Address;
1114         Clipboard         : Gtk.Clipboard.Gtk_Clipboard;
1115         Override_Location : System.Address;
1116         Default_Editable  : Gboolean);
1117      pragma Import (C, Internal, "gtk_text_buffer_paste_clipboard");
1118
1119   begin
1120      if Override_Location = null then
1121         Internal
1122           (Get_Object (Buffer), Clipboard,
1123            System.Null_Address, Boolean'Pos (Default_Editable));
1124      else
1125         Internal
1126           (Get_Object (Buffer), Clipboard,
1127            Override_Location.all'Address, Boolean'Pos (Default_Editable));
1128      end if;
1129   end Paste_Clipboard;
1130
1131   ----------------------
1132   -- Selection_Exists --
1133   ----------------------
1134
1135   function Selection_Exists
1136     (Buffer : access Gtk_Text_Buffer_Record) return Boolean
1137   is
1138      function Internal
1139        (Buffer  : System.Address;
1140         Start   : System.Address := System.Null_Address;
1141         The_End : System.Address := System.Null_Address) return Gboolean;
1142      pragma Import (C, Internal, "gtk_text_buffer_get_selection_bounds");
1143   begin
1144      return Internal (Get_Object (Buffer)) /= 0;
1145   end Selection_Exists;
1146
1147   --------------------------
1148   -- Get_Selection_Bounds --
1149   --------------------------
1150
1151   procedure Get_Selection_Bounds
1152     (Buffer  : access Gtk_Text_Buffer_Record;
1153      Start   : out Gtk.Text_Iter.Gtk_Text_Iter;
1154      The_End : out Gtk.Text_Iter.Gtk_Text_Iter;
1155      Result  : out Boolean)
1156   is
1157      function Internal
1158        (Buffer  : System.Address;
1159         Start   : System.Address;
1160         The_End : System.Address) return Gboolean;
1161      pragma Import (C, Internal, "gtk_text_buffer_get_selection_bounds");
1162   begin
1163      Result :=
1164        Internal (Get_Object (Buffer), Start'Address, The_End'Address) /= 0;
1165   end Get_Selection_Bounds;
1166
1167   ----------------------
1168   -- Delete_Selection --
1169   ----------------------
1170
1171   function Delete_Selection
1172     (Buffer           : access Gtk_Text_Buffer_Record;
1173      Interactive      : Boolean;
1174      Default_Editable : Boolean) return Boolean
1175   is
1176      function Internal
1177        (Buffer           : System.Address;
1178         Interactive      : Gboolean;
1179         Default_Editable : Gboolean) return Gboolean;
1180      pragma Import (C, Internal, "gtk_text_buffer_delete_selection");
1181
1182   begin
1183      return
1184        Internal
1185          (Get_Object (Buffer),
1186           Boolean'Pos (Interactive),
1187           Boolean'Pos (Default_Editable)) /= 0;
1188   end Delete_Selection;
1189
1190   -----------------------
1191   -- Begin_User_Action --
1192   -----------------------
1193
1194   procedure Begin_User_Action (Buffer : access Gtk_Text_Buffer_Record) is
1195      procedure Internal (Buffer : System.Address);
1196      pragma Import (C, Internal, "gtk_text_buffer_begin_user_action");
1197
1198   begin
1199      Internal (Get_Object (Buffer));
1200   end Begin_User_Action;
1201
1202   ---------------------
1203   -- End_User_Action --
1204   ---------------------
1205
1206   procedure End_User_Action (Buffer : access Gtk_Text_Buffer_Record) is
1207      procedure Internal (Buffer : System.Address);
1208      pragma Import (C, Internal, "gtk_text_buffer_end_user_action");
1209
1210   begin
1211      Internal (Get_Object (Buffer));
1212   end End_User_Action;
1213
1214   ----------------
1215   -- Get_Buffer --
1216   ----------------
1217   function Get_Buffer (Iter : Gtk.Text_Iter.Gtk_Text_Iter)
1218     return Gtk_Text_Buffer
1219   is
1220      function Internal
1221        (Iter : Gtk.Text_Iter.Gtk_Text_Iter) return System.Address;
1222      pragma Import (C, Internal, "gtk_text_iter_get_buffer");
1223      --  External binding: gtk_text_iter_get_buffer
1224      Stub : Gtk_Text_Buffer_Record;
1225   begin
1226      return Gtk_Text_Buffer (Get_User_Data_Fast (Internal (Iter), Stub));
1227   end Get_Buffer;
1228
1229   ----------------
1230   -- Get_Buffer --
1231   ----------------
1232
1233   function Get_Buffer
1234     (Mark : Gtk.Text_Mark.Gtk_Text_Mark) return Gtk_Text_Buffer
1235   is
1236      function Internal (Iter : System.Address) return System.Address;
1237      pragma Import (C, Internal, "gtk_text_mark_get_buffer");
1238      --  External binding: gtk_text_mark_get_buffer
1239      Stub : Gtk_Text_Buffer_Record;
1240   begin
1241      return Gtk_Text_Buffer
1242        (Get_User_Data_Fast (Internal (Get_Object (Mark)), Stub));
1243   end Get_Buffer;
1244
1245   -----------------------------
1246   -- Add_Selection_Clipboard --
1247   -----------------------------
1248
1249   procedure Add_Selection_Clipboard
1250     (Buffer    : access Gtk_Text_Buffer_Record;
1251      Clipboard : Gtk_Clipboard)
1252   is
1253      procedure Internal
1254        (Buffer    : System.Address;
1255         Clipboard : Gtk_Clipboard);
1256      pragma Import (C, Internal, "gtk_text_buffer_add_selection_clipboard");
1257   begin
1258      Internal (Get_Object (Buffer), Clipboard);
1259   end Add_Selection_Clipboard;
1260
1261   --------------------------------
1262   -- Remove_Selection_Clipboard --
1263   --------------------------------
1264
1265   procedure Remove_Selection_Clipboard
1266     (Buffer    : access Gtk_Text_Buffer_Record;
1267      Clipboard : Gtk_Clipboard)
1268   is
1269      procedure Internal
1270        (Buffer    : System.Address;
1271         Clipboard : Gtk_Clipboard);
1272      pragma Import
1273        (C, Internal, "gtk_text_buffer_remove_selection_clipboard");
1274   begin
1275      Internal (Get_Object (Buffer), Clipboard);
1276   end Remove_Selection_Clipboard;
1277
1278   ----------------
1279   -- Create_Tag --
1280   ----------------
1281
1282   function Create_Tag
1283     (Buffer              : access Gtk_Text_Buffer_Record;
1284      Tag_Name            : String := "")
1285      return Gtk_Text_Tag
1286   is
1287      function Internal
1288        (Buffer              : System.Address;
1289         Tag_Name            : Interfaces.C.Strings.chars_ptr)
1290         return System.Address;
1291      pragma Import (C, Internal, "ada_gtk_text_buffer_create_tag");
1292      Stub : Gtk_Text_Tag_Record;
1293      Str  : chars_ptr := String_Or_Null (Tag_Name);
1294      Tag  : Gtk_Text_Tag;
1295   begin
1296      Tag := Gtk_Text_Tag
1297        (Get_User_Data (Internal (Get_Object (Buffer), Str), Stub));
1298      Free (Str);
1299      return Tag;
1300   end Create_Tag;
1301
1302   ---------------
1303   -- Backspace --
1304   ---------------
1305
1306   function Backspace
1307     (Buffer           : access Gtk_Text_Buffer_Record;
1308      Iter             : Gtk.Text_Iter.Gtk_Text_Iter;
1309      Interactive      : Boolean;
1310      Default_Editable : Boolean)
1311      return Boolean
1312   is
1313      function Internal
1314        (Buffer           : System.Address;
1315         Iter             : Gtk_Text_Iter;
1316         Interactive      : Gboolean;
1317         Default_Editable : Gboolean)
1318         return Gboolean;
1319      pragma Import (C, Internal, "gtk_text_buffer_backspace");
1320   begin
1321      return Boolean'Val
1322        (Internal (Get_Object (Buffer), Iter,
1323         Boolean'Pos (Interactive), Boolean'Pos (Default_Editable)));
1324   end Backspace;
1325
1326   ------------------
1327   -- Select_Range --
1328   ------------------
1329
1330   procedure Select_Range
1331     (Buffer : access Gtk_Text_Buffer_Record;
1332      Ins    : Gtk_Text_Iter;
1333      Bound  : Gtk_Text_Iter)
1334   is
1335      procedure Internal
1336        (Buffer : System.Address;
1337         Ins    : Gtk_Text_Iter;
1338         Bound  : Gtk_Text_Iter);
1339      pragma Import (C, Internal, "gtk_text_buffer_select_range");
1340   begin
1341      Internal (Get_Object (Buffer), Ins, Bound);
1342   end Select_Range;
1343
1344end Gtk.Text_Buffer;
1345