Herramientas
Todas las herramientas de esta página implementan las mismas cinco especificaciones y devuelven los mismos códigos de error.
Según el uso:
| Uso | Herramienta |
|---|---|
| Probar el lenguaje sin instalar nada | El playground |
| Escribir documentos habitualmente | La extensión de VS Code |
Validar en un script, un Makefile o en CI |
La línea de comandos stxt |
| Leer o generar STXT desde un programa | Una biblioteca: TypeScript, Java o Python |
Playground
play.stxt.dev es un editor en el navegador: varios documentos a la vez, sus esquemas o plantillas al lado, errores de sintaxis y de validación durante la edición, autocompletado guiado por la gramática y hover con la definición de cada nodo.
- No requiere instalación ni cuenta; el trabajo se guarda en el propio navegador.
- Incluye una semilla de documentos de ejemplo.
- El workspace entero se puede compartir con un enlace que lleva el contenido dentro.
Extensión de VS Code
La extensión oficial es
STXT Language (stxt-lang.stxt).
Se instala desde el panel de extensiones, buscando stxt, o desde el terminal:
code --install-extension stxt-lang.stxt
Funciones:
- Errores de sintaxis en tiempo real, y de esquema; un namespace que ningún nivel define
se marca con
SCHEMA_NOT_FOUNDcomo aviso. - Coloreado semántico.
- Autocompletado con los nodos que permite el esquema y los valores de un
ENUM. - Información al pasar el ratón: la descripción que dé la definición, el tipo y, en un
ENUM, sus valores. - Ir a la definición (F12): del nodo al
Node:de su esquema o a su línea en laStructurede su plantilla. - Formateo del documento.
- Resolución de esquemas y plantillas desde los directorios
.stxt/del proyecto, del usuario y del sistema, tal como describe la referencia de resolución.
Línea de comandos
El comando stxt se publica en npm como
@stxt-lang/cli y necesita
Node 20 o superior.
npm install -g @stxt-lang/cli
stxt --version
Sin instalación, con npx:
npx @stxt-lang/cli validate --recursive docs/
Los comandos:
| Comando | Qué hace |
|---|---|
stxt validate |
Parsea y valida uno o varios ficheros o directorios; sin salida si todo pasa |
stxt format |
Reformatea (--tabs / --spaces); --check para CI, --write para guardar |
stxt describe |
Muestra el árbol lógico de un documento en JSON (STXT-TREE-SPEC) |
stxt schemas |
Muestra qué esquemas y plantillas aplican en un directorio, y de qué nivel |
stxt install |
Instala una definición en ./.stxt, ~/.stxt o el nivel del sistema |
El código de salida distingue los errores de los documentos (1) del uso incorrecto
del comando (2). Ningún comando reescribe ficheros sin una opción explícita. Las
opciones, las salidas y los códigos de salida están en la
referencia de la línea de comandos.
Bibliotecas
Hay tres implementaciones oficiales: TypeScript/JavaScript, Java y Python. Las tres pasan el kit de conformidad, que sirve también para comprobar un puerto a otro lenguaje.
TypeScript / JavaScript
@stxt-lang/core en npm. Es el
parser que usan la extensión, la línea de comandos y el playground. La guía está en
la biblioteca TypeScript.
npm install @stxt-lang/core
Un ejemplo mínimo:
import { Parser, InlineNode } from '@stxt-lang/core';
const result = new Parser().parseResult(text);
for (const error of result.getErrors()) {
console.error(`line ${error.line} [${error.code}]: ${error.message}`);
}
const root = result.getNodes()[0];
if (root instanceof InlineNode) {
console.log(root.getChild('Title')?.getText());
}
Java
dev.stxt:stxt-core
en Maven Central. Java 17 o superior; módulo automático dev.stxt. La guía está en
la biblioteca Java.
<dependency>
<groupId>dev.stxt</groupId>
<artifactId>stxt-core</artifactId>
<version>1.0.3</version>
</dependency>
O con Gradle:
implementation 'dev.stxt:stxt-core:1.0.3'
Python
stxt en PyPI. Python puro, 3.10 o superior. La
guía está en la biblioteca Python.
pip install stxt
Un ejemplo mínimo:
from stxt import Parser, InlineNode
result = Parser().parse_result(text)
for error in result.get_errors():
print(f"line {error.line} [{error.code}]: {error.message}")
root = result.get_nodes()[0]
if isinstance(root, InlineNode):
print(root.get_child("Title").get_text())
Código fuente
Todo el ecosistema vive en la organización stxt-lang de GitHub, con licencia MIT:
| Repositorio | Contenido |
|---|---|
| stxt-lang | Este sitio: las especificaciones, el kit de conformidad y el corpus de ejemplos |
| stxt-js | @stxt-lang/core, la biblioteca TypeScript |
| stxt-java | dev.stxt:stxt-core, la biblioteca Java |
| stxt-python | stxt, la biblioteca Python |
| stxt-cli | @stxt-lang/cli, la línea de comandos |
| stxt-vscode | La extensión de VS Code |
| stxt-play | El playground |
Las preguntas y las ideas sobre el lenguaje van a las discusiones de la organización; los errores, a las incidencias del repositorio de la herramienta afectada.