示例#1
0
        /// <summary>
        /// Consulta los Tokens de la cola recibida y determina la lista en donde guardar los argumentos
        /// </summary>
        /// <param name="instrucciones"></param>
        private void EjecutarToken(Cola instrucciones)
        {
            //Convierte en un array de String la Cola recibida para facilitar su acceso
            string[] instruccion = instrucciones.VolverArray();            // = (string)instrucciones.Desencolar();
            //A través de la instrucción del primer espacio determina que hacer con lo contenido en el resto del Array
            switch (instruccion[0])
            {
            //1
            case "iniciarA":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))                        //Verifica que no haya ya un PDF iniciado
                {
                    //Intentará instanciar un PDF
                    try
                    {
                        //Verifica que no existan nombres duplicados
                        if (!pdf.Buscar(pdf.BuscarPDF(instruccion[1])))
                        {
                            //Crea la instancia de PDF
                            pdf.Enlistar(new PDF(pdf.GetLargo() + 1, instruccion[1]));
                            //Informa al usuario de la creacion de la instancia PDF
                            TxtArea.Text += Environment.NewLine + "Instancia " + instruccion[1] + " creada";
                        }
                        else
                        {
                            //Si existe duplicado se informa al usuario
                            TxtArea.Text += Environment.NewLine + "El PDF " + instruccion[1] + " ya existe. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                            //Agrega error a la lista de errores
                            err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Nombre <PDF> Duplicado"));
                        }
                    }
                    catch (IndexOutOfRangeException)
                    {
                        //Informa al error de un error (generico) sintáctico
                        TxtArea.Text += Environment.NewLine + "Se esperaba Nombre";
                        //No hay argumentos después de iniciar
                        err.Enlistar(new Error(err.GetLargo() + 1, null, -1, instruccion[0].Length + 2, "Se esperaba Nombre"));
                    }
                }
                else
                {
                    //Si ya un PDF ingresado se informa al usuario
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                    //Agrega el error a la lista
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 1, "Error de Entorno. Hay un PDF enfocado"));
                }
                break;

            //2
            case "ingresarAPdf":
                //Busca el PDF en la lista de PDF, si existe focusedPDF = instruccion[1]. Sino informa al usuario
                if (pdf.Buscar(pdf.BuscarPDF(instruccion[1])))
                {
                    //Pone en global el nombre del pdf
                    focusedPDF = instruccion[1];
                    //Informa al usuario
                    TxtArea.Text += Environment.NewLine + "Instancia " + instruccion[1] + " enfocada";
                }
                else
                {
                    //Informa al usuario de que no se pudo encontrar el PDF en cuestión
                    TxtArea.Text += Environment.NewLine + "No se pudo encontrar el PDF " + instruccion[1] + ". Intente iniciarA " + instruccion[1] + " y pruebe de nuevo";
                    //Agrega al error a la lista
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "PDF no se encontró"));
                }
                break;

            //3
            case "crear":
                //Determina el largo del String[], si == 3 entonces solo crea, si == 4 abre de una vez el PDF
                if (pdf.Buscar(pdf.BuscarPDF(focusedPDF)))
                {
                    //Obtiene la instancia de PDF
                    LFP_P1.IO.PDF aux = pdf.BuscarPDF(focusedPDF);
                    //Genera el PDF
                    TxtArea.Text += Environment.NewLine + aux.GenerarPDF(new Ruta().GetAbsolutePath(instruccion[2]), this.indiceEdicion, this.texto, this.imagen, this.tabla, this.fila);
                    //Si Abrir esta presente lo abre
                    if (instruccion.Length == 4 && instruccion[3].Equals("Abrir"))
                    {
                        TxtArea.Text += Environment.NewLine + aux.AbrirPDF(new Ruta().GetAbsolutePath(instruccion[2]) + (char)92 + aux.nombre + ".pdf");
                    }
                    //Elimina el PDF de la lista
                    pdf.Remover(aux);
                    //Desenfoca el PDF
                    focusedPDF = null;
                    //Reinicia el indice
                    this.indiceEdicion = 1;
                }
                else
                {
                    //Sino informa al usuario
                    TxtArea.Text += Environment.NewLine + "PDF sin enfocar " + instruccion[1] + ". Intente ingresarAPdf " + instruccion[1] + " y pruebe de nuevo";
                    //Agrega el error a la lista
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Error de entorno. PDF sin enfocar"));
                }
                break;

            //4
            case "escribirTexto":
                //Determina si el entorno es correcto, buscando el PDF enfocado actualmente
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Informa al usuario del error y el sistema agrega a la lista el error
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF, consulte el Manual de Usuario";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 1, "Error de Entorno. No hay PDF enfocado"));
                }
                else
                {
                    //Determina si se subraya o no
                    if (instruccion.Length < 4)
                    {
                        //Añade un texto subrayado
                        texto.Encolar(new Texto(instruccion[1], instruccion[2][0], (char)48, this.indiceEdicion++));
                    }
                    else
                    {
                        //Añade un texto sin subrayar
                        texto.Encolar(new Texto(instruccion[1], instruccion[2][0], instruccion[3][0], this.indiceEdicion++));
                    }
                    //Informa al usuario
                    TxtArea.Text += Environment.NewLine + "Se escribió texto";
                }
                break;

            //5
            case "imagen":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF, consulte el Manual de Usuario";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 1, "Error de Entorno. No hay PDF enfocado"));
                }
                else
                {
                    //Determina la existencia del archivo de imagen
                    if (File.Exists(new Ruta().GetAbsolutePath(instruccion[1])))
                    {
                        this.imagen.Encolar(new Imagen(new Ruta().GetAbsolutePath(instruccion[1]), instruccion[2], indiceEdicion++));
                        TxtArea.Text += Environment.NewLine + "Imagen agregada correctamente";
                    }
                    else
                    {
                        TxtArea.Text += Environment.NewLine + "No se pudo encontrar la imagen en la ruta especificada.";
                        err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Archivo no Encontrado. Ruta inválida"));
                    }
                }
                break;

            //6
            case "crearTabla":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Informa al usuario que no hay ningun PDF enfocado y lista el error
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF, consulte el Manual de Usuario";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 0, "Error de Entorno. No hay PDF enfocado."));
                }
                else
                {
                    //Añade la tabla a la cola e informa al usuario
                    this.tabla.Encolar(new Tabla(instruccion[1], instruccion[2], indiceEdicion++));
                    TxtArea.Text += Environment.NewLine + "Tabla agregada correctamente";
                }
                break;

            //7
            case "crearFila":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Informa al usuario que no hay ningun PDF enfocado y enlista el error
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 0, "Error de Entorno. No hay PDF enfocado."));
                }
                else
                {
                    //Agrega una nueva fila a la lista e informa al usuario
                    this.fila.Enlistar(new Fila(instruccion[1], instruccion[2]));
                    TxtArea.Text += Environment.NewLine + "Fila agregada a " + instruccion[2];
                }
                break;

            //8
            case "ejecutar":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Verifica si hay más de una instrucción ejecutar, es decir si se encuentra un Ruta
                    if (instruccion.Length > 1)
                    {
                        //Verifica que el archivo exista y que sea .If
                        if (File.Exists(new Ruta().GetAbsolutePath(instruccion[1])) && (instruccion[1].Substring(instruccion[1].Length - 3, 3).Equals(".If") || instruccion[1].Substring(instruccion[1].Length - 3, 3).Equals(".if")))
                        {
                            //Limpia el editor y agrega el texto obtenido del archivo
                            this.TxtEditor.Text = new Ruta().GetTextFromFile(new Ruta().GetAbsolutePath(instruccion[1]));
                        }
                        else
                        {
                            //No se encuentra el archivo y se informa al usuario
                            TxtArea.Text += Environment.NewLine + "El archivo no se encuentra en la ruta especificada o la extensión es incorrecta";
                            err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Archivo no Encontrado. Ruta inválida"));
                        }
                    }
                    //lineaCodigo guarda todo lo que contiene el txt en un array , separados por filas
                    String[] lineaCodigo = TxtEditor.Lines;
                    //Obtiene el número de filas que tiene el array lineaCodigo
                    int rowsCodigo = lineaCodigo.Length;
                    //Instancia un Lenguaje de esta forma se mantiene las filas y columnas
                    Lenguaje leng = new Lenguaje();
                    for (int i = 0; i < rowsCodigo; i++)
                    {
                        //Obtiene la cadena a Escanear
                        String cadenaEscanear = lineaCodigo[i];
                        //Verifica que la cadena no esté vacía y evita crear un loop
                        if (!string.IsNullOrEmpty(cadenaEscanear) && !cadenaEscanear.Equals("") && !cadenaEscanear.Contains("ejecutar"))
                        {
                            //Manda al analizador toda esta onda
                            ListaSimple analizador = leng.AnalizarCadena(cadenaEscanear + (char)10);
                            //Guarda la cadena
                            Cola AEjecutar = GuardarTokens(analizador);
                            //Determina si la cadena se ejecuta o no
                            if (Escanear(analizador))
                            {
                                //Ejecuta la cadena
                                EjecutarToken(AEjecutar);
                            }
                        }
                    }
                }
                else
                {
                    //Informa a usuario que no hay ningun PDF enfocado y lo agrega a la lista
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 0, "Error de entorno. Hay un PDF enfocado"));
                }
                break;

            //9
            case "mostrar":
                if (instruccion[1].Equals("ManualUsuario"))
                {
                    new PDF().AbrirPDF(new Ruta().GetAbsolutePath("raiz/ManualUsuario.pdf"));
                }
                if (instruccion[1].Equals("ManualTecnico"))
                {
                    new PDF().AbrirPDF(new Ruta().GetAbsolutePath("raiz/ManualTecnico.pdf"));
                }
                break;

            //10
            case "reporteTokens":
                //Crea y despliega el pvto >:V HTML xdDXdX
                new Ruta().GenerarYAbrirFile(new Ruta().ReporteTokens(token, err), "ReporteTokens", ".html", true);
                break;

            //11
            case "acercaDe":
                MessageBox.Show("201602782 - Sergio Fernando Otzoy Gonzalez", "Lenguajes Formales y de Programación");
                break;

            default:
                TxtArea.Text += Environment.NewLine + "«" + instruccion[0] + "» no se reconoce como instruccion. Consulte los Manuales -> <mostrar> <ManualUsuario> ó <ManualTecnico>";
                break;
            }
            TxtArea.Text += Environment.NewLine;
        }