You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2997 8e941d3f-bd1b-0410-a28a-d453659cc2b4
136 lines
3.4 KiB
ObjectPascal
136 lines
3.4 KiB
ObjectPascal
{
|
|
This file is part of the Web Service Toolkit
|
|
Copyright (c) 2009-2014 by Inoussa OUEDRAOGO
|
|
|
|
This file is provide under modified LGPL licence
|
|
( the files COPYING.modifiedLGPL and COPYING.LGPL).
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
}
|
|
{$INCLUDE wst_global.inc}
|
|
unit locators;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils
|
|
{$IFDEF WST_DELPHI}
|
|
, xmldom, wst_delphi_xml
|
|
{$ENDIF WST_DELPHI}
|
|
{$IFDEF FPC}
|
|
, DOM, wst_fpc_xml
|
|
{$ENDIF FPC}
|
|
;
|
|
|
|
type
|
|
|
|
IDocumentLocator = interface
|
|
['{F063700B-C0ED-4C54-9A54-C97030E80BD4}']
|
|
function Find(
|
|
const ADocLocation : string;
|
|
out ADoc : TXMLDocument
|
|
) : Boolean;
|
|
function FindPath(ADocLocation : string) : string;
|
|
|
|
function GetBasePath() : string;
|
|
procedure SetBasePath(AValue : string);
|
|
function Clone() : IDocumentLocator;
|
|
function MakeRelavive(const AFileName : string) : string;
|
|
end;
|
|
|
|
{ TFileDocumentLocator }
|
|
|
|
TFileDocumentLocator = class(TInterfacedObject,IDocumentLocator)
|
|
private
|
|
FBasePath : string;
|
|
protected
|
|
function FindFileName(ADocLocation : string) : string;
|
|
property BasePath : string read FBasePath;
|
|
protected
|
|
function Find(
|
|
const ADocLocation : string;
|
|
out ADoc : TXMLDocument
|
|
) : Boolean;
|
|
function FindPath(ADocLocation : string) : string;
|
|
|
|
function GetBasePath() : string;
|
|
procedure SetBasePath(AValue : string);
|
|
function Clone() : IDocumentLocator;
|
|
function MakeRelavive(const AFileName : string) : string;
|
|
public
|
|
constructor Create(const ABasePath : string);virtual;
|
|
end;
|
|
TFileDocumentLocatorClass = class of TFileDocumentLocator;
|
|
|
|
implementation
|
|
|
|
{ TFileDocumentLocator }
|
|
|
|
function TFileDocumentLocator.FindFileName(ADocLocation : string) : string;
|
|
var
|
|
locFileName : string;
|
|
begin
|
|
//locFileName := BasePath + ExtractFileName(ADocLocation);
|
|
locFileName := StringReplace(ADocLocation,'\',PathDelim,[rfIgnoreCase,rfReplaceAll]);
|
|
locFileName := StringReplace(locFileName,'/',PathDelim,[rfIgnoreCase,rfReplaceAll]);
|
|
|
|
locFileName := BasePath + locFileName;
|
|
//locFileName := ExpandFileName(locFileName);
|
|
if FileExists(locFileName) then
|
|
Result := locFileName
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TFileDocumentLocator.Find(
|
|
const ADocLocation: string;
|
|
out ADoc: TXMLDocument
|
|
) : Boolean;
|
|
var
|
|
locFileName : string;
|
|
begin
|
|
locFileName := FindFileName(ADocLocation);
|
|
Result := (locFileName <> '');
|
|
if Result then
|
|
ADoc := ReadXMLFile(locFileName);
|
|
end;
|
|
|
|
function TFileDocumentLocator.FindPath(ADocLocation : string) : string;
|
|
begin
|
|
Result := FindFileName(ADocLocation);
|
|
if (Result <> '') then
|
|
Result := ExtractFilePath(Result);
|
|
end;
|
|
|
|
function TFileDocumentLocator.GetBasePath() : string;
|
|
begin
|
|
Result := BasePath;
|
|
end;
|
|
|
|
procedure TFileDocumentLocator.SetBasePath(AValue : string);
|
|
begin
|
|
if (FBasePath <> AValue) then
|
|
FBasePath := AValue;
|
|
end;
|
|
|
|
function TFileDocumentLocator.Clone() : IDocumentLocator;
|
|
begin
|
|
Result := TFileDocumentLocatorClass(Self.ClassType).Create(FBasePath) as IDocumentLocator;
|
|
end;
|
|
|
|
function TFileDocumentLocator.MakeRelavive(const AFileName: string): string;
|
|
begin
|
|
Result := ExtractRelativePath(GetBasePath(),AFileName);
|
|
end;
|
|
|
|
constructor TFileDocumentLocator.Create(const ABasePath: string);
|
|
begin
|
|
SetBasePath(IncludeTrailingPathDelimiter(ABasePath));
|
|
end;
|
|
|
|
end.
|
|
|