File: parsewebidl.pas

package info (click to toggle)
fpc 3.2.2%2Bdfsg-49
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 341,452 kB
  • sloc: pascal: 3,820,194; xml: 194,356; ansic: 9,637; asm: 8,482; java: 5,346; sh: 4,813; yacc: 3,956; makefile: 2,705; lex: 2,661; javascript: 2,454; sql: 929; php: 474; cpp: 145; perl: 136; sed: 132; csh: 34; tcl: 7
file content (120 lines) | stat: -rw-r--r-- 2,530 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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.