Начало работы
Установка
composer require shikiphp/shikiphp
Для shikiphp требуется PHP 8.2 или новее, а также ext-json и ext-mbstring — они включены почти в каждую сборку PHP. Больше ничего не нужно: ни Node, ни нативная привязка Oniguruma, ни дополнительные расширения.
Ваш первый блок
Статический фасад Shikiphp — самый быстрый способ начать. Передайте ему код, идентификатор языка и идентификатор темы:
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), чтобы один оформленный блок подстраивался под светлый и тёмный режимы:
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, что и в документации:
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 или установить defaultColor: false, чтобы выводить только переменные.
Идентификаторы языков и псевдонимы
Ссылаться на языки можно по их идентификатору Shiki или псевдониму: php, ts, js, rust, python, html и так далее. О том, как вывести список всех языков из поставки, см. раздел Языки, а идентификаторы тем перечислены в разделе Темы.
Повторное использование подсветчика
Фасад при первом обращении создаёт и кэширует встроенный Highlighter, поэтому последующие вызовы Shikiphp::codeToHtml используют те же кэши грамматик и тем. Если нужны расширенные возможности API (вывод HAST, пользовательские грамматики, сетки токенов), получите экземпляр напрямую:
use Shikiphp\Shikiphp;
$code = 'fn main() {}';
$highlighter = Shikiphp::highlighter();
$hast = $highlighter->codeToHast($code, ['lang' => 'rust', 'theme' => 'nord']);
Полный перечень возможностей см. в разделе API.