{"id":20671163,"url":"https://github.com/allnulled/castelog","last_synced_at":"2026-04-24T13:06:04.097Z","repository":{"id":65678230,"uuid":"589817885","full_name":"allnulled/castelog","owner":"allnulled","description":"Lenguaje de programación de castellano a JavaScript.","archived":false,"fork":false,"pushed_at":"2023-11-10T08:16:27.000Z","size":37196,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-26T02:23:54.392Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/allnulled.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-01-17T02:13:47.000Z","updated_at":"2024-02-11T11:29:54.000Z","dependencies_parsed_at":"2023-02-18T10:31:51.250Z","dependency_job_id":"ec06a1db-1f15-4275-80e6-7e43a517bea5","html_url":"https://github.com/allnulled/castelog","commit_stats":{"total_commits":14,"total_committers":1,"mean_commits":14.0,"dds":0.0,"last_synced_commit":"bfe096d10b010a91eff574ec37a6334aa7e8e026"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/allnulled/castelog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fcastelog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fcastelog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fcastelog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fcastelog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allnulled","download_url":"https://codeload.github.com/allnulled/castelog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Fcastelog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32224418,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T10:26:35.452Z","status":"ssl_error","status_checked_at":"2026-04-24T10:25:27.643Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T20:25:34.610Z","updated_at":"2026-04-24T13:06:04.083Z","avatar_url":"https://github.com/allnulled.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# Castelog\n\n*Castelog es un lenguaje de **programación en castellano**.*\n\n\u003e ¡Atención! Este proyecto está únicamente gestionado por un tipo que no tiene ni para medicinas, ni para comida de gato, y que lleva mucho tiempo sin ingresos.\n\n**CASTELOG** es una unión de las palabras: **CASTE**llano y **LÓG**ica.\n\n**Castelog** compila a **JavaScript**, igual que lo podría hacer **CoffeeScript** u otros.\n\n----\n\n## Instalación\n\nPara instalar Castelog necesitarás **npm** y **node.js** instalados. Después, desde la consola solo tienes que hacer:\n\n```sh\nnpm install --global castelog\n```\n\nPara instalar la extensión de **Visual Studio Code**, está la carpeta `vscode-extension/castelog.castelog-language-v0.0.1`. Con esto tendrás el coloreado bonito de la sintaxis de los ficheros `*.calo`.\n\nPuedes configurar los shortcuts para que compilen, ejecuten y tal. Tienes que hacer **File » Preferences » Keyboard Shortcuts**, y ahí buscas `'castelog'`. Sobre todo, los de: `castelog.compilarFichero` y `castelog.ejecutarFicheroCalo`, los más interesantes. Además, tienes el `CTRL + Espacio` que te sugerirá sintaxis.\n\n----\n\n## La API nativa de Castelog\n\n\nLa API nativa de Castelog es un script que va a cargar una serie de librerías y funciones que están asociadas al lenguaje.\n\nLa API nativa de Castelog está pensada para poder importarse, indistintamente, en entornos de node.js así como navegadores. Esta API, pues, no está pensada para ser compatible con otros entornos de JavaScript, como [Rhino](https://en.wikipedia.org/wiki/Rhino_(JavaScript_engine)) (donde usarías librerías de Java como **vocabulario** de JavaScript) o [JScript](https://es.wikipedia.org/wiki/JScript) (donde no sé exactamente qué usarías como vocabulario porque no lo he usado nunca, pero algo de Microsoft, imagino .NET), y aunque se puedan escribir algoritmos también para estos entornos con Castelog, Castelog no asegura la compatibilidad de todas las funciones para estos entornos.\n\nCastelog, en cambio, ha estado centrado y desarrollado para los 2 entornos más populares de JavaScript: node.js y navegadores. Y en cualquiera de estos entornos, Castelog puede importar su API nativa, y esperar que sus módulos internos funcionen correctamente. Fuera de ellos, no se asegura que el **vocabulario básico** del motor de JavaScript de turno sea compatible. Esto significa que, si en navegadores, `Imprimo \"hola\"` se transpila como `console.log(\"hola\")`, pero en Rhino se escribe `System.out.println(\"Hola\")` o `print(\"Hola\")`, pues no espere que la sentencia de imprimir por consola funcione en ese entorno distinto a node.js y navegadores, donde sí se escribiría `console.log(\"Hola\")`, porque Castelog traduce esta sentencia, de esta manera concreta, y no va a multiplicar su compatibilidad para cualquier vocabulario, evidentemente. Soy un tío solo haciendo esta mierda y sin dinero, al revés, lo único que he conseguido es que el MIT me chulee con su Scratch y con cómo pueden robar creatividades ajenas sin parpadear ni inmutarse, y los demás parece que tenemos que verlo, sin poder hacer nada al respecto del expolio y el robo de tiempo, moral y salud: es evidente que no voy a meterme en eso. Y pedirlo es estúpido: no se moleste.\n\nPara cargar esta API nativa en cualquiera de tus scripts, solo tienes que hacer así:\n\n```calo\nImporto api nativa.\n```\n\nCon eso, estarás importando toda la API nativa de Castelog, que son unos cuantos miles de líneas.\n\n## Las librerías de la API nativa de Castelog\n\nEstos son los frameworks/librerías externos que importa la API nativa de Castelog.\n\n- **`xhr2`** `(v0.2.1)`. Implementación para node.js de XMLHttpRequest.\n- **`axios`** `(v0.27.2)`. *Comunicaciones estáticas.* Librería para hacer peticiones HTTP/S tanto en navegadores como en node.js.\n- **`vue`** `(v2.6.14)`. *Interfaces gráficas.* Librería para construir front-end para navegadores.\n- **`simplest-db`** `(v1.0.3)`. *Persistencia de datos.* Librería para tener persistencia rápida en cualquier entorno.\n- **`ejs`** `(v3.1.6)`. **Plantillas de texto.* Librería para crear plantillas de texto.\n- **`vue-router`** `(v3.5.1)`. *Enrutación.* Librería para `vue` y el manejo de rutas internas. \n- **`i18next`** `(v21.8.0)`. *Internacionalización.* Librería para facilitar la inclusión de traducciones.\n- **`vue-i18next`** `(v0.15.2)` *Internacionalización.* Librería para compatibilizar **i18next** con **vue**.\n- **`ranas-db`** `(v0.0.1)`. *Persistencia de datos*. Librería para explotar la [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) de los navegadores. Incluye [dexie.js](https://github.com/dexie/Dexie.js) y [dexie-relationships](https://www.npmjs.com/package/dexie-relationships).\n- **`rest`** `(v0.0.1)`. *Arquitecturas HTTP REST automáticas*. Es este proyecto, [restologia](https://github.com/allnulled/restologia). Pero no, no sin dinero, no sin porros.\n- **`jquery`** `(v3.3.1)`. *Manejo del DOM y otras utilidades de navegador*. El framework más popular de JavaScript.\n- **`jquery-ui`** `(v1.13.2)`. *Widgets y funciones de interfaz de usuario*. Complementación de jQuery que proporciona widgets y funcionalidades relacionadas con las interfaces gráficas de usuario.\n- **`sortablejs`** `(v1.8.4)`. *Funcionalidad de arrastrar y soltar*. Aunque jQueryUI ya proporciona alguna funcionalidad, esta librería se incluye para que Vue pueda usar el siguiente:\n- **`vue.draggable`** `(v2.20.0)`. *Funcionalidad de arrastrar y soltar para Vue*. Con esta librería podemos añadir el arrastrar-y-soltar en Vue fácilmente.\n- **`hook-by-priority`** `(v1.0.1)`. *Hooking y pluginaje*. Librería para implementar rápidamente hooks y plugins en tus aplicaciones.\n\nLuego, además, están todas las funciones internas de la API nativa de Castelog. Esta lista es más amplia:\n\n- `Castelog.inicializacion`\n- `Castelog.metodos.un_filtrado_por`\n- `Castelog.metodos.un_mapeado_por`\n- `Castelog.metodos.un_reducido_por`\n- `Castelog.variables.un_servidor_activo_de_control_remoto`\n- `Castelog.variables.un_cliente_activo_de_control_remoto`\n- `Castelog.variables.un_cliente_pasivo_de_control_remoto`\n- `Castelog.variables.un_servidor_pasivo_de_control_remoto`\n- `Castelog.variables.una_aplicacion_sintactica_universal`\n- `Castelog.variables.un_punto_sintactico_universal`\n- `Castelog.variables.un_utilities_helper_para_mysql2`\n- `Castelog.variables.un_proxy_de_pool_de_conexiones_para_mysql2`\n- `Castelog.variables.un_proxy_de_conexion_para_mysql2`\n- `Castelog.variables.operador`\n- `Castelog.metodos.una_peticion_http`\n- `Castelog.metodos.un_cacheo`\n- `Castelog.metodos.un_modulo_importado`\n- `Castelog.metodos.una_exportacion_de_modulo_universal_estandar`\n- `Castelog.metodos.una_importacion_de_modulo_universal_estandar`\n- `Castelog.metodos.un_modulo_exportado`\n- `Castelog.metodos.una_plantilla`\n- `Castelog.metodos.una_lectura_de_fichero`\n- `Castelog.metodos.una_escritura_de_fichero`\n- `Castelog.metodos.una_copia_de_ficheros`\n- `Castelog.metodos.una_conexion_de_base_de_datos`\n- `Castelog.metodos.una_seleccion_de_base_de_datos`\n- `Castelog.metodos.una_insercion_de_base_de_datos`\n- `Castelog.metodos.una_actualizacion_de_base_de_datos`\n- `Castelog.metodos.una_eliminacion_de_base_de_datos`\n- `Castelog.metodos.una_notificacion`\n- `Castelog.metodos.una_pregunta`\n- `Castelog.metodos.una_confirmacion`\n- `Castelog.metodos.estoy_en`\n- `Castelog.metodos.un_elemento_html`\n- `Castelog.metodos.una_compilacion_estandar_de_parametros_de_consola`\n- `Castelog.metodos.un_servidor_http`\n- `Castelog.metodos.un_servidor_https`\n- `Castelog.metodos.un_servidor_socket_io`\n- `Castelog.metodos.un_cliente_socket_io`\n- `Castelog.metodos.una_red_de_servidores_http_rest_automaticos`\n- `Castelog.metodos.una_superquery`\n- `Castelog.metodos.una_query`\n- `Castelog.metodos.un_proyecto_npm`\n- `Castelog.metodos.un_comando_de_consola`\n- `Castelog.metodos.un_testeo`\n- `Castelog.metodos.un_test`\n- `Castelog.metodos.una_descripcion_del_entorno`\n- `Castelog.metodos.un_reseteo_de_directorio`\n- `Castelog.metodos.un_servicio_de_ficheros_estaticos`\n- `Castelog.metodos.un_texto_aleatorio`\n- `Castelog.metodos.un_valor_aleatorio`\n- `Castelog.metodos.un_servidor_activo_de_control_remoto`\n- `Castelog.metodos.un_servidor_pasivo_de_control_remoto`\n- `Castelog.metodos.un_cliente_activo_de_control_remoto`\n- `Castelog.metodos.un_cliente_pasivo_de_control_remoto`\n- `Castelog.metodos.un_fichero_xml`\n- `Castelog.metodos.un_escaneo_de_puertos`\n- `Castelog.metodos.un_monitoreo_de_red`\n- `Castelog.metodos.una_propiedad_para`\n- `Castelog.metodos.siendo`\n- `Castelog.metodos.una_espera_de`\n- `Castelog.metodos.una_aplicacion_sintactica_universal`\n- `Castelog.metodos.un_punto_sintactico_universal`\n- `Castelog.metodos.un_call_wait_map`\n- `Castelog.metodos.un_componente_vue2`\n- `Castelog.metodos.una_aplicacion_vue2`\n- `Castelog.metodos.un_numero_textual`\n- `Castelog.metodos.un_sistema_rest`\n- `Castelog.metodos.un_diagrama_conceptual`\n- `Castelog.metodos.un_diagrama_de_dependencias`\n- `Castelog.metodos.un_formateo_de_fecha`\n- `Castelog.metodos.un_relleno_de_texto`\n- `Castelog.metodos.un_dia_de_la_semana`\n- `Castelog.metodos.un_nombre_de_mes`\n- `Castelog.metodos.una_comunicacion_de_entrada_de_usuario`\n- `Castelog.metodos.una_comunicacion_de_salida_a_usuario`\n- `Castelog.metodos.un_proxy`\n- `Castelog.metodos.una_proxificacion`\n- `Castelog.metodos.una_observacion_fenomenica`\n- `Castelog.metodos.una_interfaz_vacia`\n- `Castelog.metodos.una_funcion_contextualiazada`\n- `Castelog.metodos.una_funcion_literaria`\n- `Castelog.metodos.un_clon_de_proxy`\n- `Castelog.metodos.una_funcion_mixta`\n- `Castelog.metodos.una_reduccion_recursiva`\n- `Castelog.metodos.una_expansion`\n- `Castelog.metodos.un_navegador_automatico`\n- `Castelog.metodos.una_seleccion_de_elementos_del_dom`\n- `Castelog.metodos.una_seleccion_del_primer_elemento_del_dom`\n- `Castelog.metodos.una_insercion_de_estilos_en_cascada`\n- `Castelog.metodos.un_bloque_de_estilos_en_cascada`\n- `Castelog.metodos.un_elemento_jquery`\n- `Castelog.metodos.una_insercion_de_elemento_del_dom`\n- `Castelog.metodos.un_acceso_a_propiedad`\n- `Castelog.metodos.un_escaneo_de_ficheros`\n- `Castelog.metodos.pasandole`\n- `Castelog.metodos.pasado_por`\n- `Castelog.metodos.una_serializacion_como_json`\n- `Castelog.metodos.mostrando_solo_propiedades`\n- `Castelog.metodos.un_hook_global`\n- `Castelog.componentes_vue2`\n- `Castelog.variables.operador.exclamacion.js`\n\nPero igual ver así las funciones no dirá mucho. En adelante, se intentará profundizar en este apartado. Pero qué quieres... yo solo soy un tío. ¿Un tío solo en contra de las universidades, que no quieren impartir lógica en lenguaje natural? Es muy duro, colegui Dios, estás zumbado de la puta cabeza, me provocas locura chunga de verdad, me da miedo tirar por aquí, he llegado demasiado lejos, demasiado solo, y me mata, me mata ver que eres un hijodeputa tal.\n\n----\n\n## Uso\n\nPara compilar ficheros Castelog a JavaScript simplemente tienes que hacer:\n\n```sh\ncalo fichero.calo\n```\nImporto API nativa.\n----\n\n\n\n## Sintaxis\n\nComo concepto:\n\n\u003e Una **sintaxis** es un conjunto de reglas simbólicas dentro del lenguaje.\n\nEl lenguaje principalmente permite programar mediante scripts compuestos de **sentencias**.\n\nLa sintaxis del lenguaje se puede descomponer en las siguientes categorías más destacables:\n\n  - Sentencias del lenguaje\n  - Generativas del lenguaje\n  - Apéndices del generativa\n  - Prepéndices del generativa\n  - Sentencias especiales del lenguaje\n\nA continuación se enumeran y ejemplifican en este mismo orden.\n\n\n----\n\n\n\n### Sintaxis de: sentencia de asigno\n\nSirve para asignar valores a espacios de memoria variables.\n\n```calo\nCreo variable x como {}.\nAsigno x como {}.\nCompruebo que x es tipo objeto.\n```\n\n----\n\n### Sintaxis de: sentencia de compruebo\n\nSirve para comprobar que se cumplen cosas, y en su defecto lanzar errores.\n\n```calo\nCompruebo que 8 es tipo número.\nCompruebo que \"texto\" es tipo texto.\nCompruebo que 5 es igual que 5.\n```\n\n----\n\n### Sintaxis de: sentencia de creo\n\nSirve para crear constantes o variables en el ámbito funcional actual.\n\n```calo\nCreo x como 0.\nCreo variable y como 1.\nCreo constante z como 2.\nCompruebo que \"\" + x + y + z es igual que \"012\".\nCompruebo que x + y + z es igual que 3.\n```\n\n----\n\n### Sintaxis de: sentencia de desde\n\nSirve para repetir las instrucciones de un bloque de código desde un valor variable hasta otro valor variable.\n\n```calo\nCreo variable x como 0.\nDesde 0 hasta 10 usando indice imprimo indice.\nDesde 0 hasta 10 incremento x.\nDesde 0 hasta 10 incremento x.\nCompruebo que x es igual que 20.\n```\n\n----\n\n### Sintaxis de: sentencia de elimino propiedad\n\nSirve para eliminar variables. En JavaScript, la palabra `delete`.\n\n```calo\nCreo x como { nombre: \"Castelog\" }.\nElimino propiedad x.nombre.\nCompruebo que x.nombre es tipo indefinido.\n```\n\n----\n\n### Sintaxis de: sentencia de en proceso\n\nSirve para encapsular código bajo un nombre, para luego poder *interrumpir* ese código.\n\n```calo\nCreo variable x como 0.\nEn proceso uno {\n    Creo variable y como 9.\n    Si y es menor que 10 interrumpo proceso uno;\n    Y si no lanzo un nuevo Error(\"Error imposible\").\n    Asigno x como undefined.\n}.\nCompruebo que x es igual que 0.\n```\n\n----\n\n### Sintaxis de: sentencia de exporto\n\nSirve para exportar módulos. Hay distintas sintaxis para distintas formas de exportación modular.\n\n```calo\nsi false {\n\n@Sección de notación para EcmaScript 5:\nExporto como módulo es5 {}.\n# module.exports = {}\n\n@Sección de notación para EcmaScript 6:\nExporto como módulo es6 {}.\n # export default {}\n\n@Sección de notación para sistema de módulos de Castelog:\nExporto módulo universal estándar llamado \"un.modulo.concreto\" a partir de {}.\n\n}.\n```\n\n----\n\n### Sintaxis de: sentencia de hago\n\nSirve para sentencias que simplemente llaman a una función.\n\n```calo\nHago console.log(\"Hola!\").\n```\n\n----\n\n### Sintaxis de: sentencia de importo api nativa\n\nSirve para importar la API nativa de Castelog en el script. Esta API incluirá:\n\n  - Axios\n  - Vue2\n  - SimplestDB\n  - EJS\n  - D3\n  - I18next + Vue-I18next\n  - Socket.io (servidor y cliente)\n\nAdemás de estas APIs de terceros, se importará la API propia de Castelog.\n\n```calo\n\n```\n\n----\n\n### Sintaxis de: sentencia de importo\n\nSirve para importar módulos. Existen varias sintaxis para distintas formas de importación modular.\n\n```calo\nsi false {\n\n@Sección de notación para EcmaScript 6:\nimporto módulo es6 de ruta \"./un_fichero.js\" creando constante MOD_01.\n# import \"./un_fichero.js\"\n\n@Sección de notación para EcmaScript 5:\nimporto módulo es5 de ruta \"./un_fichero.js\" creando constante MOD_02.\n# require(\"./un_fichero.js\");\n\n@Sección de notación para sistema de módulos de Castelog:\nimporto módulo universal estándar de ruta \"./un_fichero.js\" creando constante MOD_03.\n\n}.\n```\n\n----\n\n### Sintaxis de: sentencia de imprimo\n\nSirve para imprimir por consola.\n\n```calo\nImprimo \"hola!\".\n```\n\n----\n\n### Sintaxis de: sentencia de incremento\n\nSirve para incrementar una variable. En caso de números, se sumará. En caso de textos, se apendizará. Existe también la sintaxis de decrementación, que en textos no tendría lugar.\n\n```calo\nCreo variable x como 0.\nIncremento x en 2.\nIncremento x.\nCompruebo que x es igual que 3.\n```\n\n----\n\n### Sintaxis de: sentencia de intento\n\nSirve para cazar los errores de un cacho de código.\n\n```calo\nCreo variable x como 0.\nIntento {\n    Incremento x en 2.\n} En errores {\n    Incremento x en 1.\n}.\nCompruebo que x es igual que 2.\n```\n\n----\n\n### Sintaxis de: sentencia de interrumpo\n\nSirve para interrumpir procesos. En JavaScript, es la palabra `break`.\n\n```calo\nCreo variable x como 0.\nEn proceso dos {\n    Incremento x en 2.\n    Interrumpo proceso dos.\n    Incremento x en 1.\n}.\nCompruebo que x es igual que 2.\n```\n\n----\n\n### Sintaxis de: sentencia de itero\n\nSirve para iterar sobre objetos o listas.\n\n```calo\nCreo variable sumatorio1 como \"\".\nCreo variable sumatorio2 como \"\".\nCreo x como un objeto con {\n    Propiedad a como \"aa\".\n    Propiedad b como \"bb\".\n}.\nItero como objeto x usando propiedad donde {\n    Incremento sumatorio1 en propiedad.\n    Incremento sumatorio2 en x[propiedad].\n}.\nCompruebo que sumatorio1 es igual que \"ab\".\nCompruebo que sumatorio2 es igual que \"aabb\".\nCreo variable sumatorio3 como 0.\nCreo y como una lista con [\n    1,\n    2,\n    3\n].\nItero como lista y usando valor donde {\n    Incremento sumatorio3 en valor.\n}.\nCompruebo que sumatorio3 es igual que 6.\n```\n\n----\n\n### Sintaxis de: sentencia de lanzo\n\nSirve para lanzar un error.\n\n```calo\nCreo variable x como 0.\nIntento {\n    Incremento x en 1.\n    Lanzo un nuevo Error(\"Error obligado\").\n    Incremento x en 2.\n} En errores {\n    Incremento x en 10.\n}.\nCompruebo que x es igual que 11.\n```\n\n----\n\n### Sintaxis de: sentencia de hasta\n\nSirve para repetir cachos de código hasta que se cumpla cierta condición.\n\n```calo\nCreo variable x como 0.\nHasta que x es mayor que 10 {\n    Incremento x en 1.\n}.\nCompruebo que x es igual que 11.\n```\n\n----\n\n### Sintaxis de: sentencia de mientras\n\nSirve para repetir cachos de código mientras se cumpla cierta condición.\n\n```calo\nCreo variable x como 0.\nMientras x es menor que 10 {\n    Incremento x en 2.\n}.\nCompruebo que x es igual que 10.\n```\n\n----\n\n### Sintaxis de: sentencia de pendizo\n\nSirve para *apendizar* o *prependizar* valores en una lista.\n\n```calo\nCreo x como una lista.\nApendizo 0 en lista x.\nApendizo 1 en lista x.\nApendizo 2 en lista x.\nPrependizo 0-1 en lista x.\nPrependizo 0-2 en lista x.\nPrependizo 0-3 en lista x.\nCompruebo que x.length es igual que 3.\nCompruebo que x[0] es igual que 0-3.\n```\n\n----\n\n### Sintaxis de: sentencia de retorno\n\nSirve para retornar un valor dentro de una función. También sirve en un hecho, promesa, etc. que al fin y al cabo son a su vez funciones.\n\n```calo\nCreo f como una función donde retorno 1.\nCompruebo que f() es igual que 1.\n```\n\n----\n\n### Sintaxis de: sentencia de si\n\nSirve para ejecutar código de forma condicional, y anidar condiciones.\n\nLa fórmula es: **Si / Pero si (repetible) / Y si no**\n\n```calo\n# Sin paréntesis:\n\nCreo x como 2.\nCreo r como 0.\nSi x es igual que 0 asigno r como 1;\nPero si x es igual que 1 asigno r como 2;\nPero si x es igual que 2 asigno r como 3;\nY si no asigno r como 4.\nCompruebo que r es igual que 3.\n\n# Con paréntesis:\n\nCreo w como 2.\nCreo rr como 0.\nSi w es igual que 0 { Asigno rr como 1. }\nPero si w es igual que 1 { Asigno rr como 2. }\nPero si w es igual que 2 { Asigno rr como 3. }\nY si no { Asigno rr como 4. }.\nCompruebo que rr es igual que 3.\n```\n\n----\n\n### Sintaxis de: sentencias de bases de datos\n\nSirven para seleccionar, insertar, actualizar y eliminar datos de una base de datos.\n\nActualmente, esta sintaxis solo sirve para simplificar transacciones con `SimplestDB`.\n\n```calo\nImporto API nativa.\n\nSelecciono\n    en modelo \"animal\" \n    filtrando con una función con (animal) donde retorno animal.nombre no es tipo indefinido\n    ordenando por [ \"nombre\", \"apellido\", \"edad\" ]\n    agrupando por [ \"edad\" ]\n    paginando por [ 1, 20 ]\n    en base de datos \"animales\"\n    creando constante todos_los_animales_con_nombre.\nInserto\n    en modelo \"animal\"\n    con valor { nombre: \"Rata\", apellido: \"ratifolia\", edad: 30 }\n    en base de datos \"animales\".\nActualizo \n    en modelo \"animal\"\n    de registro 1\n    con valor { es_primero: true }\n    en base de datos \"animales\".\nElimino\n    en modelo \"animal\"\n    de registro 2.\n```\n\n----\n\n### Sintaxis de: sentencias de cacheo\n\nSirve para tomar y dejar valores de un sistema de cacheo.\n\nActualmente, esta sintaxis solo funciona para el sistema de cacheo de `SimplestDB`.\n\n```calo\nImporto API nativa.\n\nCreo x como 1.\nCacheo\n    con clave \"datoX\"\n    con valor \"Contenido del dato X0\"\n    refrescado si x es menor que 2\n    creando datoX.\nCompruebo que datoX es igual que \"Contenido del dato X0\".\n```\n\n----\n\n### Sintaxis de: sentencias de diálogo de usuario\n\nSirven para interactuar con el usuario. Actualmente, hay: notificaciones, preguntas y confirmaciones.\n\nNótese que son sintaxis que funcionarán tanto en navegador, usando los diálogos nativos, como en Node.js, que usará la entrada y salida de la consola.\n\n```calo\nImporto API nativa.\n\nNotifico con mensaje \"Hola!\".\nPregunto con mensaje \"¿Cómo te llamas?\" creando nombre.\nConfirmo con mensaje \"¿De verdad?\" creando confirmacion.\n```\n\n----\n\n### Sintaxis de: sentencia de desacoplo\n\nSirve para crear constantes o variables a partir de las propiedades o métodos de un objeto dado, todo en 1 sola expresión. También permite cambiar el nombre de la constante o variable que se crea de dicha propiedad o método.\n\n```calo\nCreo objeto como { x: \"x\", y: \"y\", z: \"z\" }.\nCreo objeto2 como { a: \"a\", b: \"b\", c: \"c\" }.\n\nDesacoplo constantes x, y, z a partir de objeto.\nDesacoplo variables a, b, c como ce a partir de objeto2.\n\nCompruebo que x es igual que \"x\".\nCompruebo que y es igual que \"y\".\nCompruebo que z es igual que \"z\".\nCompruebo que a es igual que \"a\".\nCompruebo que b es igual que \"b\".\nCompruebo que ce es igual que \"c\".\n```\n\n----\n\n### Sintaxis de: sentencias de derivo\n\nSirve para llamar al método constructor de la clase padre (método `super(...)`) dentro del método constructor de una clase hijo.\n\n```calo\nCreo Padre como una clase con {\n    Método constructor con (a) donde {\n        Asigno this.datos como [].\n        Apendizo a en lista this.datos.\n    }.\n}.\n\nCreo HijoUno como una clase que extiende Padre con {\n    Método constructor con (b) derivado con (0) donde {\n        Apendizo b en lista this.datos.\n    }.\n}.\n\nCreo HijoDos como una clase que extiende Padre con {\n    Método constructor con (c) donde {\n        Derivo con (0).\n        Apendizo c en lista this.datos.\n    }.\n}.\n\nCreo HijoTres como una clase que extiende Padre con {\n    Método constructor con (d) donde {\n        Derivo.\n        Apendizo d en lista this.datos.\n    }.\n}.\n\nCreo hijoUno como un nuevo HijoUno(1).\nCreo hijoDos como un nuevo HijoDos(2).\nCreo hijoTres como un nuevo HijoTres(3).\n\nCompruebo que hijoUno.datos[0] es igual que 0.\nCompruebo que hijoDos.datos[0] es igual que 0.\nCompruebo que hijoTres.datos[0] es igual que undefined.\n\nCompruebo que hijoUno.datos[1] es igual que 1.\nCompruebo que hijoDos.datos[1] es igual que 2.\nCompruebo que hijoTres.datos[1] es igual que 3.\n```\n\n----\n\n\n\n### Sintaxis de: generativa de array\n\nSirve para crear listas de valores.\n\n```calo\nCreo x como [].\nCreo y como [0,1,2].\nCreo z como una lista con [3,4,5].\nCompruebo que x.length es igual que 0.\nCompruebo que y.length es igual que 3.\nCompruebo que z.length es igual que 3.\n```\n\n----\n\n### Sintaxis de: generativa de clase\n\nSirve para crear clases. Tiene una sintaxis cerrada en su interior, donde pueden definirse:\n\n  - Propiedades estáticas o dinámicas\n  - Métodos estáticos o dinámicos\n\n```calo\nCreo Ser como una clase.\nCreo Animal como una clase que extiende Ser.\nCreo Humano como una clase que extiende Animal donde {\n    Propiedad estática especie donde retorno \"Homo sapiens sapiens\".\n    Método estático respirar con (oxigeno, otros) donde retorno \"dióxido de carbono\".\n    Propiedad pensamiento donde retorno \"pensamientos\".\n    Método beber con (agua) donde retorno \"orina\".\n    Método constructor con (nombre) donde {\n        Hago super().\n        Asigno this.nombre como nombre.\n    }.\n}.\nCreo humano como un nuevo Humano(\"Primer humano\").\nCreo humana como una nueva Humano(\"Primera humana\").\nCompruebo que humano.nombre es igual que \"Primer humano\".\nCompruebo que humana.nombre es igual que \"Primera humana\".\n```\n\n----\n\n### Sintaxis de: generativa de cuando\n\nSirve para presentar un valor encapsulado en un condicional previo. En JavaScript, es el `a ? b : c`.\n\n```calo\nCreo variable x como 10.\nCreo variable y como 20.\nCreo variable z como x + y.\nCompruebo que cuando x es igual que 10\n    entonces z es igual que 30\n    si no z es igual que 20.\n```\n\n----\n\n### Sintaxis de: generativa de bases de datos\n\nSirven para lo mismo que las sentencias de bases de datos, pero aquí usadas como generativas.\n\n```calo\nImporto API nativa.\n\nCreo todos_los_animales_con_nombre como una selección\n    en modelo \"animal\" \n    filtrando con una función con (animal) donde retorno animal.nombre no es tipo indefinido\n    ordenando por [ \"nombre\", \"apellido\", \"edad\" ]\n    agrupando por [ \"edad\" ]\n    paginando por [ 1, 20 ]\n    en base de datos \"animales\".\nHago una inserción\n    en modelo \"animal\"\n    con valor { nombre: \"Rata\", apellido: \"ratifolia\", edad: 30 }\n    en base de datos \"animales\".\nHago una actualización\n    en modelo \"animal\"\n    de registro 1\n    con valor { es_primero: true }\n    en base de datos \"animales\".\nHago una eliminación\n    en modelo \"animal\"\n    de registro 2.\n```\n\n----\n\n### Sintaxis de: generativa de cacheo\n\nSirven para lo mismo que las sentencias de cacheo, pero aquí usadas como generativas.\n\n```calo\nImporto API nativa.\n\nCreo x como 1.\nCreo datoX como un cacheo\n    con clave \"datoX\"\n    con valor \"Contenido del dato X0\"\n    refrescado si x es menor que 2.\nCompruebo que datoX es igual que \"Contenido del dato X0\".\n```\n\n----\n\n### Sintaxis de: generativa de componente vue2\n\nSirve para crear un componente Vue2. Solo en navegador.\n\n```calo\n# Importo API nativa.\n\nCreo App como un componente vue2 con nombre \"App\" con plantilla {\n    \u003cdiv class=\"App\"\u003e\n        \u003ca :href=\"url\"\u003e{{ nombre }} (versión {{ version }})\u003c/a\u003e\n    \u003c/div\u003e\n} con estilos {\n    .App {}\n} con lógica {\n    Retorno un objeto con {\n        Método data como una función donde retorno {\n            Propiedad nombre como \"Aplicación X\".\n            Propiedad version como \"1.0.0\".\n            Propiedad url como \"http://www.example.com\".\n        }.\n    }.\n}.\nCreo app como una nueva App().\nHago app.$mount(document.body.children[0]).\n```\n\n----\n\n### Sintaxis de: generativa de confirmación\n\nSirve para que el usuario confirme un mensaje. Es uno de los diálogos de usuario, pero en generativa. Devuelve un booleano.\n\n```calo\nImporto API nativa.\n\nCreo respuesta como una confirmación con mensaje \"¿Estás seguro?\".\n```\n\n----\n\n### Sintaxis de: generativa de detección de entorno\n\nSirve para detectar el entorno en el que se ejecuta el código, principalmente: dispositivo, sistema operativo y navegador.\n\n```calo\nImporto API nativa.\n\nCreo entornos como una lista.\nSi estoy en navegador apendizo \"navegador\" en lista entornos.\nSi estoy en sistema apendizo \"sistema\" en lista entornos.\nSi estoy en linux apendizo \"linux\" en lista entornos.\nSi estoy en windows apendizo \"windows\" en lista entornos.\nSi estoy en mac apendizo \"mac\" en lista entornos.\nSi estoy en chrome apendizo \"chrome\" en lista entornos.\nSi estoy en firefox apendizo \"firefox\" en lista entornos.\nSi estoy en opera apendizo \"opera\" en lista entornos.\nSi estoy en safari apendizo \"safari\" en lista entornos.\nSi estoy en android apendizo \"android\" en lista entornos.\nSi estoy en ios apendizo \"ios\" en lista entornos.\nSi estoy en ordenador apendizo \"ordenador\" en lista entornos.\nSi estoy en tablet apendizo \"tablet\" en lista entornos.\nSi estoy en móvil apendizo \"móvil\" en lista entornos.\n```\n\n----\n\n### Sintaxis de: generativa de elemento html\n\nSirve para crear elementos HTML (o `HTMLElement`). Solo en navegador.\n\n```calo\nImporto API nativa.\n\nCreo elemento como un elemento html con (\"\u003ca class='ejemplo'\u003eEsto es un ejemplo de elemento HTML\u003c/a\u003e\").\nHago document.body.appendChild(elemento).\n```\n\n----\n\n### Sintaxis de: generativa de notificación\n\nSirve para que al usuario se le notifique un mensaje. Es uno de los diálogos de usuario, pero en generativa.\n\n```calo\nImporto API nativa.\n\nHago una notificación con mensaje \"Hola!\".\n```\n\n----\n\n### Sintaxis de: generativa de petición http\n\nSirve para enviar peticiones HTTP. Usa `axios`.\n\n```calo\nImporto API nativa.\n\nHago un hecho asíncrono donde {\n    Imprimo asíncronamente una petición http\n        con url \"localhost\"\n        con método \"GET\"\n        con cuerpo \"\"\n        con cabeceras {}\n        con cliente Castelog.variables.cliente_http\n        en errores retorno 500.\n}.\n```\n\n----\n\n### Sintaxis de: generativa de plantilla\n\nSirve para crear plantillas de texto. Devuelve una función. Usa `ejs`, pero con los símbolos para introducir código cambiados a `\u003c:` y `:\u003e`.\n\nHay dos sintaxis.\n\n```calo\nImporto API nativa.\n\nCreo plantilla1 como una plantilla con (\"Esto es una plantilla con ID \u003c:= config.id :\u003e.\", { id: 503 }).\nCreo texto1 como plantilla1({ id: 503 }).\nCompruebo que texto1 es igual que \"Esto es una plantilla con ID 503.\".\n\nCreo plantilla2 como \u003c@Esto es una plantilla de texto con ID \u003c:=config.id:\u003e con sintaxis específica.@\u003e.\nCreo texto2 como plantilla2({ id: 504 }).\nCompruebo que texto2 es igual que \"Esto es una plantilla de texto con ID 504 con sintaxis específica.\".\n```\n\n----\n\n### Sintaxis de: generativa de pregunta\n\nSirve para que el usuario escriba una respuesta. Es uno de los diálogos de usuario, pero en generativa. Devuelve un texto, o null.\n\n```calo\n\n```\n\n----\n\n### Sintaxis de: generativa de sistema de ficheros\n\nSirve para escribir y leer ficheros.\n\nPara guardar compatibilidad con navegadores, puede usar `SimplestDB` o `Node.js`.\n\n```calo\n# Para Node.js:\n\nCreo x como una escritura de fichero\n    con ruta \"./fichero.txt\"\n    con codificación \"utf8\"\n    con contenido \"{}\"\n    usando sistema operativo.\n\nCreo x como una lectura de fichero\n    con ruta \"./fichero.txt\"\n    con codificación \"utf8\"\n    usando sistema operativo.\n\n# Para SimplestDB:\n\nCreo x como una escritura de fichero\n    con ruta \"./fichero.txt\"\n    con codificación \"utf8\"\n    con contenido \"{}\".\n\nCreo x como una lectura de fichero\n    con ruta \"./fichero.txt\"\n    con codificación \"utf8\".\n```\n\n----\n\n### Sintaxis de: generativa de espera\n\nSirve para iniciar una espera de tiempo.\n\n```calo\nCreo variable x como 100.\nHago una espera de 2 segundos donde asigno x como 200.\nCompruebo que x es igual que 100.\nHago una espera de 3 segundos donde compruebo que x es igual que 200.\n```\n\n----\n\n### Sintaxis de: generativa de función\n\nSirve para crear una función.\n\n```calo\nCreo x como una función con (dato) donde retorno dato.\nCompruebo que x() es igual que 500.\n```\n\n----\n\n### Sintaxis de: generativa de hecho\n\nSirve para crear y llamar una función, todo seguido.\n\n```calo\nCreo mensaje como \"Mensaje fáctico\".\nCompruebo que \"Mensaje fáctico\" es igual que un hecho con (mensaje) donde retorno mensaje.\n```\n\n----\n\n### Sintaxis de: generativa de nueva\n\nSirve para crear una nueva instancia de alguna clase.\n\n```calo\nCreo Paisaje como una clase donde {\n    Método constructor con (objetos o en su defecto []) donde {\n        Itero como lista objetos creando objeto donde {\n            Apendizo objeto en lista this.objetos.\n        }.\n    }.\n}.\nCreo paisajeUno como un nuevo Paisaje([ \"árbol\", \"sol\", \"mar\", \"montaña\", \"nubes\" ]).\nCreo paisajeDos como un nuevo Paisaje([ \"edificios\", \"calles\", \"personas\", \"sol\", \"nubes\" ]).\n\nCompruebo que paisajeUno.objetos contiene valor \"árbol\".\nCompruebo que paisajeUno.objetos contiene valor \"sol\".\nCompruebo que paisajeUno.objetos contiene valor \"mar\".\nCompruebo que paisajeUno.objetos contiene valor \"montaña\".\nCompruebo que paisajeUno.objetos contiene valor \"nubes\".\n\nCompruebo que paisajeDos.objetos contiene valor \"edificios\".\nCompruebo que paisajeDos.objetos contiene valor \"calles\".\nCompruebo que paisajeDos.objetos contiene valor \"personas\".\nCompruebo que paisajeDos.objetos contiene valor \"sol\".\nCompruebo que paisajeDos.objetos contiene valor \"nubes\".\n```\n\n----\n\n### Sintaxis de: generativa de número\n\nSirve para crear un valor de número.\n\n```calo\nCompruebo que 0 es igual que 2 - 2.\n```\n\n----\n\n### Sintaxis de: generativa de objeto\n\nSirve para crear un objeto.\n\n```calo\nCompruebo que { nombre: \"Castelog\" } es tipo objeto.\nCompruebo que un objeto con { nombre: \"Castelog\" } es tipo objeto.\nCompruebo que un objeto con { Propiedad nombre como \"Castelog\". } es tipo objeto.\nCompruebo que un objeto con { Método llamar como 0. } es tipo objeto.\n```\n\n----\n\n### Sintaxis de: generativa de promesa\n\nSirve para crear una promesa o `Promise`.\n\n```calo\nCreo x1 como una promesa donde {}.\nCreo x2 como una promesa con (ok, fallo) donde {}.\n```\n\n----\n\n### Sintaxis de: generativa de texto\n\nSirve para crear texto.\n\n```calo\nImprimo \"Un texto con dobles comitas\".\nImprimo 'Un texto con comitas simples'.\nCreo variables como \"variablessss\".\nImprimo `Un texto con comitas especiales que permiten ${variables}`.\n```\n\n----\n\n### Sintaxis de: generativa de un comando de consola\n\nSirve para ejecutar un comando por consola.\n\n```calo\nCreo x como un comando de consola\n    consistente en \"ls -lA\"\n    desde directorio process.cwd()\n    configurado con {}.\n\nCreo x como un comando de consola en serie\n    consistente en \"ls -lA\"\n    desde directorio process.cwd()\n    configurado con {}.\n\nCreo x como un comando de consola en paralelo\n    consistente en \"ls -lA\"\n    desde directorio process.cwd()\n    configurado con {}.\n```\n\n----\n\n### Sintaxis de: generativa de un conjunto de claves del objeto\n\nSirve para extraer las claves de un objeto, en una lista.\n\n```calo\nCreo x como un conjunto de claves del objeto { a:0, b:1 }.\n```\n\n----\n\n### Sintaxis de: generativa de un conjunto de valores del objeto\n\nSirve para extraer los valores de un objeto, en una lista.\n\n```calo\nCreo x como un conjunto de valores del objeto { a:0, b:1 }.\n```\n\n----\n\n### Sintaxis de: generativa de variable llamable\n\n```calo\nHago console.log(\"Esto es una forma de referirse a esta generativa, que termina en una llamada a función\").\n```\n\n----\n\n\n\n### Sintaxis de: prependice de asíncronamente\n\nSirve para especificar que queremos esperar a que termine la promesa o `Promise` que sigue, antes de continuar con la siguiente sentencia. En JavaScript, es el `await`. Esto quiere decir que esta instrucción debe ir dentro de funciones asíncronas para que no salte un error sintáctico.\n\n```calo\nHago un hecho asíncrono donde {\n    Hago asíncronamente una promesa donde hago setTimeout(ok, 1000).\n}.\n```\n\n----\n\n### Sintaxis de: prependice de negación\n\nSirve para negar la generativa que sigue. En JavaScript, es el `!`. \n\n```calo\nCreo z como false.\nSi no z imprimo \"OK!\".\n```\n\n----\n\n\n\n### Sintaxis de: apéndice de acceso a variable llamable\n\n```calo\nHago console.log(\"Esto es otra forma de referirse a esta generativa, que termina en una llamada a función\").\n```\n\n----\n\n### Sintaxis de: apéndice de conjunción\n\n```calo\nCreo variable_1 como true.\nCreo variable_2 como false.\nCreo variable_3 como true.\nSi variable_1 y variable_2 y variable_3 imprimo \"Todas las variables son verdaderas. Bueno, no. Por eso, esto no se imprimirá.\".\n```\n\n----\n\n### Sintaxis de: apéndice de disjunción\n\n```calo\nCreo variable_1 como true.\nCreo variable_2 como false.\nCreo variable_3 como true.\nSi variable_1 o variable_2 o variable_3 imprimo \"Algunas de las variables es verdadera. Por eso, esto sí se imprimirá.\".\n```\n\n----\n\n### Sintaxis de: apéndice de división\n\n```calo\nSi 3600 / 100 es igual que 36 imprimo \"OK!\".\n```\n\n----\n\n### Sintaxis de: apéndice de filtrado\n\n```calo\nCreo numeros_divisibles_por_2 como [10,11,12,13,14] filtrado donde retorno item % 2.\nCreo numeros_divisibles_por_2 como [10,11,12,13,14] filtrado con (it) donde retorno it % 2.\nCreo numeros_divisibles_por_2 como [10,11,12,13,14] filtrado por una función con (it) donde retorno it % 2.\n```\n\n----\n\n### Sintaxis de: apéndice de mapeado\n\n```calo\nCreo numeros_doblados como [10,11,12,13,14] mapeado donde retorno item * 2.\nCreo numeros_doblados como [10,11,12,13,14] mapeado con (it) donde retorno item * 2.\nCreo numeros_doblados como [10,11,12,13,14] mapeado por una función con (it) donde retorno it * 2.\n```\n\n----\n\n### Sintaxis de: apéndice de reducido\n\n```calo\nCreo sumatorio como [10,11,12,13,14] reducido desde 0 donde incremento output en item después retorno output.\nCreo sumatorio como [10,11,12,13,14] reducido desde 0 con (it) donde incremento output en item después retorno output.\nCreo sumatorio como [10,11,12,13,14] reducido desde 0 por una función con (it) donde incremento output en item después retorno output.\n```\n\n----\n\n### Sintaxis de: apéndice de módulo\n\n```calo\nCreo residuo como 11 % 2.\n```\n\n----\n\n### Sintaxis de: apéndice de multiplicación\n\n```calo\nCreo multiplicacion como 5 * 5.\n```\n\n----\n\n### Sintaxis de: apéndice de numerización\n\n```calo\nCreo numero como \"5500\" numerizado.\n```\n\n----\n\n### Sintaxis de: apéndice de resta\n\n```calo\nCreo resultado como 10 - 2.\n```\n\n----\n\n### Sintaxis de: apéndice de suma\n\n```calo\nCreo resultado como 10 + 2.\n```\n\n----\n\n### Sintaxis de: apéndice de textualización\n\n```calo\nCreo dato_textualizado como { a:0, b:1 } textualizado.\n```\n\n----\n\n### Sintaxis de: apéndices negables\n\n```calo\nCreo comprobacion como 10 no es igual que 11.\nCreo comprobacion como 10 no es mayor que 11.\nCreo comprobacion como 10 no es menor que 9.\nCreo comprobacion como 10 no es diferente que 10.\nCreo comprobacion como 10 no es tipo texto.\nCreo comprobacion como \"10\" no es tipo número.\nCreo comprobacion como 100/0 no es tipo número normal.\nCreo comprobacion como 10 no es tipo lista.\nCreo comprobacion como 10 no es tipo objeto.\nCreo comprobacion como 10 no es tipo indefinido.\nCreo comprobacion como 10 no es tipo función.\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Fcastelog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallnulled%2Fcastelog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Fcastelog/lists"}