/// <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; }