Initial version
This commit is contained in:
4
bepascal/bepascal/headertoxml/README
Normal file
4
bepascal/bepascal/headertoxml/README
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
This tool use libstubgen.so to parse C++ headers and generate
|
||||||
|
the corresponding XML description.
|
||||||
|
|
||||||
|
This tool is part of the BeFPC poject.
|
||||||
205
bepascal/bepascal/headertoxml/headertoxml.pp
Normal file
205
bepascal/bepascal/headertoxml/headertoxml.pp
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
{ headertoxml - A tool from the befpc project
|
||||||
|
Copyright (C) 2002 Olivier Coursiere
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
}
|
||||||
|
program headertoxml;
|
||||||
|
|
||||||
|
{
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<CLASSES>
|
||||||
|
<CLASSE NAME="">
|
||||||
|
<FUNCTION NAME="">
|
||||||
|
<PARAMS>
|
||||||
|
<PARAM NAME="" TYPE=""/>
|
||||||
|
<PARAM NAME="" TYPE=""/>
|
||||||
|
</PARAMS>
|
||||||
|
<RESULT TYPE=""/>
|
||||||
|
</FUNCTION>
|
||||||
|
</CLASSE>
|
||||||
|
</CLASSES>
|
||||||
|
}
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, stubgen;
|
||||||
|
|
||||||
|
const
|
||||||
|
Eol = #10;
|
||||||
|
|
||||||
|
type
|
||||||
|
TXMLWriter = class(TObject)
|
||||||
|
private
|
||||||
|
FFileName : string;
|
||||||
|
FLevel : integer;
|
||||||
|
FList : TStringList;
|
||||||
|
procedure StartTag(TagName : string);
|
||||||
|
procedure EndTags;
|
||||||
|
public
|
||||||
|
constructor Create(FileName : string);
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure StartClasses;
|
||||||
|
procedure EndClasses;
|
||||||
|
procedure StartClasse(Elem : PSyntaxelem);
|
||||||
|
procedure EndClasse;
|
||||||
|
procedure StartFunction(Elem : PSyntaxelem);
|
||||||
|
procedure EndFunction;
|
||||||
|
procedure StartParams;
|
||||||
|
procedure EndParams;
|
||||||
|
procedure StartParam(Elem : PArgument);
|
||||||
|
procedure StartResult(aType : PChar);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TXMLWriter.Create(FileName : string);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FLevel := 0;
|
||||||
|
FList := TStringList.Create;
|
||||||
|
FFileName := ChangeFileExt(FileName, '.xml');
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TXMLWriter.Destroy;
|
||||||
|
begin
|
||||||
|
FList.SaveToFile(FFileName);
|
||||||
|
FList.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartTag(TagName : string);
|
||||||
|
begin
|
||||||
|
Inc(FLevel);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.EndTags;
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to FLevel - 1 do
|
||||||
|
begin
|
||||||
|
// Write
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartClasses;
|
||||||
|
begin
|
||||||
|
FList.Add('<CLASSES>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.EndClasses;
|
||||||
|
begin
|
||||||
|
FList.Add('</CLASSES>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartClasse(Elem : PSyntaxelem);
|
||||||
|
begin
|
||||||
|
FList.Add(Format('<CLASSE NAME="%s">', [Elem^.aName]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.EndClasse;
|
||||||
|
begin
|
||||||
|
FList.Add('</CLASSE>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartFunction(Elem : PSyntaxelem);
|
||||||
|
begin
|
||||||
|
FList.Add(Format('<FUNCTION NAME="%s">', [Elem^.aName]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.EndFunction;
|
||||||
|
begin
|
||||||
|
FList.Add('</FUNCTION>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartParams;
|
||||||
|
begin
|
||||||
|
FList.Add('<PARAMS>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.EndParams;
|
||||||
|
begin
|
||||||
|
FList.Add('</PARAMS>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartParam(Elem : PArgument);
|
||||||
|
begin
|
||||||
|
FList.Add(Format('<PARAM NAME="%s" TYPE="%s"\>', [Elem^.aName, Elem^.aType]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TXMLWriter.StartResult(aType : PChar);
|
||||||
|
begin
|
||||||
|
if aType <> nil then
|
||||||
|
FList.Add(Format('<RESULT TYPE="%s"\>', [aType]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Elem : PSyntaxelem;
|
||||||
|
fic : PChar;
|
||||||
|
s : string;
|
||||||
|
XMLWriter : TXMLWriter;
|
||||||
|
Current : PSyntaxelem;
|
||||||
|
CurrentArg : PArgument;
|
||||||
|
begin
|
||||||
|
WriteLn('Bonjour !');
|
||||||
|
if ParamCount > 0 then
|
||||||
|
begin
|
||||||
|
WriteLn(Paramstr(1));
|
||||||
|
init_tables;
|
||||||
|
s := Paramstr(1);
|
||||||
|
fic := @s[1];
|
||||||
|
Elem := scan(fic);
|
||||||
|
XMLWriter := TXMLWriter.Create(s);
|
||||||
|
try
|
||||||
|
XMLWriter.StartClasses;
|
||||||
|
XMLWriter.StartClasse(Elem);
|
||||||
|
XMLWriter.StartFunction(Elem^.children);
|
||||||
|
CurrentArg := Elem^.args;
|
||||||
|
if CurrentArg <> nil then
|
||||||
|
begin
|
||||||
|
WriteLn('Arguments');
|
||||||
|
XMLWriter.StartParam(CurrentArg);
|
||||||
|
while CurrentArg^.Next <> nil do
|
||||||
|
begin
|
||||||
|
CurrentArg := CurrentArg^.Next;
|
||||||
|
XMLWriter.StartParam(CurrentArg);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
XMLWriter.StartResult(Elem^.ret_type);
|
||||||
|
XMLWriter.EndFunction;
|
||||||
|
Current := Elem^.children;
|
||||||
|
while Current^.next <> nil do
|
||||||
|
begin
|
||||||
|
Current := Current^.next;
|
||||||
|
XMLWriter.StartFunction(Current);
|
||||||
|
CurrentArg := Current^.args;
|
||||||
|
if CurrentArg <> nil then
|
||||||
|
begin
|
||||||
|
XMLWriter.StartParam(CurrentArg);
|
||||||
|
while CurrentArg^.next <> nil do
|
||||||
|
begin
|
||||||
|
CurrentArg := CurrentArg^.next;
|
||||||
|
XMLWriter.StartParam(CurrentArg);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
XMLWriter.StartResult(Current^.ret_type);
|
||||||
|
XMLWriter.EndFunction;
|
||||||
|
end;
|
||||||
|
XMLWriter.EndFunction;
|
||||||
|
XMLWriter.EndClasse;
|
||||||
|
XMLWriter.EndClasses;
|
||||||
|
finally
|
||||||
|
XMLWriter.Free;
|
||||||
|
end;
|
||||||
|
free_tables;
|
||||||
|
end;
|
||||||
|
end.
|
||||||
Reference in New Issue
Block a user