Limbi și teme personalizate
Setul inclus acoperă întregul catalog Shiki, dar puteți înregistra propria gramatică TextMate sau temă VS Code din JSON decodat. Ambele sunt asociate instanței Highlighter.
Teme personalizate
Decodați un fișier de temă VS Code JSON și transmiteți-l lui loadTheme. Tema este identificată după name, iar o temă personalizată înlocuiește tema inclusă cu același nume.
use Shikiphp\Shikiphp;
$highlighter = Shikiphp::highlighter();
$theme = json_decode(file_get_contents('my-theme.json'), true);
$highlighter->loadTheme($theme);
$code = '<?php echo "hello";';
echo $highlighter->codeToHtml($code, [
'lang' => 'php',
'theme' => $theme['name'], // the theme's own name
]);
Gramatici personalizate
loadGrammar înregistrează un .tmLanguage.json decodat, astfel încât orice punct de intrare să îl poată folosi după ID-ul limbii:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— ID-ul după care va fi referit. Dacă este omis, se foloseștenameal gramaticii, apoiscopeName.$aliases— ID-uri suplimentare care se rezolvă la aceeași gramatică.$embedded— ID-urile limbilor încorporate de această gramatică; gramaticile lor vor fi și ele rezolvate.
use Shikiphp\Shikiphp;
$highlighter = Shikiphp::highlighter();
$grammar = json_decode(file_get_contents('mylang.tmLanguage.json'), true);
$highlighter->loadGrammar($grammar, 'mylang', aliases: ['ml']);
$code = file_get_contents('example.mylang');
echo $highlighter->codeToHtml($code, [
'lang' => 'mylang',
'theme' => 'github-dark',
]);
Referințele gramaticii include (#repo, $self, $base, other.scope) și limbile încorporate se rezolvă folosind gramaticile deja înregistrate în evidențiator, așa că înregistrați mai întâi toate dependențele.
Folosirea unui evidențiator personalizat prin fațadă
Dacă doriți ca fațada statică Shikiphp să folosească evidențiatorul personalizat, transmiteți-i instanța cu Shikiphp::use:
use Shikiphp\Highlighter;
use Shikiphp\Shikiphp;
$myTheme = json_decode(file_get_contents('my-theme.json'), true);
$myGrammar = json_decode(file_get_contents('mylang.tmLanguage.json'), true);
$code = file_get_contents('example.mylang');
$highlighter = Highlighter::createBundled();
$highlighter->loadTheme($myTheme);
$highlighter->loadGrammar($myGrammar, 'mylang');
Shikiphp::use($highlighter);
// Now the facade delegates to your highlighter.
echo Shikiphp::codeToHtml($code, ['lang' => 'mylang', 'theme' => $myTheme['name']]);
Apelați Shikiphp::reset() pentru a reveni la evidențiatorul implicit inclus în pachet.