git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@395 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
skalogryz
2008-03-28 10:25:55 +00:00
parent 906c18e047
commit 256e2072b3

View File

@ -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;