with Ada.Containers.Indefinite_Vectors; with Ada.Containers.Vectors; with Ada.Strings; package AAA.Table_IO with Preelaborate is -- A type to format tables according to the max length of fields. The table -- is ANSI-aware, so it will work properly for text with embedded ANSI -- control sequences. However, non-left-aligned text may not align -- properly. -- Text supplied to these tables is supposed to be ASCII or UTF-8; other -- encodings will either cause errors or break alignment. If any input -- requires UTF encoding, output will be conversely encoded. type Table is tagged private; type Reference (Table : access Table_IO.Table) is limited null record with Implicit_Dereference => Table; procedure Append (T : in out Table; Cell : String); function Append (T : aliased in out Table; Cell : String) return Reference; procedure New_Row (T : in out Table); type Alignments is array (Positive range <>) of Ada.Strings.Alignment; procedure Print (T : Table; Separator : String := " "; Align : Alignments := (1 .. 0 => <>); Put_Line : access procedure (Line : String) := null); -- Will print the table using GNAT.IO, unless Put_Line is supplied private package Natural_Vectors is new Ada.Containers.Vectors (Positive, Natural); package String_Vectors is new Ada.Containers.Indefinite_Vectors (Positive, Wide_Wide_String); subtype Row is String_Vectors.Vector; use all type Row; package Row_Vectors is new Ada.Containers.Vectors (Positive, Row); type Table is tagged record Next_Column : Positive := 1; Rows : Row_Vectors.Vector; Max_Widths : Natural_Vectors.Vector; end record; end AAA.Table_IO;