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_FOUND como 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 la Structure de 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.