Example #1
0
    private CefApiDeclarations BuildTypes()
    {
        var structs = new List <CefStructType>();
        var enums   = new List <CefEnumType>();
        var stringCollectionTypes = new List <StringCollectionType>();
        List <CefExportFunction> stringCollectionFunctions = new List <CefExportFunction>();
        List <CefExportFunction> functions = new List <CefExportFunction>();

        apiTypes = new SortedDictionary <string, ApiType>();

        AddType(new ApiType("void"));

        AddType(new CefBaseType());
        AddType(new CefBasePtrType());

        AddType(new CefColorType());
        AddType(new CefColorRefType());

        AddType(new BooleanInteger());
        AddType(new BooleanIntegerOutType());

        AddType(new OpaquePtrType("XDisplay"));
        AddType(new CefPlatformBasePtrType("cef_window_info_t*"));
        AddType(new CefPlatformBasePtrType("cef_main_args_t*"));

        AddType(new CefStringType());
        AddType(new CefStringPtrType());
        AddType(new CefStringUserFreeType());

        NumericType.CreateAll(this);

        var bTypes = AssemblyResources.GetLines("BlittableTypes.txt");

        foreach (var bt in bTypes)
        {
            var def = bt.Split('|');
            if (def.Length == 2 && def[0].Length > 0 && def[1].Length > 0)
            {
                AddType(new BlittableType(def[0], def[1]));
            }
        }

        AddType(new VoidPtrPtrType());

        foreach (var ed in apiData.CefEnums)
        {
            var t = new CefEnumType(ed);
            AddType(t);
            enums.Add(t);
        }

        foreach (var sd in apiData.CefStructs)
        {
            if (!apiTypes.Keys.Contains(sd.Name))
            {
                var structName = sd.Name.Substring(0, sd.Name.Length - 2);
                var t          = new CefStructType(structName, sd.Comments);
                AddType(t);
                structs.Add(t);
            }
        }

        foreach (var sd in apiData.CefStructsWindows)
        {
            var structName = sd.Name.Substring(0, sd.Name.Length - 2);
            var t          = new CefPlatformStructType(structName, sd.Comments, CefPlatform.Windows);
            AddType(t);
            structs.Add(t);
        }

        foreach (var sd in apiData.CefStructsLinux)
        {
            var structName = sd.Name.Substring(0, sd.Name.Length - 2);
            var t          = new CefPlatformStructType(structName, sd.Comments, CefPlatform.Linux);
            AddType(t);
            structs.Add(t);
        }

        stringCollectionTypes.Add(new CefStringListType());
        stringCollectionTypes.Add(new CefStringMapType());
        stringCollectionTypes.Add(new CefStringMultimapType());

        foreach (var t in stringCollectionTypes)
        {
            AddType(t);
        }

        foreach (var sd in apiData.CefStructs)
        {
            var t = apiTypes[sd.Name];
            if (t.IsCefStructType)
            {
                t.AsCefStructType.SetMembers(sd, this);
            }
        }

        foreach (var sd in apiData.CefStructsWindows)
        {
            var t = apiTypes[sd.Name.Substring(0, sd.Name.Length - 2) + "_windows"];
            t.AsCefStructType.SetMembers(sd, this);
        }

        foreach (var sd in apiData.CefStructsLinux)
        {
            var t = apiTypes[sd.Name.Substring(0, sd.Name.Length - 2) + "_linux"];
            t.AsCefStructType.SetMembers(sd, this);
        }

        foreach (var fd in apiData.CefStringCollectionFunctions)
        {
            stringCollectionFunctions.Add(new CefExportFunction(null, fd, this));
        }

        foreach (var fd in apiData.CefFunctions)
        {
            var f = new CefExportFunction(null, fd, this);
            functions.Add(f);
        }

        if (apiData.CefFunctionsWindows.Count > 0)
        {
            System.Diagnostics.Debugger.Break();
        }

        foreach (var fd in apiData.CefFunctionsLinux)
        {
            var f = new CefExportFunction(null, fd, this, CefPlatform.Linux);
            functions.Add(f);
        }

        functions.Sort(new CefExportFunction.Comparer());
        structs.Sort(new ApiType.Comparer());
        enums.Sort(new ApiType.Comparer());

        var decl = new CefApiDeclarations(functions.ToArray(), structs.ToArray(), enums.ToArray(), stringCollectionTypes.ToArray(), stringCollectionFunctions.ToArray());

        return(decl);
    }