Beispiel #1
0
        public void ejecutar(Caché caché, Explorador expl, Dictionary <string, List <string> > args)
        {
            // Crea una instancia de Dafny

            Dafny dafny = new Dafny(args["dafnyexe"][0]);

            if (!dafny.Accesible)
            {
                AyudanteConsola.imprimirError("no se encuentra el ejecutable «"
                                              + args["dafnyexe"][0] + "»");

                return;
            }

            // Verifica los archivos
            int correctos = 0;
            int erroneos  = 0;

            foreach (UnidadDafny dfy in expl.Unidades)
            {
                InformeDafny informe = null;

                bool yaMostrado = false;

                if (!caché.Consulta(dfy.Uri, out informe))
                {
                    Console.WriteLine("Verificando " + dfy.Uri + "...");

                    informe = dafny.Verificar(dfy.Uri);

                    caché [dfy.Uri] = informe;

                    MostrarInforme(dfy, informe);

                    yaMostrado = true;
                }

                if (informe.Resultado == InformeDafny.Result.CORRECTO)
                {
                    correctos++;
                }
                else
                {
                    erroneos++;

                    if (!yaMostrado)
                    {
                        MostrarInforme(dfy, informe);
                    }
                }
            }

            Console.WriteLine();
            Console.WriteLine("{0} verificados correctamente, {1} erróneos.", correctos, erroneos);
        }
Beispiel #2
0
        public void ejecutar(Caché caché, Explorador expl, Dictionary <string, List <string> > args)
        {
            int puerto = 0;

            if (!int.TryParse(args ["puerto"] [0], out puerto))
            {
                AyudanteConsola.imprimirError("«" + args ["puerto"] [0]
                                              + "» no parece ser un número de puerto");

                return;
            }

            string credencial = null;

            if (args.ContainsKey("acceso"))
            {
                credencial = args ["acceso"] [0];

                if (!credencial.Contains(":"))
                {
                    AyudanteConsola.imprimirError("«" + credencial
                                                  + "» no sigue el formato usuario:clave");

                    return;
                }
            }

            ServidorWeb sw = new ServidorWeb(args["dafnyexe"][0], puerto, credencial);

            sw.DCaché      = caché;
            sw.DExplorador = expl;

            sw.Run();

            Console.WriteLine("Servidor funcionando en el puerto " + puerto + ".");
            Console.WriteLine("Pulse una tecla para salir...");
            Console.ReadKey();

            sw.Stop();
        }
Beispiel #3
0
        public void ejecutar(Caché caché, Explorador expl, Dictionary <string, List <string> > args)
        {
            this.caché = caché;

            // Crea un directorio temporal

            var tmpdir = Path.Combine(
                Path.GetTempPath(),
                "dafnytex-" + DateTime.Now.ToFileTimeUtc()
                );

            Directory.CreateDirectory(tmpdir);

            // Copia el paquete Dafny de Rustan Leino

            using (var arch = File.Create(Path.Combine(tmpdir, "dafny.sty"))) {
                Assembly.GetExecutingAssembly().GetManifestResourceStream("vaed.aux.dafny.sty").
                CopyTo(arch);
            };

            // Crea un archivo temporal

            tex = File.CreateText(Path.Combine(tmpdir, "código.tex"));

            Prólogo.CopyTo(tex.BaseStream);

            tex.Write(@"\begin{document}");

            nord  = 0;
            nivel = 0;

            // Escribe los archivos siguiendo la jerarquía

            foreach (NodoMapa nodo in expl.Raíz)
            {
                Imprimir(nodo);
            }

            tex.Write(@"\end{document}");

            tex.Close();

            // Ejecuta lualatex para compilar el tex generado

            ProcessStartInfo psi = new ProcessStartInfo("lualatex", "código.tex");

            psi.WorkingDirectory = tmpdir;

            try {
                var lualatex = Process.Start(psi);

                lualatex.WaitForExit();

                if (lualatex.ExitCode == 0)
                {
                    File.Copy(Path.Combine(tmpdir, "código.pdf"), "código.pdf", true);
                }
                else
                {
                    Console.Write("Error al compilar con lualatex.");
                }
            }

            catch (System.ComponentModel.Win32Exception) {
                AyudanteConsola.imprimirError("luatex no está instalado o no se encuentra");
            }

            // Borra el directorio temporal

            Directory.Delete(tmpdir, true);
        }