public static ResourceDatabase PrepareResources( BuildContext buildContext, ByteBuffer nullableByteCode) // CBX files will not have this in the resources { using (new PerformanceSection("Program.PrepareResources")) { // This really needs to go in a separate helper file. ResourceDatabase resourceDatabase = ResourceDatabaseBuilder.CreateResourceDatabase(buildContext); if (nullableByteCode != null) { resourceDatabase.ByteCodeFile = new FileOutput() { Type = FileOutputType.Text, TextContent = ByteCodeEncoder.Encode(nullableByteCode), }; } using (new PerformanceSection("Program.PrepareResources/ImageSheetStuff")) { Common.ImageSheets.ImageSheetBuilder imageSheetBuilder = new Common.ImageSheets.ImageSheetBuilder(); if (buildContext.ImageSheetIds != null) { foreach (string imageSheetId in buildContext.ImageSheetIds) { imageSheetBuilder.PrefixMatcher.RegisterId(imageSheetId); foreach (string fileMatcher in buildContext.ImageSheetPrefixesById[imageSheetId]) { imageSheetBuilder.PrefixMatcher.RegisterPrefix(imageSheetId, fileMatcher); } } } Common.ImageSheets.Sheet[] imageSheets = imageSheetBuilder.Generate(resourceDatabase); resourceDatabase.AddImageSheets(imageSheets); } resourceDatabase.GenerateResourceMapping(); return(resourceDatabase); } }
public void Compile( BuildContext buildContext, string inputFolder, string baseOutputFolder) { Parser.IsTranslateMode_STATIC_HACK = false; this.VerifyProjectId(buildContext.ProjectID); inputFolder = inputFolder.Replace('/', '\\'); if (inputFolder.EndsWith("\\")) { inputFolder = inputFolder.Substring(0, inputFolder.Length - 1); } string[] allFiles = FileUtil.GetAllFilePathsRelativeToRoot(inputFolder); ResourceDatabase resourceDatabase = new ResourceDatabase(allFiles, inputFolder); ImageSheets.ImageSheetBuilder imageSheetBuilder = new ImageSheets.ImageSheetBuilder(); if (buildContext.ImageSheetIds != null) { foreach (string imageSheetId in buildContext.ImageSheetIds) { imageSheetBuilder.PrefixMatcher.RegisterId(imageSheetId); foreach (string fileMatcher in buildContext.ImageSheetPrefixesById[imageSheetId]) { imageSheetBuilder.PrefixMatcher.RegisterPrefix(imageSheetId, fileMatcher); } } } ImageSheets.Sheet[] imageSheets = imageSheetBuilder.Generate(resourceDatabase); resourceDatabase.AddImageSheets(imageSheets); resourceDatabase.GenerateResourceMapping(); ByteBuffer byteCodeBuffer = GenerateByteCode(buildContext, inputFolder); resourceDatabase.ByteCodeRawData = byteCodeBuffer; resourceDatabase.ByteCodeFile = new FileOutput() { Type = FileOutputType.Text, TextContent = ByteCodeEncoder.Encode(byteCodeBuffer), }; Parser.IsTranslateMode_STATIC_HACK = true; Dictionary <string, Executable[]> executablesByFile = this.InterpreterCompiler.Compile(); Parser.IsTranslateMode_STATIC_HACK = false; StructDefinition[] structs = this.InterpreterCompiler.GetStructDefinitions(); Dictionary <string, FileOutput> files = this.Package( buildContext, buildContext.ProjectID, executablesByFile, structs, inputFolder, resourceDatabase, this.LibraryManager); if (buildContext.ReadableByteCode) { files["readable_byte_code.txt"] = new FileOutput() { Type = FileOutputType.Text, TextContent = this.GenerateReadableByteCode(byteCodeBuffer), }; } string outputFolder = baseOutputFolder; FileUtil.EnsureParentFolderExists(outputFolder); // TODO: delete all files and directories in the output folder that are not in the new output // which is better than deleting everything and re-exporting because the user may have command // lines and windows open viewing the previous content, which will prevent a full delete from // working, but won't stop a simple overwrite of old content. this.GenerateFiles(buildContext, files, outputFolder, inputFolder); }