
# Начало работы

## Установка

```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/ru/docs/options#defaultcolor) или установить `defaultColor: false`, чтобы выводить только переменные.

## Идентификаторы языков и псевдонимы

Ссылаться на языки можно по их идентификатору Shiki или псевдониму: `php`, `ts`, `js`, `rust`, `python`, `html` и так далее. О том, как вывести список всех языков из поставки, см. раздел [Языки](https://shikiphp.inline0.dev/ru/docs/languages), а идентификаторы тем перечислены в разделе [Темы](https://shikiphp.inline0.dev/ru/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/ru/docs/api).
