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

Власні мови й теми

Вбудований набір охоплює весь каталог Shiki, але ви можете зареєструвати власну граматику TextMate або тему VS Code із декодованого JSON. Обидві зберігаються в екземплярі Highlighter.

Власні теми

Декодуйте файл теми VS Code JSON і передайте його в loadTheme. Тему ідентифіковано за її name, а власна тема замінює вбудовану тему з такою самою назвою.

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
]);

Власні граматики

loadGrammar реєструє декодовану .tmLanguage.json, щоб будь-яка точка входу могла використовувати її за ідентифікатором мови:

PHP
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
  • $langId — ідентифікатор для посилань на неї. Якщо його не вказано, використовується name граматики, а потім її scopeName.
  • $aliases — додаткові ідентифікатори, що вказують на ту саму граматику.
  • $embedded — ідентифікатори мов, вбудованих у цю граматику; їхні граматики також визначаються.
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',
]);

Посилання include граматики (#repo, $self, $base, other.scope) і вбудовані мови визначаються за граматиками, уже зареєстрованими в підсвічувачі, тож спершу зареєструйте всі залежності.

Використання власного підсвічувача через фасад

Щоб статичний фасад Shikiphp використовував налаштований вами підсвічувач, передайте його за допомогою 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']]);

Викличте Shikiphp::reset(), щоб повернутися до стандартного вбудованого підсвічувача.