Початок роботи
Встановлення
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.