Ugrás a tartalomhoz

ANSI-kimenet

Állítsa a lang értékét erre: 'ansi'; ekkor a terminálkimenet — azaz az ANSI escape-sorozatokat tartalmazó szöveg — kiemelése nyelvtan szerinti tokenizálás helyett. A shikiphp feldolgozza az escape-kódokat, és a téma ANSI-palettájából színezi a szöveget. Ez a Shiki lang: 'ansi' tokenizálójának portja, és négy oracle-forgatókönyv ellenőrzi a HTML értékét a Shiki 3.23.0 alapján.

PHP
use Shikiphp\Shikiphp;

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

Ez a természetes módja a rögzített CLI kimenet — például tesztfuttatók, buildnaplók és git kimenet — eredeti színeinek megőrzött megjelenítésére. Az escape-sorozatok eltűnnek a kimenetből; csak a szöveg marad, színezett span elemekbe csomagolva.

Figyeljen a dupla idézőjelek közé tett PHP karakterláncra: a "\e" az escape-karakter. Amikor egy folyamatból rögzített kimenetet jelenít meg (például shell_exec vagy proc_open használatával), az escape-karakterek már benne vannak a karakterláncban.

Amit felismer

A tokenizáló az SGR (Select Graphic Rendition) sorozatokat olvassa, ESC [ … m, tetszőleges számú, ; jellel elválasztott kóddal:

Kódok Hatás
0 minden szín és attribútum alaphelyzetbe állítása
1, 3, 4, 9 félkövér, dőlt, aláhúzott, áthúzott
2 halvány: az előtér félig átlátszóan jelenik meg
7 megfordítás: az előtér és a háttér felcserélődik
21, 23, 24, 27, 29 a megfelelő attribútum kikapcsolása
22 normál intenzitás: kikapcsolja a halvány és a félkövér megjelenítést
30–37, 90–97 előtér: a 8 szabványos és 8 élénk szín
40–47, 100–107 háttér: a 8 szabványos és 8 élénk szín
38;5;n, 48;5;n előtér- vagy háttérszín a 256 színtáblából
38;2;r;g;b, 48;2;r;g;b 24 bites valódi színű előtér vagy háttér
39, 49 alapértelmezett előtér vagy háttér

A rejtett (8) és az áthúzást követő vonal (53) feldolgozásra kerül, de nem módosítja a kimenetet; az egyéb kódokat a rendszer figyelmen kívül hagyja. A stílusok sortöréseken át is érvényben maradnak, amíg alaphelyzetbe nem állítják őket, akárcsak egy terminálban.

Színek

A 16 elnevezett szín a téma terminal.ansi* színei közül kerül ki (terminal.ansiRed, terminal.ansiBrightBlue stb.). Ha a téma valamelyiket nem definiálja, a VS Code alapértelmezett palettája lép érvénybe (piros: #cd3131, kék: #2472C8 stb.). A színbeállítás nélküli szöveg a téma előterét, a blokk háttere pedig a téma hátterét használja, akárcsak a nyelvtan szerinti kiemelésnél. A 256 színtáblában a 0–15. bejegyzés ugyanaz a 16 elnevezett szín; a 16–255 közötti bejegyzések (a 6×6×6-os színkocka és a szürkeárnyalatos átmenet), valamint a valódi színértékek nem függenek a témától.

colorReplacements az ANSI-színekre is érvényes.

Két téma

Az ANSI a nyelvtan szerinti kiemeléshez hasonlóan figyelembe veszi a themes leképezést, és a nem alapértelmezett témákhoz CSS-változót használó változatokat állít elő:

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

Az egyes színek minden téma saját palettájából kapják az értéküket, ezért a piros árnyalata eltérhet a világos és a sötét témában.

Nyelvtanállapot nélkül

Mivel az ANSI nem használ TextMate nyelvtant, nincs továbbvihető nyelvtanállapot. A getLastGrammarState hibát jelez a lang: 'ansi' esetén, a codeToTokensResult pedig null grammarState ad vissza.