Inheritance: JSIL.AssemblyTranslator
        private void GenerateContainer(SilverlightAssemblyTranslator translator)
        {
            var container = File.ReadAllText("container.html");

            var applicationEntrypoint = translator.GetEntrypointNameFromAssembly(configuration.Filename);
            var dependencies = GetJavascriptFilenames()
                .Select(x => string.Format("'{0}'", x))
                .ToArray();
            var templates = GetTemplateFilenames()
                .Select(x => string.Format("'{0}'", x))
                .ToArray();

            var configurationDirectiveBuilder = new StringBuilder();
            configurationDirectiveBuilder.AppendLine("sljsconfig = {");
            configurationDirectiveBuilder.AppendFormat("entryPoint: '{0}',", applicationEntrypoint).AppendLine();
            configurationDirectiveBuilder.AppendFormat("code: [{0}]", string.Join("\r\n,", dependencies)).AppendLine(",");
            configurationDirectiveBuilder.AppendFormat("templates: [{0}]", string.Join("\r\n,", templates)).AppendLine();
            configurationDirectiveBuilder.AppendLine("};");

            container = container.Replace("{configuration}", configurationDirectiveBuilder.ToString());
            File.WriteAllText(Path.Combine(configuration.OutputDirectory, "index.html"), container);
        }
 public void ProcessWith(SilverlightAssemblyTranslator translator)
 {
     ProcessAssembly(translator);
     ProcessResources(translator);
     GenerateContainer(translator);
 }
        private void ProcessResources(SilverlightAssemblyTranslator translator)
        {
            var resourceFolderName = Path.GetFileNameWithoutExtension(configuration.Filename);
            var resourceFolder = Path.Combine(configuration.OutputDirectory, resourceFolderName);
            translator.DumpResourcesFromAssemblyToDirectory(configuration.Filename, resourceFolder);

            if (!Directory.Exists(resourceFolder)) return;

            foreach (var file in Directory.GetFiles(resourceFolder, "*.resources"))
            {
                resourceFileTranslator.Translate(file, resourceFolder);
            }

            ClumpJsonFromDirectoryIntoFile(resourceFolder);
        }
 private void ProcessAssembly(SilverlightAssemblyTranslator translator)
 {
     translator.OutputDirectory = configuration.OutputDirectory;
     translator.IncludeDependencies = configuration.IncludeDependencies;
     translator.AddProxyAssembly(typeof (MessageBox).Assembly, false);
     translator.Translate(configuration.Filename);
     translator.EliminateTemporaries = false;
     translator.SimplifyLoops = false;
     translator.SimplifyOperators = false;
 }
Example #5
0
        private static void HookTranslatorEvents(SilverlightAssemblyTranslator translator)
        {
            translator.LoadingAssembly += (fn, progress) =>
            {
                Console.Error.WriteLine("// Loading {0}...", fn);
            };
            translator.Decompiling += (progress) =>
            {
                Console.Error.Write("// Decompiling ");

                var previous = new int[1] { 0 };

                progress.ProgressChanged += (s, p, max) =>
                {
                    var current = p * 20 / max;
                    if (current != previous[0])
                    {
                        previous[0] = current;
                        Console.Error.Write(".");
                    }
                };

                progress.Finished += (s, e) =>
                {
                    Console.Error.WriteLine(" done");
                };
            };
            translator.Optimizing += (progress) =>
            {
                Console.Error.Write("// Optimizing ");

                var previous = new int[1] { 0 };

                progress.ProgressChanged += (s, p, max) =>
                {
                    var current = p * 20 / max;
                    if (current != previous[0])
                    {
                        previous[0] = current;
                        Console.Error.Write(".");
                    }
                };

                progress.Finished += (s, e) =>
                {
                    Console.Error.WriteLine(" done");
                };
            };
            translator.Writing += (progress) =>
            {
                Console.Error.Write("// Writing JS ");

                var previous = new int[1] { 0 };

                progress.ProgressChanged += (s, p, max) =>
                {
                    var current = p * 20 / max;
                    if (current != previous[0])
                    {
                        previous[0] = current;
                        Console.Error.Write(".");
                    }
                };

                progress.Finished += (s, e) =>
                {
                    Console.Error.WriteLine(" done");
                };
            };
            translator.CouldNotLoadSymbols += (fn, ex) =>
            {
                Console.Error.WriteLine("// {0}", ex.Message);
            };
            translator.CouldNotResolveAssembly += (fn, ex) =>
            {
                Console.Error.WriteLine("// Could not load module {0}: {1}", fn, ex.Message);
            };
            translator.CouldNotDecompileMethod += (fn, ex) =>
            {
                Console.Error.WriteLine("// Could not decompile method {0}: {1}", fn, ex.Message);
            };
        }
Example #6
0
        static void Main(string[] arguments)
        {
            var assemblyTranslator = new SilverlightAssemblyTranslator();
            HookTranslatorEvents(assemblyTranslator);

            var configuration = new SilverlightApplicationTranslatorConfiguration();
            configuration.ParseArguments(arguments);

            var xamlTranslator = new XamlTranslator();
            var resourceTranslator = new ResourceFileTranslator(xamlTranslator);
            var applicationTranslator = new SilverlightApplicationTranslator(configuration, resourceTranslator);
            applicationTranslator.ProcessWith(assemblyTranslator);
        }