using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Seshat; using Seshat.DataDefinitions; using System.IO; using System.CodeDom; namespace SchemaCodeGenerator { class Program { static void BuildSchema(string file) { if (!File.Exists(file)) { throw new FileNotFoundException(System.Reflection.Assembly.GetEntryAssembly().FullName + ": error : Could not find schema file " + file); } Seshat.DataDefinitions.SchemaDefinition schema; using (StreamReader schemaFile = new StreamReader(file)) { schema = Seshat.LuaDefinitions.LuaExecutor.RunScriptExtractSchema( schemaFile.ReadToEnd(), file); } CodeNamespace codeNamespace = CodeGenerator.BuildCodeNamespace(schema); string output = CodeGenerator.BuildCSFileText(codeNamespace); var outFileName = System.IO.Path.Combine( Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file) + ".cs" ); using (StreamWriter outfile = new StreamWriter(outFileName)) { outfile.Write(output); outfile.Flush(); } Console.WriteLine(file + " -> " + outFileName); } static int Main(string[] args) { if (args.Length == 0) { Console.WriteLine(System.Reflection.Assembly.GetEntryAssembly().FullName + ": error : Should have one or more schema files."); return 1; } int failCount = 0; Console.WriteLine("Starting code generation..."); foreach (var file in args) { try { BuildSchema(file); } catch (Exception exc) { var iteratingException = exc; do { Console.WriteLine(UnitTestSharp.BuildMessages.UnexpectedExceptionMessage( "Error during schema building", "", iteratingException)); iteratingException = iteratingException.InnerException; } while (iteratingException != null); ++failCount; } } Console.WriteLine("Code generation finished."); return failCount; } } }