* Add .pas file read callback

git-svn-id: trunk@37794 -
This commit is contained in:
michael 2017-12-24 12:34:31 +00:00
parent cb46e21bc3
commit 68ed736c93

View File

@ -9,12 +9,17 @@ uses
{ --------------------------------------------------------------------- { ---------------------------------------------------------------------
Compiler descendant, usable in library Compiler descendant, usable in library
---------------------------------------------------------------------} ---------------------------------------------------------------------}
Const
DefaultReadBufferSize = 32*1024; // 32kb buffer
Type Type
TLibLogCallBack = Procedure (Data : Pointer; Msg : PAnsiChar; MsgLen : Integer); stdcall; TLibLogCallBack = Procedure (Data : Pointer; Msg : PAnsiChar; MsgLen : Integer); stdcall;
TWriteJSCallBack = Procedure (Data : Pointer; TWriteJSCallBack = Procedure (Data : Pointer;
AFileName: PAnsiChar; AFileNameLen : Integer; AFileName: PAnsiChar; AFileNameLen : Integer;
AFileData : PAnsiChar; AFileDataLen: Int32); stdcall; AFileData : PAnsiChar; AFileDataLen: Int32); stdcall;
TReadPasCallBack = Procedure (Data : Pointer;
AFileName: PAnsiChar; AFileNameLen : Integer;
AFileData : PAnsiChar; Var AFileDataLen: Int32); stdcall;
{ TLibraryPas2JSCompiler } { TLibraryPas2JSCompiler }
@ -24,8 +29,11 @@ Type
FLastErrorClass: String; FLastErrorClass: String;
FOnLibLogCallBack: TLibLogCallBack; FOnLibLogCallBack: TLibLogCallBack;
FOnLibLogData: Pointer; FOnLibLogData: Pointer;
FOnReadPasData: Pointer;
FOnReadPasFile: TReadPasCallBack;
FOnWriteJSCallBack: TWriteJSCallBack; FOnWriteJSCallBack: TWriteJSCallBack;
FOnWriteJSData: Pointer; FOnWriteJSData: Pointer;
FReadBufferLen: Cardinal;
Protected Protected
Function DoWriteJSFile(const DestFilename: String; aWriter: TPas2JSMapper): Boolean; override; Function DoWriteJSFile(const DestFilename: String; aWriter: TPas2JSMapper): Boolean; override;
Procedure GetLastError(AError : PAnsiChar; Var AErrorLength : Longint; Procedure GetLastError(AError : PAnsiChar; Var AErrorLength : Longint;
@ -41,6 +49,9 @@ Type
Property OnLibLogData : Pointer Read FOnLibLogData Write FOnLibLogData; Property OnLibLogData : Pointer Read FOnLibLogData Write FOnLibLogData;
Property OnWriteJSCallBack : TWriteJSCallBack Read FOnWriteJSCallBack Write FOnWriteJSCallBack; Property OnWriteJSCallBack : TWriteJSCallBack Read FOnWriteJSCallBack Write FOnWriteJSCallBack;
Property OnWriteJSData : Pointer Read FOnWriteJSData Write FOnWriteJSData; Property OnWriteJSData : Pointer Read FOnWriteJSData Write FOnWriteJSData;
Property OnReadPasFile : TReadPasCallBack Read FOnReadPasFile Write FOnReadPasFile;
Property OnReadPasData : Pointer Read FOnReadPasData Write FOnReadPasData;
Property ReadBufferLen : Cardinal Read FReadBufferLen Write FReadBufferLen;
end; end;
{ TLibraryPas2JSCompiler } { TLibraryPas2JSCompiler }
@ -81,10 +92,35 @@ begin
Move(FLastErrorClass[1],AErrorClass^,L); Move(FLastErrorClass[1],AErrorClass^,L);
end; end;
function TLibraryPas2JSCompiler.ReadFile(aFilename: string; var aSource: string function TLibraryPas2JSCompiler.ReadFile(aFilename: string; var aSource: string): boolean;
): boolean;
Var
Buf : Array of AnsiChar;
S : TStringStream;
BytesRead : Cardinal;
begin begin
Result:=false; // use default reader if Not Assigned(OnReadPasFile) then
Exit(False);
S:=nil;
try
if ReadBufferLen=0 then
ReadBufferLen:=DefaultReadBufferSize;
SetLength(Buf,ReadBufferLen);
S:=TStringStream.Create('',CP_ACP);
Repeat
BytesRead:=ReadBufferLen;
FOnReadPasFile(OnReadPasData,PAnsiChar(aFileName),Length(aFileName),@Buf[0],BytesRead);
If BytesRead>0 then
S.Write(Buf[0],BytesRead);
Until (BytesRead<ReadBufferLen);
Result:=S.Size<>0;
if Result then
aSource:=S.DataString;
finally
SetLength(Buf,0);
S.Free;
end;
end; end;
constructor TLibraryPas2JSCompiler.Create; constructor TLibraryPas2JSCompiler.Create;
@ -92,6 +128,7 @@ begin
inherited Create; inherited Create;
Log.OnLog:=@DoLibraryLog; Log.OnLog:=@DoLibraryLog;
FileCache.OnReadFile:=@ReadFile; FileCache.OnReadFile:=@ReadFile;
FReadBufferLen:=DefaultReadBufferSize;
end; end;
procedure TLibraryPas2JSCompiler.DoLibraryLog(Sender: TObject; const Msg: String); procedure TLibraryPas2JSCompiler.DoLibraryLog(Sender: TObject; const Msg: String);
@ -167,6 +204,16 @@ begin
TLibraryPas2JSCompiler(P).OnLibLogData:=CallBackData; TLibraryPas2JSCompiler(P).OnLibLogData:=CallBackData;
end; end;
Procedure SetPas2JSReadPasCallBack(P : PPas2JSCompiler; ACallBack : TReadPasCallBack; CallBackData : Pointer; ABufferSize : Cardinal); stdcall;
begin
TLibraryPas2JSCompiler(P).OnReadPasData:=CallBackData;
TLibraryPas2JSCompiler(P).OnReadPasFile:=ACallback;
if (ABufferSize=0) then
ABufferSize:=DefaultReadBufferSize;
TLibraryPas2JSCompiler(P).ReadBufferLen:=ABufferSize;
end;
Function RunPas2JSCompiler(P : PPas2JSCompiler; ACompilerExe, AWorkingDir : PAnsiChar; Function RunPas2JSCompiler(P : PPas2JSCompiler; ACompilerExe, AWorkingDir : PAnsiChar;
CommandLine : PPAnsiChar; DoReset : Boolean) : Boolean; stdcall; CommandLine : PPAnsiChar; DoReset : Boolean) : Boolean; stdcall;
@ -197,6 +244,7 @@ exports
GetPas2JSCompiler, GetPas2JSCompiler,
FreePas2JSCompiler, FreePas2JSCompiler,
RunPas2JSCompiler, RunPas2JSCompiler,
SetPas2JSReadPasCallBack,
SetPas2JSWriteJSCallBack, SetPas2JSWriteJSCallBack,
SetPas2JSCompilerLogCallBack, SetPas2JSCompilerLogCallBack,
GetPas2JSCompilerLastError; GetPas2JSCompilerLastError;