60 lines
1.3 KiB
Ada
60 lines
1.3 KiB
Ada
with Ada.Containers;
|
|
with GNAT.IO;
|
|
|
|
package body Table_IO is
|
|
|
|
use all type Ada.Containers.Count_Type;
|
|
|
|
------------
|
|
-- Append --
|
|
------------
|
|
|
|
procedure Append (T : in out Table; Cell : String) is
|
|
begin
|
|
if T.Rows.Is_Empty then
|
|
T.New_Row;
|
|
end if;
|
|
|
|
if Natural (T.Max_Widths.Length) < T.Next_Column then
|
|
T.Max_Widths.Append (Cell'Length);
|
|
else
|
|
T.Max_Widths (T.Next_Column) :=
|
|
Natural'Max (Cell'Length, T.Max_Widths (T.Next_Column));
|
|
end if;
|
|
|
|
T.Rows (Natural (T.Rows.Length)).Append (Cell);
|
|
T.Next_Column := T.Next_Column + 1;
|
|
end Append;
|
|
|
|
-------------
|
|
-- New_Row --
|
|
-------------
|
|
|
|
procedure New_Row (T : in out Table) is
|
|
begin
|
|
T.Next_Column := 1;
|
|
T.Rows.Append (String_Vectors.Empty_Vector);
|
|
end New_Row;
|
|
|
|
-----------
|
|
-- Print --
|
|
-----------
|
|
|
|
procedure Print (T : Table; Separator : String := " ") is
|
|
use Gnat.IO;
|
|
begin
|
|
for Row of T.Rows loop
|
|
for I in 1 .. Natural (Row.Length) loop
|
|
Put (Row (I));
|
|
Put (String'(1 .. T.Max_Widths (I) - String'(Row (I))'Length => ' '));
|
|
if I < Natural (Row.Length) then
|
|
Put (Separator);
|
|
else
|
|
New_Line;
|
|
end if;
|
|
end loop;
|
|
end loop;
|
|
end Print;
|
|
|
|
end Table_IO;
|