
# ANSI Çıktısı

Terminal çıktısını, yani ANSI kaçış dizileri içeren metni, dilbilgisiyle belirteçlere ayırmak yerine vurgulamak için `lang` değerini `'ansi'` olarak ayarlayın. shikiphp, kaçış kodlarını ayrıştırır ve metni temanın ANSI paletindeki renklerle gösterir. Bu, Shiki'ın `lang: 'ansi'` belirteç ayırıcısının bir uyarlamasıdır; dört oracle senaryosu, Shiki 3.23.0 ile HTML değerini denetler.

```php
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
    'lang'  => 'ansi',
    'theme' => 'github-dark',
]);
```

Özgün renkleri korunarak yakalanmış CLI çıktısını (test çalıştırıcıları, derleme günlükleri ve `git` çıktısı gibi) görüntülemenin doğal yolu budur. Kaçış dizileri çıktıdan kaldırılır; yalnızca metin kalır ve renkli span'lerle çevrelenir.

Çift tırnaklı PHP dizgesine dikkat edin: `"\e"` kaçış karakteridir. Bir süreçten yakalanan çıktıyı (örneğin `shell_exec` veya `proc_open` ile) görüntülerken kaçış karakterleri zaten dizgede bulunur.

## Neleri anlar?

Belirteç ayırıcı, SGR (Select Graphic Rendition) dizilerini (`ESC [ … m`) ve istediğiniz sayıda `;` ile ayrılmış kodu okur:

| Kodlar | Etki |
| --- | --- |
| `0` | tüm renk ve öznitelikleri sıfırlar |
| `1`, `3`, `4`, `9` | kalın, italik, altı çizili, üstü çizili |
| `2` | soluk: ön plan yarı opaklıkta çizilir |
| `7` | ters: ön plan ve arka plan yer değiştirir |
| `21`, `23`, `24`, `27`, `29` | karşılık gelen özniteliği kapatır |
| `22` | normal yoğunluk: soluk ve kalın biçimi kapatır |
| `30`–`37`, `90`–`97` | ön plan: 8 standart ve 8 parlak renk |
| `40`–`47`, `100`–`107` | arka plan: 8 standart ve 8 parlak renk |
| `38;5;n`, `48;5;n` | 256 renkli tablodan ön plan veya arka plan |
| `38;2;r;g;b`, `48;2;r;g;b` | 24 bit gerçek renkli ön plan veya arka plan |
| `39`, `49` | varsayılan ön plan veya arka plan |

Gizli (`8`) ve üstü çizgili (`53`) kodlar ayrıştırılır ancak çıktıyı değiştirmez; diğer kodlar yok sayılır. Terminalde olduğu gibi stiller sıfırlanana kadar satır sonlarını aşarak devam eder.

## Renkler

16 adlandırılmış renk, temanın `terminal.ansi*` renklerinden gelir (`terminal.ansiRed`, `terminal.ansiBrightBlue` vb.). Tema bir rengi tanımlamıyorsa VS Code varsayılan paleti kullanılır (kırmızı için `#cd3131`, mavi için `#2472C8` vb.). Rengi ayarlanmamış metin temanın ön plan rengini, blok arka planı ise dilbilgisi tabanlı vurgulamadaki gibi temanın arka plan rengini alır. 256 renkli tabloda 0–15 arasındaki girdiler aynı 16 adlandırılmış renktir; 16–255 arasındaki girdiler (6×6×6 renk küpü ve gri tonlama skalası) ve gerçek renk değerleri temaya bağlı değildir.

[`colorReplacements`](https://shikiphp.inline0.dev/tr/docs/options#colorreplacements) ANSI renklerine de uygulanır.

## Çift temalar

ANSI, dilbilgisi tabanlı vurgulamada olduğu gibi `themes` eşlemesini kullanır ve varsayılan olmayan temalar için CSS değişkenli varyantlar üretir:

```php
use Shikiphp\Shikiphp;

$log = "\e[32mPASS\e[0m tests/Unit\n\e[31mFAIL\e[0m tests/Integration";

echo Shikiphp::codeToHtml($log, [
    'lang'   => 'ansi',
    'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);
```

Her adlandırılmış renk, her temanın kendi paletine göre belirlenir; dolayısıyla açık temadaki kırmızı ile koyu temadaki kırmızı farklı olabilir.

## Dilbilgisi durumu yok

ANSI bir TextMate dilbilgisi kullanmadığından korunacak bir dilbilgisi durumu yoktur. `getLastGrammarState`, `lang: 'ansi'` için hata verir; `codeToTokensResult` ise bir `null` `grammarState` döndürür.
