Componentes.Terceros.jvcl/official/3.39/devtools/PackagesGenerator/GenerateReplacements.pas
2010-01-18 16:55:50 +00:00

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.