İçeriğe geç

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