summaryrefslogtreecommitdiff
path: root/misc/scanners.ads
diff options
context:
space:
mode:
Diffstat (limited to 'misc/scanners.ads')
-rw-r--r--misc/scanners.ads62
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;
+