
# CLI

shikiphp incluye una pequeña herramienta de línea de comandos en `bin/shikiphp` (instalada como `vendor/bin/shikiphp` en tu proyecto). Tiene tres comandos: `highlight` muestra un archivo en HTML, mientras que `langs` y `themes` enumeran el contenido del paquete.

## `highlight`

Resalta un archivo en HTML y lo imprime en stdout.

```bash
vendor/bin/shikiphp highlight <file> [--lang=<lang>] [--theme=<theme>]
```

- `<file>` — la ruta del archivo que se va a leer. Debe ser un archivo existente; no se lee la entrada estándar.
- `--lang` — el id o alias del idioma. Si se omite, se usa la extensión del archivo tal cual como id (si no hay extensión, se usa `txt`).
- `--theme` — el id del tema. El valor predeterminado es `github-dark`.

```bash
vendor/bin/shikiphp highlight src/App.php --lang=php --theme=nord
```

El resultado es el mismo bloque `<pre class="shiki …">` de tema único que devuelve
[`codeToHtml`](https://shikiphp.inline0.dev/es/docs/api#shikiphpcodetohtml), seguido de un salto de línea, para
poder redirigirlo directamente a un archivo:

```bash
vendor/bin/shikiphp highlight src/App.php --theme=github-light > app.html
```

El comando no acepta más opciones. Para usar dos temas, transformadores o cualquier otra
[opción](https://shikiphp.inline0.dev/es/docs/options), llama a PHP API.

### Opciones y argumentos

Las opciones deben tener el formato `--name=value`. Se ignora cualquier otro argumento que empiece por
`--`, y se toma como archivo el último argumento que no empiece por `--`. Por tanto, `--lang php file.rs` resalta `file.rs` como Rust: se ignora `--lang`, `php` se sustituye por `file.rs` y el idioma se deduce de la extensión `.rs`.

### Deducción del idioma

Sin `--lang`, la extensión se convierte en el id del idioma sin cambios. Esto funciona si la extensión es un id o alias incluido: `php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` y muchos más (consulta [Idiomas](https://shikiphp.inline0.dev/es/docs/languages)). No funciona con:

- archivos sin extensión, como `Makefile` o `Dockerfile`, que usan `txt` como alternativa;
- extensiones que no son ids de idioma, como `.txt`.

`txt` no es un idioma incluido, por lo que ambos casos terminan actualmente con un error `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Usa `--lang` con estos archivos:

```bash
vendor/bin/shikiphp highlight Dockerfile --lang=docker
vendor/bin/shikiphp highlight Makefile --lang=make
```

## `langs`

Muestra, uno por línea, todos los ids de idioma que acepta el paquete.

```bash
vendor/bin/shikiphp langs
```

La lista tiene 350 líneas: los 253 ids de gramática incluidos, en el orden del paquete (no alfabético), seguidos de sus 97 alias (`js`, `cjs`, `mjs`, etc.). Entre los ids de gramática hay 18 gramáticas auxiliares que se incrustan en otras, como `vue-directives` y `es-tag-css`; consulta [Idiomas](https://shikiphp.inline0.dev/es/docs/languages) para ver el catálogo con nombres y alias. Usa `sort` para ordenarlos alfabéticamente.

## `themes`

Muestra todos los ids de los temas incluidos, uno por línea y en orden alfabético (65 temas).

```bash
vendor/bin/shikiphp themes
```

Consulta [Temas](https://shikiphp.inline0.dev/es/docs/themes) para ver el catálogo con nombres y tipos claros/oscuros.

## Ayuda y código de salida

Ejecuta el comando sin argumentos o con `-h` / `--help` / `help` para mostrar las instrucciones de uso.

```bash
vendor/bin/shikiphp --help
```

| Situación | Salida | Código de salida |
| --- | --- | --- |
| Éxito o ayuda | stdout | `0` |
| Comando desconocido | `Unknown command: <name>` en stderr | `1` |
| `highlight` sin archivo o archivo inexistente | línea de uso en stderr | `1` |
| Idioma o tema desconocido | `Shikiphp\Exceptions\Highlight` sin capturar (error fatal de PHP con seguimiento de pila) | `255` |
