codetools: added TCodeCache.OnDecodeLoaded/OnEncodeSaving

git-svn-id: trunk@13541 -
This commit is contained in:
mattias 2007-12-30 20:54:19 +00:00
parent bb71681bc5
commit 2130c25eb8
2 changed files with 75 additions and 13 deletions

View File

@ -66,6 +66,10 @@ type
procedure SetFilename(Value: string);
procedure SetScanner(const Value: TLinkScanner);
procedure SetIsDeleted(const NewValue: boolean);
protected
procedure DecodeLoaded(const AFilename: string;
var ASource, ADiskEncoding, AMemEncoding: string); override;
procedure EncodeSaving(const AFilename: string; var ASource: string); override;
public
constructor Create;
destructor Destroy; override;
@ -114,6 +118,11 @@ type
ALastTimeUsed: TDateTime);
end;
TOnCodeCacheDecodeLoaded = procedure(Code: TCodeBuffer; const Filename: string;
var Source, DiskEncoding, MemEncoding: string) of object;
TOnCodeCacheEncodeSaving = procedure(Code: TCodeBuffer;
const Filename: string; var Source: string) of object;
{ TCodeCache }
TCodeCache = class(TObject)
@ -129,6 +138,8 @@ type
fLastIncludeLinkFileValid: boolean;
fLastIncludeLinkFileChangeStep: integer;
fChangeStep: integer;
FOnDecodeLoaded: TOnCodeCacheDecodeLoaded;
FOnEncodeSaving: TOnCodeCacheEncodeSaving;
function FindIncludeLink(const IncludeFilename: string): string;
function FindIncludeLinkNode(const IncludeFilename: string): TIncludedByLink;
function FindIncludeLinkAVLNode(const IncludeFilename: string): TAVLTreeNode;
@ -144,6 +155,10 @@ type
procedure OnScannerIncludeCode(ParentCode, IncludeCode: pointer);
procedure UpdateIncludeLinks;
procedure IncreaseChangeStep;
procedure DecodeLoaded(Code: TCodeBuffer; const AFilename: string;
var ASource, ADiskEncoding, AMemEncoding: string);
procedure EncodeSaving(Code: TCodeBuffer;
const AFilename: string; var ASource: string);
public
constructor Create;
destructor Destroy; override;
@ -178,6 +193,10 @@ type
read FGlobalWriteLockIsSet write FGlobalWriteLockIsSet;
property GlobalWriteLockStep: integer
read FGlobalWriteLockStep write FGlobalWriteLockStep;
property OnDecodeLoaded: TOnCodeCacheDecodeLoaded read FOnDecodeLoaded
write FOnDecodeLoaded;
property OnEncodeSaving: TOnCodeCacheEncodeSaving read FOnEncodeSaving
write FOnEncodeSaving;
end;
@ -363,6 +382,8 @@ begin
NewBuffer:=TCodeBuffer.Create;
NewBuffer.FileName:=AFilename;
NewBuffer.Source:=OldBuffer.Source;
NewBuffer.DiskEncoding:=NewBuffer.DiskEncoding;
NewBuffer.MemEncoding:=NewBuffer.MemEncoding;
Result:=NewBuffer.Save;
//DebugLn('[TCodeCache.SaveBufferAs] C ',Result,' ',NewBuffer.IsVirtual);
if not Result then begin
@ -566,6 +587,20 @@ begin
if fChangeStep=$7fffffff then fChangeStep:=-$7fffffff;
end;
procedure TCodeCache.DecodeLoaded(Code: TCodeBuffer; const AFilename: string;
var ASource, ADiskEncoding, AMemEncoding: string);
begin
if Assigned(OnDecodeLoaded) then
OnDecodeLoaded(Code,AFilename,ASource,ADiskEncoding,AMemEncoding);
end;
procedure TCodeCache.EncodeSaving(Code: TCodeBuffer; const AFilename: string;
var ASource: string);
begin
if Assigned(OnEncodeSaving) then
OnEncodeSaving(Code,AFilename,ASource);
end;
function TCodeCache.SaveIncludeLinksToFile(const AFilename: string;
OnlyIfChanged: boolean): boolean;
var XMLConfig: TXMLConfig;
@ -879,6 +914,22 @@ begin
end;
end;
procedure TCodeBuffer.DecodeLoaded(const AFilename: string; var ASource,
ADiskEncoding, AMemEncoding: string);
begin
inherited DecodeLoaded(AFilename,ASource,ADiskEncoding,AMemEncoding);
if CodeCache<>nil then
CodeCache.DecodeLoaded(Self,AFilename,ASource,ADiskEncoding,AMemEncoding);
end;
procedure TCodeBuffer.EncodeSaving(const AFilename: string; var ASource: string
);
begin
inherited EncodeSaving(AFilename,ASource);
if CodeCache<>nil then
CodeCache.EncodeSaving(Self,AFilename,ASource);
end;
procedure TCodeBuffer.MakeFileDateValid;
begin
FFileChangeStep:=ChangeStep;

