fpc/packages/webidl/examples/parsewebidl.pas
michael 9b261254ee * V2 is default
git-svn-id: trunk@42790 -
2019-08-24 09:53:23 +00:00

121 lines
2.5 KiB
ObjectPascal

program parsewebidl;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, CustApp, webidlparser, webidlscanner,webidldefs;
ResourceString
SErrNeedInputFiles = 'Need one or more input files';
type
{ TParseWebIDLApplication }
TParseWebIDLApplication = class(TCustomApplication)
private
FContext : TWebIDLContext;
procedure ParseWebIDL(const AFileName: String);
protected
procedure DoRun; override;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure WriteHelp(Const Msg : String); virtual;
end;
{ TParseWebIDLApplication }
procedure TParseWebIDLApplication.ParseWebIDL(Const AFileName : String);
Var
F : TFileStream;
P : TWebIDLParser;
S : TWebIDLScanner;
I : Integer;
begin
FreeAndNil(FContext);
FContext:=TWebIDLContext.Create;
P:=Nil;
S:=Nil;
F:=TFileStream.Create(aFileName,fmOpenRead or fmShareDenyWrite);
try
S:=TWebIDLScanner.Create(F);
P:=TWebIDLParser.Create(FContext,S);
P.Version:=v2;
P.Parse;
Writeln('// Contents of '+AFileName);
For I:=0 to FConText.Definitions.Count-1 do
begin
Writeln('// Definition ',I+1:3,': ',FConText.Definitions[i].ClassName);
Writeln(FConText.Definitions[i].AsString(True)+';');
end;
finally
F.Free;
P.Free;
S.Free;
end;
end;
procedure TParseWebIDLApplication.DoRun;
var
FN,ErrorMsg: UTF8String;
NoF : TStringArray;
begin
Terminate;
ErrorMsg:=CheckOptions('hi:', ['help','input']);
if (ErrorMsg<>'') or HasOption('h','help') then
begin
WriteHelp(ErrorMsg);
Exit;
end;
FN:=GetOptionValue('i','input');
if FN='' then
NoF:=GetNonOptions('hi:', ['help','input'])
else
begin
SetLength(NOF,1);
NOF[0]:=FN;
end;
if Length(Nof)=0 then
WriteHelp(SErrNeedInputFiles);
For FN in NoF do
ParseWebIDL(FN);
end;
constructor TParseWebIDLApplication.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
StopOnException:=True;
FContext:=TWebIDLContext.Create;
end;
destructor TParseWebIDLApplication.Destroy;
begin
FreeAndNil(FContext);
inherited Destroy;
end;
procedure TParseWebIDLApplication.WriteHelp(Const Msg : String);
begin
if Msg<>'' then
Writeln('Error : ',Msg);
writeln('Usage: ', ExeName, ' -h');
ExitCode:=Ord(Msg<>'');
end;
var
Application: TParseWebIDLApplication;
begin
Application:=TParseWebIDLApplication.Create(nil);
Application.Title:='Parse WEB IDL Application';
Application.Run;
Application.Free;
end.