
# Egyéni nyelvek és témák

A beépített készlet a teljes Shiki katalógust lefedi, de dekódolt JSON alapján saját TextMate nyelvtant vagy VS Code témát is regisztrálhat. Mindkettő az `Highlighter` példányon él.

## Egyéni témák

Dekódoljon egy VS Code témájú JSON fájlt, majd adja át a `loadTheme` számára. A téma kulcsa a `name`; az egyéni téma felülírja az azonos nevű beépített témát.

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

## Egyéni nyelvtanok

A `loadGrammar` egy dekódolt `.tmLanguage.json` nyelvtant regisztrál, így bármely belépési pont használhatja a nyelvazonosítója alapján:

```php
public function loadGrammar(
    array $rawTmLanguage,
    ?string $langId = null,
    array $aliases = [],
    array $embedded = [],
): void
```

- `$langId` — az azonosító, amellyel hivatkozhat rá. Ha nincs megadva, a nyelvtan `name` értéke, majd az `scopeName` értéke lesz használva.
- `$aliases` — további azonosítók, amelyek ugyanahhoz a nyelvtanhoz tartoznak.
- `$embedded` — azok a nyelvazonosítók, amelyeket ez a nyelvtan beágyaz; ezek nyelvtanai is feloldásra kerülnek.

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

A nyelvtan `include` hivatkozásai (`#repo`, `$self`, `$base`, `other.scope`) és a beágyazott nyelvek feloldása a kiemelőn már regisztrált nyelvtanok alapján történik, ezért először regisztrálja a függőségeket.

## Egyéni kiemelő használata a homlokzaton keresztül

Ha azt szeretné, hogy a statikus `Shikiphp` homlokzat az egyéni kiemelőt használja, adja át neki a `Shikiphp::use` segítségével:

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

A beépített alapértelmezett kiemelő visszaállításához hívja meg a `Shikiphp::reset()` függvényt.
