اللغات والسمات المخصصة
تغطي المجموعة المضمّنة فهرس 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',
]);
تُحل مراجع Grammar 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() للعودة إلى أداة التمييز المضمّنة الافتراضية.