Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions lib/linguist/languages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2069,6 +2069,15 @@ EmberScript:
codemirror_mode: coffeescript
codemirror_mime_type: text/x-coffeescript
language_id: 103
Ene:
type: programming
color: "#AA151B"
extensions:
- ".ñ"
- ".ene"
tm_scope: source.ñ
ace_mode: text
language_id: 1492
Erlang:
type: programming
color: "#B83998"
Expand Down
10 changes: 10 additions & 0 deletions samples/Ene/benchmark.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ññ Benchmark: bucle con operaciones aritméticas

variable resultado = 0;
variable i = 0;
mientras (i < 100000) {
resultado = resultado + i * 2;
i = i + 1;
}
imprimir("Resultado: " + resultado);
imprimir("Iteraciones: " + i);
6 changes: 6 additions & 0 deletions samples/Ene/hola.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
imprimir("empecemos");


variable nombre = "Ejemplo";

imprimir("Hola, soy " + nombre);
9 changes: 9 additions & 0 deletions samples/Ene/lib_matematica.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
funcion sumar(a, b) {
devolver a + b;
}

clase Calculadora {
publico funcion cuadrado(x) {
devolver x * x;
}
}
18 changes: 18 additions & 0 deletions samples/Ene/test_abstractas.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
abstracta clase Figura {
inicio(n) { este.nombre = n; }
publico funcion saludar() { imprimir("Soy una figura: " + este.nombre); }
}

clase Circulo hereda Figura {
inicio(r) { super.inicio("Círculo"); este.radio = r; }
}

variable c = nueva Circulo(5);
c.saludar();

imprimir("Intentando instanciar Figura (abstracta)...");
intentar {
variable f = nueva Figura("Error");
} capturar(e) {
imprimir("Capturado error esperado: " + e);
}
10 changes: 10 additions & 0 deletions samples/Ene/test_asincronia.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
asincrono funcion tareaLanzada(ms) {
imprimir("Tarea asíncrona iniciada...");
devolver "Tarea completada con éxito";
}

imprimir("Lanzando tarea...");
variable t = tareaLanzada(1000);
imprimir("Esperando resultado...");
variable r = esperar t;
imprimir("Resultado: " + r);
23 changes: 23 additions & 0 deletions samples/Ene/test_colecciones.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
variable misNumeros = lista();
misNumeros.añadir(10);
misNumeros.añadir(20);
misNumeros.añadir(30);

imprimir("Tamaño de la lista: " + misNumeros.tamaño());
imprimir("Elemento en 1: " + misNumeros.obtener(1));

imprimir("Recorriendo lista con para-en:");
para (variable n en misNumeros) {
imprimir("Número: " + n);
}

variable miDicc = diccionario();
miDicc.poner("clave1", "valor1");
miDicc.poner("clave2", "valor2");

imprimir("Valor de clave1: " + miDicc.obtener("clave1"));

imprimir("Recorriendo claves del diccionario:");
para (variable k en miDicc) {
imprimir("Clave: " + k + " -> Valor: " + miDicc.obtener(k));
}
10 changes: 10 additions & 0 deletions samples/Ene/test_comentarios_v1.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ñññ
Este es un comentario multilínea
al estilo Ñ v1.0.
ñññ

variable mensaje = "Hola Mundo"; ññ Comentario de una sola línea
imprimir(mensaje);

ññ Prueba de comentario al final del archivo
ñññ ñññ ññ Comentario de bloque vacío
17 changes: 17 additions & 0 deletions samples/Ene/test_contratos.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
contrato Volador {
volar();
aterrizar();
}

clase Pajaro implementa Volador {
publico funcion volar() {
imprimir("El pájaro está volando...");
}
publico funcion aterrizar() {
imprimir("El pájaro ha aterrizado.");
}
}

variable miPajaro = nueva Pajaro();
miPajaro.volar();
miPajaro.aterrizar();
16 changes: 16 additions & 0 deletions samples/Ene/test_control.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
imprimir("Probando romper y continuar:");
variable i = 0;
mientras (i < 10) {
i = i + 1;
si (i == 5) continuar;
si (i == 8) romper;
imprimir("Contando: " + i);
}

imprimir("Probando segun:");
variable color = "rojo";
segun (color) {
caso "azul" { imprimir("El color es azul"); }
caso "rojo" { imprimir("El color es rojo"); }
predeterminado { imprimir("Color desconocido"); }
}
33 changes: 33 additions & 0 deletions samples/Ene/test_cripto.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
ññ test_cripto.ñ
imprimir("== Prueba de Ene.Cripto ==");

variable texto = "Este es un mensaje secreto en Ñ";
imprimir("Texto original: " + texto);

ññ Hash
variable hash = Ene.Cripto.hash256(texto);
imprimir("Hash SHA-256: " + hash);

