File: arm_frm.ads

package info (click to toggle)
ada-reference-manual 1%3A2012.3-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 12,872 kB
  • sloc: ada: 29,393; makefile: 193; python: 92
file content (476 lines) | stat: -rwxr-xr-x 24,931 bytes parent folder | download
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
with ARM_Output,
     ARM_Contents;
--private -- Ada 2005
with ARM_Input,
     ARM_Database,
     ARM_Subindex;
package ARM_Format is

    --
    -- Ada reference manual formatter (ARM_Form).
    --
    -- This package contains the routines to parse the input files, and
    -- determine what to output.
    --
    -- ---------------------------------------
    -- Copyright 2000, 2002, 2004, 2005, 2006, 2007, 2010, 2011, 2012, 2016
    --   AXE Consultants. All rights reserved.
    -- P.O. Box 1512, Madison WI  53701
    -- E-Mail: randy@rrsoftware.com
    --
    -- ARM_Form is free software: you can redistribute it and/or modify
    -- it under the terms of the GNU General Public License version 3
    -- as published by the Free Software Foundation.
    --
    -- AXE CONSULTANTS MAKES THIS TOOL AND SOURCE CODE AVAILABLE ON AN "AS IS"
    -- BASIS AND MAKES NO WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY,
    -- CAPABILITY, EFFICIENCY, MERCHANTABILITY, OR FUNCTIONING OF THIS TOOL.
    -- IN NO EVENT WILL AXE CONSULTANTS BE LIABLE FOR ANY GENERAL,
    -- CONSEQUENTIAL, INDIRECT, INCIDENTAL, EXEMPLARY, OR SPECIAL DAMAGES,
    -- EVEN IF AXE CONSULTANTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    -- DAMAGES.
    --
    -- A copy of the GNU General Public License is available in the file
    -- gpl-3-0.txt in the standard distribution of the ARM_Form tool.
    -- Otherwise, see <http://www.gnu.org/licenses/>.
    --
    -- If the GPLv3 license is not satisfactory for your needs, a commercial
    -- use license is available for this tool. Contact Randy at AXE Consultants
    -- for more information.
    --
    -- ---------------------------------------
    --
    -- Edit History:
    --
    --  4/14/00 - RLB - Created base package.
    --  4/18/00 - RLB - Added additional information to Object;
    --                  added Scan.
    --  4/24/00 - RLB - Added Change_Kind and Display_Index_Entries.
    --          - RLB - Added Change format.
    --  4/25/00 - RLB - Added Size.
    --  4/26/00 - RLB - Added paragraph formats.
    --  5/10/00 - RLB - Added additional paragraph kinds.
    --  5/11/00 - RLB - Added numbers for enumerated paragraphs.
    --  5/12/00 - RLB - Added attribute prefix text.
    --  5/15/00 - RLB - Split input from parsing/formatting.
    --  5/16/00 - RLB - Added database objects and Destroy.
    --  5/23/00 - RLB - Added tab stops.
    --  5/24/00 - RLB - Implemented subscript/superscript commands.
    --  5/28/00 - RLB - Implemented index operations.
    --  6/ 2/00 - RLB - Added Unit.
    --  8/ 2/00 - RLB - Added Leading and Syntax_Leading styles.
    --  8/ 4/00 - RLB - Added more new styles.
    --  8/ 7/00 - RLB - Added Leading flag, removed Leading styles.
    --  8/ 8/00 - RLB - Added Attr_Leading flag.
    --  8/16/00 - RLB - Added No_Para_Num flag, removed No_Pnum formats.
    --  8/17/00 - RLB - Changed Leading flag to Space_After.
    --  8/28/00 - RLB - Added flags for ChgAttribute and ChgImpldef commands.
    --  8/31/00 - RLB - Added the New_Changes change kind.
    --  9/26/00 - RLB - Added Syntax_Display format.
    --  6/17/02 - RLB - Added Ada95 changes sections.
    --  7/18/02 - RLB - Moved document type here.
    --          - RLB - Added Changes_Only and versioning for individual changes.
    --  9/10/04 - RLB - Added support for nested changes.
    --  9/14/04 - RLB - Moved Change_Version_Type to ARM_Contents.
    -- 11/03/04 - RLB - Added Nested_X2_Bulleted.
    -- 11/16/04 - RLB - Added Attr_Prefix_Text_Change_Kind.
    -- 12/06/04 - RLB - Added reference chain for Format_Type.
    -- 12/11/04 - RLB - Increased Syntax_NT length.
    -- 10/17/05 - RLB - Added Glossary change items.
    -- 10/28/05 - RLB - Added Language-Define subindexes.
    --  1/12/06 - RLB - Replaced "Document" with a number of new more general
    --                  properties.
    --  1/16/06 - RLB - Added "Unnumbered_Section" counter, so we can assign
    --                  names without special cases.
    --  1/18/06 - RLB - Added "Example_Font".
    --  9/22/06 - RLB - Added "Use_ISO_2004_Note_Format".
    --          - RLB - Revised to use Clause_Number_Type.
    --  9/25/06 - RLB - Added "Use_ISO_2004_Contents_Format".
    -- 10/04/06 - RLB - Added "Use_ISO_2004_List_Format".
    --  2/ 5/07 - RLB - Added Usage_Note for ASIS, and renamed Wide paragraph
    --                  kinds.
    --  2/13/07 - RLB - Redid output formating to use an explict indent;
    --                  added ChildExample.
    --  2/16/07 - RLB - Added Indent.
    --  2/19/07 - RLB - Added Title format.
    --  4/23/10 - RLB - Added Ada 2005 header.
    --  8/ 8/11 - RLB - Added Aspect DB.
    -- 10/18/11 - RLB - Changed to GPLv3 license.
    --  3/12/12 - RLB - Lengthened unit name so
    --                  "Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Equal_Case_Insensitive"
    --                  would fit (have we lost our minds??).
    --  8/31/12 - RLB - Put glossary components into a subrecord to prevent
    --                  inappropriate usage.
    -- 10/18/12 - RLB - Put impdef components into a subrecord to prevent
    --                  inappropriate usage.
    --          - RLB - Added more specific hanging_indent formats, along with
    --                  small.
    -- 11/26/12 - RLB - Added subdivision names.
    -- 12/17/12 - RLB - Added Ada 2012 AARM sections.
    --  3/17/16 - RLB - Removed Changes_Only, added Base_Change_Version.

    type Format_Type is tagged limited private;

    type Change_Kind is (Old_Only, New_Only, Show_Changes, New_Changes);
        -- Which changes to show?
        -- If Old_Only, we will get the original Ada Reference Manual or AARM.
        -- If New_Only, we will get the reference documents with the updates
        -- up to the Change_Version specified included.
        -- If Show_Changes, we will get the reference documents with the
        -- updates up to the Base_Change_Version specified included; and
        -- insertions and deletions will be shown for versions
        -- Base_Change_Version .. Change_Version.
        -- If New_Changes, original RM text removed, but new RM text will be
        -- shown as inserted, up to and including the Change_Version specified.
        -- In all cases, changes with versions newer than Change_Version are
        -- ignored. Thus Change_Version = '0' is the same as Old_Only no
        -- matter what command is given.
        --
        -- Note: Previous versions of this tool had Changes_Only as well;
        -- that is the same as Show_Changes with Base_Change_Version =
        -- Change_Version. (The previous version's Show_Changes is
        -- equivalent to this version's Show_Changes with
        -- Base_Change_Version = 1.)

    procedure Create (Format_Object : in out Format_Type;
                      Changes : in ARM_Format.Change_Kind;
                      Change_Version : in ARM_Contents.Change_Version_Type;
                      Base_Change_Version : in ARM_Contents.Change_Version_Type;
                      Display_Index_Entries : in Boolean;
                      Include_Annotations : in Boolean;
                      Include_ISO : in Boolean;
                      Link_Non_Terminals : in Boolean;
                      Number_Paragraphs : in Boolean;
                      Examples_Font : in ARM_Output.Font_Family_Type;
                      Use_ISO_2004_Note_Format : in Boolean;
                      Use_ISO_2004_Contents_Format : in Boolean;
                      Use_ISO_2004_List_Format : in Boolean;
                      Top_Level_Subdivision_Name : in ARM_Output.Top_Level_Subdivision_Name_Kind);
        -- Initialize an input object. Changes, Change_Version, and
        -- Base_Change_Version determine
        -- which changes should be displayed. If Display_Index_Entries is True,
        -- index entries will be printed in the document; otherwise, they
        -- will not generate any visible text (although they might generate
        -- a link anchor). If Include_Annotations is True, annotations (AARM
        -- text) will be included in the output; otherwise it will not be.
        -- If Include_ISO is True, ISOOnly text will be included in the output
        -- (and NotISO text will not); otherwise the reverse is true.
        -- If Link_Non_Terminals is True, links will be generated for
        -- each Non_Terminal, linking it to its definition.
        -- If Number_Paragraphs is true, paragraphs will be numbered (per
        -- subclause); otherwise they will not be.
        -- Example_Font specifies the font that examples will be set in.
        -- If Use_ISO_2004_Note_Format is true, that format will be used;
        -- else the Ada95 standard's format will be used for notes.
        -- If Use_ISO_2004_Contents_Format is true, that format will be used;
        -- else the Ada95 standard's format will be used for the table of contents.
        -- If Use_ISO_2004_List_Format is true, then lists will be lettered;
        -- else the Ada95 standard's numbering format will be used for
        -- enumerated lists.
        -- The top-level (and other) subdivision names are as specified
        -- in Top_Level_Subdivision_Name.

    procedure Destroy (Format_Object : in out Format_Type);
        -- Destroy a format object, releasing any resources.

    procedure Scan (Format_Object : in out Format_Type;
                    File_Name : in String;
                    Section_Number : in ARM_Contents.Section_Number_Type;
                    Starts_New_Section : in Boolean);
        -- Scans the contents for File_Name, determining the table of contents
        -- for the section. The results are written to the contents package.
        -- Starts_New_Section is True if the file starts a new section.
        -- Section_Number is the number (or letter) of the section.
        -- Note: We need this scanning pass so we can process @SeeSec,
        -- @SeeSecNum, and similar commands. For that, we need the full names
        -- of the sections and clauses.

    procedure Write_Table_of_Contents (
                        Format_Object : in out Format_Type;
                       Output_Object : in out ARM_Output.Output_Type'Class);
        -- Writes the table of contents for the document. (It will have
        -- a section name of "TOC").

    procedure Process (Format_Object : in out Format_Type;
                       File_Name : in String;
                       Output_Object : in out ARM_Output.Output_Type'Class;
                       Section_Name : in String;
                       Section_Number : in ARM_Contents.Section_Number_Type;
                       Starts_New_Section : in Boolean);
        -- Process the contents for File_Name, writing the results to
        -- Output_Object. (Output_Object uses dispatching calls to provide
        -- the correct formatting). Section_Name is the name of the section
        -- for this file. Starts_New_Section is True if the file starts
        -- a new section. Section_Number is the number (or letter) of the
        -- section. Values > 20 represent annex letters (21 => A, 22 => B, etc.)

    procedure Format (Format_Object : in out Format_Type;
                      Text : in String;
                      Output_Object : in out ARM_Output.Output_Type'Class;
                      Text_Name : in String;
                      No_Annotations : in Boolean);
        -- Format the contents of Text, writing the results to
        -- Output_Object. (Output_Object uses dispatching calls to provide
        -- the correct formatting). Text is assumed to be a component of
        -- a larger section. Text_Name is an identifying name for error messages.
        -- If No_Annotations is true, we don't want any annotations even if we
        -- are generating a document with annotations.

private
    type Paragraph_Type is (Plain, Introduction,
        Language_Design, -- AARM-only.
        Syntax, Resolution, Legality,
        Static_Semantics, Link_Time, Run_Time, Bounded_Errors,
        Erroneous, Requirements, Documentation, Metrics, Permissions, Advice,
        Notes, Single_Note, Examples,
        Ada83_Inconsistencies, Ada83_Incompatibilities, -- AARM-only.
        Ada83_Extensions, Ada83_Wording, -- AARM-only.
        Ada95_Inconsistencies, Ada95_Incompatibilities, -- AARM-only.
        Ada95_Extensions, Ada95_Wording, -- AARM-only.
        Ada2005_Inconsistencies, Ada2005_Incompatibilities, -- AARM-only.
        Ada2005_Extensions, Ada2005_Wording, -- AARM-only.
        Ada2012_Inconsistencies, Ada2012_Incompatibilities, -- AARM-only.
        Ada2012_Extensions, Ada2012_Wording, -- AARM-only.
        Element_Ref, Child_Ref, Usage_Note, -- For ASIS (AASIS-only).
        -- AARM annotations (no headers)
        Reason, Ramification, Proof, Imp_Note, Corr_Change, Discussion,
        Honest, Glossary_Marker, Bare_Annotation,
        -- Format only:
        Wide_Above, Example_Text, Child_Example_Text,
        Indented_Example_Text, Code_Indented, Indent, Bulleted, Nested_Bulleted,
        Nested_X2_Bulleted,
        Display, Syntax_Display, Syntax_Indented, Syntax_Production,
        Enumerated, Nested_Enumerated,
        Hanging_Indented_1, Hanging_Indented_2, Hanging_Indented_3,
        Hanging_Indented_4, Small, Title, In_Table);

    type Reference;
    type Reference_Ptr is access Reference;
    type Reference is record
        Ref_Name : ARM_Input.Command_Name_Type;
        Ref_Len  : Natural; -- Length of the reference.
        Is_DR_Ref : Boolean; -- True for a DR reference; False for an AI reference.
        Next : Reference_Ptr;
    end record;

    type Glossary_Info_Type (Active : Boolean := False;
                             Change_Kind : ARM_Database.Paragraph_Change_Kind_Type := ARM_Database.None) is record
                                -- The Change_Kind of ToGlossary.
        case Active is
            when False => null; -- No glossary entry in use.
            when True =>
                -- Glossary actively being processed; used only when
                -- processing [Chg]ToGlossary[Also] commands.
                Term : String (1..50); -- Glossary term.
                Term_Len : Natural := 0;
                Add_to_Glossary : Boolean;
                        -- Add this item to the Glossary. (Not the same
                        -- as "Active"; when generating older versions
                        -- of a document, this would be False for a
                        -- new glossary entry.)
                Displayed : Boolean;
                        -- The text was displayed in the document.
                case Change_Kind is
                    when ARM_Database.None => null;
                    when others =>
                        Version : ARM_Contents.Change_Version_Type;
                            -- The version number of the changed paragraph.
                end case;
        end case;
    end record;

    type Impdef_Command_Type is (None, Aspect, Impdef, Docreq, ImplAdv);

    type Impdef_Info_Type (Command : Impdef_Command_Type := None) is record
        case Command is
            when None => null; -- No impdef, docreq, impladv, aspectdesc in use.
            when others =>
                -- Impdef, Docreq, Impladv, Aspectdesc actively being processed;
                -- used only when processing ImplDef, ChgImplDef,
                --    ChgDocReq, ChgImplAdv, and ChgAspectDesc.
                Change_Kind : ARM_Database.Paragraph_Change_Kind_Type := ARM_Database.None;
                        -- The Change_Kind of the command.
                Version : ARM_Contents.Change_Version_Type;
                        -- If the kind is not "None", this is the version
                        -- number of the changed paragraph.
                Initial_Version : ARM_Contents.Change_Version_Type;
                        -- This is the version number of the original paragraph.
                Paragraph_String : String (1 .. 10); -- Paragraph number.
                Paragraph_Len : Natural;
                Add_to_DB : Boolean;
                        -- Add this item to the appropriate DB. (Not the same
                        -- as "Active"; when generating older versions
                        -- of a document, this would be False for a
                        -- new impdef, docreq, etc. entry.)
                case Command is
                    when Aspect =>
                        Aspect_Name : String (1..30); -- Aspect name text
                        Aspect_Name_Len : Natural := 0;
                    when others => null;
                end case;
        end case;
    end record;

    type Format_Type is tagged limited record
        -- Document information:
        Changes : ARM_Format.Change_Kind; -- No Both here.
        Change_Version : ARM_Contents.Change_Version_Type;
        Base_Change_Version : ARM_Contents.Change_Version_Type;
        Display_Index_Entries : Boolean;
        Include_Annotations : Boolean;
        Include_ISO : Boolean;
        Link_Non_Terminals : Boolean;
        Number_Paragraphs : Boolean;
        Examples_Font : ARM_Output.Font_Family_Type;
        Use_ISO_2004_Note_Format : Boolean;
        Use_ISO_2004_Contents_Format : Boolean;
        Use_ISO_2004_List_Format : Boolean;
        Top_Level_Subdivision_Name : ARM_Output.Top_Level_Subdivision_Name_Kind;

        -- Clause numbers:
        Clause_Number : ARM_Contents.Clause_Number_Type;
             -- The current clause number (Section, clause, subclause, subsubclause).
        Unnumbered_Section : Natural; -- The current (if any) clause number
                -- for unnumbered sections.

        -- Paragraph format info:
        Next_Paragraph_Change_Kind : ARM_Database.Paragraph_Change_Kind_Type;
                             -- The change kind of the next paragraph. This is
                             -- reset to none after each paragraph.
        Next_Paragraph_Version : ARM_Contents.Change_Version_Type;
                             -- If the kind is not "None", this is the version
                             -- number of the changed paragraph.
        Last_Paragraph_Subhead_Type : Paragraph_Type;
                             -- The last paragraph subhead generated.
        Next_Paragraph_Subhead_Type : Paragraph_Type;
                             -- The next paragraph subhead to generate (not
                             -- necessarily the same as Next_Paragraph_Format_Type).
                             -- This indicates the current paragraph type.
        Next_Paragraph_Format_Type : Paragraph_Type;
                             -- The format type of the next paragraph to
                             -- generate. We keep this separately so that the
                             -- first paragraph of a grouping can be in a
                             -- different format than the standard one, and
                             -- still generate a subheading.
        Paragraph_Tab_Stops : ARM_Output.Tab_Info := ARM_Output.NO_TABS;
                             -- The tab stops for the next paragraph.
        In_Bundle : Boolean := False;
                             -- Are we in a bundle?
        References : Reference_Ptr := null;
                             -- Any references to generate at the start of the
                             -- next paragraph.

        -- Paragraph numbering info:
        Next_Note : Natural; -- The number of the next note. These are
                             -- per-section, not per-clause (unless ISO 2004 is set).
        Next_Paragraph : Positive; -- The number of the next paragraph. These
                             -- are per-(sub)clause.
        Next_Insert_Para : Positive; -- The subnumber of the next inserted
                             -- paragraph.
        Next_AARM_Sub : Character; -- The letter of the next AARM subclause.
                             -- These are reset when the paragraph number
                             -- changes.
        Next_AARM_Insert_Para : Positive; -- The subnumber of the next inserted
                             -- AARM paragraph.
        Next_Enumerated_Num : Positive;
                             -- If the format is enumerated, this is the
                             -- number of the next paragraph.
        Enumerated_Level : Natural;
                             -- Number of enumerated formats that we're in.
        Current_Paragraph_String : String (1 .. 10);
                             -- The current paragraph number string (only
                             -- valid if In_Paragraph is True).
        Current_Paragraph_Len : Natural;

        -- Text format info:
        Text_Format : ARM_Output.Format_Type; -- Holds the current text format.

        Style : ARM_Output.Paragraph_Style_Type; -- What is the current paragraph style?
        Indent : ARM_Output.Paragraph_Indent_Type; -- What is the current paragraph indent?
        In_Paragraph : Boolean; -- Are we currently in a paragraph?
        No_Start_Paragraph : Boolean; -- Did we suppress "Start_Paragraph"?
        No_Prefix : Boolean; -- Should we suppress any prefix on the next paragraph?
        No_Para_Num : Boolean; -- Should we suppress the paragraph number on the next paragraph?
        Keep_with_Next : Boolean; -- Should we force this paragraph to bind to the next
                                  -- (disallowing a page break between)?
        Space_After : ARM_Output.Space_After_Type; -- Space following this
                             -- paragraph.
        No_Breaks : Boolean; -- Should we allow page breaks in this paragraph?
        In_Change : Boolean; -- Are we in a change region?
        Last_Non_Space : Boolean; -- Is the last character written into the
                        -- paragraph a non-space? (If nothing has been
                        -- written into the paragraph, then this is False).

        -- Indexing:
        Unit : String (1..72);  -- Unit for predefined definitions. Used only
                                -- by a handful of indexing commands.
        Unit_Len : Natural := 0;

        -- Syntax:
        Syntax_NT : String (1..80); -- Syntax non-terminal; used only during the
                                    -- processing of the Syn command.
        Syntax_NT_Len : Natural := 0;
        Syntax_Tab : String (1..40); -- Syntax tab string; used only during the
                                    -- processing of the Syn command.
        Syntax_Tab_Len : Natural := 0;

        -- Attributes:
        Prefix_Text : String (1..200) := "@b{NONE!}" & (10..200 => ' ');
            -- This text is used as part of the attribute list text.
            -- It is shared between multiple attributes, which is why it is
            -- handled this way.
        Prefix_Text_Len : Natural := 9;

        Attr_Prefix : String (1..10); -- Attribute prefix text
        Attr_Prefix_Len : Natural := 0;
        Attr_Prefix_Change_Kind : ARM_Database.Paragraph_Change_Kind_Type;
        Attr_Prefix_Version : ARM_Contents.Change_Version_Type;
        Attr_Name : String (1..30); -- Attribute name text
        Attr_Name_Len : Natural := 0;
        Attr_Leading : Boolean := False; -- Attribute leading flag
        Attr_Change_Kind : ARM_Database.Paragraph_Change_Kind_Type;
        Attr_Prefix_Text_Change_Kind : ARM_Database.Paragraph_Change_Kind_Type;
        Attr_Version : ARM_Contents.Change_Version_Type;
        Attr_Initial_Version : ARM_Contents.Change_Version_Type;
            -- The above ten items are used only when processing Attribute
            -- and Attribute_Leading commands.

        Attr_DB : ARM_Database.Database_Type;

        -- Pragmas:
        Pragma_DB : ARM_Database.Database_Type;

        -- Glossary:
        Glossary_Info : Glossary_Info_Type;
        Glossary_DB : ARM_Database.Database_Type;

        -- Aspects:
        Aspect_DB : ARM_Database.Database_Type;
            -- Also see Impdef_Info, below.

        -- Implementation advice:
        Impladv_DB : ARM_Database.Database_Type;
            -- Also see Impdef_Info, below.

        -- Documentation requirements:
        Docreq_DB : ARM_Database.Database_Type;
            -- Also see Impdef_Info, below.

        -- Implementation-defined:
        Impdef_DB : ARM_Database.Database_Type;
            -- Also see Impdef_Info, below.

        -- For all of the above four:
        Impdef_Info : Impdef_Info_Type;
            -- Used only during processing of ImplDef, ChgImplDef,
            --    ChgDocReq, ChgImplAdv, and ChgAspectDesc.

        -- Language-Defined entity subindexes:
        Package_Index : ARM_Subindex.Subindex_Type;
        Type_Index : ARM_Subindex.Subindex_Type;
        Subprogram_Index : ARM_Subindex.Subindex_Type;
        Exception_Index : ARM_Subindex.Subindex_Type;
        Object_Index : ARM_Subindex.Subindex_Type;

    end record;
end ARM_Format;