-----------------------------------------------------------------------
-- akt-commands-drivers -- Ada Keystore command driver
-- Copyright (C) 2019 Stephane Carrez
-- Written by Stephane Carrez (Stephane.Carrez@gmail.com)
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-----------------------------------------------------------------------
with Ada.Text_IO;
with Ada.Directories;
with Ada.Command_Line;
with Util.Files;
with Util.Strings;
with AKT.Configs;
package body AKT.Commands.Drivers is
function Get_Help (Dir : in String;
Name : in String;
Locale : in String) return String;
function Get_Resources_Directory return String;
-- ------------------------------
-- Setup the command before parsing the arguments and executing it.
-- ------------------------------
overriding
procedure Setup (Command : in out Command_Type;
Config : in out GNAT.Command_Line.Command_Line_Configuration;
Context : in out Context_Type) is
begin
GC.Set_Usage (Config => Config,
Usage => Command.Get_Name & " [arguments]",
Help => Command.Get_Description);
AKT.Commands.Setup (Config, Context);
end Setup;
function Get_Resources_Directory return String is
begin
if Ada.Directories.Exists (AKT.Configs.PREFIX & AKT.Configs.RESOURCES) then
return AKT.Configs.PREFIX & AKT.Configs.RESOURCES;
end if;
declare
Name : constant String := Ada.Command_Line.Command_Name;
Path : constant String := Ada.Directories.Containing_Directory (Name);
Dir : constant String := Ada.Directories.Containing_Directory (Path);
begin
return Dir & AKT.Configs.RESOURCES;
end;
end Get_Resources_Directory;
function Get_Help (Dir : in String;
Name : in String;
Locale : in String) return String is
Pos : constant Natural := Util.Strings.Index (Locale, '_');
begin
if Pos > 0 then
return Dir & Locale (Locale'First .. Pos - 1) & "/" & Name & ".txt";
elsif Locale'Length > 0 then
return Dir & Locale & "/" & Name & ".txt";
else
return Dir & "en/" & Name & ".txt";
end if;
end Get_Help;
-- ------------------------------
-- Write the help associated with the command.
-- ------------------------------
overriding
procedure Help (Command : in out Command_Type;
Name : in String;
Context : in out Context_Type) is
pragma Unreferenced (Command, Context);
Dir : constant String := Get_Resources_Directory;
Path : constant String := Get_Help (Dir, Name, Intl.Current_Locale);
begin
if Ada.Directories.Exists (Path) then
Util.Files.Read_File (Path => Path,
Process => Ada.Text_IO.Put_Line'Access);
else
Util.Files.Read_File (Path => Get_Help (Dir, Name, "en"),
Process => Ada.Text_IO.Put_Line'Access);
end if;
end Help;
end AKT.Commands.Drivers;