Lewati ke konten

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.

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

Tata bahasa kustom

loadGrammar mendaftarkan .tmLanguage.json yang telah didekode agar titik masuk mana pun dapat menggunakannya berdasarkan id bahasa:

PHP
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
  • $langId — id untuk merujuknya. Jika tidak diberikan, name tata bahasa digunakan, lalu scopeName-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.
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',
]);

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:

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

Panggil Shikiphp::reset() untuk kembali menggunakan penyorot bawaan.