ññ Base64
variable b64_cifrado = Ene.Cripto.cifrarBase64(texto);
imprimir("Texto en Base64: " + b64_cifrado);
variable b64_descifrado = Ene.Cripto.descifrarBase64(b64_cifrado);
imprimir("Decodificado Base64: " + b64_descifrado);

si (texto != b64_descifrado) {
imprimir("ERROR al decodificar Base64");
}

ññ AES
variable clave = "SuperClaveSecreta123";
variable aes_cifrado = Ene.Cripto.cifrarAES(texto, clave);
imprimir("Cifrado AES (Base64): " + aes_cifrado);

variable aes_descifrado = Ene.Cripto.descifrarAES(aes_cifrado, clave);
imprimir("Descifrado AES: " + aes_descifrado);

si (texto != aes_descifrado) {
imprimir("ERROR al descifrar AES");
} sino {
imprimir("AES funciona correctamente!");
}
31 changes: 31 additions & 0 deletions samples/Ene/test_datos.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
ññ test_datos.ñ
imprimir("== Prueba de Ene.Datos ==");

Ene.Archivo.borrar("prueba.db"); ññ Por si acaso

variable bd = Ene.Datos.abrir("Data Source=prueba.db");

ññ Crear tabla
bd.ejecutar("CREATE TABLE Usuarios (id INTEGER PRIMARY KEY, nombre TEXT, edad INTEGER)");
imprimir("Tabla Usuarios creada.");

ññ Insertar datos
bd.ejecutar("INSERT INTO Usuarios (nombre, edad) VALUES ('Ana', 25)");
bd.ejecutar("INSERT INTO Usuarios (nombre, edad) VALUES ('Beto', 30)");
bd.ejecutar("INSERT INTO Usuarios (nombre, edad) VALUES ('Carlos', 22)");
imprimir("Usuarios insertados.");

ññ Consultar
variable usuarios = bd.consultar("SELECT * FROM Usuarios");
imprimir("Resultados de la consulta:");
imprimir("Total de usuarios: " + usuarios.tamaño());

variable i = 0;
mientras (i < usuarios.tamaño()) {
variable u = usuarios.obtener(i);
imprimir("ID: " + u.obtener("id") + " - Nombre: " + u.obtener("nombre") + " - Edad: " + u.obtener("edad"));
i = i + 1;
}

bd.cerrar();
imprimir("Base de datos cerrada.");
13 changes: 13 additions & 0 deletions samples/Ene/test_enums.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
enum Direccion {
Norte,
Sur,
Este,
Oeste
}

variable miDir = Direccion.Norte;
imprimir("Mi dirección es: " + miDir);

si (miDir == Direccion.Norte) {
imprimir("Voy hacia el Norte.");
}
17 changes: 17 additions & 0 deletions samples/Ene/test_es.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
contrato Volador { volar(); }
clase Ave implementa Volador { publico funcion volar() { imprimir("Volando..."); } }
clase Avion implementa Volador { publico funcion volar() { imprimir("Motor encendido..."); } }
clase Perro { }

variable miAve = nueva Ave();
variable miPerro = nueva Perro();

imprimir("¿miAve es Ave? " + (miAve es Ave));
imprimir("¿miAve es Volador? " + (miAve es Volador));
imprimir("¿miPerro es Volador? " + (miPerro es Volador));
imprimir("¿10 es entero? " + (10 es "entero"));
imprimir("¿'hola' es cadena? " + ("hola" es "cadena"));

si (miAve es Volador) {
miAve.volar();
}
15 changes: 15 additions & 0 deletions samples/Ene/test_excepciones.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
intentar {
imprimir("Intentando algo peligroso...");
variable x = 10 / 0; // Esto debería lanzar un error interno de división por cero o similar que manejamos
} capturar(error) {
imprimir("¡Atrapé un error!: " + error);
}

imprimir("El programa continúa después del error.");

intentar {
imprimir("Llamando a algo que no existe...");
variable p = nueva PersonaInexistente();
} capturar(e) {
imprimir("Error capturado: " + e);
}
10 changes: 10 additions & 0 deletions samples/Ene/test_fallo_contrato.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
contrato Volador {
volar();
}

// Esta clase debería fallar al no implementar 'volar'
clase Piedra implementa Volador {
publico funcion saludar() { imprimir("Soy una piedra"); }
}

imprimir("Esto no debería ejecutarse.");
29 changes: 29 additions & 0 deletions samples/Ene/test_fase5.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
contrato Identificable {
obtenerId();
}

clase Usuario implementa Identificable {
inicio(i) { este.id = i; }
publico funcion obtenerId() { devolver este.id; }
}

