İçeriğe geç

Özel Diller ve Temalar

Paketteki küme, Shiki kataloğunun tamamını kapsar; ancak çözülmüş JSON ile kendi TextMate dilbilginizi veya VS Code temanızı kaydedebilirsiniz. Her ikisi de Highlighter örneğinde tutulur.

Özel temalar

Bir VS Code tema JSON dosyasını çözümleyip loadTheme öğesine geçin. Tema, name ile tanımlanır ve özel tema aynı adlı paketteki temayı geçersiz kılar.

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

Özel dilbilgileri

loadGrammar, çözülmüş bir .tmLanguage.json kaydeder; böylece her giriş noktası onu dil kimliğiyle kullanabilir:

PHP
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
  • $langId — başvurulacak kimlik. Belirtilmezse dilbilgisinin name değeri, ardından scopeName değeri kullanılır.
  • $aliases — aynı dilbilgisine çözümlenen ek kimlikler.
  • $embedded — bu dilbilgisinin içine eklediği dil kimlikleri; bunların dilbilgileri de çözümlenir.
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',
]);

Dilbilgisi include başvuruları (#repo, $self, $base, other.scope) ve gömülü diller, vurgulayıcıya önceden kaydedilmiş dilbilgileriyle çözümlenir; bu nedenle önce tüm bağımlılıkları kaydedin.

Facade üzerinden özel bir vurgulayıcı kullanma

Statik Shikiphp facade'ının özelleştirilmiş vurgulayıcınızı kullanmasını istiyorsanız, Shikiphp::use ile ona verin:

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

Varsayılan paket vurgulayıcıya dönmek için Shikiphp::reset() çağrısını yapın.