
# Özel Diller ve Temalar

Paketteki küme, Shiki kataloğunun tamamını kapsar; ancak çözülmüş JSON ile kendi TextMate dilbilginizi veya VS Code temanızı kaydedebilirsiniz. Her ikisi de `Highlighter` örneğinde tutulur.

## Özel temalar

Bir VS Code tema JSON dosyasını çözümleyip `loadTheme` öğesine geçin. Tema, `name` ile tanımlanır ve özel tema aynı adlı paketteki temayı geçersiz kılar.

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

## Özel dilbilgileri

`loadGrammar`, çözülmüş bir `.tmLanguage.json` kaydeder; böylece her giriş noktası onu dil kimliğiyle kullanabilir:

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

- `$langId` — başvurulacak kimlik. Belirtilmezse dilbilgisinin `name` değeri, ardından `scopeName` değeri kullanılır.
- `$aliases` — aynı dilbilgisine çözümlenen ek kimlikler.
- `$embedded` — bu dilbilgisinin içine eklediği dil kimlikleri; bunların dilbilgileri de çözümlenir.

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

Dilbilgisi `include` başvuruları (`#repo`, `$self`, `$base`, `other.scope`) ve gömülü diller, vurgulayıcıya önceden kaydedilmiş dilbilgileriyle çözümlenir; bu nedenle önce tüm bağımlılıkları kaydedin.

## Facade üzerinden özel bir vurgulayıcı kullanma

Statik `Shikiphp` facade'ının özelleştirilmiş vurgulayıcınızı kullanmasını istiyorsanız, `Shikiphp::use` ile ona verin:

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

Varsayılan paket vurgulayıcıya dönmek için `Shikiphp::reset()` çağrısını yapın.
