mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-04 18:17:13 +01:00
codetools: added TCodeCache.OnDecodeLoaded/OnEncodeSaving
git-svn-id: trunk@13541 -
This commit is contained in:
parent
bb71681bc5
commit
2130c25eb8
@ -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;
|
||||
|
||||
@ -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.
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user