
# CLI

shikiphp zawiera niewielkie narzędzie wiersza poleceń pod adresem `bin/shikiphp` (instalowane w projekcie jako
`vendor/bin/shikiphp`). Udostępnia trzy polecenia: `highlight`
rendruje pojedynczy plik do HTML, a `langs` i `themes` wyświetlają zawartość pakietu.

## `highlight`

Podświetl plik do HTML i wypisz wynik na stdout.

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

- `<file>` — ścieżka do odczytu. Plik musi istnieć; dane ze standardowego wejścia
  nie są odczytywane.
- `--lang` — identyfikator języka lub alias. Jeśli go pominięto, rozszerzenie pliku jest używane
  bez zmian jako identyfikator (a gdy go brak, stosowane jest `txt`).
- `--theme` — identyfikator motywu. Domyślnie `github-dark`.

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

Wynik to ten sam blok `<pre class="shiki …">` z jednym motywem, który zwraca
[`codeToHtml`](https://shikiphp.inline0.dev/pl/docs/api#shikiphpcodetohtml), po którym następuje znak nowej linii, dzięki czemu
można go bezpośrednio przekierować do pliku:

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

Polecenie nie przyjmuje innych opcji. W przypadku dwóch motywów, transformerów lub innej
[opcji](https://shikiphp.inline0.dev/pl/docs/options) użyj zamiast tego PHP API.

### Opcje i argumenty

Opcje muszą mieć postać `--name=value`. Pozostałe argumenty rozpoczynające się od
`--` są ignorowane, a ostatni argument, który nie zaczyna się od `--`, jest traktowany jako
plik. Dlatego `--lang php file.rs` podświetla `file.rs` jako Rust: `--lang`
jest ignorowane, `php` zostaje zastąpione przez `file.rs`, a język jest określany na podstawie
rozszerzenia `.rs`.

### Określanie języka

Bez `--lang` rozszerzenie staje się niezmienionym identyfikatorem języka. Działa to,
gdy rozszerzenie jest identyfikatorem lub aliasem z pakietu — `php`, `js`, `ts`,
`tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` i wiele innych (zobacz
[Języki](https://shikiphp.inline0.dev/pl/docs/languages)). Nie działa to w przypadku:

- plików bez rozszerzenia, takich jak `Makefile` lub `Dockerfile`, dla których stosowane jest
  `txt`;
- rozszerzeń, które nie są identyfikatorami języka, takich jak `.txt`.

`txt` nie jest dołączonym językiem, więc w obu przypadkach pojawia się obecnie
nieobsłużony błąd `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
W przypadku tych plików przekaż `--lang`:

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

## `langs`

Wyświetl każdy identyfikator języka akceptowany przez pakiet, po jednym w wierszu.

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

Lista zawiera 350 wierszy: 253 identyfikatorów dołączonych gramatyk w kolejności pakietu (nie
alfabetycznej), a następnie ich 97 aliasów (`js`, `cjs`, `mjs` itd.).
Identyfikatory gramatyk obejmują 18 gramatyk pomocniczych osadzanych przez inne gramatyki, takich jak
`vue-directives` i `es-tag-css`; pełny katalog nazw i aliasów znajdziesz w sekcji [Języki](https://shikiphp.inline0.dev/pl/docs/languages). Aby uzyskać listę alfabetyczną, użyj potoku z `sort`.

## `themes`

Wyświetl każdy identyfikator dołączonego motywu, po jednym w wierszu, w kolejności alfabetycznej (65 motywów).

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

Katalog nazw oraz typów jasny/ciemny znajdziesz w sekcji [Motywy](https://shikiphp.inline0.dev/pl/docs/themes).

## Pomoc i status zakończenia

Uruchom bez polecenia albo z `-h` / `--help` / `help`, aby wyświetlić instrukcję użycia.

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

| Sytuacja | Wynik | Status zakończenia |
| --- | --- | --- |
| Sukces lub pomoc | stdout | `0` |
| Nieznane polecenie | `Unknown command: <name>` na stderr | `1` |
| `highlight` bez pliku lub nieistniejący plik | wiersz instrukcji użycia na stderr | `1` |
| Nieznany język lub motyw | nieobsłużony `Shikiphp\Exceptions\Highlight` (błąd krytyczny PHP ze śladem stosu) | `255` |
