
# Початок роботи

## Встановлення

```bash
composer require shikiphp/shikiphp
```

shikiphp потрібен PHP версії 8.2 або новішої з `ext-json` та `ext-mbstring` — вони ввімкнені майже в кожній збірці PHP. Більше нічого: без Node, нативного прив’язування Oniguruma і додаткових розширень.

## Ваш перший блок

Найшвидше почати зі статичного фасаду `Shikiphp`. Передайте код, ідентифікатор мови та ідентифікатор теми:

```php
use Shikiphp\Shikiphp;

$html = Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

echo $html;
```

`codeToHtml` повертає повноцінний блок `<pre class="shiki …">` із власним стилем. Кольори переднього й заднього планів задано безпосередньо в `<pre>`, тож блок правильно відображається без додаткової таблиці стилів.

## Дві теми (світла й темна)

Замість однієї `theme` передайте мапу `themes`. shikiphp додає змінні CSS (наприклад, Shiki), щоб один відображений блок адаптувався до світлого й темного режимів:

```php
use Shikiphp\Shikiphp;

$code = 'const answer: number = 42';

echo Shikiphp::codeToHtml($code, [
    'lang'   => 'ts',
    'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);
```

За замовчуванням кольори теми `light` задано безпосередньо, а `dark` доступна через змінні `--shiki-dark`. Увімкніть темну тему за допомогою невеликої кількості CSS — того самого фрагмента, який описує Shiki:

```css
html.dark .shiki,
html.dark .shiki span {
  color: var(--shiki-dark) !important;
  background-color: var(--shiki-dark-bg) !important;
  /* and font styles */
  font-style: var(--shiki-dark-font-style) !important;
  font-weight: var(--shiki-dark-font-weight) !important;
  text-decoration: var(--shiki-dark-text-decoration) !important;
}
```

Ви можете вибрати тему для застосування безпосередньо за допомогою параметра [`defaultColor`](https://shikiphp.inline0.dev/uk/docs/options#defaultcolor) або задати `defaultColor: false`, щоб виводити лише змінні.

## Ідентифікатори мов і псевдоніми

Мови позначаються ідентифікатором Shiki або псевдонімом — `php`, `ts`, `js`, `rust`, `python`, `html` тощо. Як переглянути все, що входить до пакета, описано в розділі [Мови](https://shikiphp.inline0.dev/uk/docs/languages), а ідентифікатори тем наведено в розділі [Теми](https://shikiphp.inline0.dev/uk/docs/themes).

## Повторне використання підсвічувача

Фасад ліниво створює та кешує вбудований `Highlighter`, тож повторні виклики `Shikiphp::codeToHtml` використовують ті самі кеші граматик і тем. Якщо потрібен повнофункціональний API (результат HAST, власні граматики, сітки токенів), отримайте безпосередньо екземпляр:

```php
use Shikiphp\Shikiphp;

$code = 'fn main() {}';

$highlighter = Shikiphp::highlighter();
$hast = $highlighter->codeToHast($code, ['lang' => 'rust', 'theme' => 'nord']);
```

Повний перелік можливостей див. у [API](https://shikiphp.inline0.dev/uk/docs/api).
