diff --git a/ChangeLog b/ChangeLog index 3db4a8af3..b3d950e84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2002-01-08 Mike Kestner + + * generator/CallbackGen.cs : New stub for delegate generation. + * generator/InterfaceGen.cs : New stub for interface generation. + * generator/Parser.cs : Add the interface and callback element hooks. + * generator/SymbolTable.cs : Additions to simple_types hash. + 2002-01-07 Mike Kestner * generator/ObjectGen.cs : Make parent debug statement more helpful. diff --git a/generator/CallbackGen.cs b/generator/CallbackGen.cs new file mode 100644 index 000000000..da23ee5ed --- /dev/null +++ b/generator/CallbackGen.cs @@ -0,0 +1,94 @@ +// GtkSharp.Generation.CallbackGen.cs - The Callback Generatable. +// +// Author: Mike Kestner +// +// (c) 2001 Mike Kestner + +namespace GtkSharp.Generation { + + using System; + using System.IO; + using System.Xml; + + public class CallbackGen : IGeneratable { + + private String ns; + private XmlElement elem; + + public CallbackGen (String ns, XmlElement elem) { + + this.ns = ns; + this.elem = elem; + } + + public String Name { + get + { + return elem.GetAttribute("name"); + } + } + + public String CName { + get + { + return elem.GetAttribute("cname"); + } + } + + public String QualifiedName { + get + { + return ns + "." + elem.GetAttribute("cname"); + } + } + + public String MarshalType { + get + { + return ""; + } + } + + public String CallByName (String var_name) + { + return ""; + } + + public void Generate (SymbolTable table) + { + if (!Directory.Exists("..\\" + ns.ToLower() + "\\generated")) { + Directory.CreateDirectory("..\\"+ns.ToLower()+"\\generated"); + } + String filename = "..\\" + ns.ToLower() + "\\generated\\" + Name + ".cs"; + + FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter (stream); + + sw.WriteLine ("// Generated File. Do not modify."); + sw.WriteLine ("// 2001 Mike Kestner"); + sw.WriteLine (); + + sw.WriteLine ("namespace " + ns + " {"); + sw.WriteLine (); + sw.WriteLine ("\tusing System;"); + sw.WriteLine (); + + sw.WriteLine ("\tpublic delegate void " + Name + "();"); + sw.WriteLine (); + + foreach (XmlNode node in elem.ChildNodes) { + if (node.Name != "member") { + continue; + } + //FIXME: Generate the methods. + XmlElement member = (XmlElement) node; + } + + sw.WriteLine ("}"); + sw.Flush(); + sw.Close(); + } + + } +} + diff --git a/generator/InterfaceGen.cs b/generator/InterfaceGen.cs new file mode 100644 index 000000000..89850c231 --- /dev/null +++ b/generator/InterfaceGen.cs @@ -0,0 +1,97 @@ +// GtkSharp.Generation.InterfaceGen.cs - The Interface Generatable. +// +// Author: Mike Kestner +// +// (c) 2001 Mike Kestner + +namespace GtkSharp.Generation { + + using System; + using System.IO; + using System.Xml; + + public class InterfaceGen : IGeneratable { + + private String ns; + private XmlElement elem; + + public InterfaceGen (String ns, XmlElement elem) { + + this.ns = ns; + this.elem = elem; + } + + public String Name { + get + { + return elem.GetAttribute("name"); + } + } + + public String CName { + get + { + return elem.GetAttribute("cname"); + } + } + + public String QualifiedName { + get + { + return ns + "." + elem.GetAttribute("cname"); + } + } + + public String MarshalType { + get + { + return ""; + } + } + + public String CallByName (String var_name) + { + return ""; + } + + public void Generate (SymbolTable table) + { + if (!Directory.Exists("..\\" + ns.ToLower() + "\\generated")) { + Directory.CreateDirectory("..\\"+ns.ToLower()+"\\generated"); + } + String filename = "..\\" + ns.ToLower() + "\\generated\\" + Name + ".cs"; + + FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter (stream); + + sw.WriteLine ("// Generated File. Do not modify."); + sw.WriteLine ("// 2001 Mike Kestner"); + sw.WriteLine (); + + sw.WriteLine ("namespace " + ns + " {"); + sw.WriteLine (); + sw.WriteLine ("\tusing System;"); + sw.WriteLine (); + + sw.WriteLine ("\tpublic interface " + Name + " {"); + sw.WriteLine (); + + foreach (XmlNode node in elem.ChildNodes) { + if (node.Name != "member") { + continue; + } + //FIXME: Generate the methods. + XmlElement member = (XmlElement) node; + } + + sw.WriteLine ("\t}"); + sw.WriteLine (); + sw.WriteLine ("}"); + + sw.Flush(); + sw.Close(); + } + + } +} + diff --git a/generator/Parser.cs b/generator/Parser.cs index 99c296946..3498a8beb 100644 --- a/generator/Parser.cs +++ b/generator/Parser.cs @@ -74,6 +74,7 @@ namespace GtkSharp.Generation { break; case "callback": + table.AddType (new CallbackGen (ns_name, elem)); break; case "enum": @@ -81,6 +82,7 @@ namespace GtkSharp.Generation { break; case "interface": + table.AddType (new InterfaceGen (ns_name, elem)); break; case "object": diff --git a/generator/SymbolTable.cs b/generator/SymbolTable.cs index 52e9f5a2a..af340d088 100644 --- a/generator/SymbolTable.cs +++ b/generator/SymbolTable.cs @@ -46,9 +46,17 @@ namespace GtkSharp.Generation { simple_types.Add ("double", "double"); simple_types.Add ("gunichar", "String"); simple_types.Add ("uint1", "bool"); + simple_types.Add ("GPtrArray", "IntPtr[]"); + simple_types.Add ("GType", "int"); // FIXME: These ought to be handled properly. simple_types.Add ("GList", "IntPtr"); + simple_types.Add ("GMemChunk", "IntPtr"); + simple_types.Add ("GTimeVal", "IntPtr"); + simple_types.Add ("GClosure", "IntPtr"); + simple_types.Add ("GArray", "IntPtr"); + simple_types.Add ("GData", "IntPtr"); + simple_types.Add ("GTypeModule", "IntPtr"); simple_types.Add ("GSList", "IntPtr"); simple_types.Add ("GHashTable", "IntPtr"); simple_types.Add ("va_list", "IntPtr");