
# CLI

shikiphp bevat een klein opdrachtregelprogramma op `bin/shikiphp` (in uw project geïnstalleerd als `vendor/bin/shikiphp`). Het heeft drie opdrachten: `highlight` geeft één bestand weer naar HTML, en `langs` en `themes` geven de inhoud van de bundel weer.

## `highlight`

Markeer een bestand naar HTML en schrijf de uitvoer naar stdout.

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

- `<file>` — het pad om te lezen. Dit moet een bestaand bestand zijn; standaardinvoer wordt niet gelezen.
- `--lang` — de taal-ID of alias. Als deze ontbreekt, wordt de bestandsextensie ongewijzigd als ID gebruikt (en als die ontbreekt, wordt teruggevallen op `txt`).
- `--theme` — de thema-ID. Standaard is dit `github-dark`.

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

De uitvoer is hetzelfde blok met één thema in `<pre class="shiki …">` dat [`codeToHtml`](https://shikiphp.inline0.dev/nl/docs/api#shikiphpcodetohtml) retourneert, gevolgd door een regeleinde, zodat u het rechtstreeks naar een bestand kunt omleiden:

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

De opdracht accepteert geen andere opties. Gebruik voor dubbele thema's, transformers of een andere [optie](https://shikiphp.inline0.dev/nl/docs/options) de PHP API.

### Opties en argumenten

Opties moeten de vorm `--name=value` gebruiken. Elk ander argument dat begint met `--` wordt genegeerd; het laatste argument dat niet met `--` begint, wordt als bestand gebruikt. `--lang php file.rs` markeert daarom `file.rs` als Rust: `--lang` wordt genegeerd, `php` wordt vervangen door `file.rs` en de taal wordt afgeleid van de extensie `.rs`.

### Taal afleiden

Zonder `--lang` wordt de taal-id ongewijzigd gebruikt. Dat werkt
wanneer de extensie zelf een meegeleverde id of alias is — `php`, `js`, `ts`,
`tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` en vele andere (zie
[Talen](https://shikiphp.inline0.dev/nl/docs/languages)). Het werkt niet voor:

- bestanden zonder extensie, zoals `Makefile` of `Dockerfile`, die terugvallen
  op `txt`;
- extensies die geen taal-id zijn, zoals `.txt`.

`txt` is geen meegeleverde taal, dus beide gevallen eindigen momenteel met een
`Unknown language "txt"`-fout ([#3](https://github.com/inline0/shikiphp/issues/3)).
Geef voor deze bestanden `--lang` mee:

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

## `langs`

Print elke id die de bundel als taal accepteert, één per regel.

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

De lijst bevat 350 regels: de 253 meegeleverde grammatica-id's in bundelvolgorde (niet
alfabetisch), gevolgd door hun 97 aliassen (`js`, `cjs`, `mjs` enzovoort).
De grammatica-id's omvatten 18 hulpgrammatica's die door andere grammatica's worden ingesloten, zoals
`vue-directives` en `es-tag-css`; zie [Talen](https://shikiphp.inline0.dev/nl/docs/languages) voor de
catalogus met namen en aliassen. Leid de lijst door `sort` voor een alfabetische lijst.

## `themes`

Print elke id van een meegeleverd thema, één per regel, in alfabetische volgorde (65 thema's).

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

Zie [Thema's](https://shikiphp.inline0.dev/nl/docs/themes) voor de catalogus met namen en lichte/donkere typen.

## Help en afsluitstatus

Voer de opdracht zonder argumenten uit, of gebruik `-h` / `--help` / `help` om de gebruiksinformatie weer te geven.

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

| Situatie | Uitvoer | Afsluitstatus |
| --- | --- | --- |
| Geslaagd of help | stdout | `0` |
| Onbekende opdracht | `Unknown command: <name>` op stderr | `1` |
| `highlight` zonder bestand, of het bestand bestaat niet | de gebruiksregel op stderr | `1` |
| Onbekende taal of thema | een niet-opgevangen `Shikiphp\Exceptions\Highlight` (PHP fatale fout met stacktrace) | `255` |
