diff options
Diffstat (limited to 'misc/scanners.ads')
-rw-r--r-- | misc/scanners.ads | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/misc/scanners.ads b/misc/scanners.ads new file mode 100644 index 0000000..4168fef --- /dev/null +++ b/misc/scanners.ads @@ -0,0 +1,62 @@ + +with Ada.Characters.Latin_1; +private with Ada.Strings.Unbounded, Ada.Strings.Maps; + +package Scanners is + + -- This package roughly corresponds to + -- the Java StringTokenizer class. + + -- At the moment the most significant difference + -- is that the Next_Token function does not raise + -- an exception if there are no tokens to return. + --- Instead, it returns an empty string. + + type Scanner is tagged private; + + Default_Delimiters : constant String := + Ada.Characters.Latin_1.HT & + Ada.Characters.Latin_1.LF & + Ada.Characters.Latin_1.FF & + Ada.Characters.Latin_1.CR & " "; + + function Create + (Input : in String; + Delimiters : in String := Default_Delimiters; + Return_Delims : in Boolean := False) + return Scanner; + + function Has_More_Tokens + (This : in Scanner) + return Boolean; + + function Next_Token + (This : in out Scanner) + return String; + + function Remaining_Token_Count + (This : in Scanner) + return Natural; + + procedure Reset + (This : in out Scanner); + +private + + package UB renames Ada.Strings.Unbounded; + package SM renames Ada.Strings.Maps; + + Default_Delimiter_Set : constant SM.Character_Set := + SM.To_Set (Default_Delimiters); + + type Scanner is tagged record + Text : UB.Unbounded_String := UB.Null_Unbounded_String; + Position : Positive := 1; + Next_Start : Positive := 1; + Next_Finish : Natural := 0; + Delimiters : SM.Character_Set := SM.Null_Set; + Return_Delims : Boolean := False; + end record; + +end Scanners; + |