1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT RUN-TIME COMPONENTS                         --
4--                                                                          --
5--          A D A . S T R I N G S . W I D E _ W I D E _ F I X E D           --
6--                                                                          --
7--                                 S p e c                                  --
8--                                                                          --
9-- This specification is derived from the Ada Reference Manual for use with --
10-- GNAT.  In accordance with the copyright of that document, you can freely --
11-- copy and modify this specification,  provided that if you redistribute a --
12-- modified version,  any changes that you have made are clearly indicated. --
13--                                                                          --
14------------------------------------------------------------------------------
15
16with Ada.Strings.Wide_Wide_Maps;
17
18package Ada.Strings.Wide_Wide_Fixed is
19   pragma Preelaborate;
20
21   ------------------------------------------------------------------------
22   -- Copy Procedure for Wide_Wide_Strings of Possibly Different Lengths --
23   ------------------------------------------------------------------------
24
25   procedure Move
26     (Source  : Wide_Wide_String;
27      Target  : out Wide_Wide_String;
28      Drop    : Truncation := Error;
29      Justify : Alignment  := Left;
30      Pad     : Wide_Wide_Character  := Ada.Strings.Wide_Wide_Space);
31
32   ------------------------
33   -- Search Subprograms --
34   ------------------------
35
36   function Index
37     (Source  : Wide_Wide_String;
38      Pattern : Wide_Wide_String;
39      Going   : Direction := Forward;
40      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
41                  Wide_Wide_Maps.Identity) return Natural;
42
43   function Index
44     (Source  : Wide_Wide_String;
45      Pattern : Wide_Wide_String;
46      Going   : Direction := Forward;
47      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
48      return Natural;
49
50   function Index
51     (Source : Wide_Wide_String;
52      Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
53      Test   : Membership := Inside;
54      Going  : Direction  := Forward) return Natural;
55
56   function Index
57     (Source  : Wide_Wide_String;
58      Pattern : Wide_Wide_String;
59      From    : Positive;
60      Going   : Direction := Forward;
61      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
62                  Wide_Wide_Maps.Identity)
63      return Natural;
64   pragma Ada_05 (Index);
65
66   function Index
67     (Source  : Wide_Wide_String;
68      Pattern : Wide_Wide_String;
69      From    : Positive;
70      Going   : Direction := Forward;
71      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
72      return Natural;
73   pragma Ada_05 (Index);
74
75   function Index
76     (Source  : Wide_Wide_String;
77      Set     : Wide_Wide_Maps.Wide_Wide_Character_Set;
78      From    : Positive;
79      Test    : Membership := Inside;
80      Going   : Direction := Forward) return Natural;
81   pragma Ada_05 (Index);
82
83   function Index_Non_Blank
84     (Source : Wide_Wide_String;
85      Going  : Direction := Forward) return Natural;
86
87   function Index_Non_Blank
88     (Source : Wide_Wide_String;
89      From   : Positive;
90      Going  : Direction := Forward) return Natural;
91   pragma Ada_05 (Index_Non_Blank);
92
93   function Count
94     (Source  : Wide_Wide_String;
95      Pattern : Wide_Wide_String;
96      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping :=
97                  Wide_Wide_Maps.Identity)
98      return Natural;
99
100   function Count
101     (Source  : Wide_Wide_String;
102      Pattern : Wide_Wide_String;
103      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
104      return Natural;
105
106   function Count
107     (Source : Wide_Wide_String;
108      Set    : Wide_Wide_Maps.Wide_Wide_Character_Set) return Natural;
109
110   procedure Find_Token
111     (Source : Wide_Wide_String;
112      Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
113      From   : Positive;
114      Test   : Membership;
115      First  : out Positive;
116      Last   : out Natural);
117   pragma Ada_2012 (Find_Token);
118
119   procedure Find_Token
120     (Source : Wide_Wide_String;
121      Set    : Wide_Wide_Maps.Wide_Wide_Character_Set;
122      Test   : Membership;
123      First  : out Positive;
124      Last   : out Natural);
125
126   ----------------------------------------------
127   -- Wide_Wide_String Translation Subprograms --
128   ----------------------------------------------
129
130   function Translate
131     (Source  : Wide_Wide_String;
132      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping)
133      return Wide_Wide_String;
134
135   procedure Translate
136     (Source  : in out Wide_Wide_String;
137      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping);
138
139   function Translate
140     (Source  : Wide_Wide_String;
141      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function)
142      return Wide_Wide_String;
143
144   procedure Translate
145     (Source  : in out Wide_Wide_String;
146      Mapping : Wide_Wide_Maps.Wide_Wide_Character_Mapping_Function);
147
148   -------------------------------------------------
149   -- Wide_Wide_String Transformation Subprograms --
150   -------------------------------------------------
151
152   function Replace_Slice
153     (Source : Wide_Wide_String;
154      Low    : Positive;
155      High   : Natural;
156      By     : Wide_Wide_String) return Wide_Wide_String;
157
158   procedure Replace_Slice
159     (Source  : in out Wide_Wide_String;
160      Low     : Positive;
161      High    : Natural;
162      By      : Wide_Wide_String;
163      Drop    : Truncation := Error;
164      Justify : Alignment  := Left;
165      Pad     : Wide_Wide_Character  := Ada.Strings.Wide_Wide_Space);
166
167   function Insert
168     (Source   : Wide_Wide_String;
169      Before   : Positive;
170      New_Item : Wide_Wide_String) return Wide_Wide_String;
171
172   procedure Insert
173     (Source   : in out Wide_Wide_String;
174      Before   : Positive;
175      New_Item : Wide_Wide_String;
176      Drop     : Truncation := Error);
177
178   function Overwrite
179     (Source   : Wide_Wide_String;
180      Position : Positive;
181      New_Item : Wide_Wide_String) return Wide_Wide_String;
182
183   procedure Overwrite
184     (Source   : in out Wide_Wide_String;
185      Position : Positive;
186      New_Item : Wide_Wide_String;
187      Drop     : Truncation := Right);
188
189   function Delete
190     (Source  : Wide_Wide_String;
191      From    : Positive;
192      Through : Natural) return Wide_Wide_String;
193
194   procedure Delete
195     (Source  : in out Wide_Wide_String;
196      From    : Positive;
197      Through : Natural;
198      Justify : Alignment := Left;
199      Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
200
201   -------------------------------------------
202   -- Wide_Wide_String Selector Subprograms --
203   -------------------------------------------
204
205   function Trim
206     (Source : Wide_Wide_String;
207      Side   : Trim_End) return Wide_Wide_String;
208
209   procedure Trim
210     (Source  : in out Wide_Wide_String;
211      Side    : Trim_End;
212      Justify : Alignment      := Left;
213      Pad     : Wide_Wide_Character := Wide_Wide_Space);
214
215   function Trim
216     (Source : Wide_Wide_String;
217      Left   : Wide_Wide_Maps.Wide_Wide_Character_Set;
218      Right  : Wide_Wide_Maps.Wide_Wide_Character_Set)
219      return Wide_Wide_String;
220
221   procedure Trim
222     (Source  : in out Wide_Wide_String;
223      Left    : Wide_Wide_Maps.Wide_Wide_Character_Set;
224      Right   : Wide_Wide_Maps.Wide_Wide_Character_Set;
225      Justify : Alignment := Ada.Strings.Left;
226      Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
227
228   function Head
229     (Source : Wide_Wide_String;
230      Count  : Natural;
231      Pad    : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space)
232      return Wide_Wide_String;
233
234   procedure Head
235     (Source  : in out Wide_Wide_String;
236      Count   : Natural;
237      Justify : Alignment := Left;
238      Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
239
240   function Tail
241     (Source : Wide_Wide_String;
242      Count  : Natural;
243      Pad    : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space)
244      return Wide_Wide_String;
245
246   procedure Tail
247     (Source  : in out Wide_Wide_String;
248      Count   : Natural;
249      Justify : Alignment := Left;
250      Pad     : Wide_Wide_Character := Ada.Strings.Wide_Wide_Space);
251
252   --------------------------------------------
253   -- Wide_Wide_String Constructor Functions --
254   --------------------------------------------
255
256   function "*"
257     (Left  : Natural;
258      Right : Wide_Wide_Character) return Wide_Wide_String;
259
260   function "*"
261     (Left  : Natural;
262      Right : Wide_Wide_String) return Wide_Wide_String;
263
264end Ada.Strings.Wide_Wide_Fixed;
265