BFSchema.CodeGenerators.CSharp.CSharpGenerator.GenerateCode C# (CSharp) Method

GenerateCode() public method

public GenerateCode ( BinaryFileSchema schema ) : string
schema BinaryFileSchema
return string
        public string GenerateCode(BinaryFileSchema schema)
        {
            StringBuilder b = new StringBuilder();
            List<CodeClass> codeClasses = new List<CodeClass>();
            FormatName = schema.FormatBlock.Name;

            b.AppendLine("using System;");
            b.AppendLine("using System.Collections.Generic;");
            b.AppendLine("using System.IO;");
            b.AppendLine("using System.Text;");
            b.AppendLine("namespace " + schema.FormatBlock.Name);
            b.AppendLine("{");

            CodeClass mainClass = new CodeClass(schema.FormatBlock.Name + "Parser");
            codeClasses.Add(mainClass);
            rootParser = mainClass;

            CodeMethod mainMethod = new CodeMethod("void Main(string[] args)");
            mainMethod.CodeLines.Add("try{");
            mainMethod.CodeLines.Add("\t" + schema.FormatBlock.Name + " ps = " + schema.FormatBlock.Name + "Parser.ReadFile(args[0]);");

            mainMethod.CodeLines.Add("\tConsole.WriteLine(ps.ToString());");

            mainMethod.CodeLines.Add("}");
            mainMethod.CodeLines.Add("catch(Exception e){");
            mainMethod.CodeLines.Add("\tConsole.WriteLine(e.Message);");
            mainMethod.CodeLines.Add("\tConsole.WriteLine(e.StackTrace);");
            mainMethod.CodeLines.Add("}");
            mainClass.CodeMethods.Add(mainMethod);

            CodeMethod readFile = new CodeMethod( schema.FormatBlock.Name + " ReadFile(string filename)");
            mainClass.CodeMethods.Add(readFile);

            readFile.CodeLines.Add("FileStream fstream = new FileStream(filename, FileMode.Open);");
            readFile.CodeLines.Add("BinaryReader reader = new BinaryReader(fstream);");
            string endianness = ((schema.ByteOrder.ByteOrder == BfsByteOrderEnum.BigEndian) ? BfsByteOrderEnum.BigEndian : BfsByteOrderEnum.LittleEndian).ToString();
            readFile.CodeLines.Add("BfsBinaryReader bfsReader = new BfsBinaryReader(reader, BfsBinaryReader.Endianness." + endianness + ");");
            readFile.CodeLines.Add("return " + schema.FormatBlock.Name + ".Read(bfsReader);");

            foreach (IBfsDataBlock dataBlock in schema.DatablockList)
            {
                CodeClass newClass = MakeClass(dataBlock);
                if(newClass != null)
                    codeClasses.Add(newClass);
            }

            //Output the classes
            foreach (CodeClass cc in codeClasses)
                b.Append(cc.ToString());

            b.AppendLine("}");
            return b.ToString();
        }

Usage Example

Beispiel #1
0
        static void Main(string[] args)
        {
            //Command line code generator

            if (args.Length == 0)
            {
                Console.WriteLine("Error: No input schema...");
                return;
            }

            ConsoleErrorHandler errorHandler = new ConsoleErrorHandler();
            BinaryFileSchema schema = new BinaryFileSchema(args[0], errorHandler);
            if (schema == null || errorHandler.GotError)
            {
                Console.WriteLine("Could not generate C# code because of schema errors!");
                return;
            }
            CSharpGenerator csgenerator = new CSharpGenerator();
            string code = csgenerator.GenerateCode(schema);
            Console.WriteLine(code);
        }