Bahasa & Tema Kustom
Kumpulan bawaan mencakup katalog Shiki lengkap, tetapi Anda dapat mendaftarkan
tata bahasa TextMate atau tema VS Code sendiri dari JSON yang telah didekode.
Keduanya berada pada instance Highlighter.
Tema kustom
Dekode file tema VS Code JSON dan berikan ke loadTheme. Tema menggunakan name sebagai kunci,
dan tema kustom akan menggantikan tema bawaan dengan nama yang sama.
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
]);
Tata bahasa kustom
loadGrammar mendaftarkan .tmLanguage.json yang telah didekode agar titik masuk mana pun dapat
menggunakannya berdasarkan id bahasa:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— id untuk merujuknya. Jika tidak diberikan,nametata bahasa digunakan, laluscopeName-nya.$aliases— id tambahan yang mengarah ke tata bahasa yang sama.$embedded— id bahasa yang disematkan oleh tata bahasa ini, sehingga tata bahasanya juga akan ditemukan.
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',
]);
Referensi tata bahasa include (#repo, $self, $base, other.scope) dan
bahasa yang disematkan dicocokkan dengan tata bahasa yang sudah terdaftar pada
penyorot, jadi daftarkan semua dependensi terlebih dahulu.
Menggunakan penyorot kustom melalui facade
Jika Anda ingin facade statis Shikiphp menggunakan penyorot yang telah Anda sesuaikan,
serahkan penyorot tersebut dengan 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']]);
Panggil Shikiphp::reset() untuk kembali menggunakan penyorot bawaan.