Lingue e temi personalizzati
La raccolta inclusa copre l'intero catalogo Shiki, ma potete registrare una vostra
grammatica TextMate o un tema VS Code a partire da JSON decodificato. Entrambi risiedono
nell'istanza Highlighter.
Temi personalizzati
Decodificate un file VS Code di tema JSON e passatelo a loadTheme. Il tema è indicizzato
con il suo name e un tema personalizzato sostituisce un tema incluso con lo stesso nome.
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
]);
Grammatiche personalizzate
loadGrammar registra un .tmLanguage.json decodificato, così che qualsiasi punto di ingresso possa
usarlo tramite id di lingua:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— l'id da usare come riferimento. Se omesso, si usa l'namedella grammatica, poi il suoscopeName.$aliases— id aggiuntivi che rimandano alla stessa grammatica.$embedded— gli id di lingua incorporati da questa grammatica, le cui grammatiche vengono risolte a loro volta.
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',
]);
I riferimenti include della grammatica (#repo, $self, $base, other.scope) e le lingue
incorporate vengono risolti usando le grammatiche già registrate nell'evidenziatore di sintassi; registrate prima tutte le dipendenze.
Usare un evidenziatore personalizzato tramite la facade
Per fare in modo che la facade statica Shikiphp usi il vostro evidenziatore personalizzato,
passateglielo con 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']]);
Chiamate Shikiphp::reset() per ripristinare l'evidenziatore predefinito incluso.