Ö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.
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:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— başvurulacak kimlik. Belirtilmezse dilbilgisininnamedeğeri, ardındanscopeNamedeğ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.
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:
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.