Brugerdefinerede sprog og temaer
Den inkluderede samling dækker hele Shiki-kataloget, men du kan registrere din egen
TextMate-grammatik eller dit eget VS Code-tema fra afkodet JSON. Begge dele hører til
Highlighter-instansen.
Brugerdefinerede temaer
Afkod en VS Code-temaJSON-fil, og send den til loadTheme. Temaet identificeres
med sit name, og et brugerdefineret tema tilsidesætter et inkluderet tema med samme navn.
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
]);
Brugerdefinerede grammatikker
loadGrammar registrerer en afkodet .tmLanguage.json, så alle indgangspunkter kan bruge
den via sprog-id'et:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— id'et, der bruges til at henvise til grammatikken. Hvis det udelades, bruges grammatikkensname, derefter densscopeName.$aliases— ekstra id'er, der peger på den samme grammatik.$embedded— sprog-id'er, som grammatikken indlejrer, så deres grammatikker også findes.
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',
]);
Grammatikreferencerne include (#repo, $self, $base, other.scope) og
indlejrede sprog slås op blandt de grammatikker, der allerede er registreret på
fremhævningsværktøjet, så registrer eventuelle afhængigheder først.
Brug af et brugerdefineret fremhævningsværktøj via facaden
Hvis du vil have den statiske Shikiphp-facade til at bruge dit tilpassede fremhævningsværktøj,
så overdrag det 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']]);
Kald Shikiphp::reset() for at vende tilbage til standardfremhævningsværktøjet i pakken.