Пример #1
0
        public void Transpile_LoliStackLoliRoundTrip_SameScript()
        {
            var script    = "#CodeLabel\r\nif(a < b) {\r\nBLOCK:ConstantString\r\n  => VAR @outputVar\r\nENDBLOCK\r\nJUMP #CodeLabel\r\n}\r\n";
            var stack     = Loli2StackTranspiler.Transpile(script);
            var newScript = Stack2LoliTranspiler.Transpile(stack);

            Assert.Equal(script, newScript);
        }
Пример #2
0
        /// <summary>
        /// Packs the <paramref name="config"/> and returns the bytes of the resulting archive.
        /// </summary>
        public static async Task <byte[]> Pack(Config config)
        {
            using var packageStream = new MemoryStream();
            using (var archive = new ZipArchive(packageStream, ZipArchiveMode.Create, false))
            {
                await CreateZipEntryFromString(archive, "readme.md", config.Readme);
                await CreateZipEntryFromString(archive, "metadata.json", JsonConvert.SerializeObject(config.Metadata, jsonSettings));
                await CreateZipEntryFromString(archive, "settings.json", JsonConvert.SerializeObject(config.Settings, jsonSettings));

                switch (config.Mode)
                {
                case ConfigMode.Stack:
                    config.LoliCodeScript = Stack2LoliTranspiler.Transpile(config.Stack);
                    await CreateZipEntryFromString(archive, "script.loli", config.LoliCodeScript);

                    break;

                case ConfigMode.LoliCode:
                    await CreateZipEntryFromString(archive, "script.loli", config.LoliCodeScript);

                    break;

                case ConfigMode.CSharp:
                    await CreateZipEntryFromString(archive, "script.cs", config.CSharpScript);

                    break;

                case ConfigMode.DLL:
                    await CreateZipEntryFromBytes(archive, "build.dll", config.DLLBytes);

                    break;

                case ConfigMode.Legacy:
                    await CreateZipEntryFromString(archive, "script.legacy", config.LoliScript);

                    break;

                default:
                    throw new NotSupportedException();
                }
            }

            config.UpdateHashes();
            return(packageStream.ToArray());
        }