Začíname
Inštalácia
composer require shikiphp/shikiphp
shikiphp vyžaduje PHP 8.2 alebo novší s ext-json a ext-mbstring — obe sú povolené takmer v každej zostave PHP. Nič ďalšie: žiadny Node, natívna väzba Oniguruma ani dodatočné rozšírenia.
Váš prvý blok
Najrýchlejšie začnete so statickou fasádou Shikiphp. Zadajte svoj kód, ID jazyka a ID témy:
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 vráti úplný blok <pre class="shiki …"> s vlastnými štýlmi. Farby popredia a pozadia sa zapíšu priamo do prvku <pre>, takže sa vykreslí správne aj bez ďalšej šablóny so štýlmi.
Dve témy (svetlá a tmavá)
Namiesto jednej témy theme zadajte mapu themes. shikiphp vytvorí premenné CSS (napríklad Shiki), takže jeden vykreslený blok sa prispôsobí svetlému aj tmavému režimu:
use Shikiphp\Shikiphp;
$code = 'const answer: number = 42';
echo Shikiphp::codeToHtml($code, [
'lang' => 'ts',
'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);
Predvolene sa farby témy light používajú priamo a dark sa sprístupní prostredníctvom premenných --shiki-dark. Tmavú tému aktivujte krátkym kódom CSS — rovnaký úryvok používa dokumentácia 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;
}
Môžete si vybrať, ktorá téma bude predvolene vložená priamo, pomocou možnosti defaultColor, alebo nastaviť defaultColor: false tak, aby sa vytvárali iba premenné.
ID jazykov a aliasy
Na jazyky sa odkazuje pomocou ich ID Shiki alebo aliasu — php, ts, js, rust, python, html atď. V časti Jazyky nájdete postup na vypísanie všetkého obsahu balíka a v časti Témy ID tém.
Opätovné použitie zvýrazňovača
Fasáda vytvára zvýrazňovač Highlighter z balíka až pri prvom použití a ukladá ho do vyrovnávacej pamäte, takže opakované volania Shikiphp::codeToHtml znovu používajú tie isté vyrovnávacie pamäte gramatík a tém. Ak potrebujete rozšírené API (výstup HAST, vlastné gramatiky, mriežky tokenov), získajte inštanciu priamo:
use Shikiphp\Shikiphp;
$code = 'fn main() {}';
$highlighter = Shikiphp::highlighter();
$hast = $highlighter->codeToHast($code, ['lang' => 'rust', 'theme' => 'nord']);
Úplné rozhranie nájdete v časti API.