private void Lablel_ActualizarLinea() { //Obtenemos índice del primer caracter visible y //número de la primera línea visible Point pos = new Point(0, 0); int firstIndex = Panel_Codigo.GetCharIndexFromPosition(pos); int firstLine = Panel_Codigo.GetLineFromCharIndex(firstIndex); //Ahora obtenemos el índice del último carácter visible y //el número de la última línea visible. pos.X = ClientRectangle.Width; pos.Y = ClientRectangle.Height; int lastIndex = Panel_Codigo.GetCharIndexFromPosition(pos); int lastLine = Panel_Codigo.GetLineFromCharIndex(lastIndex); //esta es la posición del punto del último carácter visible, //usaremos su valor Y para calcular el tamaño de la etiqueta pos = Panel_Codigo.GetPositionFromCharIndex(lastIndex); //finalmente, se renumera etiqueta label1.Text = ""; for (int i = firstLine; i <= lastLine; i++) { label1.Text += i + 1 + "\n"; } }
/////////////////////////////////////////////////////////////////////////////////////////// #region Metodo_Colocar_Numero_Linea private void Panel_Codigo_VScroll(object sender, EventArgs e) { //move location of numberLabel for amount //of pixels caused by scrollbar int d = Panel_Codigo.GetPositionFromCharIndex(0).Y % (Panel_Codigo.Font.Height + 1); label1.Location = new Point(0, d); Lablel_ActualizarLinea(); }
public void Archivo_Nuevo() { try { //tabControl1.Visible = true; Activar(); Panel_Codigo.Clear(); dataGridView1.Rows.Clear(); dataGridView2.Rows.Clear(); Panel_Codigo.Text = "<!_Nimbus_369_Code_!>\nNimbus_Main()\n[\n]"; } catch (Exception) { MessageBox.Show("Error al crear archivo"); } }
/////////////////////////////////////////////////////////////////////////////////////////// #region Analisis_Lexico public void Lexico() { Ambito = 0; llave = 0; llaveC = 0; LoadData(); Nimbus_DAL obj_Dal = new Nimbus_DAL(); Nimbus_DAL obj_temp = new Nimbus_DAL(); string Simbol = "hh", Token = "jj"; char[] delimitador = { ' ', '\n' }; // \udddd \xA char[] delimitador2 = { '\udddd', '\xA' }; string Frase = Panel_Codigo.Text; string[] Oraciones = Frase.Split(delimitador2); foreach (var oracion in Oraciones) { #region error_Line try { int linha, palavra; linha = Panel_Codigo.Find(oracion); palavra = Panel_Codigo.GetLineFromCharIndex(linha); lineapalabra = palavra + 1; } catch (Exception) { string error = "EL DOCUMENTO NO DEBE TENER SALTOS EN BLANCO"; SetInfoError(obj_Bll.SEARCH_TOKEN(obj_Dal), error, lineapalabra); } #endregion string ora = oracion; //MessageBox.Show(ora); string[] Palabras = ora.Split(delimitador); foreach (var palabra in Palabras) { obj_Dal.SIMBOLO = palabra.Trim(); Token = palabra.Trim(); obj_temp = obj_Bll.SEARCH_TOKEN(obj_Dal); Simbol = obj_temp.SIMBOLO; #region Control de Ambito Apertura if (Token.Equals("[")) { llave = llave + 1; Ambito = llave; //Ambito = Ambito + 1; } #endregion if (Simbol == string.Empty || Simbol == null) { if (Token != string.Empty || Token != null) { bool vacio = true; char[] letras = Token.ToCharArray(); foreach (var letra in letras) { if (!letra.Equals(" ")) { if (char.IsNumber(letra)) { if (ValidaEntero(Token)) { obj_Dal.TIPO_TOKEN = "Digito_Entero"; } else { obj_Dal.TIPO_TOKEN = "Digito_Flotante"; } } else if (char.IsPunctuation(letra)) { obj_Dal.TIPO_TOKEN = "Caracter"; } else { obj_Dal.TIPO_TOKEN = "Definicion_del_Usuario"; } vacio = false; } } if (vacio == false) { obj_Dal.CODIGO = Convert.ToString(contador); obj_Dal.SIMBOLO = Token; obj_Dal.AMBITO = Ambito; obj_Bll.SAVE(obj_Dal.CODIGO, obj_Dal.SIMBOLO, obj_Dal.TIPO_TOKEN, obj_Dal.AMBITO); SetInfo(obj_Bll.SEARCH_TOKEN(obj_Dal)); contador = contador + 1; } } } else { if (obj_temp.TIPO_TOKEN.Equals("Inicio_de_Programa") || obj_temp.TIPO_TOKEN.Equals("Funcion_Principal") || obj_temp.TIPO_TOKEN.Equals("Apertura_Ambito") || obj_temp.TIPO_TOKEN.Equals("Cierre_Ambito") || obj_temp.TIPO_TOKEN.Equals("Signo_de_Puntuacion") || obj_temp.TIPO_TOKEN.Equals("Constante") || obj_temp.TIPO_TOKEN.Equals("Concatenacion") || obj_temp.TIPO_TOKEN.Equals("Asignacion") || obj_temp.TIPO_TOKEN.Equals("Encapsulamiento") || obj_temp.TIPO_TOKEN.Equals("Palabra_Reservada") || obj_temp.TIPO_TOKEN.Equals("Funcion_Imprimir") || obj_temp.TIPO_TOKEN.Equals("Funcion_Capturar") || obj_temp.TIPO_TOKEN.Equals("Operador_Matematico") || obj_temp.TIPO_TOKEN.Equals("Expresion_Booleana") || obj_temp.TIPO_TOKEN.Equals("Operador_Logico") || obj_temp.TIPO_TOKEN.Equals("Condicional") || obj_temp.TIPO_TOKEN.Equals("Ciclo") || obj_temp.TIPO_TOKEN.Equals("Declarador_de_Funcion") || obj_temp.TIPO_TOKEN.Equals("Retorno_Funcion") || obj_temp.TIPO_TOKEN.Equals("Declarador_de_Procedimiento") || obj_temp.TIPO_TOKEN.Equals("Delimitador_de_Sentencia") || obj_temp.TIPO_TOKEN.Equals("Digito_Entero") || obj_temp.TIPO_TOKEN.Equals("Digito_Flotante") || obj_temp.TIPO_TOKEN.Equals("Caracter")) { obj_temp.AMBITO = Ambito; obj_Bll.MODIFICAR(obj_temp); SetInfo(obj_Bll.SEARCH_TOKEN(obj_Dal)); } else { if (obj_temp.AMBITO == Ambito) { string error = "Variable ya fue declarada"; SetInfoError(obj_Bll.SEARCH_TOKEN(obj_Dal), error, lineapalabra); } else { obj_temp.AMBITO = Ambito; obj_Bll.MODIFICAR(obj_temp); SetInfo(obj_Bll.SEARCH_TOKEN(obj_Dal)); } } } #region Control de Ambito Cierre if (Token.Equals("]")) { llaveC = llaveC + 1; Ambito = Ambito - llaveC; if (Ambito < 0) { Ambito = 1; } //Ambito = Ambito - 1; } #endregion } } if (llaveC != llave) { string error = "- Fata cierre o apertura de Ambito -"; SetInfoError(obj_Bll.SEARCH_TOKEN(obj_Dal), error, lineapalabra); } //obj_Bll.DELETE_LIST(); }