View File

@ -48,8 +48,7 @@ type
of object;
TOnSourceLogMove = procedure(Sender: TSourceLog; Pos, Len, MoveTo: integer)
of object;
TOnSourceLogDecodeLoaded = procedure(Sender: TSourceLog;
const Filename: string;
TOnSourceLogDecodeLoaded = procedure(Sender: TSourceLog; const Filename: string;
var Source, DiskEncoding, MemEncoding: string) of object;
TOnSourceLogEncodeSaving = procedure(Sender: TSourceLog;
const Filename: string; var Source: string) of object;
@ -118,6 +117,10 @@ type
procedure IncreaseChangeStep;
procedure SetReadOnly(const Value: boolean);
function IndexOfChangeHook(AChangeHook: TOnSourceChange): integer;
protected
procedure DecodeLoaded(const AFilename: string;
var ASource, ADiskEncoding, AMemEncoding: string); virtual;
procedure EncodeSaving(const AFilename: string; var ASource: string); virtual;
public
Data: Pointer;
function LineCount: integer;
@ -155,8 +158,8 @@ type
procedure LoadFromStream(s: TStream);
procedure SaveToStream(s: TStream);
property ReadOnly: boolean read FReadOnly write SetReadOnly;
property DiskEncoding: string read FDiskEncoding;
property MemEncoding: string read FMemEncoding;
property DiskEncoding: string read FDiskEncoding write FDiskEncoding;
property MemEncoding: string read FMemEncoding write FMemEncoding;
property WriteLock: integer read FWriteLock;
procedure IncWriteLock;
procedure DecWriteLock;
@ -664,12 +667,9 @@ begin
SetLength(s,fs.Size);
if s<>'' then
fs.Read(s[1],length(s));
if Assigned(OnDecodeLoaded) then
OnDecodeLoaded(Self,Filename,s,FDiskEncoding,FMemEncoding)
else begin
FDiskEncoding:='';
FMemEncoding:='';
end;
FDiskEncoding:='';
FMemEncoding:='';
DecodeLoaded(Filename,s,FDiskEncoding,FMemEncoding);
Source:=s;
finally
fs.Free;
@ -703,8 +703,7 @@ begin
fs:=TFileStream.Create(TheFilename, fmCreate);
try
s:=Source;
if Assigned(OnEncodeSaving) then
OnEncodeSaving(Self,Filename,s);
EncodeSaving(Filename,s);
if s<>'' then
fs.Write(s[1],length(s));
finally
@ -855,6 +854,19 @@ begin
while (Result>=0) and (FChangeHooks[Result]<>AChangeHook) do dec(Result);
end;
procedure TSourceLog.DecodeLoaded(const AFilename: string;
var ASource, ADiskEncoding, AMemEncoding: string);
begin
if Assigned(OnDecodeLoaded) then
OnDecodeLoaded(Self,AFilename,ASource,ADiskEncoding,AMemEncoding);
end;
procedure TSourceLog.EncodeSaving(const AFilename: string; var ASource: string);
begin
if Assigned(OnEncodeSaving) then
OnEncodeSaving(Self,AFilename,ASource);
end;
procedure TSourceLog.AddChangeHook(AnOnSourceChange: TOnSourceChange);
var i: integer;
begin
@ -883,6 +895,5 @@ begin
end;
end;
end.