Treci la conținut

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.

PHP
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:

PHP
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ște name al gramaticii, apoi scopeName.
  • $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.
PHP
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:

PHP
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.