summaryrefslogtreecommitdiff
path: root/spec/fltk-text_buffers.ads
diff options
context:
space:
mode:
Diffstat (limited to 'spec/fltk-text_buffers.ads')
-rw-r--r--spec/fltk-text_buffers.ads490
1 files changed, 490 insertions, 0 deletions
diff --git a/spec/fltk-text_buffers.ads b/spec/fltk-text_buffers.ads
new file mode 100644
index 0000000..53b2692
--- /dev/null
+++ b/spec/fltk-text_buffers.ads
@@ -0,0 +1,490 @@
+
+
+-- Programmed by Jedidiah Barber
+-- Released into the public domain
+
+
+private with
+
+ Ada.Containers.Vectors,
+ System.Address_To_Access_Conversions,
+ Interfaces.C.Strings;
+
+
+package FLTK.Text_Buffers is
+
+
+ type Text_Buffer is new Wrapper with private;
+
+ type Text_Buffer_Reference (Data : access Text_Buffer'Class) is limited null record
+ with Implicit_Dereference => Data;
+
+ subtype Position is Natural;
+
+ type Modification is (Insert, Restyle, Delete, None);
+
+ type Modify_Callback is access procedure
+ (Action : in Modification;
+ Place : in Position;
+ Length : in Natural;
+ Deleted_Text : in String);
+
+ type Predelete_Callback is access procedure
+ (Place : in Position;
+ Length : in Natural);
+
+
+
+
+ package Forge is
+
+ function Create
+ (Requested_Size : in Natural := 0;
+ Preferred_Gap_Size : in Natural := 1024)
+ return Text_Buffer;
+
+ end Forge;
+
+
+
+
+ procedure Add_Modify_Callback
+ (This : in out Text_Buffer;
+ Func : in Modify_Callback);
+
+ procedure Add_Predelete_Callback
+ (This : in out Text_Buffer;
+ Func : in Predelete_Callback);
+
+ procedure Remove_Modify_Callback
+ (This : in out Text_Buffer;
+ Func : in Modify_Callback);
+
+ procedure Remove_Predelete_Callback
+ (This : in out Text_Buffer;
+ Func : in Predelete_Callback);
+
+ procedure Call_Modify_Callbacks
+ (This : in out Text_Buffer);
+
+ procedure Call_Predelete_Callbacks
+ (This : in out Text_Buffer);
+
+ procedure Enable_Callbacks
+ (This : in out Text_Buffer);
+
+ procedure Disable_Callbacks
+ (This : in out Text_Buffer);
+
+
+
+
+ procedure Load_File
+ (This : in out Text_Buffer;
+ Name : in String;
+ Buffer : in Natural := 128 * 1024);
+
+ procedure Append_File
+ (This : in out Text_Buffer;
+ Name : in String;
+ Buffer : in Natural := 128 * 1024);
+
+ procedure Insert_File
+ (This : in out Text_Buffer;
+ Name : in String;
+ Place : in Position;
+ Buffer : in Natural := 128 * 1024);
+
+ procedure Output_File
+ (This : in Text_Buffer;
+ Name : in String;
+ Start, Finish : in Position;
+ Buffer : in Natural := 128 * 1024);
+
+ procedure Save_File
+ (This : in Text_Buffer;
+ Name : in String;
+ Buffer : in Natural := 128 * 1024);
+
+
+
+
+ procedure Insert_Text
+ (This : in out Text_Buffer;
+ Place : in Position;
+ Text : in String);
+
+ procedure Append_Text
+ (This : in out Text_Buffer;
+ Text : in String);
+
+ procedure Replace_Text
+ (This : in out Text_Buffer;
+ Start, Finish : in Position;
+ Text : in String);
+
+ procedure Remove_Text
+ (This : in out Text_Buffer;
+ Start, Finish : in Position);
+
+ function Get_Entire_Text
+ (This : in Text_Buffer)
+ return String;
+
+ procedure Set_Entire_Text
+ (This : in out Text_Buffer;
+ Text : in String);
+
+ function Byte_At
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Character;
+
+ function Character_At
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Character;
+
+ function Text_At
+ (This : in Text_Buffer;
+ Start, Finish : in Position)
+ return String;
+
+ function Next_Char
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Character;
+
+ function Prev_Char
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Character;
+
+
+
+
+ function Count_Displayed_Characters
+ (This : in Text_Buffer;
+ Start, Finish : in Position)
+ return Integer;
+
+ function Count_Lines
+ (This : in Text_Buffer;
+ Start, Finish : in Position)
+ return Integer;
+
+ function Length
+ (This : in Text_Buffer)
+ return Natural;
+
+ function Get_Tab_Width
+ (This : in Text_Buffer)
+ return Natural;
+
+ procedure Set_Tab_Width
+ (This : in out Text_Buffer;
+ To : in Natural);
+
+
+
+
+ function Get_Selection
+ (This : in Text_Buffer;
+ Start, Finish : out Position)
+ return Boolean;
+
+ function Get_Secondary_Selection
+ (This : in Text_Buffer;
+ Start, Finish : out Position)
+ return Boolean;
+
+ procedure Set_Selection
+ (This : in out Text_Buffer;
+ Start, Finish : in Position);
+
+ procedure Set_Secondary_Selection
+ (This : in out Text_Buffer;
+ Start, Finish : in Position);
+
+ function Has_Selection
+ (This : in Text_Buffer)
+ return Boolean;
+
+ function Has_Secondary_Selection
+ (This : in Text_Buffer)
+ return Boolean;
+
+ function Selection_Text
+ (This : in Text_Buffer)
+ return String;
+
+ function Secondary_Selection_Text
+ (This : in Text_Buffer)
+ return String;
+
+ procedure Replace_Selection
+ (This : in out Text_Buffer;
+ Text : in String);
+
+ procedure Replace_Secondary_Selection
+ (This : in out Text_Buffer;
+ Text : in String);
+
+ procedure Remove_Selection
+ (This : in out Text_Buffer);
+
+ procedure Remove_Secondary_Selection
+ (This : in out Text_Buffer);
+
+ procedure Unselect
+ (This : in out Text_Buffer);
+
+ procedure Secondary_Unselect
+ (This : in out Text_Buffer);
+
+
+
+
+ procedure Get_Highlight
+ (This : in Text_Buffer;
+ Start, Finish : out Position);
+
+ procedure Set_Highlight
+ (This : in out Text_Buffer;
+ Start, Finish : in Position);
+
+ function Get_Highlighted_Text
+ (This : in Text_Buffer)
+ return String;
+
+ procedure Unhighlight
+ (This : in out Text_Buffer);
+
+
+
+
+ function Findchar_Forward
+ (This : in Text_Buffer;
+ Start_At : in Position;
+ Item : in Character;
+ Found_At : out Position)
+ return Boolean;
+
+ function Findchar_Backward
+ (This : in Text_Buffer;
+ Start_At : in Position;
+ Item : in Character;
+ Found_At : out Position)
+ return Boolean;
+
+ function Search_Forward
+ (This : in Text_Buffer;
+ Start_At : in Position;
+ Item : in String;
+ Found_At : out Position;
+ Match_Case : in Boolean := False)
+ return Boolean;
+
+ function Search_Backward
+ (This : in Text_Buffer;
+ Start_At : in Position;
+ Item : in String;
+ Found_At : out Position;
+ Match_Case : in Boolean := False)
+ return Boolean;
+
+
+
+
+ function Word_Start
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Position;
+
+ function Word_End
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Position;
+
+ function Line_Start
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Position;
+
+ function Line_End
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Position;
+
+ function Line_Text
+ (This : in Text_Buffer;
+ Place : in Position)
+ return String;
+
+ -- only takes into account newline characters, not word wrap
+ function Skip_Lines
+ (This : in out Text_Buffer;
+ Start : in Position;
+ Lines : in Natural)
+ return Position;
+
+ -- only takes into account newline characters, not word wrap
+ function Rewind_Lines
+ (This : in out Text_Buffer;
+ Start : in Position;
+ Lines : in Natural)
+ return Position;
+
+ function Skip_Displayed_Characters
+ (This : in Text_Buffer;
+ Start : in Position;
+ Chars : in Natural)
+ return Position;
+
+
+
+
+ procedure Can_Undo
+ (This : in out Text_Buffer;
+ Flag : in Boolean);
+
+ procedure Copy
+ (This : in out Text_Buffer;
+ From : in Text_Buffer;
+ Start, Finish : in Position;
+ Insert_Pos : in Position);
+
+ function UTF8_Align
+ (This : in Text_Buffer;
+ Place : in Position)
+ return Position;
+
+
+private
+
+
+ package Modify_Vectors is new Ada.Containers.Vectors
+ (Index_Type => Positive,
+ Element_Type => Modify_Callback);
+ package Predelete_Vectors is new Ada.Containers.Vectors
+ (Index_Type => Positive,
+ Element_Type => Predelete_Callback);
+
+
+
+
+ type Text_Buffer is new Wrapper with
+ record
+ CB_Active : Boolean := True;
+ Modify_CBs : Modify_Vectors.Vector;
+ Predelete_CBs : Predelete_Vectors.Vector;
+ High_From, High_To : Natural := 0;
+ end record;
+
+ overriding procedure Finalize
+ (This : in out Text_Buffer);
+
+
+
+
+ procedure Modify_Callback_Hook
+ (Pos, Inserted, Deleted, Restyled : in Interfaces.C.int;
+ Text : in Interfaces.C.Strings.chars_ptr;
+ UD : in Storage.Integer_Address);
+ pragma Convention (C, Modify_Callback_Hook);
+
+ procedure Predelete_Callback_Hook
+ (Pos, Deleted : in Interfaces.C.int;
+ UD : in Storage.Integer_Address);
+ pragma Convention (C, Predelete_Callback_Hook);
+
+
+
+
+ package Text_Buffer_Convert is new System.Address_To_Access_Conversions (Text_Buffer);
+
+
+
+
+ pragma Inline (Add_Modify_Callback);
+ pragma Inline (Add_Predelete_Callback);
+ pragma Inline (Remove_Modify_Callback);
+ pragma Inline (Remove_Predelete_Callback);
+ pragma Inline (Call_Modify_Callbacks);
+ pragma Inline (Call_Predelete_Callbacks);
+ pragma Inline (Enable_Callbacks);
+ pragma Inline (Disable_Callbacks);
+
+
+ pragma Inline (Load_File);
+ pragma Inline (Append_File);
+ pragma Inline (Insert_File);
+ pragma Inline (Output_File);
+ pragma Inline (Save_File);
+
+
+ pragma Inline (Insert_Text);
+ pragma Inline (Append_Text);
+ pragma Inline (Replace_Text);
+ pragma Inline (Remove_Text);
+ pragma Inline (Get_Entire_Text);
+ pragma Inline (Set_Entire_Text);
+ pragma Inline (Byte_At);
+ pragma Inline (Character_At);
+ pragma Inline (Text_At);
+ pragma Inline (Next_Char);
+ pragma Inline (Prev_Char);
+
+
+ pragma Inline (Count_Displayed_Characters);
+ pragma Inline (Count_Lines);
+ pragma Inline (Length);
+ pragma Inline (Get_Tab_Width);
+ pragma Inline (Set_Tab_Width);
+
+
+ pragma Inline (Get_Selection);
+ pragma Inline (Get_Secondary_Selection);
+ pragma Inline (Set_Selection);
+ pragma Inline (Set_Secondary_Selection);
+ pragma Inline (Has_Selection);
+ pragma Inline (Has_Secondary_Selection);
+ pragma Inline (Selection_Text);
+ pragma Inline (Secondary_Selection_Text);
+ pragma Inline (Replace_Selection);
+ pragma Inline (Replace_Secondary_Selection);
+ pragma Inline (Remove_Selection);
+ pragma Inline (Remove_Secondary_Selection);
+ pragma Inline (Unselect);
+ pragma Inline (Secondary_Unselect);
+
+
+ pragma Inline (Get_Highlight);
+ pragma Inline (Set_Highlight);
+ pragma Inline (Get_Highlighted_Text);
+ pragma Inline (Unhighlight);
+
+
+ pragma Inline (Findchar_Forward);
+ pragma Inline (Findchar_Backward);
+ pragma Inline (Search_Forward);
+ pragma Inline (Search_Backward);
+
+
+ pragma Inline (Word_Start);
+ pragma Inline (Word_End);
+ pragma Inline (Line_Start);
+ pragma Inline (Line_End);
+ pragma Inline (Line_Text);
+ pragma Inline (Skip_Lines);
+ pragma Inline (Rewind_Lines);
+ pragma Inline (Skip_Displayed_Characters);
+
+
+ pragma Inline (Can_Undo);
+ pragma Inline (Copy);
+ pragma Inline (UTF8_Align);
+
+
+end FLTK.Text_Buffers;
+