
# CLI

shikiphp включва малък инструмент за командния ред в `bin/shikiphp` (инсталиран като `vendor/bin/shikiphp` във вашия проект). Има три команди: `highlight` изобразява един файл в HTML, а `langs` и `themes` показват съдържанието на пакета.

## `highlight`

Оцветява файл в HTML и го отпечатва на стандартния изход.

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

- `<file>` — пътят до файла за четене. Файлът трябва да съществува; стандартният вход не се чете.
- `--lang` — ID или псевдоним на езика. Ако е пропуснат, разширението на файла се използва като ID без промяна (ако няма разширение, се използва `txt`).
- `--theme` — ID на темата. По подразбиране е `github-dark`.

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

Изходът е същият блок `<pre class="shiki …">` с една тема, който връща [`codeToHtml`](https://shikiphp.inline0.dev/bg/docs/api#shikiphpcodetohtml), последван от нов ред, така че може да бъде пренасочен директно във файл:

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

Командата не приема други опции. За двойни теми, трансформатори или каквато и да е друга [опция](https://shikiphp.inline0.dev/bg/docs/options) извикайте вместо това PHP API.

### Опции и аргументи

Опциите трябва да са във формат `--name=value`. Всеки друг аргумент, който започва с
`--`, се игнорира, а последният аргумент, който не започва с `--`, се приема за
файла. Следователно `--lang php file.rs` откроява `file.rs` като Rust: `--lang`
се игнорира, `php` се заменя с `file.rs`, а езикът се определя от
разширението `.rs`.

### Определяне на езика

Без `--lang` разширението става непроменен идентификатор на език. Това работи,
когато самото разширение е вграден идентификатор или псевдоним — `php`, `js`, `ts`,
`tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` и много други (вижте
[Езици](https://shikiphp.inline0.dev/bg/docs/languages)). Не работи при:

- файлове без разширение, като `Makefile` или `Dockerfile`, за които се използва
  резервният вариант `txt`;
- разширения, които не са идентификатор на език, като `.txt`.

`txt` не е вграден език, затова и в двата случая изпълнението спира с
необработена грешка `Unknown language "txt"` ([#3](https://github.com/inline0/shikiphp/issues/3)).
Подайте `--lang` за тези файлове:

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

## `langs`

Извежда всички идентификатори, които пакетът приема като език, по един на ред.

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

Списъкът съдържа 350 реда: 253 идентификатора на вградените граматики в реда на пакета (не по азбучен ред), последвани от 97-те им псевдонима (`js`, `cjs`, `mjs` и т.н.).
Идентификаторите на граматиките включват 18 помощни граматики, вграждани от други граматики, като
`vue-directives` и `es-tag-css`; вижте [Езици](https://shikiphp.inline0.dev/bg/docs/languages) за
каталога с имената и псевдонимите. Използвайте `sort`, за да получите азбучен списък.

## `themes`

Извежда всички идентификатори на вградените теми, по един на ред, в азбучен ред (65 теми).

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

Вижте [Теми](https://shikiphp.inline0.dev/bg/docs/themes) за каталога с имената и типовете светла/тъмна.

## Помощ и код на изхода

Изпълнете без команда или с `-h` / `--help` / `help`, за да изведете информация за употребата.

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

| Ситуация | Изход | Код на изхода |
| --- | --- | --- |
| Успех или помощ | stdout | `0` |
| Непозната команда | `Unknown command: <name>` към stderr | `1` |
| `highlight` без файл или файлът не съществува | редът с информация за употребата към stderr | `1` |
| Непознат език или тема | необработена `Shikiphp\Exceptions\Highlight` (фатална грешка PHP с проследяване на стека) | `255` |
