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