
# CLI

shikiphp include un mic instrument în linia de comandă la `bin/shikiphp` (instalat ca `vendor/bin/shikiphp` în proiect). Are trei comenzi: `highlight` redă un fișier în HTML, iar `langs` și `themes` listează conținutul pachetului.

## `highlight`

Evidențiază un fișier în HTML și îl afișează la stdout.

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

- `<file>` — calea fișierului de citit. Trebuie să existe; intrarea standard nu este citită.
- `--lang` — ID-ul sau aliasul limbii. Dacă este omis, extensia fișierului este folosită ca atare drept ID (dacă nu există, se folosește `txt`).
- `--theme` — ID-ul temei. Valoarea implicită este `github-dark`.

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

Rezultatul este același bloc `<pre class="shiki …">` cu o singură temă, returnat de [`codeToHtml`](https://shikiphp.inline0.dev/ro/docs/api#shikiphpcodetohtml), urmat de o linie nouă, astfel încât îl puteți redirecționa direct într-un fișier:

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

Comanda nu acceptă alte opțiuni. Pentru teme duale, transformatoare sau orice altă [opțiune](https://shikiphp.inline0.dev/ro/docs/options), apelați în schimb PHP API.

### Opțiuni și argumente

Opțiunile trebuie să folosească forma `--name=value`. Orice alt argument care începe cu `--` este ignorat, iar ultimul argument care nu începe cu `--` este considerat fișierul. Prin urmare, `--lang php file.rs` evidențiază `file.rs` ca Rust: `--lang` este ignorat, `php` este înlocuit de `file.rs`, iar limba este dedusă din extensia `.rs`.

### Deducerea limbii

Fără `--lang`, extensia devine ID-ul limbajului, neschimbat. Funcționează când extensia este chiar un ID sau alias inclus în pachet — `php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` și multe altele (consultați [Limbaje](https://shikiphp.inline0.dev/ro/docs/languages)). Nu funcționează pentru:

- fișiere fără extensie, precum `Makefile` sau `Dockerfile`, care recurg la `txt`;
- extensii care nu sunt ID-uri de limbă, precum `.txt`.

`txt` nu este o limbă inclusă în pachet, așa că ambele cazuri se opresc momentan cu o eroare `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Transmiteți `--lang` pentru aceste fișiere:

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

## `langs`

Afișează fiecare ID de limbă acceptat de pachet, câte unul pe linie.

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

Lista are 350 de linii: cele 253 de ID-uri pentru gramaticile incluse, în ordinea din pachet (nu alfabetică), urmate de cele 97 de aliasuri ale lor (`js`, `cjs`, `mjs` și așa mai departe). ID-urile gramaticilor includ 18 gramatici auxiliare încorporate de alte gramatici, precum `vue-directives` și `es-tag-css`; consultați [Limbi](https://shikiphp.inline0.dev/ro/docs/languages) pentru catalogul cu nume și aliasuri. Folosiți `sort` pentru o listă alfabetică.

## `themes`

Afișează fiecare ID de temă inclusă, câte unul pe linie, în ordine alfabetică (65 de teme).

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

Consultați [Teme](https://shikiphp.inline0.dev/ro/docs/themes) pentru catalogul cu nume și tipuri deschise/întunecate.

## Ajutor și cod de ieșire

Rulați fără comandă sau cu `-h` / `--help` / `help` pentru a afișa instrucțiunile de utilizare.

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

| Situație | Ieșire | Cod de ieșire |
| --- | --- | --- |
| Succes sau ajutor | stdout | `0` |
| Comandă necunoscută | `Unknown command: <name>` la stderr | `1` |
| `highlight` fără fișier sau fișier inexistent | linia de utilizare la stderr | `1` |
| Limbă sau temă necunoscută | o excepție `Shikiphp\Exceptions\Highlight` neprinsă (eroare fatală PHP cu stack trace) | `255` |
