lace.text.cursor: Add 'match_Case' parameters.

This commit is contained in:
Rod Kay
2022-08-16 14:31:32 +10:00
parent 147b7ae4c4
commit dd7b02578f
2 changed files with 35 additions and 23 deletions

View File

@@ -2,7 +2,10 @@ with
ada.Characters.latin_1, ada.Characters.latin_1,
ada.Characters.handling, ada.Characters.handling,
ada.Strings.fixed, ada.Strings.fixed,
ada.Strings.Maps; ada.Strings.Maps.Constants;
-- with ada.text_IO; use ada.Text_IO;
package body lace.text.Cursor package body lace.text.Cursor
is is
@@ -46,7 +49,7 @@ is
procedure advance (Self : in out Item; Delimiter : in String := " "; procedure advance (Self : in out Item; Delimiter : in String := " ";
Repeat : in Natural := 0; Repeat : in Natural := 0;
skip_Delimiter : in Boolean := True; skip_Delimiter : in Boolean := True;
Case_sensitive : in Boolean := True) match_Case : in Boolean := True)
is is
begin begin
for Count in 1 .. Repeat + 1 for Count in 1 .. Repeat + 1
@@ -55,7 +58,7 @@ is
use ada.Characters.handling; use ada.Characters.handling;
delimiter_Position : Natural; delimiter_Position : Natural;
begin begin
if Case_sensitive if match_Case
then then
delimiter_Position := fixed.Index (Self.Target.Data (1 .. Self.Target.Length), delimiter_Position := fixed.Index (Self.Target.Data (1 .. Self.Target.Length),
Delimiter, Delimiter,
@@ -98,7 +101,6 @@ is
begin begin
while has_Element (Self) while has_Element (Self)
and then ( Self.Target.Data (Self.Current) = ' ' and then ( Self.Target.Data (Self.Current) = ' '
or Self.Target.Data (Self.Current) = ada.Characters.Latin_1.CR
or Self.Target.Data (Self.Current) = ada.Characters.Latin_1.LF or Self.Target.Data (Self.Current) = ada.Characters.Latin_1.LF
or Self.Target.Data (Self.Current) = ada.Characters.Latin_1.HT) or Self.Target.Data (Self.Current) = ada.Characters.Latin_1.HT)
loop loop
@@ -126,9 +128,12 @@ is
end next_Token; end next_Token;
function next_Token (Self : in out item; Delimiter : in String;
Trim : in Boolean := False) return String function next_Token (Self : in out item; Delimiter : in String;
match_Case : in Boolean := True;
Trim : in Boolean := False) return String
is is
use ada.Characters.handling;
begin begin
if at_End (Self) if at_End (Self)
then then
@@ -136,9 +141,13 @@ is
end if; end if;
declare declare
use ada.Strings.fixed; use ada.Strings.fixed,
delimiter_Position : constant Natural := Index (Self.Target.Data, Delimiter, from => Self.Current); ada.Strings.Maps.Constants;
delimiter_Position : constant Natural := (if match_Case then Index (Self.Target.Data, Delimiter, from => Self.Current)
else Index (Self.Target.Data, to_Lower (Delimiter), from => Self.Current, mapping => lower_case_Map));
begin begin
-- put_Line ("delimiter_Position" & delimiter_Position'Image);
if delimiter_Position = 0 if delimiter_Position = 0
then then
return the_Token : constant String := (if Trim then fixed.Trim (Self.Target.Data (Self.Current .. Self.Target.Length), Both) return the_Token : constant String := (if Trim then fixed.Trim (Self.Target.Data (Self.Current .. Self.Target.Length), Both)
@@ -158,25 +167,25 @@ is
function next_Line (Self : in out item; Trim : in Boolean := False) return String function next_Line (Self : in out Item; Trim : in Boolean := False) return String
is is
use ada.Characters; use ada.Characters;
Token : constant String := next_Token (Self, Delimiter => latin_1.LF, Token : constant String := next_Token (Self, Delimiter => latin_1.LF,
Trim => Trim); Trim => Trim);
Pad : constant String := Token; --(if Token (Token'Last) = latin_1.CR then Token (Token'First .. Token'Last - 1)
-- else Token);
begin begin
if Token (Token'Last) = latin_1.CR if Trim then return fixed.Trim (Pad, Both);
then else return Pad;
return Token (Token'First .. Token'Last - 1);
else
return Token;
end if; end if;
end next_Line; end next_Line;
procedure skip_Token (Self : in out Item; Delimiter : in String := " ") procedure skip_Token (Self : in out Item; Delimiter : in String := " ";
match_Case : in Boolean := True)
is is
ignored_Token : String := Self.next_Token (Delimiter); ignored_Token : String := Self.next_Token (Delimiter, match_Case);
begin begin
null; null;
end skip_Token; end skip_Token;

View File

@@ -21,21 +21,24 @@ is
function has_Element (Self : in Item) return Boolean; function has_Element (Self : in Item) return Boolean;
function next_Token (Self : in out item; Delimiter : in Character := ' '; function next_Token (Self : in out item; Delimiter : in Character := ' ';
Trim : in Boolean := False) return String; Trim : in Boolean := False) return String;
function next_Token (Self : in out item; Delimiter : in String; function next_Token (Self : in out item; Delimiter : in String;
Trim : in Boolean := False) return String; match_Case : in Boolean := True;
Trim : in Boolean := False) return String;
function next_Line (Self : in out item; Trim : in Boolean := False) return String; function next_Line (Self : in out item; Trim : in Boolean := False) return String;
procedure skip_Token (Self : in out Item; Delimiter : in String := " ";
match_Case : in Boolean := True);
procedure skip_Token (Self : in out Item; Delimiter : in String := " ");
procedure skip_White (Self : in out Item); procedure skip_White (Self : in out Item);
procedure skip_Line (Self : in out Item); procedure skip_Line (Self : in out Item);
procedure advance (Self : in out Item; Delimiter : in String := " "; procedure advance (Self : in out Item; Delimiter : in String := " ";
Repeat : in Natural := 0; Repeat : in Natural := 0;
skip_Delimiter : in Boolean := True; skip_Delimiter : in Boolean := True;
Case_sensitive : in Boolean := True); match_Case : in Boolean := True);
-- --
-- Search begins at the cursors current position. -- Search begins at the cursors current position.
-- Advances to the position immediately after Delimiter. -- Advances to the position immediately after Delimiter.