unit fs01aef_lib;

interface

Uses
  Classes,
  NetEncoding,
  SysUtils;



//*************************************************
//Сохранить FS-скрипт в файл
function FS_SaveToFile(fnScr:string;
                       ListScr: TStrings;
                       ItsUTF8:boolean=false
                       ):boolean;
//Загрузить FS-скрипт из файла
function FS_LoadFromFile(fnScr:string;
                         ListScr: TStrings;
                         ItsUTF8:boolean=false
                         ):boolean;
//*************************************************
/*************************************************
//Кодирование в Base64
function Str_to_StrBase64(S: string): string;
//Декодирование из Base64
function StrBase64_to_Str(S: string): string;
//*************************************************
//Сохранить TStrings в текстовый файл (в заданной кодировке)
function TStrings_SaveToFile(
                             fn:String;
                             List:TStrings;
                             Encoding:TEncoding
                             ):boolean; overload;

//Сохранить TStrings в текстовый файл (в заданной кодировке)
function TStrings_SaveToFile(
                             fn:String;
                             List:TStrings;
                             sEncoding:string='UTF-8'
                             ):boolean; overload;

//Загрузить текстовый файл в TStrings (в заданной кодировке)
function TStrings_LoadFromFile(
                               fn:String;
                               List:TStrings;
                               Encoding:TEncoding
                               ):boolean; overload;

//Загрузить текстовый файл в TStrings (в заданной кодировке)
function TStrings_LoadFromFile(
                               fn:String;
                               List:TStrings;
                               sEncoding:string='UTF-8'
                               ):boolean; overload;


//Конвертация идентификатора "кодовой страницы" из строки в TEncoding
function EncodingName_to_TEncoding(sName:string) : TEncoding;


implementation

//*************************************************
function FS_SaveToFile(fnScr:string;
                       ListScr: TStrings;
                       ItsUTF8:boolean=false
                       ):boolean;
//Сохранить FS-скрипт в файл
{
   fnScr - имя файла
   ListScr - текст скрипта
   ItsUTF8 - флаг (если =TRUE, то сохранить в UTF-8)
}
begin
  Result:=false;
  fnScr:=trim(fnScr);
  if fnScr<>'' then begin
     if Assigned(ListScr) then begin
        if ListScr.Count>0 then begin
           Result:=true;
           if not ItsUTF8 then begin
              ListScr.SaveToFile(fnScr);
           end
           else begin
              TStrings_SaveToFile(fnScr, ListScr, 'UTF-8');
           end;
        end;
     end;
  end;
end;

function FS_LoadFromFile(fnScr:string;
                         ListScr: TStrings;
                         ItsUTF8:boolean=false
                         ):boolean;
//Загрузить FS-скрипт из файла
{
   fnScr - имя файла
   ListScr - текст скрипта
   ItsUTF8 - флаг (если =TRUE, то сохранить в UTF-8)
}
begin
  Result:=false;
  if Assigned(ListScr) then begin
     ListScr.Clear;
     fnScr:=trim(fnScr);
     if FileExists(fnScr) then begin
        Result:=true;
        if not ItsUTF8 then begin
           ListScr.LoadFromFile(fnScr);
        end
        else begin
           TStrings_LoadFromFile(fnScr, ListScr, 'UTF-8');
        end;
     end;
  end;
end;
//*************************************************
/*************************************************
function Str_to_StrBase64(S: string): string;
//Кодирование в Base64
begin
  Result := TNetEncoding.Base64.Encode(S);
end;


function StrBase64_to_Str(S: string): string;
//Декодирование из Base64
begin
  Result := TNetEncoding.Base64.Decode(S);
end;
/*************************************************

function EncodingName_to_TEncoding(sName:string) : TEncoding;
//Конвертация идентификатора "кодовой страницы" из строки в TEncoding
begin
  Result:=TEncoding.GetEncoding(1251);
  sName:=trim(sName);
  if length(sName)>0 then begin
     sName:=UpperCase(sName);
     if sName='WINDOWS-1251' then begin
        Result:=TEncoding.GetEncoding(1251);
     end;
     if sName='UTF-8' then begin
        Result:=TEncoding.UTF8;
     end;
     if sName='DOS-866' then begin
        Result:=TEncoding.GetEncoding(866);
     end;
     if sName='KOI8R' then begin
        Result:=TEncoding.GetEncoding(20866);
     end;
     if sName='UNICODE' then begin
        Result:=TEncoding.Unicode;
     end;
     if sName='UTF-7' then begin
        Result:=TEncoding.UTF7;
     end;
  end;
end;

function TStrings_SaveToFile(
                             fn:String;
                             List:TStrings;
                             Encoding:TEncoding
                             ):boolean;
//Сохранить TStrings в текстовый файл (в заданной кодировке)
begin
  Result:=false;
  fn:=trim(fn);
  if length(fn)>0 then begin
     if Assigned(List) then begin
        TRY
          List.SaveToFile(fn,Encoding);
          Result:=true;
        FINALLY
        END;
     end;
  end;
end;

function TStrings_SaveToFile(
                             fn:String;
                             List:TStrings;
                             sEncoding:string='UTF-8'
                             ):boolean;
//Сохранить TStrings в текстовый файл (в заданной кодировке)
Var
  E:TEncoding;
begin
  E:=EncodingName_to_TEncoding(sEncoding);
  TRY
     Result:=TStrings_SaveToFile(fn,List,E);
  FINALLY
  END;
end;

function TStrings_LoadFromFile(
                               fn:String;
                               List:TStrings;
                               Encoding:TEncoding
                               ):boolean;
//Загрузить текстовый файл в TStrings (в заданной кодировке)
begin
  Result:=false;
  if Assigned(List) then begin
     List.Clear;
     fn:=trim(fn);
     if FileExists(fn) then begin
        TRY
          List.LoadFromFile(fn,Encoding);
          Result:=true;
        FINALLY
        END;
     end;
  end;
end;

function TStrings_LoadFromFile(
                               fn:String;
                               List:TStrings;
                               sEncoding:string='UTF-8'
                               ):boolean;
//Загрузить текстовый файл в TStrings (в заданной кодировке)
Var
  E:TEncoding;
begin
  E:=EncodingName_to_TEncoding(sEncoding);
  TRY
    Result:=TStrings_LoadFromFile(fn,List,E);
  FINALLY
  END;
end;

end.