From 2a29390cafecf16360d2437454ed1e4494faa52d Mon Sep 17 00:00:00 2001 From: Mike Kestner Date: Thu, 17 Jan 2002 23:44:56 +0000 Subject: [PATCH] 2002-01-17 Mike Kestner * generator/BoxedGen.cs : Removed Name, CName, and QualifiedName. * generator/ObjectGen.cs : Removed Name, CName, and QualifiedName. * generator/StructBase.cs : Add Name, CName, and QualifiedName. Add GenCtor method. Stub GetCallString, GetImportSig, and GetSignature methods. * generator/StructGen.cs : Removed Name, CName, and QualifiedName. * generator/SymbolTable.cs : Add GetDllName method. * parser/gapi2xml.pl : Fix a couple bugs. svn path=/trunk/gtk-sharp/; revision=2030 --- ChangeLog | 11 +++++ generator/BoxedGen.cs | 21 -------- generator/ObjectGen.cs | 24 ++------- generator/StructBase.cs | 102 +++++++++++++++++++++++++++++++++++++++ generator/StructGen.cs | 21 -------- generator/SymbolTable.cs | 12 +++++ generator/api.xml | 2 +- parser/gapi2xml.pl | 5 +- 8 files changed, 132 insertions(+), 66 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87145d47b..393d22c72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-01-17 Mike Kestner + + * generator/BoxedGen.cs : Removed Name, CName, and QualifiedName. + * generator/ObjectGen.cs : Removed Name, CName, and QualifiedName. + * generator/StructBase.cs : Add Name, CName, and QualifiedName. Add + GenCtor method. Stub GetCallString, GetImportSig, and GetSignature + methods. + * generator/StructGen.cs : Removed Name, CName, and QualifiedName. + * generator/SymbolTable.cs : Add GetDllName method. + * parser/gapi2xml.pl : Fix a couple bugs. + 2002-01-16 Mike Kestner * generator/BoxedGen.cs : New boxed type generatable. diff --git a/generator/BoxedGen.cs b/generator/BoxedGen.cs index f47a207a2..a94f06bb5 100644 --- a/generator/BoxedGen.cs +++ b/generator/BoxedGen.cs @@ -14,27 +14,6 @@ namespace GtkSharp.Generation { public BoxedGen (String ns, XmlElement elem) : base (ns, elem) {} - public String Name { - get - { - return elem.GetAttribute("name"); - } - } - - public String QualifiedName { - get - { - return ns + "." + elem.GetAttribute("name"); - } - } - - public String CName { - get - { - return elem.GetAttribute("cname"); - } - } - public String MarshalType { get { diff --git a/generator/ObjectGen.cs b/generator/ObjectGen.cs index 330afe438..ba4211e0a 100644 --- a/generator/ObjectGen.cs +++ b/generator/ObjectGen.cs @@ -14,27 +14,6 @@ namespace GtkSharp.Generation { public ObjectGen (String ns, XmlElement elem) : base (ns, elem) {} - public String Name { - get - { - return elem.GetAttribute("name"); - } - } - - public String QualifiedName { - get - { - return ns + "." + elem.GetAttribute("name"); - } - } - - public String CName { - get - { - return elem.GetAttribute("cname"); - } - } - public String MarshalType { get { @@ -95,6 +74,9 @@ namespace GtkSharp.Generation { break; case "constructor": + if (!GenCtor(member, table, sw)) { + Console.WriteLine("in object " + CName); + } break; case "method": diff --git a/generator/StructBase.cs b/generator/StructBase.cs index 95eca64f4..af2eee32a 100644 --- a/generator/StructBase.cs +++ b/generator/StructBase.cs @@ -20,7 +20,62 @@ namespace GtkSharp.Generation { this.ns = ns; this.elem = elem; } + + public String Name { + get + { + return elem.GetAttribute("name"); + } + } + public String QualifiedName { + get + { + return ns + "." + elem.GetAttribute("name"); + } + } + + public String CName { + get + { + return elem.GetAttribute("cname"); + } + } + + + protected bool GenCtor(XmlElement ctor, SymbolTable table, StreamWriter sw) + { + String sig, isig, call; + XmlElement parms = ctor["parameters"]; + + if (parms == null) { + sig = "()"; + isig = call = "();"; + //} else if (!GetSignature(parms, table, out sig) || + // !GetImportSig(parms, table, out isig) || + // !GetCallString(parms, table, out call)) { + // Console.Write("ctor "); + // return false; + } else { + Console.Write("ctor with parms "); + return false; + } + + String cname = ctor.GetAttribute("cname"); + + sw.WriteLine("\t\t[DllImport(\"" + table.GetDllName(ns) + + "\", CallingConvention=CallingConvention.Cdecl)]"); + sw.WriteLine("\t\tstatic extern IntPtr " + cname + isig); + sw.WriteLine(); + sw.WriteLine("\t\tpublic " + Name + sig); + sw.WriteLine("\t\t{"); + sw.WriteLine("\t\t\tRawObject = " + cname + call); + sw.WriteLine("\t\t}"); + sw.WriteLine(); + + return true; + } + protected bool GenField (XmlElement field, SymbolTable table, StreamWriter sw) { String c_type; @@ -46,7 +101,54 @@ namespace GtkSharp.Generation { sw.WriteLine (" " + field.GetAttribute("cname") + ";"); return true; } + + private bool GetCallString(XmlElement parms, SymbolTable table, out String call) + { + call = "("; + + foreach (XmlNode parm in parms.ChildNodes) { + if (parm.Name != "parameter") { + continue; + } + + XmlElement elem = (XmlElement) parm; + } + + call += ");"; + return true; + } + + private bool GetImportSig(XmlElement parms, SymbolTable table, out String isig) + { + isig = "("; + + foreach (XmlNode parm in parms.ChildNodes) { + if (parm.Name != "namespace") { + continue; + } + + XmlElement elem = (XmlElement) parm; + } + + isig += ");"; + return true; + } + private bool GetSignature(XmlElement parms, SymbolTable table, out String sig) + { + sig = "("; + + foreach (XmlNode parm in parms.ChildNodes) { + if (parm.Name != "parameter") { + continue; + } + + XmlElement elem = (XmlElement) parm; + } + + sig += ")"; + return true; + } } } diff --git a/generator/StructGen.cs b/generator/StructGen.cs index 094c05bf9..83bce520e 100644 --- a/generator/StructGen.cs +++ b/generator/StructGen.cs @@ -14,27 +14,6 @@ namespace GtkSharp.Generation { public StructGen (String ns, XmlElement elem) : base (ns, elem) {} - public String Name { - get - { - return elem.GetAttribute("name"); - } - } - - public String QualifiedName { - get - { - return ns + "." + elem.GetAttribute("name"); - } - } - - public String CName { - get - { - return elem.GetAttribute("cname"); - } - } - public String MarshalType { get { diff --git a/generator/SymbolTable.cs b/generator/SymbolTable.cs index ab95a9259..e5d3d0c58 100644 --- a/generator/SymbolTable.cs +++ b/generator/SymbolTable.cs @@ -13,6 +13,7 @@ namespace GtkSharp.Generation { private Hashtable complex_types = new Hashtable (); private Hashtable simple_types; + private Hashtable dlls; public SymbolTable () { @@ -62,6 +63,12 @@ namespace GtkSharp.Generation { simple_types.Add ("GHashTable", "IntPtr"); simple_types.Add ("va_list", "IntPtr"); simple_types.Add ("GParamSpec", "IntPtr"); + + dlls = new Hashtable(); + dlls.Add("Atk", "atk.dll"); + dlls.Add("Gdk", "gdk-1.3.dll"); + dlls.Add("Gtk", "gtk-1.3.dll"); + dlls.Add("Pango", "pango.dll"); } public void AddType (IGeneratable gen) @@ -93,6 +100,11 @@ namespace GtkSharp.Generation { } } + public String GetDllName(String ns) + { + return (String) dlls[ns]; + } + public String GetMarshalType(String c_type) { if (simple_types.ContainsKey(c_type)) { diff --git a/generator/api.xml b/generator/api.xml index c8c517efc..38236ffa3 100644 --- a/generator/api.xml +++ b/generator/api.xml @@ -1,2 +1,2 @@ - + diff --git a/parser/gapi2xml.pl b/parser/gapi2xml.pl index 6fd80d78c..aed678e25 100755 --- a/parser/gapi2xml.pl +++ b/parser/gapi2xml.pl @@ -105,6 +105,7 @@ while ($line = ) { $line = ; } $fdef .= $line; + $fdef =~ s/\n\s*//g; $fdefs{$fname} = $fdef; } elsif ($line =~ /G_TYPE_CHECK_(\w+)_CAST.*,\s*(\w+),\s*(\w+)/) { if ($1 eq "INSTANCE") { @@ -381,9 +382,9 @@ sub addFuncElems $mdef = delete $fdefs{$mname}; - if (($mdef =~ /\(.*\)/) && ($1 ne "void")) { + if (($mdef =~ /\((.*)\)/) && ($1 ne "void")) { @parms = split(/,/, $1); - ($dump, @parms) = @params if $dump_1st; + ($dump, @parms) = @params if $drop_1st; if (@parms > 0) { addParamsElem($el, @parms); }