You've already forked lazarus-ccr
* Added command-line version of parser: idltopas
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2343 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
82
applications/idlparser/idltopas.lpi
Normal file
82
applications/idlparser/idltopas.lpi
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<General>
|
||||||
|
<Flags>
|
||||||
|
<MainUnitHasCreateFormStatements Value="False"/>
|
||||||
|
</Flags>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="IDL to Pascal parser"/>
|
||||||
|
<UseAppBundle Value="False"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="Default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||||
|
<ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
<CommandLineParams Value="/home/CNOC/joost/svn/geckoport/xulrunner-sdk-10/idl/nsIPrompt.idl"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<Units Count="3">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="idltopas.pp"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="idltopas"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="idlparser.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="idlParser"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="idlgenpascal.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="idlGenPascal"/>
|
||||||
|
</Unit2>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<Target>
|
||||||
|
<Filename Value="idltopas"/>
|
||||||
|
</Target>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Other>
|
||||||
|
<CompilerMessages>
|
||||||
|
<MsgFileName Value=""/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
163
applications/idlparser/idltopas.pp
Normal file
163
applications/idlparser/idltopas.pp
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
program idltopas;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}{$ENDIF}
|
||||||
|
Classes, SysUtils, CustApp,
|
||||||
|
idlParser, idlGenPascal;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TIDLToPascal }
|
||||||
|
|
||||||
|
TIDLToPascal = class(TCustomApplication)
|
||||||
|
protected
|
||||||
|
procedure DoRun; override;
|
||||||
|
public
|
||||||
|
constructor Create(TheOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure WriteHelp; virtual;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TIDLToPascal }
|
||||||
|
|
||||||
|
procedure HandleIDLFile(AFilename: string; AnOutput: TStrings; TypeConvList, CTypesList: TStrings; AlwaysAddPrefixToParam: boolean);
|
||||||
|
var
|
||||||
|
AnIDLList: TIDLList;
|
||||||
|
AnInput: TStrings;
|
||||||
|
begin
|
||||||
|
AnInput := TStringList.Create;
|
||||||
|
AnInput.LoadFromFile(AFilename);
|
||||||
|
try
|
||||||
|
AnIDLList := TIDLList.create;
|
||||||
|
try
|
||||||
|
ParseFile(AnIDLList, AnInput);
|
||||||
|
GeneratePascalSource(AnIDLList,AnOutput,TypeConvList, CTypesList, AlwaysAddPrefixToParam);
|
||||||
|
finally
|
||||||
|
AnIDLList.Free;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
AnInput.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIDLToPascal.DoRun;
|
||||||
|
var
|
||||||
|
ErrorMsg: String;
|
||||||
|
i: integer;
|
||||||
|
filenames: TStrings;
|
||||||
|
output: TStrings;
|
||||||
|
OutputToFile: boolean;
|
||||||
|
OutputFilename: string;
|
||||||
|
CTypes, TypeMapList: TStrings;
|
||||||
|
AlwaysAddPrefixToParam: boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
filenames := TStringList.Create;
|
||||||
|
CTypes := TStringList.Create;
|
||||||
|
TypeMapList := TStringList.Create;
|
||||||
|
try
|
||||||
|
// quick check parameters
|
||||||
|
ErrorMsg:=CheckOptions('hpo::c:m:',nil,nil,filenames);
|
||||||
|
if ErrorMsg<>'' then
|
||||||
|
begin
|
||||||
|
ShowException(Exception.Create(ErrorMsg));
|
||||||
|
Terminate;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// parse parameters
|
||||||
|
if (HasOption('h','help')) or (filenames.Count=0) then
|
||||||
|
begin
|
||||||
|
WriteHelp;
|
||||||
|
Terminate;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if HasOption('c') then
|
||||||
|
begin
|
||||||
|
CTypes.LoadFromFile(GetOptionValue('c'));
|
||||||
|
end;
|
||||||
|
|
||||||
|
if HasOption('m') then
|
||||||
|
begin
|
||||||
|
TypeMapList.LoadFromFile(GetOptionValue('m'));
|
||||||
|
end;
|
||||||
|
|
||||||
|
OutputToFile := HasOption('o');
|
||||||
|
OutputFilename := GetOptionValue('o');
|
||||||
|
AlwaysAddPrefixToParam := HasOption('p');
|
||||||
|
|
||||||
|
output := TStringList.Create;
|
||||||
|
try
|
||||||
|
for i := 0 to filenames.Count-1 do
|
||||||
|
begin
|
||||||
|
if OutputToFile and (OutputFilename='') then
|
||||||
|
Output.Clear;
|
||||||
|
|
||||||
|
HandleIDLFile(filenames.Strings[i], output, TypeMapList, CTypes, AlwaysAddPrefixToParam);
|
||||||
|
|
||||||
|
if OutputToFile and (OutputFilename='') then
|
||||||
|
output.SaveToFile(LowerCase(ExtractFileName(ChangeFileExt(filenames.Strings[i],'.inc'))));
|
||||||
|
end;
|
||||||
|
if not OutputToFile then
|
||||||
|
writeln(output.Text)
|
||||||
|
else if OutputFilename<>'' then
|
||||||
|
output.SaveToFile(OutputFilename);
|
||||||
|
|
||||||
|
finally
|
||||||
|
output.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
finally
|
||||||
|
filenames.Free;
|
||||||
|
CTypes.Free;
|
||||||
|
TypeMapList.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// stop program loop
|
||||||
|
Terminate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TIDLToPascal.Create(TheOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(TheOwner);
|
||||||
|
StopOnException:=True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TIDLToPascal.Destroy;
|
||||||
|
begin
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIDLToPascal.WriteHelp;
|
||||||
|
begin
|
||||||
|
{ add your help code here }
|
||||||
|
writeln('Usage: ',ApplicationName,' [OPTION] SOURCEFILES');
|
||||||
|
writeln('Convert idl-SOURCEFILES to Pascal include files');
|
||||||
|
writeln('');
|
||||||
|
writeln(' -h Shows this help message');
|
||||||
|
writeln(' -p Always add the ''a'' or ''an'' prefix to method-parameters names');
|
||||||
|
writeln(' -o Write the output to file(s). The file(s) are written to the current');
|
||||||
|
writeln(' directory with the same filenames name as the input files but with');
|
||||||
|
writeln(' the ''.inc'' extension');
|
||||||
|
writeln(' -o filename Write the output to one file called ''filename''');
|
||||||
|
writeln(' -c filename Read ''filename'' to get a list of typenames that have to be');
|
||||||
|
writeln(' prefixed with ''c'' or ''cu'' (as used in the ctypes unit)');
|
||||||
|
writeln(' -m filename Read ''filename'' for a list of mappings between idl-type names');
|
||||||
|
writeln(' and their Pascal counterpart');
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Application: TIDLToPascal;
|
||||||
|
begin
|
||||||
|
Application:=TIDLToPascal.Create(nil);
|
||||||
|
Application.Title:='IDL to Pascal parser';
|
||||||
|
Application.Run;
|
||||||
|
Application.Free;
|
||||||
|
end.
|
||||||
|
|
Reference in New Issue
Block a user