with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO;
with Ada.Environment_Variables;
with GNAT.String_Split;
package body Loga is
----------------
-- New_Logger --
----------------
procedure New_Logger (Self : in out Logger; Name : String) is
package Env renames Ada.Environment_Variables;
Debug_Env_Var : Unbounded_String;
Vars_In_Debug_Env_Var : GNAT.String_Split.Slice_Set;
begin
begin
Debug_Env_Var := To_Unbounded_String (Env.Value ("DEBUG"));
exception
when Constraint_Error =>
Self.Disabled := True;
return;
end;
GNAT.String_Split.Create (S => Vars_In_Debug_Env_Var,
From => To_String (Debug_Env_Var),
Separators => ",",
Mode => GNAT.String_Split.Multiple);
for I in 1 .. GNAT.String_Split.Slice_Count (Vars_In_Debug_Env_Var) loop
if GNAT.String_Split.Slice (Vars_In_Debug_Env_Var, I) = Name then
Self.Disabled := False;
exit;
else
Self.Disabled := True;
end if;
end loop;
if Self.Disabled then
return;
end if;
Self.Name := To_Unbounded_String (Name);
if Current_Color > Colors_As_Integer (Colors'Last) then
Current_Color := Colors_As_Integer (Colors'Val (1));
end if;
Self.Color := Colors'Val (Current_Color - 30);
Current_Color := Current_Color + 1;
end New_Logger;
---------
-- Log --
---------
procedure Log (Self : Logger; Message : String) is
begin
if not Self.Disabled then
Colorize_Output (Self.Color);
Put (Start_Bold & " " & To_String (Self.Name) & End_Bold & " ");
Colorize_Output (Normal);
Put_Line (Message);
end if;
end Log;
-- Private part --
procedure Colorize_Output (Color : Colors) is
use Ada.Integer_Text_IO;
begin
Put (Character'Val (27) & "[");
Put (Colors_As_Integer (Color), Width => 0);
Put ("m");
end Colorize_Output;
function Start_Bold return String is
begin
return Character'Val (27) & "[1m";
end Start_Bold;
function End_Bold return String is
begin
return Character'Val (27) & "[0m";
end End_Bold;
end Loga;