You've already forked lazarus-ccr
updated
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@395 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -16,10 +16,14 @@ uses
|
|||||||
|
|
||||||
type
|
type
|
||||||
// this object is used only for precomile directives handling
|
// this object is used only for precomile directives handling
|
||||||
|
|
||||||
|
{ TPrecompileHandler }
|
||||||
|
|
||||||
TPrecompileHandler = class(TObject)
|
TPrecompileHandler = class(TObject)
|
||||||
public
|
public
|
||||||
hdr : TObjCHeader;
|
hdr : TObjCHeader;
|
||||||
procedure OnPrecompile(Sender: TObject);
|
procedure OnPrecompile(Sender: TObject);
|
||||||
|
procedure OnComment(Sender: TObject; const Comment: AnsiString);
|
||||||
constructor Create(AHeader: TObjCHeader);
|
constructor Create(AHeader: TObjCHeader);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -51,6 +55,31 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TPrecompileHandler.OnComment(Sender: TObject; const Comment: AnsiString);
|
||||||
|
var
|
||||||
|
parser : TTextParser;
|
||||||
|
cmt : TComment;
|
||||||
|
ent : TEntity;
|
||||||
|
begin
|
||||||
|
if length(Comment) < 2 then Exit;
|
||||||
|
parser := TTextParser(Sender);
|
||||||
|
//writeln(' > ', Comment);
|
||||||
|
|
||||||
|
if parser.Stack.Count > 0
|
||||||
|
then ent := TEntity(parser.Stack[parser.Stack.Count-1])
|
||||||
|
else ent := nil;
|
||||||
|
|
||||||
|
if not Assigned(ent) then Exit;
|
||||||
|
cmt := TComment.Create(ent);
|
||||||
|
cmt._Comment := Comment;
|
||||||
|
if IsSubStr('/*', cmt._Comment, 1) then begin
|
||||||
|
cmt._Comment[1] := '(';
|
||||||
|
if isSubStr('*/', cmt._Comment, length(cmt._Comment) - 1) then
|
||||||
|
cmt._Comment[ length(cmt._Comment)] := ')';
|
||||||
|
end;
|
||||||
|
ent.Items.Add(cmt);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TPrecompileHandler.Create(AHeader: TObjCHeader);
|
constructor TPrecompileHandler.Create(AHeader: TObjCHeader);
|
||||||
begin
|
begin
|
||||||
hdr := AHeader;
|
hdr := AHeader;
|
||||||
@ -58,10 +87,10 @@ end;
|
|||||||
|
|
||||||
procedure ReadAndParseFile(const FileName: AnsiString; outdata: TStrings);
|
procedure ReadAndParseFile(const FileName: AnsiString; outdata: TStrings);
|
||||||
var
|
var
|
||||||
hdr : TObjCHeader;
|
hdr : TObjCHeader;
|
||||||
txt : TTextParser;
|
parser : TTextParser;
|
||||||
prec : TPrecompileHandler;
|
prec : TPrecompileHandler;
|
||||||
s : AnsiString;
|
s : AnsiString;
|
||||||
begin
|
begin
|
||||||
if not FileExists(FileName) then
|
if not FileExists(FileName) then
|
||||||
Exit;
|
Exit;
|
||||||
@ -69,33 +98,28 @@ begin
|
|||||||
s := StrFromFile(FileName);
|
s := StrFromFile(FileName);
|
||||||
hdr := TObjCHeader.Create;
|
hdr := TObjCHeader.Create;
|
||||||
prec := TPrecompileHandler.Create(hdr);
|
prec := TPrecompileHandler.Create(hdr);
|
||||||
txt := TTextParser.Create;
|
parser := TTextParser.Create;
|
||||||
txt.TokenTable := CreateObjCTokenTable;
|
parser.TokenTable := CreateObjCTokenTable;
|
||||||
|
|
||||||
try
|
try
|
||||||
txt.Buf := s;
|
parser.Buf := s;
|
||||||
try
|
try
|
||||||
txt.TokenTable.Precompile := '#';
|
parser.TokenTable.Precompile := '#';
|
||||||
txt.OnPrecompile := prec.OnPrecompile;
|
parser.OnPrecompile := prec.OnPrecompile;
|
||||||
|
parser.OnComment := prec.OnComment;
|
||||||
hdr._FileName := ExtractFileName(FileName);
|
hdr._FileName := ExtractFileName(FileName);
|
||||||
hdr.Parse(txt);
|
hdr.Parse(parser);
|
||||||
except
|
except
|
||||||
end;
|
end;
|
||||||
WriteOutIncludeFile(hdr, outdata);
|
WriteOutIncludeFile(hdr, outdata);
|
||||||
finally
|
finally
|
||||||
hdr.Free;
|
hdr.Free;
|
||||||
txt.TokenTable.Free;
|
parser.TokenTable.Free;
|
||||||
txt.Free;
|
parser.Free;
|
||||||
prec.Free;
|
prec.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure GetParams(var InpFile, OutFile: AnsiString);
|
|
||||||
begin
|
|
||||||
InpFile := ParamStr(1);
|
|
||||||
OutFile := ParamStr(2);
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
var
|
||||||
inpf : AnsiString;
|
inpf : AnsiString;
|
||||||
f : Text;
|
f : Text;
|
||||||
|
Reference in New Issue
Block a user