public virtual void GenerateClass(ApiClass api, CodeWriter s) { GenerateUsings(s); s.AppendLine($"namespace {NameSpace}"); s.Block(() => { var names = new ArraySlice <string>(api.ClassName.Split('.')); var static_classes = names.GetSlice(new Slice(0, names.Length - 1)); var class_name = names.Last(); int levels = names.Length - 1; if (levels > 0) { foreach (var name in static_classes) { s.Out($"public static partial class {EscapeName(name)} {{"); s.Indent(); } } GenerateDocString(api, s); s.Out($"public partial class {EscapeName(class_name)} : {EscapeName(api.BaseClass)}"); s.Block(() => { s.Out($"// auto-generated class"); s.Break(); s.Out($"public {EscapeName(class_name)}(PyObject pyobj) : base(pyobj) {{ }}"); s.Break(); s.Out($"public {EscapeName(class_name)}({EscapeName(api.BaseClass)} other) : base(other.PyObject as PyObject) {{ }}"); s.Break(); // additional constructors foreach (var func in api.Constructors) { try { if (func.ManualOverride || func.Ignore) { continue; } func.Sanitize(); func.IsConstructor = true; func.ClassName = string.Join(".", static_classes); func.Name = class_name; var arguments = GenerateArguments(func); //var passed_args = GeneratePassedArgs(func); s.Out($"public {EscapeName(class_name)}({arguments})"); s.Block(() => { GenerateFunctionBody(func, s); }); } catch (Exception e) { s.Out("// Error generating constructor"); s.Out("// Message: " + e.Message); s.Out("/*"); s.Out(e.StackTrace); s.Out("----------------------------"); s.Out("Declaration JSON:"); s.Out(JObject.FromObject(func).ToString(Formatting.Indented)); s.Out("*/"); } } // functions s.Break(); foreach (var decl in api.Declarations) { try { if (decl.ManualOverride || decl.Ignore) { continue; } GenerateApiFunction(decl, s); } catch (Exception e) { s.Out("// Error generating delaration: " + decl.Name); s.Out("// Message: " + e.Message); s.Out("/*"); s.Out(e.StackTrace); s.Out("----------------------------"); s.Out("Declaration JSON:"); s.Out(JObject.FromObject(decl).ToString(Formatting.Indented)); s.Out("*/"); } } }); if (levels > 0) { foreach (var name in static_classes) { s.Outdent(); s.Out("}"); } } //if (decl.CommentOut) // s.Out("*/"); s.Break(); }); }