// Genérico con restricción (donde G hereda Identificable)
// Nota: 'hereda' se usa tanto para clases como contratos en restricciones
clase Repositorio<G> donde G hereda Identificable {
inicio() { este.items = lista(); }
publico funcion añadir(item) { este.items.añadir(item); }
publico funcion mostrarTodos() {
para (item en este.items) {
imprimir("ID: " + item.obtenerId());
}
}
}

// Inferencia de tipos (variable sin tipo complejo explícito)
variable repo = nueva Repositorio();
variable user1 = nueva Usuario(101);
variable user2 = nueva Usuario(202);

repo.añadir(user1);
repo.añadir(user2);
repo.mostrarTodos();
31 changes: 31 additions & 0 deletions samples/Ene/test_fase6.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Prueba de Ene.Archivo
variable ruta = "prueba.txt";
variable contenido = "Hola desde Ñ, este es un archivo de prueba. 12345";

imprimir("Escribiendo archivo...");
Ene.Archivo.escribirToda(ruta, contenido);

si (Ene.Archivo.existe(ruta)) {
imprimir("¡El archivo existe!");
variable leido = Ene.Archivo.leerToda(ruta);
imprimir("Contenido leído: " + leido);
} sino {
imprimir("Error: El archivo no se creó.");
}

// Prueba de Ene.Json
variable datos = diccionario();
datos.poner("nombre", "Jorge");
datos.poner("edad", 30);
datos.poner("lenguajes", lista());
datos.obtener("lenguajes").añadir("Ñ");
datos.obtener("lenguajes").añadir("CSharp");

imprimir("Codificando a JSON...");
variable jsonStr = Ene.Json.codificar(datos);
imprimir("JSON: " + jsonStr);

imprimir("Decodificando JSON...");
variable obj = Ene.Json.decodificar(jsonStr);
imprimir("Nombre decodificado: " + obj.obtener("nombre"));
imprimir("Edad decodificada: " + obj.obtener("edad"));
7 changes: 7 additions & 0 deletions samples/Ene/test_fase6_red.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
imprimir("Realizando petición HTTP...");
intentar {
variable respuesta = Ene.Red.obtener("https://api.github.com/zen");
imprimir("Respuesta de GitHub: " + respuesta);
} capturar (e) {
imprimir("Error en la red: " + e);
}
41 changes: 41 additions & 0 deletions samples/Ene/test_final_1.0.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Prueba Final de Librería Base 1.0

// 1. Archivos Avanzados
imprimir("--- Prueba de Archivos ---");
Ene.Archivo.crearCarpeta("respaldo");
Ene.Archivo.escribirToda("nota.txt", "Esta es una nota importante.");
imprimir("Archivo creado.");
Ene.Archivo.mover("nota.txt", "respaldo/nota_v1.txt");
imprimir("Archivo movido a carpeta 'respaldo'.");

// 2. Sistema
imprimir("--- Prueba de Sistema ---");
imprimir("Argumentos del programa: " + Ene.Sistema.argumentos());

// 3. GUI Interactiva
imprimir("--- Lanzando GUI Interactiva ---");
variable contador = 0;

funcion refrescar() {
variable html = "<html><body style='background:#1a1a2e; color:#e94560; text-align:center; padding-top:100px; font-family:Arial;'>";
html = html + "<h1 style='text-shadow: 2px 2px #0f3460;'>Consola Interactiva \u00D1</h1>";
html = html + "<div style='font-size:80px; margin:20px; font-weight:bold;'>" + contador + "</div>";
html = html + "<button onclick=\"enviarEvento('mas')\" style='padding:20px 40px; font-size:30px; background:#e94560; color:white; border:none; border-radius:10px; cursor:pointer;'>Aumentar</button>";
html = html + "<p style='color:#ccc; margin-top:50px;'>Pulsa el bot\u00F3n para interactuar con el int\u00E9rprete</p>";
html = html + "</body></html>";
Ene.Interfase.actualizar(html);
}

Ene.Interfase.alClic("mas", funcion() {
contador = contador + 1;
imprimir("[Interfase] Boton pulsado. Contador: " + contador);
refrescar();
});

refrescar();
Ene.Interfase.ventana("Mi App en \u00D1");

imprimir("Manteniendo aplicacion abierta (Ctrl+C para salir)...");
mientras (verdadero) {
Ene.Sistema.dormir(100);
}
16 changes: 16 additions & 0 deletions samples/Ene/test_funciones.ñ
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
clase Persona {
privado cadena nombre;
privado entero edad;

funcion inicio(cadena nombre, entero edad) {
este.nombre = nombre;
este.edad = edad;
}

funcion presentarse() {
imprimir("Hola, mi nombre es " + este.nombre + " y tengo " + este.edad + " años.");
}
}

Persona juan = nueva Persona("Juan", 30);
juan.presentarse();
Loading