Liigu sisu juurde

Kohandatud keeled ja teemad

Paketiga kaasas olev valik katab kogu Shiki kataloogi, kuid saad registreerida ka oma TextMate grammatika või VS Code teema dekodeeritud JSON-ist. Mõlemad kuuluvad Highlighter eksemplari juurde.

Kohandatud teemad

Dekodeeri VS Code teema JSON-fail ja edasta see loadTheme-ile. Teema võti on selle name ning kohandatud teema alistab samanimelise paketiga kaasas oleva teema.

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

Kohandatud grammatikad

loadGrammar registreerib dekodeeritud .tmLanguage.json, et iga sisenemispunkt saaks seda keele ID järgi kasutada:

PHP
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
  • $langId — ID, mille järgi sellele viidata. Kui see puudub, kasutatakse grammatika name väärtust ja seejärel scopeName väärtust.
  • $aliases — lisa-ID-d, mis viitavad samale grammatikale.
  • $embedded — selle grammatika põimitavad keele ID-d, et ka nende grammatikad lahendataks.
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',
]);

Grammatika include viited (#repo, $self, $base, other.scope) ja põimitud keeled lahendatakse esiletõstjal juba registreeritud grammatikate põhjal, seega registreeri sõltuvused kõigepealt.

Kohandatud esiletõstja kasutamine fassaadi kaudu

Kui soovid, et staatiline Shikiphp fassaad kasutaks kohandatud esiletõstjat, anna see edasi funktsiooniga 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']]);

Vaikimisi paketiga kaasas oleva esiletõstja taastamiseks kutsu Shikiphp::reset().