uxstrings_0.8.1_a5285934/tests/test_uxstrings4a.adb

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
with UXStrings;   use UXStrings;
with UXStrings.Text_IO; use UXStrings.Text_IO;
with UXStrings.Conversions;
with UXStrings.Hash;
with UXStrings.Formatting;
with UXStrings.Lists;
with Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
with Ada.Characters.Conversions;

procedure Test_UXStrings4a is

   function Image is new UXStrings.Conversions.Scalar_Image (Boolean);
   function Image is new UXStrings.Conversions.Integer_Image (Integer);
   function Value is new UXStrings.Conversions.Integer_Value (Integer);

   function Format is new UXStrings.Formatting.Integer_Format (Natural);
   use all type UXStrings.Formatting.Alignment;

   procedure Send (Msg : UTF_8_Character_Array) is
   begin
      for Code of Msg loop
         Put (Image(Character'pos (Code), 16));
      end loop;
      New_Line;
   end;
   function Receive return UTF_8_Character_Array is (To_UTF_8("données"));

   generic
      with function Character_Mapping (From : Unicode_Character) return Unicode_Character;
   procedure Translate (Source : in out UXString);

   procedure Translate (Source : in out UXString) is
   begin
      Source := From_Unicode((for C of Source =>  Character_Mapping(C)));
   end;

   S1, S2, S3 : UXString;
   C          : Character;
   WC         : Wide_Character;
   WWC        : Wide_Wide_Character;
   F          : Boolean;
   D : constant array (Positive range <>) of Natural := (16#0075#, 16#003E#, 16#30E3#, 16#03A3#);
   Data : constant BMP_Character_array := (for I in D'Range => BMP_Character'val (D(I)));

   UXSL1 : constant UXStrings.Lists.UXString_List := ["Ada", "Strings", "Wide_Wide_Maps", "Wide_Wide_Constants", "Lower_Case_Map"];
   S4 : constant UXString := "Ada.Strings.Wide_Wide_Maps.Is_Subset(Item, My_Set)";
   S5 : constant UXString := "/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/Current/lib/libpython3.9.dylib";

begin
   -- Change the default to LF and UTF-8
   Ending (Current_Output, LF_Ending);
   Line_Mark (LF_Ending);
   Scheme (Current_Output, UTF_8);

   S1 := From_Latin_1 ("était blah blah");
   S2 := From_BMP ("une soirée passée à étudier la physique ω=Δθ/Δt...");
   S3 := From_Unicode ("une soirée passée à étudier les mathématiques ℕ⊂𝕂...");
   Put_Line (S1 & Line_Mark & S2 & Line_Mark & S3);
   Send (To_UTF_8 (S1) & To_UTF_8 (S3));
   S2  := "Received: " & From_UTF_8 (Receive);
   S3 := S1 & " - Sent ok";
   Put_Line (S1 & Line_Mark & S2 & Line_Mark & S3);
   S1 := 4*'.';
   S2 := From_BMP (Data);
   S3 := 4*'.';
   for I in Data'Range loop
      S3(I) := Ada.Characters.Conversions.to_wide_wide_character(Data (I));
   end loop;
   Put_Line (S1 & Line_Mark & S2 & Line_Mark & S3);
   S1 := "était blah blah";
   S2 := "une soirée passée à étudier la physique ω=Δθ/Δt...";
   S3 := "une soirée passée à étudier les mathématiques ℕ⊂𝕂...";
   Put_Line (S1 & Line_Mark & S2 & Line_Mark & S3);
   Put_Line (Image(Index (S1, "ée")) & Image(Index (S2, "ée"),prefix=> ' ') & Image(index (S3, "ée", 10),prefix =>' '));
   C   := S1.Get_Latin_1 (5);
   WC  := S1.Get_BMP (7);
   WWC := S1 (1);
   Put_Line (Image(Character'pos (C), 16) & ',' & Image(Wide_Character'pos (WC), 16)  & ','& Image(Wide_Wide_Character'pos (WWC), 16));
   for I in S3.Iterate loop
      F   := S3.Get_Latin_1 (UXString_Vector.to_index(I)) = 'é';
      if F then
         S3(I) := 'e';
      end if;
      WWC := S3 (I);
      Put_Line (Image(UXString_Vector.to_index(I)) & ':' & Image(Wide_Wide_Character'pos (WWC), 16) & ',' & Image(F));
   end loop;
   Put_Line (S3);
   for CC of S2 loop
      WWC := CC;
      F   := CC = 'é';
      Put_Line (Image(Wide_Wide_Character'pos (WWC), 16)  & ','& Image(F));
   end loop;
   Replace_Unicode (S1 ,3, WWC);
   S1.Replace_BMP (2, WC);
   S1.Replace_Latin_1 (1, C);
   S1 (4) := 'Z';
   Put_Line (S1);
   if S1 /= "test" then
      S1 := Null_UXString;
      S2 := 2 * 'z';
      S3 := 4 * "po";
   end if;
   S3 := "Riri";
   S2 := "Loulou";
   S1 := " et Fifi";
   S2.Append (S1);
   S1.Prepend(S3);
   Put_Line (S1 & Line_Mark & S2 & Line_Mark & S3);
   Put_Line (Image(Integer(UXStrings.Hash(S1)),16));
   Put_Line (Image (Value("  + 73")));
   C := S1.To_Latin_1 (3);
   Put_Line (Image(Character'pos (C), 16));
   C := S1.Get_Latin_1 (3); -- same result but avoid all string conversion
   Put_Line (Image(Character'pos (C), 16));
   Put_Line (Format (5, 2, True, 10, Center, '@'));

   Put_Line (Image(S1.Contains ("Riri")));
   Put_Line (Image(S1.Contains ("et", Insensitive)));
   Put_Line (Image(S2.Contains ("Riri")));
   Put_Line (Image(S2.Count ("lo", Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants.Lower_Case_Map)));
   Put_Line (Image(S2.Ends_With ("Fifi")));
   Put_Line (Image(S3.Ends_With ("Loulou")));
   Put_Line (Image(S3.Starts_With ("riri", Insensitive)));
   Put_Line (Image(S2.Is_Lower ));
   Put_Line (Image(S2.Is_Upper) );
   Put_Line (Image(S2.Is_Basic ));
   Put_Line (Image(S2.Is_Empty ));
   Put_Line (S2.Remove ("ou"));
   Put_Line (S2.Remove ("fi", Insensitive) & '.');
   Put_Line (S2.Replace ("lou", "Coin", Insensitive));

   for E of UXSL1 loop
      Put_Line (E);
   end loop;
   for E of S4.Split(Ada.Strings.Wide_Wide_Maps.To_Set(".(,) "), Keep_Empty_Parts => False).Sort loop
      Put_Line (E);
   end loop;
   Put_Line (UXSL1.Join ('-').To_Lower);
   for E of S5.Split('/').Filter ("py", Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants.Lower_Case_Map) loop
      Put_Line (E);
   end loop;

   declare
      use UXStrings.Formatting;
      A : constant Formatted_UXString := Format ("Valeurs %X %s %c") & 22 & True & 'e';
      My_Format : constant Formatted_UXString := Format ("%s");
   begin
      Put_Line (From (Format ("%s : %E") & "a well known float" & Float'(3.14)));
      Put_Line (From (My_Format & "a string"));
      Put_Line (From (A));
   end;

   declare
      use UXStrings.Formatting;
      F : Formatted_UXString := Format ("['%c' ; %10d]");
      C : constant Character := 'v';
      I : constant Integer   := 98;
   begin
      F := F & C & I;
      Put_Line (From (F));
   end;

   Put_Line ("--end--");
end Test_UXStrings4a;