Aangepaste talen en thema's
De meegeleverde set omvat de volledige catalogus van Shiki, maar u kunt uw eigen
TextMate-grammatica of VS Code-thema registreren vanuit gedecodeerde JSON. Beide worden opgeslagen op de
Highlighter-instantie.
Aangepaste thema's
Decodeer een VS Code-themaJSON-bestand en geef het door aan loadTheme. Het thema wordt geïdentificeerd
op basis van zijn name, en een aangepast thema overschrijft een meegeleverd thema met dezelfde naam.
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
]);
Aangepaste grammatica's
loadGrammar registreert een gedecodeerde .tmLanguage.json, zodat elk toegangspunt deze
kan gebruiken via de taal-id:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— de id waarnaar u verwijst. Als deze ontbreekt, wordt denamevan de grammatica gebruikt, en daarna descopeName.$aliases— extra id's die naar dezelfde grammatica verwijzen.$embedded— taal-id's die deze grammatica insluit, zodat ook hun grammatica's worden opgezocht.
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',
]);
Verwijzingen in grammatica's naar include (#repo, $self, $base, other.scope) en
ingesloten talen worden opgelost aan de hand van grammatica's die al bij de
markeerder zijn geregistreerd. Registreer daarom eerst eventuele afhankelijkheden.
Een aangepaste markeerder gebruiken via de facade
Als u wilt dat de statische Shikiphp-facade uw aangepaste markeerder gebruikt,
geef die dan door met 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']]);
Roep Shikiphp::reset() aan om terug te keren naar de standaard meegeleverde markeerder.