Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }