private void BuildCfxRuntime(GeneratedFileManager fileManager) { var b = new CodeBuilder(); b.BeginCfxNamespace(); b.BeginClass("CfxRuntime", "public partial"); b.AppendLine(); var lxFuncs = new List <CefExportFunction>(); foreach (var f in decls.ExportFunctions) { if (f.Platform == CefPlatform.Independent) { f.EmitPublicFunction(b, "Runtime"); b.AppendLine(); } else { lxFuncs.Add(f); } } b.BeginClass("Linux", "public"); b.AppendLine(); foreach (var f in lxFuncs) { f.EmitPublicFunction(b, "Runtime"); b.AppendLine(); } b.EndBlock(); b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxRuntime.cs", b.ToString()); }
private void BuildRemoteClasses(GeneratedFileManager fileManager) { foreach (var t in remoteDecls.CefStructTypes) { var b = new CodeBuilder(); b.BeginCfxNamespace(".Remote"); t.ClassBuilder.EmitRemoteClass(b); b.EndBlock(); fileManager.WriteFileIfContentChanged(t.RemoteClassName + ".cs", b.ToString()); } }
private void BuildEnums(GeneratedFileManager fileManager) { var b = new CodeBuilder(); b.BeginCfxNamespace(); foreach (var t in decls.CefEnumTypes) { t.EmitEnum(b); } b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxEnums.cs", b.ToString()); }
private void BuildApiClasses(GeneratedFileManager fileManager, StructCategory category) { var b = new CodeBuilder(); foreach (var t in decls.CefStructTypes) { if (t.ClassBuilder.Category == category) { b.BeginCfxNamespace(); t.ClassBuilder.EmitPublicClass(b); b.EndBlock(); fileManager.WriteFileIfContentChanged(t.ClassName + ".cs", b.ToString()); b.Clear(); } } }
private void BuildCfrRuntime(GeneratedFileManager fileManager) { var b = new CodeBuilder(); b.BeginCfxNamespace(".Remote"); b.BeginClass("CfrRuntime", "public partial"); b.AppendLine(); foreach (var f in remoteDecls.ExportFunctions) { if (!f.PrivateWrapper) { f.EmitRemoteFunction(b); b.AppendLine(); } } b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("CfrRuntime.cs", b.ToString()); }
private void BuildRemoteCalls(GeneratedFileManager fileManager) { var callIds = new List <string>(); var b = new CodeBuilder(); b.BeginCfxNamespace(".Remote"); foreach (var f in remoteDecls.ExportFunctions) { if (!f.PrivateWrapper) { b.BeginRemoteCallClass("CfxRuntime" + f.PublicName, callIds); f.Signature.EmitRemoteCallClassBody(b, "Runtime", f.CfxApiFunctionName); b.EndBlock(); b.AppendLine(); } } b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxRuntimeRemoteCalls.cs", b.ToString()); foreach (var t in remoteDecls.CefStructTypes) { b.Clear(); b.BeginCfxNamespace(".Remote"); t.ClassBuilder.EmitRemoteCalls(b, callIds); b.EndBlock(); fileManager.WriteFileIfContentChanged(t.ClassName + "RemoteCalls.cs", b.ToString()); } foreach (var t in remoteDecls.CefStructTypes) { if (t.ClassBuilder is CfxClientClass) { b.Clear(); b.BeginCfxNamespace(".Remote"); (t.ClassBuilder as CfxClientClass).EmitRemoteClient(b); b.EndBlock(); fileManager.WriteFileIfContentChanged(t.ClassName + "RemoteClient.cs", b.ToString()); } } callIds.AddRange(GeneratorConfig.AdditionalCallIds); callIds.Sort(); b.Clear(); b.BeginCfxNamespace(".Remote"); b.BeginBlock("internal enum RemoteCallId : ushort"); foreach (var id in callIds) { b.AppendLine(id + ","); } b.TrimRight(); b.CutRight(1); b.AppendLine(); b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("RemoteCallId.cs", b.ToString()); b.Clear(); b.BeginCfxNamespace(".Remote"); b.BeginClass("RemoteCallFactory", "internal"); b.AppendLine("private delegate RemoteCall RemoteCallCtor();"); b.BeginBlock("private static RemoteCallCtor[] callConstructors = "); foreach (var id in callIds) { b.AppendLine("() => {{ return new {0}(); }},", id); } b.EndBlock(";"); b.AppendLine(); b.BeginBlock("internal static RemoteCall ForCallId(RemoteCallId id)"); b.AppendLine("return callConstructors[(int)id]();"); b.EndBlock(); b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("RemoteCallFactory.cs", b.ToString()); }
private void BuildPInvokeApi(GeneratedFileManager fileManager) { var b = new CodeBuilder(); b.AppendLine("using System.Runtime.InteropServices;"); b.AppendLine(); b.BeginCfxNamespace(); b.BeginClass("CfxApi", "internal partial"); b.AppendLine(); b.BeginClass("Runtime", "internal static"); foreach (var f in decls.ExportFunctions) { f.EmitPInvokeDeclaration(b); } b.AppendLine(); foreach (var f in decls.StringCollectionFunctions) { f.EmitPInvokeDeclaration(b); } b.EndBlock(); b.AppendLine(); foreach (var t in decls.CefStructTypes) { t.ClassBuilder.EmitApiClass(b); b.AppendLine(); } b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxApi.cs", b.ToString()); b.Clear(); var cfxfuncs = decls.GetCfxApiFunctionNames(); b.BeginCfxNamespace(); b.BeginClass("CfxApiLoader", "internal partial"); b.BeginBlock("internal enum FunctionIndex"); foreach (var f in cfxfuncs) { b.AppendLine(f + ","); } b.EndBlock(); b.AppendLine(); b.BeginFunction("void LoadCfxRuntimeApi()", "internal static"); foreach (var f in decls.ExportFunctions) { if (f.Platform != CefPlatform.Independent) { b.BeginIf("CfxApi.PlatformOS == CfxPlatformOS.{0}", f.Platform.ToString()); } CodeSnippets.EmitPInvokeDelegateInitialization(b, "Runtime", f.CfxApiFunctionName); if (f.Platform != CefPlatform.Independent) { b.EndBlock(); } } b.EndBlock(); b.AppendLine(); b.BeginFunction("void LoadStringCollectionApi()", "internal static"); b.AppendLine("CfxApi.Probe();"); foreach (var f in decls.StringCollectionFunctions) { CodeSnippets.EmitPInvokeDelegateInitialization(b, "Runtime", f.CfxApiFunctionName); } b.EndBlock(); b.AppendLine(); foreach (var cefStruct in decls.CefStructTypes) { b.BeginBlock("internal static void Load{0}Api()", cefStruct.ClassName); b.AppendLine("CfxApi.Probe();"); var apiClassName = cefStruct.ClassName.Substring(3); switch (cefStruct.ClassBuilder.Category) { case StructCategory.Library: foreach (var f in cefStruct.ClassBuilder.ExportFunctions) { CodeSnippets.EmitPInvokeDelegateInitialization(b, f.PublicClassName.Substring(3), f.CfxApiFunctionName); } foreach (var cb in cefStruct.ClassBuilder.CallbackFunctions) { CodeSnippets.EmitPInvokeDelegateInitialization(b, cb.PublicClassName.Substring(3), cb.CfxApiFunctionName); } break; case StructCategory.Client: b.AppendLine("CfxApi.{0}.{1}_ctor = (CfxApi.cfx_ctor_with_gc_handle_delegate)CfxApi.GetDelegate(FunctionIndex.{1}_ctor, typeof(CfxApi.cfx_ctor_with_gc_handle_delegate));", apiClassName, cefStruct.CfxName); if (cefStruct.ClassBuilder.NeedsWrapFunction) { b.AppendLine("CfxApi.{0}.{1}_get_gc_handle = (CfxApi.cfx_get_gc_handle_delegate)CfxApi.GetDelegate(FunctionIndex.{1}_get_gc_handle, typeof(CfxApi.cfx_get_gc_handle_delegate));", apiClassName, cefStruct.CfxName); } b.AppendLine("CfxApi.{0}.{1}_set_callback = (CfxApi.cfx_set_callback_delegate)CfxApi.GetDelegate(FunctionIndex.{1}_set_callback, typeof(CfxApi.cfx_set_callback_delegate));", apiClassName, cefStruct.CfxName); b.AppendLine("{0}.SetNativeCallbacks();", cefStruct.ClassName); break; case StructCategory.Values: b.AppendLine("CfxApi.{0}.{1}_ctor = (CfxApi.cfx_ctor_delegate)CfxApi.GetDelegate(FunctionIndex.{1}_ctor, typeof(CfxApi.cfx_ctor_delegate));", apiClassName, cefStruct.CfxName); b.AppendLine("CfxApi.{0}.{1}_dtor = (CfxApi.cfx_dtor_delegate)CfxApi.GetDelegate(FunctionIndex.{1}_dtor, typeof(CfxApi.cfx_dtor_delegate));", apiClassName, cefStruct.CfxName); foreach (var sm in cefStruct.ClassBuilder.StructMembers) { CodeSnippets.EmitPInvokeDelegateInitialization(b, apiClassName, cefStruct.CfxName + "_set_" + sm.Name); CodeSnippets.EmitPInvokeDelegateInitialization(b, apiClassName, cefStruct.CfxName + "_get_" + sm.Name); } break; } b.EndBlock(); b.AppendLine(); } b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxApiLoader.cs", b.ToString()); }
private void BuildPInvokeApi(GeneratedFileManager fileManager) { var b = new CodeBuilder(); b.AppendLine("using System.Runtime.InteropServices;"); b.AppendLine(); b.BeginCfxNamespace(); b.BeginClass("CfxApi", "internal partial"); b.AppendLine(); b.AppendComment("global cef export functions"); b.AppendLine(); foreach (var f in decls.ExportFunctions) { f.EmitPInvokeDeclaration(b); } b.AppendLine(); foreach (var f in decls.StringCollectionFunctions) { f.EmitPInvokeDeclaration(b); } b.AppendLine(); b.AppendLine(); foreach (var t in decls.CefStructTypes) { t.ClassBuilder.EmitApiDeclarations(b); b.AppendLine(); } b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxApi.cs", b.ToString()); b.Clear(); var cfxfuncs = decls.GetCfxApiFunctionNames(); b.BeginCfxNamespace(); b.BeginClass("CfxApiLoader", "internal partial"); b.BeginBlock("internal enum FunctionIndex"); foreach (var f in cfxfuncs) { b.AppendLine(f + ","); } b.EndBlock(); b.AppendLine(); b.BeginFunction("void LoadCfxRuntimeApi()", "internal static"); foreach (var f in decls.ExportFunctions) { if (f.Platform != CefPlatform.Independent) { b.BeginIf("CfxApi.PlatformOS == CfxPlatformOS.{0}", f.Platform.ToString()); } CodeSnippets.EmitPInvokeDelegateInitialization(b, f.CfxName); if (f.Platform != CefPlatform.Independent) { b.EndBlock(); } } b.EndBlock(); b.AppendLine(); b.BeginFunction("void LoadStringCollectionApi()", "internal static"); b.AppendLine("CfxApi.Probe();"); foreach (var f in decls.StringCollectionFunctions) { CodeSnippets.EmitPInvokeDelegateInitialization(b, f.CfxName); } b.EndBlock(); b.AppendLine(); foreach (var cefStruct in decls.CefStructTypes) { b.AppendLine("private static bool {0}ApiLoaded;", cefStruct.ClassName); b.BeginBlock("internal static void Load{0}Api()", cefStruct.ClassName); b.AppendLine("if({0}ApiLoaded) return;", cefStruct.ClassName); b.AppendLine("{0}ApiLoaded = true;", cefStruct.ClassName); b.AppendLine("CfxApi.Probe();"); switch (cefStruct.ClassBuilder.Category) { case StructCategory.ApiCalls: if (cefStruct.ClassBuilder.ExportFunctions.Count() > 0) { foreach (var f in cefStruct.ClassBuilder.ExportFunctions) { CodeSnippets.EmitPInvokeDelegateInitialization(b, f.CfxName); } } foreach (var sm in cefStruct.ClassBuilder.StructMembers) { if (sm.MemberType.IsCefCallbackType) { CodeSnippets.EmitPInvokeDelegateInitialization(b, cefStruct.CfxName + "_" + sm.Name); } } break; case StructCategory.ApiCallbacks: b.AppendLine("CfxApi.{0}_ctor = (CfxApi.cfx_ctor_with_gc_handle_delegate)CfxApi.GetDelegate(FunctionIndex.{0}_ctor, typeof(CfxApi.cfx_ctor_with_gc_handle_delegate));", cefStruct.CfxName); b.AppendLine("CfxApi.{0}_get_gc_handle = (CfxApi.cfx_get_gc_handle_delegate)CfxApi.GetDelegate(FunctionIndex.{0}_get_gc_handle, typeof(CfxApi.cfx_get_gc_handle_delegate));", cefStruct.CfxName); b.AppendLine("CfxApi.{0}_set_managed_callback = (CfxApi.cfx_set_callback_delegate)CfxApi.GetDelegate(FunctionIndex.{0}_set_managed_callback, typeof(CfxApi.cfx_set_callback_delegate));", cefStruct.CfxName); if (cefStruct.ClassBuilder.ExportFunctions.Count() > 0) { System.Diagnostics.Debugger.Break(); } break; case StructCategory.Values: b.AppendLine("CfxApi.{0}_ctor = (CfxApi.cfx_ctor_delegate)CfxApi.GetDelegate(FunctionIndex.{0}_ctor, typeof(CfxApi.cfx_ctor_delegate));", cefStruct.CfxName); b.AppendLine("CfxApi.{0}_dtor = (CfxApi.cfx_dtor_delegate)CfxApi.GetDelegate(FunctionIndex.{0}_dtor, typeof(CfxApi.cfx_dtor_delegate));", cefStruct.CfxName); foreach (var sm in cefStruct.ClassBuilder.StructMembers) { if (sm.Name != "size") { CodeSnippets.EmitPInvokeDelegateInitialization(b, cefStruct.CfxName + "_set_" + sm.Name); CodeSnippets.EmitPInvokeDelegateInitialization(b, cefStruct.CfxName + "_get_" + sm.Name); } } if (cefStruct.ClassBuilder.ExportFunctions.Count() > 0) { System.Diagnostics.Debugger.Break(); } break; } b.EndBlock(); b.AppendLine(); } b.EndBlock(); b.EndBlock(); fileManager.WriteFileIfContentChanged("CfxApiLoader.cs", b.ToString()); }