Preskoči na vsebino

Jeziki in teme po meri

Vgrajeni nabor pokriva celoten katalog Shiki, lahko pa registrirate lastno slovnico TextMate ali temo VS Code iz dekodiranega JSON. Oboje je shranjeno na primerku Highlighter.

Teme po meri

Dekodirajte datoteko teme VS Code JSON in jo podajte funkciji loadTheme. Tema je indeksirana po svojem name, tema po meri pa preglasi vgrajeno temo z enakim imenom.

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

Slovnice po meri

loadGrammar registrira dekodirani .tmLanguage.json, tako da ga lahko katera koli vstopna točka uporabi z ID-jem jezika:

PHP
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
  • $langId — ID za sklicevanje nanj. Če ga izpustite, se uporabi name slovnice, nato pa njen scopeName.
  • $aliases — dodatni ID-ji, ki se razrešijo v isto slovnico.
  • $embedded — ID-ji jezikov, ki jih ta slovnica vdeluje, zato se razrešijo tudi njihove slovnice.
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',
]);

Sklici slovnice include (#repo, $self, $base, other.scope) in vdelani jeziki se razrešijo v slovnice, ki so že registrirane v označevalniku kode, zato najprej registrirajte vse odvisnosti.

Uporaba označevalnika po meri prek fasade

Če želite, da statična fasada Shikiphp uporablja vaš prilagojeni označevalnik kode, ji ga predajte z 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']]);

Pokličite Shikiphp::reset(), da se vrnete na privzeti vgrajeni označevalnik kode.