Перейти до вмісту

ShikiPHP

Підсвічувач синтаксису на чистому PHP, порт Shiki. Оформлюйте блоки коду темами VS Code і граматиками TextMate без Node; результат збігається з Shiki 3.23.0 у 214 еталонних сценаріях перевірки.

Термінал
composer require shikiphp/shikiphp

Останній випуск v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

На практиці

Підсвітіть фрагмент із шаблону PHP або скрипту збирання та виведіть результат HTML.

Один виклик на блок коду

Shikiphp::codeToHtml приймає код, ідентифікатор мови й ідентифікатор теми. Він повертає повний блок pre із вбудованими кольорами, який відображається без додаткової таблиці стилів.

Передайте мапу themes замість theme, і той самий блок підтримуватиме світлі й темні кольори через змінні CSS.

PHP
use Shikiphp\Shikiphp;

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

Справжні граматики TextMate

Точний порт vscode-textmate: вбудовані мови, ін'єкції та вкладені репозиторії. Ті самі граматики, якими токенізують Shiki і VS Code.

Теми VS Code

Специфічність селекторів областей дії та зіставлення батьківських областей дії, портовані з vscode-textmate. Одна тема або світла й темна теми через змінні CSS.

Результат, ідентичний Shiki

У сценаріях перевірки 214, що охоплюють 167 із 253 вбудованих граматик, ANSI та всі 65 тем, результат збігається з HTML Shiki 3.23.0 із регулярним рушієм JavaScript, за винятком початкових і кінцевих пробілів.

Чистий регулярний рушій PHP

Вбудований рушій RegExp для JavaScript із inline0/phasis, що використовує порт oniguruma-to-es. Регулярний рушій JavaScript у Shiki проходить той самий шлях від Oniguruma до RegExp.

Перетворювачі

Кожен хук Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), а також вбудовані трансформери нотацій, метаданих і пробілів.

Повний комплект

У комплекті є всі мови tm-grammars (235 і ще 18 допоміжних граматик) та всі теми tm-themes (65). Також включено вивід ANSI для термінала, декорації та colorReplacements.

CLI

Підсвітіть файл у HTML або перегляньте список вбудованих мов і тем безпосередньо з командного рядка за допомогою bin/shikiphp.

Без Node

Працює на PHP 8.2+ лише з ext-json і ext-mbstring. Без середовища виконання Node, нативного прив'язування Oniguruma і викликів зовнішніх команд.

Чому ShikiPHP

Працює там, де працює ваш PHP

Підсвічування відбувається в процесі PHP без викликів зовнішніх команд Node чи звернень до розміщеного API. Це зручно для кроку збирання Laravel, WordPress або статичного сайту.

Результат, який можна кешувати

Той самий код із тими самими параметрами завжди дає однаковий результат HTML. Виконуйте підсвічування під час збирання або кешуйте HTML за кодом і параметрами, доки джерело не зміниться.

Один блок для світлої й темної тем

Мапа тем записує другу тему як змінні CSS у тій самій розмітці, а кілька рядків CSS перемикають її. Опція defaultColor визначає, кольори якої теми буде вбудовано.

Обмеження для недовірених даних

Регулярний рушій запам'ятовує невдалі збіги та захищає від ReDoS, тож патологічний шаблон сповільнює обробку, а не призводить до зависання. Опція tokenizeMaxLineLength виводить надто довгі рядки як один звичайний токен.

Порівняно з

Інші способи підсвічувати код для сайту PHP і відмінності ShikiPHP.

ShikiPHP у порівнянні з іншими інструментами
Shiki ПеревагиЕталонна реалізація в JavaScript. Працює в будь-якому сучасному середовищі виконання JavaScript без API Node.js, завантажує граматики й теми за потреби та має інтеграції Twoslash від TypeScript. Відмінність від ShikiPHPShikiPHP переносить цей конвеєр на PHP для сторінок, що рендеряться на сервері PHP. Його еталонний набір перевірок порівнює HTML з Shiki 3.23.0, тоді як основна гілка Shiki перейшла на v4.
Phiki ПеревагиПідсвічувач PHP, який також використовує граматики TextMate і теми VS Code. До комплекту входить розширення league/commonmark, сумісне зі Str::markdown у Laravel, вивід для термінала та виконуваний файл командного рядка. Відмінність від ShikiPHPPhiki описує свій токенізатор як натхненний vscode-textmate, але не як його точний переклад. ShikiPHP портує vscode-textmate і oniguruma-to-es та перевіряє свій HTML на відповідність виводу Shiki у сценаріях перевірки 214.
highlight.php ПеревагиСерверний порт PHP для highlight.js, що підтримує 185 мов із початковими визначеннями мов і стилів та автоматичним визначенням мови. Відмінність від ShikiPHPShikiPHP токенізує за граматиками TextMate і розфарбовує за темами VS Code — тими самими файлами, які використовує Shiki; для кожного виклику потрібно вказати мову.
Torchlight ПеревагиСервіс підсвічування, сумісний із VS Code. Це HTTP API з анотаціями-коментарями для підсвічування, фокусування й відмінностей; має офіційні клієнти для Laravel, CommonMark, Statamic та інших стеків. Відмінність від ShikiPHPShikiPHP працює в процесі PHP без розміщеного API. Вбудовані трансформери нотацій читають подібні коментарі для підсвічених і сфокусованих рядків, а також рядків із відмінностями.

Джерела, позначено

Запитання та відповіді

Короткі відповіді з документації ShikiPHP.

Почніть із посібника для початківців, а потім додайте трансформери, власні граматики або вивід ANSI, коли вони знадобляться вашим сторінкам.