Vlastní jazyky a motivy
Soubor obsažený v balíčku pokrývá celý katalog Shiki, můžete však z dekódovaných JSON zaregistrovat vlastní gramatiku TextMate nebo motiv VS Code. Obojí se ukládá do instance Highlighter.
Vlastní motivy
Dekódujte soubor motivu VS Code JSON a předejte jej funkci loadTheme. Motiv se identifikuje podle name a vlastní motiv přepíše motiv obsažený v balíčku se stejným názvem.
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
]);
Vlastní gramatiky
loadGrammar zaregistruje dekódovanou gramatiku .tmLanguage.json, takže ji lze použít v libovolném vstupním bodě podle ID jazyka:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— ID, kterým se na ni odkazuje. Pokud jej vynecháte, použije se nejprvenamegramatiky a poté jejíscopeName.$aliases— další ID, která odkazují na tutéž gramatiku.$embedded— ID jazyků, které tato gramatika vkládá; načtou se tedy i jejich gramatiky.
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',
]);
Odkazy include v gramatice (#repo, $self, $base, other.scope) a vložené jazyky se vyhledávají mezi gramatikami již zaregistrovanými ve zvýrazňovači. Nejprve proto zaregistrujte všechny závislosti.
Použití vlastního zvýrazňovače přes fasádu
Chcete-li, aby statická fasáda Shikiphp používala váš upravený zvýrazňovač, předejte jí jej pomocí 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']]);
Zavolejte Shikiphp::reset() a vraťte se k výchozímu zvýrazňovači obsaženému v balíčku.