Към съдържанието

ShikiPHP

Чист оцветител за синтаксис PHP, порт на Shiki. Оформяйте блокове с код с теми VS Code и граматики TextMate без Node; изходът съвпада с Shiki 3.23.0 в 214 сценария на oracle.

Терминал
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 сценария на oracle, обхващащи 167 от 253 включени граматики, ANSI и всичките 65 теми, резултатът съвпада точно с HTML на Shiki 3.23.0 с неговия regex механизъм JavaScript, с изключение на водещите и крайните интервали.

Regex механизъм само на PHP

Включен в пакета regex механизъм RegExp на JavaScript от inline0/phasis, използващ порт на oniguruma-to-es. Regex механизмът 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 избира коя тема да бъде вградена.

Ограничения за недоверен вход

Regex механизмът запаметява неуспешните опити и защитава от ReDoS, така че патологичен шаблон забавя работата, вместо да я блокира. Опцията tokenizeMaxLineLength извежда прекалено дългите редове като един обикновен токен.

Сравнение с

Други начини за открояване на код за сайт PHP и с какво се различава ShikiPHP.

ShikiPHP в сравнение с други инструменти
Shiki Подходящ заРеферентната реализация в JavaScript. Работи във всяка съвременна среда за изпълнение на JavaScript без API за Node.js, зарежда граматики и теми при нужда и предлага готови интеграции с TypeScript Twoslash. Разлики спрямо ShikiPHPShikiPHP пренася този конвейер към PHP за страници, визуализирани на сървър PHP. Неговият тестов набор oracle сравнява 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 сценария на oracle.
highlight.php Подходящ заСървърен порт на PHP за highlight.js, който поддържа 185 езика с оригиналните езикови и стилови дефиниции и може автоматично да открива езика. Разлики спрямо ShikiPHPShikiPHP токенизира с граматики TextMate и оцветява с теми VS Code — същите файлове, които използва Shiki; всяко извикване посочва езика.
Torchlight Подходящ заУслуга за открояване, съвместима с VS Code. Това е HTTP API с коментари за открояване, фокус и разлики, както и с официални клиенти за Laravel, CommonMark, Statamic и други технологии. Разлики спрямо ShikiPHPShikiPHP работи във вашия процес PHP без хостван API. Вградените му трансформатори за обозначения четат сходни коментари за откроени, фокусирани и различаващи се редове.

Източници, отметнато

Въпроси и отговори

Кратки отговори от документацията на ShikiPHP.

Започнете с ръководството за първи стъпки, а след това добавете трансформатори, персонализирани граматики или ANSI изход, когато страниците ви имат нужда от тях.