
# CLI

shikiphp obsahuje malý nástroj příkazového řádku v `bin/shikiphp` (v projektu se nainstaluje jako `vendor/bin/shikiphp`). Nabízí tři příkazy: `highlight` vykreslí jeden soubor do HTML a `langs` a `themes` vypíšou obsah balíčku.

## `highlight`

Zvýrazní soubor do HTML a vypíše jej na stdout.

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

- `<file>` — cesta k souboru, který se má načíst. Soubor musí existovat; standardní vstup se nenačítá.
- `--lang` — ID jazyka nebo alias. Pokud není uvedeno, použije se přípona souboru jako ID přesně tak, jak je, případně `txt`, pokud přípona chybí.
- `--theme` — ID motivu. Výchozí hodnota je `github-dark`.

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

Výstup tvoří stejný blok `<pre class="shiki …">` s jedním motivem, jaký vrací [`codeToHtml`](https://shikiphp.inline0.dev/cs/docs/api#shikiphpcodetohtml), následovaný novým řádkem, takže jej lze přesměrovat přímo do souboru:

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

Příkaz nepřijímá žádné další volby. Pro dvojici motivů, transformátory nebo jakoukoli jinou [volbu](https://shikiphp.inline0.dev/cs/docs/options) použijte místo toho PHP API.

### Možnosti a argumenty

Možnosti musí mít podobu `--name=value`. Jakýkoli jiný argument začínající na `--` se ignoruje a za soubor se považuje poslední argument, který nezačíná na `--`. `--lang php file.rs` proto zvýrazní `file.rs` jako Rust: `--lang` se ignoruje, `php` se nahradí za `file.rs` a jazyk se určí podle přípony `.rs`.

### Odvození jazyka

Bez `--lang` se přípona beze změny použije jako ID jazyka. Funguje to, pokud je samotná přípona ID nebo alias obsažený v balíčku — `php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` a mnoho dalších (viz [Jazyky](https://shikiphp.inline0.dev/cs/docs/languages)). Nefunguje to pro:

- soubory bez přípony, například `Makefile` nebo `Dockerfile`, u nichž se použije výchozí `txt`;
- přípony, které nejsou ID jazyka, například `.txt`.

`txt` není jazyk obsažený v balíčku, takže oba případy nyní končí chybou `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Pro tyto soubory předejte `--lang`:

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

## `langs`

Vypíše všechna ID jazyků, která balíček přijímá, každé na samostatný řádek.

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

Seznam obsahuje 350 řádků: nejprve 253 ID gramatik obsažených v balíčku, seřazená podle pořadí v balíčku (nikoli abecedně), a poté jejich 97 aliasů (`js`, `cjs`, `mjs` atd.). Mezi ID gramatik je 18 pomocných gramatik, které vkládají jiné gramatiky, například `vue-directives` a `es-tag-css`; katalog názvů a aliasů najdete v části [Jazyky](https://shikiphp.inline0.dev/cs/docs/languages). Abecední seznam získáte pomocí `sort`.

## `themes`

Vypíše všechna ID motivů obsažených v balíčku, každé na samostatný řádek, v abecedním pořadí (65 motivů).

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

Katalog s názvy a typy světlý/tmavý najdete v části [Motivy](https://shikiphp.inline0.dev/cs/docs/themes).

## Nápověda a návratový kód

Spuštěním bez příkazu nebo s `-h` / `--help` / `help` zobrazíte nápovědu k použití.

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

| Situace | Výstup | Návratový kód |
| --- | --- | --- |
| Úspěch nebo nápověda | stdout | `0` |
| Neznámý příkaz | `Unknown command: <name>` na stderr | `1` |
| `highlight` bez souboru nebo soubor neexistuje | řádek s nápovědou na stderr | `1` |
| Neznámý jazyk nebo motiv | nezachycená chyba `Shikiphp\Exceptions\Highlight` (fatální chyba PHP s trasováním zásobníku) | `255` |
