From 4b2b1c8d6e85760bc2d5f65f52a122a2ea1e542d Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Sun, 13 Nov 2016 22:23:47 +1100 Subject: Added find next and find previous --- fltk-text_buffers.adb | 70 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) (limited to 'fltk-text_buffers.adb') diff --git a/fltk-text_buffers.adb b/fltk-text_buffers.adb index 5db105d..6ff5b55 100644 --- a/fltk-text_buffers.adb +++ b/fltk-text_buffers.adb @@ -79,11 +79,26 @@ package body FLTK.Text_Buffers is return Interfaces.C.int; pragma Import (C, fl_text_buffer_search_forward, "fl_text_buffer_search_forward"); + function fl_text_buffer_search_backward + (TB : in System.Address; + SP : in Interfaces.C.int; + IT : in Interfaces.C.char_array; + FP : out Interfaces.C.int; + CA : in Interfaces.C.int) + return Interfaces.C.int; + pragma Import (C, fl_text_buffer_search_backward, "fl_text_buffer_search_backward"); + procedure fl_text_buffer_select (TB : in System.Address; S, E : in Interfaces.C.int); pragma Import (C, fl_text_buffer_select, "fl_text_buffer_select"); + function fl_text_buffer_selection_position + (TB : in System.Address; + S, E : out Interfaces.C.int) + return Interfaces.C.int; + pragma Import (C, fl_text_buffer_selection_position, "fl_text_buffer_selection_position"); + function fl_text_buffer_skip_lines (TB : in System.Address; S, L : in Interfaces.C.int) @@ -327,8 +342,7 @@ package body FLTK.Text_Buffers is Match_Case : in Boolean) return Boolean is - Found_Raw : Interfaces.C.int; - Result : Interfaces.C.int; + Found_Raw, Result : Interfaces.C.int; begin Result := fl_text_buffer_search_forward (This.Void_Ptr, @@ -336,13 +350,40 @@ package body FLTK.Text_Buffers is Interfaces.C.To_C (Item), Found_Raw, Boolean'Pos (Match_Case)); - Found_At := Natural (Found_Raw); - return Boolean'Val (Result); + if Result /= 0 then + Found_At := Natural (Found_Raw); + end if; + return Result /= 0; end Search_Forward; + function Search_Backward + (This : in Text_Buffer; + Start_At : in Natural; + Item : in String; + Found_At : out Natural; + Match_Case : in Boolean) + return Boolean + is + Found_Raw, Result : Interfaces.C.int; + begin + Result := fl_text_buffer_search_backward + (This.Void_Ptr, + Interfaces.C.int (Start_At), + Interfaces.C.To_C (Item), + Found_Raw, + Boolean'Pos (Match_Case)); + if Result /= 0 then + Found_At := Natural (Found_Raw); + end if; + return Result /= 0; + end Search_Backward; + + + + procedure Set_Selection (This : in out Text_Buffer; Start, Finish : in Natural) is @@ -356,6 +397,27 @@ package body FLTK.Text_Buffers is + function Get_Selection + (This : in Text_Buffer; + Start, Finish : out Natural) + return Boolean + is + Result, Start_Raw, Finish_Raw : Interfaces.C.int; + begin + Result := fl_text_buffer_selection_position + (This.Void_Ptr, + Start_Raw, + Finish_Raw); + if Result /= 0 then + Start := Natural (Start_Raw); + Finish := Natural (Finish_Raw); + end if; + return Result /= 0; + end Get_Selection; + + + + function Skip_Lines (This : in out Text_Buffer; Start, Lines : in Natural) -- cgit