JarUnPacker/prereq/ANB ST CP/data/ANBFormatString.pas
2023-02-02 12:02:14 +03:00

73 lines
2.2 KiB
ObjectPascal

unit ANBFormatString;
{$MODE Delphi}
{$codepage UTF8}
interface
uses StrUtils, SysUtils, VCLEx;
{stdcalls}
function FormatStr(const AFrmtdStr: String; const AArgs, AArgsValues: array of String): String; STDCALL;
function FormatStrW(const AFrmtdStr: WideString; const AArgs, AArgsValues: array of WideString): WideString; STDCALL;
implementation
function SearchAndReplaceStr(const AStr, ASearchStr, AReplaceStr: String): String;
var CurrDelim, NextDelim: IntEx;
ElemName, s: String;
begin
s:= '';
CurrDelim:= 1;
repeat
NextDelim:= PosEx(ASearchStr, AStr, CurrDelim);
if NextDelim = 0 then
NextDelim:= Length(AStr) + 1;
ElemName:= Copy(AStr, CurrDelim, NextDelim - CurrDelim);
if not (NextDelim > Length(AStr)) then
s:= s + ElemName + AReplaceStr
else
s:= s + ElemName;
CurrDelim:= NextDelim + Length(ASearchStr);
until CurrDelim > Length(AStr);
Result:= s;
end;
{Only for Windows}
function SearchAndReplaceStrW(const AStr, ASearchStr, AReplaceStr: WideString): WideString;
var CurrDelim, NextDelim: IntEx;
ElemName, s: WideString;
begin
s:= '';
CurrDelim:= 1;
repeat
NextDelim:= PosEx(ASearchStr, AStr, CurrDelim);
if NextDelim = 0 then
NextDelim:= Length(AStr) + 1;
ElemName:= Copy(AStr, CurrDelim, NextDelim - CurrDelim);
if not (NextDelim > Length(AStr)) then
s:= s + ElemName + AReplaceStr
else
s:= s + ElemName;
CurrDelim:= NextDelim + Length(ASearchStr);
until CurrDelim > Length(AStr);
Result:= s;
end;
function FormatStr(const AFrmtdStr: string; const AArgs, AArgsValues: array of String): String;
var i: IntEx;
s: String;
begin
s:= AFrmtdStr;
if High(AArgs) <> High(AArgsValues) then
raise Exception.Create('Array of arguments not equal array of its values!');
for i:= 0 to High(AArgs) do
s:= SearchAndReplaceStr(s, AArgs[i], AArgsValues[i]);
Result:= s;
end;
{Only for Windows}
function FormatStrW(const AFrmtdStr: WideString; const AArgs, AArgsValues: array of WideString): WideString;
var i: IntEx;
s: WideString;
begin
s:= AFrmtdStr;
if High(AArgs) <> High(AArgsValues) then
raise Exception.Create('Array of arguments not equal array of its values!');
for i:= 0 to High(AArgs) do
s:= SearchAndReplaceStrW(s, AArgs[i], AArgsValues[i]);
Result:= s;
end;
end.