
# CLI

Το shikiphp περιλαμβάνει ένα μικρό εργαλείο γραμμής εντολών στο `bin/shikiphp` (εγκατεστημένο ως `vendor/bin/shikiphp` στο έργο σας). Διαθέτει τρεις εντολές: η `highlight` αποδίδει ένα αρχείο σε HTML, ενώ οι `langs` και `themes` εμφανίζουν τα περιεχόμενα του bundle.

## `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/el/docs/api#shikiphpcodetohtml), ακολουθούμενο από αλλαγή γραμμής, ώστε να μπορεί να ανακατευθυνθεί απευθείας σε αρχείο:

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

Η εντολή δεν δέχεται άλλες επιλογές. Για δύο θέματα, transformers ή οποιαδήποτε άλλη [επιλογή](https://shikiphp.inline0.dev/el/docs/options), καλέστε απευθείας το PHP API.

### Επιλογές και ορίσματα

Οι επιλογές πρέπει να έχουν τη μορφή `--name=value`. Κάθε άλλο όρισμα που αρχίζει με `--` αγνοείται, ενώ ως αρχείο χρησιμοποιείται το τελευταίο όρισμα που δεν αρχίζει με `--`. Επομένως, το `--lang php file.rs` επισημαίνει το `file.rs` ως Rust: το `--lang` αγνοείται, το `php` αντικαθίσταται από το `file.rs` και η γλώσσα προκύπτει από την επέκταση `.rs`.

### Αυτόματη αναγνώριση γλώσσας

Χωρίς `--lang`, η επέκταση γίνεται αυτούσια το id της γλώσσας. Αυτό λειτουργεί όταν η επέκταση είναι ήδη ενσωματωμένο id ή ψευδώνυμο — `php`, `js`, `ts`,
`tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` και πολλά άλλα (δείτε τις [Γλώσσες](https://shikiphp.inline0.dev/el/docs/languages)). Δεν λειτουργεί στις εξής περιπτώσεις:

- αρχεία χωρίς επέκταση, όπως τα `Makefile` ή `Dockerfile`, για τα οποία χρησιμοποιείται το `txt`·
- επεκτάσεις που δεν είναι id γλώσσας, όπως το `.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`

Εμφανίστε σε ξεχωριστή γραμμή κάθε id γλώσσας που δέχεται το bundle.

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

Η λίστα περιλαμβάνει 350 γραμμές: τα 253 ενσωματωμένα id γραμματικών με τη σειρά του bundle (όχι αλφαβητικά), ακολουθούμενα από τα 97 ψευδώνυμά τους (`js`, `cjs`, `mjs` κ.ο.κ.). Στα id γραμματικών περιλαμβάνονται 18 βοηθητικές γραμματικές που ενσωματώνονται από άλλες, όπως οι `vue-directives` και `es-tag-css`· δείτε τις [Γλώσσες](https://shikiphp.inline0.dev/el/docs/languages) για τον κατάλογο με ονόματα και ψευδώνυμα. Περάστε τη λίστα από το `sort` για αλφαβητική ταξινόμηση.

## `themes`

Εμφανίστε σε ξεχωριστή γραμμή κάθε ενσωματωμένο id θέματος, με αλφαβητική σειρά (65 θέματα).

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

Δείτε τα [Θέματα](https://shikiphp.inline0.dev/el/docs/themes) για τον κατάλογο με ονόματα και τύπους φωτεινού/σκοτεινού θέματος.

## Βοήθεια και κατάσταση εξόδου

Εκτελέστε χωρίς εντολή ή με `-h` / `--help` / `help` για να εμφανιστούν οι οδηγίες χρήσης.

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

| Περίπτωση | Έξοδος | Κατάσταση εξόδου |
| --- | --- | --- |
| Επιτυχία ή βοήθεια | stdout | `0` |
| Άγνωστη εντολή | `Unknown command: <name>` στο stderr | `1` |
| `highlight` χωρίς αρχείο ή αν το αρχείο δεν υπάρχει | η γραμμή οδηγιών χρήσης στο stderr | `1` |
| Άγνωστη γλώσσα ή θέμα | ένα σφάλμα `Shikiphp\Exceptions\Highlight` που δεν παγιδεύεται (μοιραίο σφάλμα PHP με stack trace) | `255` |
