
# CLI

A shikiphp egy kis parancssori eszközt tartalmaz a `bin/shikiphp` útvonalon (a projektben `vendor/bin/shikiphp` néven települ). Három parancsa van: a `highlight` egy fájlt jelenít meg HTML formátumban, a `langs` és `themes` pedig felsorolja a csomag tartalmát.

## `highlight`

Fájlt emel ki HTML formátumba, és a stdout kimenetére írja.

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

- `<file>` — a beolvasandó útvonal. Létező fájlra kell mutatnia; a szabványos bemenetet nem olvassa be.
- `--lang` — a nyelvazonosító vagy alias. Ha nincs megadva, a fájlkiterjesztést változtatás nélkül használja azonosítóként (ha nincs kiterjesztés, akkor `txt` értékére vált).
- `--theme` — a témaazonosító. Alapértelmezése: `github-dark`.

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

A kimenet ugyanaz az egytémás `<pre class="shiki …">` blokk, amelyet a [`codeToHtml`](https://shikiphp.inline0.dev/hu/docs/api#shikiphpcodetohtml) ad vissza, majd egy sortörés követi, így közvetlenül fájlba irányítható:

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

A parancs nem fogad el más kapcsolókat. Kéttémás módhoz, transzformátorokhoz vagy más [beállítás](https://shikiphp.inline0.dev/hu/docs/options) használatához inkább a PHP API elemet hívja meg.

### Kapcsolók és argumentumok

A kapcsolók `--name=value` formátumban adhatók meg. A `--` jellel kezdődő egyéb argumentumokat a rendszer figyelmen kívül hagyja, a `--` jellel nem kezdődő utolsó argumentum pedig a fájl lesz. Ezért a `--lang php file.rs` a `file.rs` fájlt Rust nyelvként emeli ki: a `--lang` figyelmen kívül marad, a `php` helyébe a `file.rs` lép, a nyelvet pedig a `.rs` kiterjesztés határozza meg.

### Nyelv meghatározása

`--lang` nélkül a kiterjesztés változatlanul nyelvazonosítóvá válik. Ez akkor működik, ha a kiterjesztés maga is csomagolt azonosító vagy alias — `php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` és még sok más esetben (lásd: [Nyelvek](https://shikiphp.inline0.dev/hu/docs/languages)). Az alábbi esetekben nem működik:

- kiterjesztés nélküli fájlok, például `Makefile` vagy `Dockerfile`, amelyeknél a rendszer visszaáll erre: `txt`;
- olyan kiterjesztések, amelyek nem nyelvi azonosítók, például `.txt`.

A `txt` nem beépített nyelv, ezért mindkét eset `Unknown language "txt"` hibával áll le ([#3](https://github.com/inline0/shikiphp/issues/3)).
Ezekhez a fájlokhoz adja meg ezt: `--lang`:

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

## `langs`

Írja ki soronként a csomag által nyelvként elfogadott összes azonosítót.

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

A lista 350 sort tartalmaz: először a beépített 253 nyelvtanazonosítókat a csomag szerinti sorrendben (nem ábécérendben), majd a hozzájuk tartozó 97 aliast (`js`, `cjs`, `mjs` és így tovább).
A nyelvtanazonosítók között 18 segédnyelvtan is van, amelyeket más nyelvtanok beágyaznak, például `vue-directives` és `es-tag-css`; a neveket és aliasokat tartalmazó katalógust lásd itt: [Nyelvek](https://shikiphp.inline0.dev/hu/docs/languages). Ábécérendbe rendezett listához futtassa át a kimenetet ezen: `sort`.

## `themes`

Írja ki soronként az összes beépített témát azonosítójuk szerint, ábécérendben (65 téma).

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

A neveket és a világos/sötét típusokat tartalmazó katalógust lásd itt: [Témák](https://shikiphp.inline0.dev/hu/docs/themes).

## Súgó és kilépési állapot

Parancs nélkül, illetve `-h` / `--help` / `help` megadásával használati útmutatót ír ki.

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

| Helyzet | Kimenet | Kilépési állapot |
| --- | --- | --- |
| Siker vagy súgó | stdout | `0` |
| Ismeretlen parancs | `Unknown command: <name>` a stderr kimeneten | `1` |
| `highlight` fájl nélkül, vagy ha a fájl nem létezik | használati sor a stderr kimeneten | `1` |
| Ismeretlen nyelv vagy téma | nem kezelt `Shikiphp\Exceptions\Highlight` (PHP végzetes hiba veremnyommal) | `255` |
