summaryrefslogtreecommitdiff
path: root/src/packrat-errors-parts.adb
diff options
context:
space:
mode:
authorJed Barber <jjbarber@y7mail.com>2019-01-09 14:43:25 +1100
committerJed Barber <jjbarber@y7mail.com>2019-01-09 14:43:25 +1100
commit11f3f26e877210b88f1cadfe2c26d67b4530039c (patch)
tree6227ef33a6cc55e9856a4553c6c2c1acfb81542b /src/packrat-errors-parts.adb
parent2912e22000bff5b83b77daeb2b5ed111c47268b8 (diff)
Packrat.Errors functionality complete and tested
Diffstat (limited to 'src/packrat-errors-parts.adb')
-rw-r--r--src/packrat-errors-parts.adb95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/packrat-errors-parts.adb b/src/packrat-errors-parts.adb
new file mode 100644
index 0000000..5ad3482
--- /dev/null
+++ b/src/packrat-errors-parts.adb
@@ -0,0 +1,95 @@
+
+
+with
+
+ Ada.Strings.Fixed,
+ Ada.Strings.Maps;
+
+use type
+
+ Ada.Strings.Maps.Character_Set;
+
+
+separate (Packrat.Errors)
+package body Parts is
+
+
+ package Str renames Ada.Strings;
+ package Fix renames Ada.Strings.Fixed;
+ package Map renames Ada.Strings.Maps;
+
+
+ ID_Start, ID_Finish : Positive := 1;
+ Pos_Start, Pos_Finish : Positive := 1;
+ Error_Count : Natural := Fix.Count (Message, Map.To_Set ('s'));
+
+
+ Letter_Range : Map.Character_Range := ('A', 'Z');
+ Digit_Range : Map.Character_Range := ('0', '9');
+ ID_Set : Map.Character_Set := Map.To_Set (Letter_Range) or Map.To_Set ('_');
+ Pos_Set : Map.Character_Set := Map.To_Set (Digit_Range);
+
+
+ function Length
+ return Natural is
+ begin
+ return Error_Count;
+ end Length;
+
+
+ procedure Reset_Position is
+ begin
+ ID_Start := 1;
+ ID_Finish := 1;
+ Pos_Start := 1;
+ Pos_Finish := 1;
+ end Reset_Position;
+
+
+ procedure Set_Position
+ (To : in Positive) is
+ begin
+ ID_Start := To;
+ ID_Finish := To;
+ Pos_Start := To;
+ Pos_Finish := To;
+ end Set_Position;
+
+
+ procedure Next_ID_Token
+ (Start : out Positive;
+ Finish : out Natural) is
+ begin
+ Fix.Find_Token (Message, ID_Set, Pos_Finish, Str.Inside, ID_Start, ID_Finish);
+ Start := ID_Start;
+ Finish := ID_Finish;
+ Pos_Finish := ID_Finish;
+ end Next_ID_Token;
+
+
+ procedure Next_Pos_Token
+ (Start : out Positive;
+ Finish : out Natural) is
+ begin
+ Fix.Find_Token (Message, Pos_Set, ID_Finish, Str.Inside, Pos_Start, Pos_Finish);
+ Start := Pos_Start;
+ Finish := Pos_Finish;
+ ID_Finish := Pos_Finish;
+ end Next_Pos_Token;
+
+
+ procedure Next_Full_Token
+ (Start : out Positive;
+ Finish : out Natural)
+ is
+ Dummy : Natural;
+ begin
+ Next_ID_Token (Start, Dummy);
+ Next_Pos_Token (Dummy, Finish);
+ Start := Start - 1;
+ end Next_Full_Token;
+
+
+end Parts;
+
+