Gå til indhold

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.

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
]);

Brugerdefinerede grammatikker

loadGrammar registrerer en afkodet .tmLanguage.json, så alle indgangspunkter kan bruge den via sprog-id'et:

PHP
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 grammatikkens name, derefter dens scopeName.
  • $aliases — ekstra id'er, der peger på den samme grammatik.
  • $embedded — sprog-id'er, som grammatikken indlejrer, så deres grammatikker også findes.
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',
]);

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:

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']]);

Kald Shikiphp::reset() for at vende tilbage til standardfremhævningsværktøjet i pakken.