From 6834943bb4f1791f178cb32a2501529a3ec9366f Mon Sep 17 00:00:00 2001 From: ocoursiere Date: Sun, 22 Sep 2002 12:35:24 +0000 Subject: [PATCH] Initial version --- bepascal/bepascal/headertoxml/README | 4 + bepascal/bepascal/headertoxml/headertoxml.pp | 205 +++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 bepascal/bepascal/headertoxml/README create mode 100644 bepascal/bepascal/headertoxml/headertoxml.pp diff --git a/bepascal/bepascal/headertoxml/README b/bepascal/bepascal/headertoxml/README new file mode 100644 index 0000000..45503ef --- /dev/null +++ b/bepascal/bepascal/headertoxml/README @@ -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. \ No newline at end of file diff --git a/bepascal/bepascal/headertoxml/headertoxml.pp b/bepascal/bepascal/headertoxml/headertoxml.pp new file mode 100644 index 0000000..7932a75 --- /dev/null +++ b/bepascal/bepascal/headertoxml/headertoxml.pp @@ -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; + +{ + + + + + + + + + + + + +} + +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(''); +end; + +procedure TXMLWriter.EndClasses; +begin + FList.Add(''); +end; + +procedure TXMLWriter.StartClasse(Elem : PSyntaxelem); +begin + FList.Add(Format('', [Elem^.aName])); +end; + +procedure TXMLWriter.EndClasse; +begin + FList.Add(''); +end; + +procedure TXMLWriter.StartFunction(Elem : PSyntaxelem); +begin + FList.Add(Format('', [Elem^.aName])); +end; + +procedure TXMLWriter.EndFunction; +begin + FList.Add(''); +end; + +procedure TXMLWriter.StartParams; +begin + FList.Add(''); +end; + +procedure TXMLWriter.EndParams; +begin + FList.Add(''); +end; + +procedure TXMLWriter.StartParam(Elem : PArgument); +begin + FList.Add(Format('', [Elem^.aName, Elem^.aType])); +end; + +procedure TXMLWriter.StartResult(aType : PChar); +begin + if aType <> nil then + FList.Add(Format('', [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. \ No newline at end of file