コード例 #1
0
        public void convertStruct(string path, List <string> files)
        {
            StructConverter sc = new StructConverter();
            // Parse the enum OMX_INDEXTYPE to get the references
            CStruct OMX_INDEXTYPE = sc.convert(StructParser.parse(File.ReadAllText(Path.Combine(path, "source", "OMX_Index.h")), "enum").First());

            List <Struct> cstruct = new List <Struct>();

            foreach (string file in files)
            {
                string        sourcestring = File.ReadAllText(Path.Combine(path, "source", file + ".h"));
                List <Struct> structs      = sc.convert(StructParser.parse(sourcestring, "struct"), file);
                cstruct.AddRange(structs);

                Directory.CreateDirectory(Path.Combine(path, @"..\..\..\lib\classes"));
                using (StreamWriter sw = new StreamWriter(Path.GetFullPath(Path.Combine(path, @"..\..\..\lib\classes", file + ".ts"))))
                {
                    writeTs(sw, structs);
                }
            }

            using (StreamWriter sw = new StreamWriter(Path.GetFullPath(Path.Combine(path, @"..\..\..\src", "ParametersGet.cpp"))))
            {
                sw.WriteLine(@"#include ""Parameters.h""");
                sw.WriteLine();
                writeGetterSetter(sw, cstruct, WriteType.get);
                sw.WriteLine(@"v8::Local<v8::Object> Parameters::GetParameter(OMX_HANDLETYPE *handle, int port, OMX_INDEXTYPE nParamIndex) {");
                sw.WriteLine(@"  Nan::EscapableHandleScope scope;");
                sw.WriteLine(@"  v8::Local<v8::Object> ret = Nan::New<v8::Object>();");
                sw.WriteLine(@"");
                writeAllCasesCpp(sw, OMX_INDEXTYPE, cstruct, WriteType.get);
                sw.WriteLine(@"  return scope.Escape(ret);");
                sw.WriteLine(@"}");
            }
            using (StreamWriter sw = new StreamWriter(Path.GetFullPath(Path.Combine(path, @"..\..\..\src", "ParametersSet.cpp"))))
            {
                sw.WriteLine(@"#include ""Parameters.h""");
                sw.WriteLine();
                writeGetterSetter(sw, cstruct, WriteType.set);
                sw.WriteLine(@"void Parameters::SetParameter(OMX_HANDLETYPE *handle, int port, OMX_INDEXTYPE nParamIndex, v8::Local<v8::Object> param) {");
                writeAllCasesCpp(sw, OMX_INDEXTYPE, cstruct, WriteType.set);
                sw.WriteLine(@"}");
            }
        }
コード例 #2
0
        void generateJS(string file, string destinationFolder)
        {
            var allClasses = GetClasses(file);

            if (allClasses.Count == 0)
            {
                return;
            }

            using (StreamWriter sw = new StreamWriter(Path.Combine(destinationFolder, file.Replace("OMX_", "") + ".ts")))
            {
                foreach (Type clazz in allClasses)
                {
                    MemberInfo[] memberInfos = clazz.GetMembers(BindingFlags.Public | BindingFlags.Static);
                    Array        enumValues  = Enum.GetValues(clazz);

                    string clazzName = StructConverter.cleanClassName(clazz.Name);

                    sw.WriteLine("export enum " + clazzName + " {");
                    for (int i = 0; i < memberInfos.Length; i++)
                    {
                        sw.Write("  {0} = 0x{1:X}", StructConverter.cleanClassName(memberInfos[i].Name), (long)enumValues.GetValue(i));
                        if (i < memberInfos.Length - 1)
                        {
                            sw.WriteLine(",");
                        }
                    }
                    sw.WriteLine("\n}");
                }

                if (file == "OMX_Core")
                {
                    sw.WriteLine("export const ALL: number = 0xFFFFFFFF");
                }
            }
        }