
# CLI

shikiphp sisältää pienen komentorivityökalun kohteessa `bin/shikiphp` (asennetaan projektissasi nimellä `vendor/bin/shikiphp`). Siinä on kolme komentoa: `highlight` tuottaa yhden tiedoston kohteeseen HTML, ja `langs` sekä `themes` luettelevat paketin sisällön.

## `highlight`

Korosta tiedosto kohteeseen HTML ja tulosta se vakiotulosteeseen.

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

- `<file>` — luettava polku. Sen on oltava olemassa oleva tiedosto; vakiosyötettä ei lueta.
- `--lang` — kielen tunnus tai alias. Jos sitä ei anneta, tiedostopäätettä käytetään sellaisenaan tunnuksena (tai `txt`, jos päätettä ei ole).
- `--theme` — teeman tunnus. Oletusarvo on `github-dark`.

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

Tuloste on sama yhden teeman `<pre class="shiki …">`-lohko, jonka [`codeToHtml`](https://shikiphp.inline0.dev/fi/docs/api#shikiphpcodetohtml) palauttaa, ja sen perässä on rivinvaihto, joten sen voi ohjata suoraan tiedostoon:

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

Komento ei hyväksy muita valintoja. Jos tarvitset kahta teemaa, muuntimia tai muita [valintoja](https://shikiphp.inline0.dev/fi/docs/options), kutsu sen sijaan PHP API.

### Valinnat ja argumentit

Valinnoissa on käytettävä muotoa `--name=value`. Kaikki muut argumentit, jotka alkavat merkeillä `--`, ohitetaan. Viimeistä argumenttia, joka ei ala merkeillä `--`, käsitellään tiedostona. Siksi `--lang php file.rs` korostaa tiedoston `file.rs` muodossa Rust: `--lang` ohitetaan, `php` korvataan arvolla `file.rs` ja kieli päätellään tiedostopäätteen `.rs` perusteella.

### Kielen päättely

Ilman arvoa `--lang` tiedostopäätteestä tulee kielen tunnus sellaisenaan. Tämä toimii, kun pääte on itsessään mukana toimitettu tunnus tai alias — `php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` ja monet muut (katso [Kielet](https://shikiphp.inline0.dev/fi/docs/languages)). Se ei toimi seuraavissa tapauksissa:

- tiedostoilla, joilla ei ole päätettä, kuten `Makefile` tai `Dockerfile`; tällöin käytetään oletusarvoa `txt`;
- päätteillä, jotka eivät ole kielen tunnuksia, kuten `.txt`.

`txt` ei ole mukana toimitettu kieli, joten molemmat tapaukset päättyvät tällä hetkellä virheeseen `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Anna näille tiedostoille arvo `--lang`:

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

## `langs`

Tulosta kukin paketin hyväksymä kielen tunnus omalle rivilleen.

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

Luettelossa on 350 riviä: 253 mukana toimitettua kieliopin tunnusta paketin järjestyksessä (ei aakkosjärjestyksessä), minkä jälkeen tulevat niiden 97 aliasta (`js`, `cjs`, `mjs` ja niin edelleen). Kieliopin tunnuksiin kuuluu 18 apukielioppia, jotka muut kieliopit upottavat, kuten `vue-directives` ja `es-tag-css`. Katso nimien ja aliasten luettelo kohdasta [Kielet](https://shikiphp.inline0.dev/fi/docs/languages). Järjestä lista aakkosjärjestykseen komennolla `sort`.

## `themes`

Tulosta jokainen mukana toimitetun teeman tunnus omalle rivilleen aakkosjärjestyksessä (65 teemaa).

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

Katso teemojen nimien ja vaalean/tumman tyypin luettelo kohdasta [Teemat](https://shikiphp.inline0.dev/fi/docs/themes).

## Ohje ja poistumiskoodi

Suorita komento ilman komentoa tai komennolla `-h` / `--help` / `help` tulostaaksesi käyttöohjeen.

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

| Tilanne | Tuloste | Poistumiskoodi |
| --- | --- | --- |
| Onnistuminen tai ohje | vakiotuloste | `0` |
| Tuntematon komento | `Unknown command: <name>` vakiovirheessä | `1` |
| `highlight` ilman tiedostoa tai tiedostoa ei ole olemassa | käyttöohjerivi vakiovirheessä | `1` |
| Tuntematon kieli tai teema | käsittelemätön `Shikiphp\Exceptions\Highlight` (PHP-vakava virhe pinon jäljitystietoineen) | `255` |
