Własne języki i motywy
Zestaw dołączony do pakietu obejmuje cały katalog Shiki, ale możesz zarejestrować
własną gramatykę TextMate lub motyw VS Code z dekodowanego JSON. Oba są przechowywane w instancji Highlighter.
Własne motywy
Zdekoduj plik motywu VS Code JSON i przekaż go do loadTheme. Motyw jest indeksowany swoją wartością name, a własny motyw zastępuje dołączony motyw o tej samej nazwie.
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
]);
Własne gramatyki
loadGrammar rejestruje zdekodowany .tmLanguage.json, dzięki czemu każdy punkt wejścia może
używać go według identyfikatora języka:
public function loadGrammar(
array $rawTmLanguage,
?string $langId = null,
array $aliases = [],
array $embedded = [],
): void
$langId— identyfikator, za pomocą którego można się do niej odwołać. Jeśli go pominięto, używana jest wartośćnamegramatyki, a następnie jejscopeName.$aliases— dodatkowe identyfikatory wskazujące tę samą gramatykę.$embedded— identyfikatory języków osadzanych przez tę gramatykę, których gramatyki również zostaną rozpoznane.
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',
]);
Odwołania do gramatyk include (#repo, $self, $base, other.scope) i osadzone języki są dopasowywane do gramatyk zarejestrowanych już w mechanizmie podświetlania, dlatego najpierw zarejestruj wszystkie zależności.
Używanie własnego mechanizmu podświetlania przez fasadę
Aby statyczna fasada Shikiphp korzystała ze skonfigurowanego przez Ciebie mechanizmu podświetlania,
przekaż go za pomocą 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']]);
Wywołaj Shikiphp::reset(), aby przywrócić domyślny mechanizm podświetlania dołączony do pakietu.