git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
127 lines
3.0 KiB
ObjectPascal
127 lines
3.0 KiB
ObjectPascal
unit GenerateReplacements;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Contnrs, Classes,
|
|
JclSimpleXml,
|
|
PackageInformation;
|
|
|
|
type
|
|
TClxReplacement = class (TObject)
|
|
private
|
|
FOriginal: string;
|
|
FReplacement: string;
|
|
public
|
|
constructor Create(Node : TJclSimpleXmlElem); overload;
|
|
function DoReplacement(const Filename: string): string;
|
|
property Original : string read FOriginal;
|
|
property Replacement : string read FReplacement;
|
|
end;
|
|
|
|
TClxReplacementList = class (TObjectList)
|
|
private
|
|
IgnoredFiles: TStringList;
|
|
|
|
function GetItems(index: integer): TClxReplacement;
|
|
procedure SetItems(index: integer; const Value: TClxReplacement);
|
|
public
|
|
constructor Create(Node : TJclSimpleXmlElem); overload;
|
|
destructor Destroy; override;
|
|
|
|
function DoReplacement(const Filename: string): string;
|
|
|
|
property Items[index : integer] : TClxReplacement read GetItems write SetItems;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils,
|
|
JclStrings;
|
|
(*uses
|
|
Windows, SysUtils, ShellApi, FileUtils,
|
|
{$IFNDEF COMPILER12_UP}
|
|
JvJCLUtils,
|
|
{$ENDIF ~COMPILER12_UP}
|
|
JclBase,
|
|
JclDateTime, JclStrings, JclFileUtils, JclSysUtils, JclLogic,
|
|
ConditionParser;*)
|
|
|
|
{ TClxReplacement }
|
|
|
|
constructor TClxReplacement.Create(Node: TJclSimpleXmlElem);
|
|
begin
|
|
inherited Create;
|
|
FOriginal := Node.Properties.ItemNamed['original'].Value;
|
|
FReplacement := Node.Properties.ItemNamed['replacement'].Value;
|
|
end;
|
|
|
|
function TClxReplacement.DoReplacement(const Filename: string): string;
|
|
var
|
|
TmpResult: string;
|
|
begin
|
|
TmpResult := Filename;
|
|
StrReplace(TmpResult, Original, Replacement, [rfIgnoreCase]);
|
|
Result := TmpResult;
|
|
end;
|
|
|
|
{ TClxReplacementList }
|
|
|
|
constructor TClxReplacementList.Create(Node: TJclSimpleXmlElem);
|
|
var
|
|
i : integer;
|
|
begin
|
|
inherited Create(True);
|
|
IgnoredFiles := TStringList.Create;
|
|
IgnoredFiles.Sorted := True;
|
|
IgnoredFiles.Duplicates := dupIgnore;
|
|
|
|
if Assigned(Node) then
|
|
for i := 0 to Node.Items.Count - 1 do
|
|
begin
|
|
if Node.Items[i].Name = 'replacement' then
|
|
Add(TClxReplacement.Create(Node.Items[i]))
|
|
else if Node.Items[i].Name = 'ignoredFile' then
|
|
IgnoredFiles.Add(ExtractFileName(Node.Items[i].Properties.Value('filename')));
|
|
end;
|
|
end;
|
|
|
|
destructor TClxReplacementList.Destroy;
|
|
begin
|
|
IgnoredFiles.Free;
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TClxReplacementList.DoReplacement(
|
|
const Filename: string): string;
|
|
var
|
|
i : Integer;
|
|
begin
|
|
Result := Filename;
|
|
|
|
// Only do the replacement if the file is not to be ignored
|
|
if not IgnoredFiles.Find(ExtractFileName(Filename), i) then
|
|
begin
|
|
for i := 0 to Count -1 do
|
|
Result := Items[i].DoReplacement(Result);
|
|
end;
|
|
end;
|
|
|
|
function TClxReplacementList.GetItems(
|
|
index: integer): TClxReplacement;
|
|
begin
|
|
Result := TClxReplacement(inherited Items[index]);
|
|
end;
|
|
|
|
procedure TClxReplacementList.SetItems(index: integer;
|
|
const Value: TClxReplacement);
|
|
begin
|
|
inherited Items[index] := Value;
|
|
end;
|
|
|
|
end.
|