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.
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 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:
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.