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(@"}"); } }
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"); } } }