1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- A D A . W I D E _ T E X T _ I O . E D I T I N G --
9 -- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
11 -- This specification is derived from the Ada Reference Manual for use with --
12 -- GNAT. The copyright notice above, and the license provisions that follow --
13 -- apply solely to the contents of the part following the private keyword. --
15 -- GNAT is free software; you can redistribute it and/or modify it under --
16 -- terms of the GNU General Public License as published by the Free Soft- --
17 -- ware Foundation; either version 2, or (at your option) any later ver- --
18 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
19 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
20 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
21 -- for more details. You should have received a copy of the GNU General --
22 -- Public License distributed with GNAT; see file COPYING. If not, write --
23 -- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
24 -- Boston, MA 02110-1301, USA. --
26 -- As a special exception, if other files instantiate generics from this --
27 -- unit, or you link this unit with other files to produce an executable, --
28 -- this unit does not by itself cause the resulting executable to be --
29 -- covered by the GNU General Public License. This exception does not --
30 -- however invalidate any other reasons why the executable file might be --
31 -- covered by the GNU Public License. --
33 -- GNAT was originally developed by the GNAT team at New York University. --
34 -- Extensive contributions were provided by Ada Core Technologies Inc. --
36 ------------------------------------------------------------------------------
38 package Ada
.Wide_Text_IO
.Editing
is
40 type Picture
is private;
44 Blank_When_Zero
: Boolean := False) return Boolean;
48 Blank_When_Zero
: Boolean := False) return Picture
;
50 function Pic_String
(Pic
: in Picture
) return String;
51 function Blank_When_Zero
(Pic
: in Picture
) return Boolean;
53 Max_Picture_Length
: constant := 64;
55 Picture_Error
: exception;
57 Default_Currency
: constant Wide_String := "$";
58 Default_Fill
: constant Wide_Character := ' ';
59 Default_Separator
: constant Wide_Character := ',';
60 Default_Radix_Mark
: constant Wide_Character := '.';
63 type Num
is delta <> digits <>;
64 Default_Currency
: Wide_String :=
65 Wide_Text_IO
.Editing
.Default_Currency
;
66 Default_Fill
: Wide_Character :=
67 Wide_Text_IO
.Editing
.Default_Fill
;
68 Default_Separator
: Wide_Character :=
69 Wide_Text_IO
.Editing
.Default_Separator
;
70 Default_Radix_Mark
: Wide_Character :=
71 Wide_Text_IO
.Editing
.Default_Radix_Mark
;
73 package Decimal_Output
is
77 Currency
: Wide_String := Default_Currency
) return Natural;
82 Currency
: Wide_String := Default_Currency
) return Boolean;
87 Currency
: Wide_String := Default_Currency
;
88 Fill
: Wide_Character := Default_Fill
;
89 Separator
: Wide_Character := Default_Separator
;
90 Radix_Mark
: Wide_Character := Default_Radix_Mark
) return Wide_String;
96 Currency
: Wide_String := Default_Currency
;
97 Fill
: Wide_Character := Default_Fill
;
98 Separator
: Wide_Character := Default_Separator
;
99 Radix_Mark
: Wide_Character := Default_Radix_Mark
);
104 Currency
: Wide_String := Default_Currency
;
105 Fill
: Wide_Character := Default_Fill
;
106 Separator
: Wide_Character := Default_Separator
;
107 Radix_Mark
: Wide_Character := Default_Radix_Mark
);
110 (To
: out Wide_String;
113 Currency
: Wide_String := Default_Currency
;
114 Fill
: Wide_Character := Default_Fill
;
115 Separator
: Wide_Character := Default_Separator
;
116 Radix_Mark
: Wide_Character := Default_Radix_Mark
);
121 MAX_PICSIZE
: constant := 50;
122 MAX_MONEYSIZE
: constant := 10;
123 Invalid_Position
: constant := -1;
125 subtype Pic_Index
is Natural range 0 .. MAX_PICSIZE
;
127 type Picture_Record
(Length
: Pic_Index
:= 0) is record
128 Expanded
: String (1 .. Length
);
131 type Format_Record
is record
132 Picture
: Picture_Record
;
135 Blank_When_Zero
: Boolean;
138 Original_BWZ
: Boolean;
140 -- The following components get written
142 Star_Fill
: Boolean := False;
144 Radix_Position
: Integer := Invalid_Position
;
147 Second_Sign
: Integer := Invalid_Position
;
150 End_Float
: Integer := Invalid_Position
;
153 End_Currency
: Integer := Invalid_Position
;
155 Max_Leading_Digits
: Integer := 0;
157 Max_Trailing_Digits
: Integer := 0;
159 Max_Currency_Digits
: Integer := 0;
161 Floater
: Wide_Character := '!';
162 -- Initialized to illegal value
166 type Picture
is record
167 Contents
: Format_Record
;
170 type Number_Attributes
is record
171 Negative
: Boolean := False;
173 Has_Fraction
: Boolean := False;
178 End_Of_Fraction
: Integer := Invalid_Position
; -- invalid value
181 function Parse_Number_String
(Str
: String) return Number_Attributes
;
182 -- Assumed format is 'IMAGE or Fixed_IO.Put format (depends on no
183 -- trailing blanks...)
185 procedure Precalculate
(Pic
: in out Format_Record
);
186 -- Precalculates fields from the user supplied data
188 function Format_Number
189 (Pic
: Format_Record
;
191 Currency_Symbol
: Wide_String;
192 Fill_Character
: Wide_Character;
193 Separator_Character
: Wide_Character;
194 Radix_Point
: Wide_Character) return Wide_String;
195 -- Formats number according to Pic
197 function Expand
(Picture
: in String) return String;
199 end Ada
.Wide_Text_IO
.Editing
;