Anpassade språk och teman
Den paketerade uppsättningen täcker hela Shiki-katalogen, men du kan registrera en egen
TextMate-grammatik eller ett VS Code-tema från avkodad JSON. Båda hör till
instansen Highlighter.
Anpassade teman
Avkoda en VS Code-temafil i JSON och skicka den till loadTheme. Temat nycklas
efter sitt name, och ett anpassat tema åsidosätter ett paketerat tema med samma namn.
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
]);
Anpassade grammatiker
loadGrammar registrerar en avkodad .tmLanguage.json så att alla ingångspunkter kan använda
den via språk-id:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— id:t som används för att hänvisa till grammatiken. Om det utelämnas används grammatikensname, sedan dessscopeName.$aliases— extra id:n som pekar på samma grammatik.$embedded— språk-id:n som grammatiken bäddar in, så att deras grammatiker också slås upp.
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',
]);
Grammatikens include-referenser (#repo, $self, $base, other.scope) och
inbäddade språk matchas mot grammatiker som redan har registrerats i
markeraren, så registrera eventuella beroenden först.
Använda en anpassad markerare via fasaden
Om du vill att den statiska Shikiphp-fasaden ska använda din anpassade markerare,
överlämnar du den med 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']]);
Anropa Shikiphp::reset() för att återgå till den paketerade standardmarkeraren.