Pereiti prie turinio

ANSI išvestis

Nustatykite lang į 'ansi', kad terminalo išvestis — tekstas su ANSI escape sekomis — būtų paryškinama, o ne skaidoma pagal gramatiką. shikiphp analizuoja escape kodus ir nuspalvina tekstą pagal temos ANSI paletę. Tai yra Shiki lang: 'ansi' analizatoriaus perkėlimas, o keturi patikrinimo scenarijai patikrina jo HTML pagal Shiki 3.23.0.

PHP
use Shikiphp\Shikiphp;

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

Taip natūraliai atvaizduojama užfiksuota CLI išvestis – testų vykdymo, kompiliavimo žurnalai, git išvestis – išsaugant pradines spalvas. Pabėgimo sekos pašalinamos iš išvesties; lieka tik tekstas, apgaubtas spalvotomis sritimis.

Atkreipkite dėmesį į dvigubomis kabutėmis apgaubtą PHP eilutę: "\e" yra pabėgimo simbolis. Kai atvaizduojate iš proceso užfiksuotą išvestį (pavyzdžiui, naudodami shell_exec arba proc_open), pabėgimo simboliai jau yra eilutėje.

Ką jis supranta

Tokenizeris skaito SGR (Select Graphic Rendition) sekas, ESC [ … m, su bet kokiu skaičiumi kodų, atskirtų ;:

Kodai Poveikis
0 atkuria numatytąsias spalvas ir atributus
1, 3, 4, 9 paryškina, paverčia kursyvu, pabraukia, perbraukia
2 prislopina: priekinio plano spalva rodoma perpus mažesniu nepermatomumu
7 apverčia: sukeičia priekinio ir fono spalvas
21, 23, 24, 27, 29 išjungia atitinkamą atributą
22 įprastas intensyvumas: išjungia prislopinimą ir paryškinimą
30–37, 90–97 priekinis planas: 8 standartinės ir 8 ryškios spalvos
40–47, 100–107 fonas: 8 standartinės ir 8 ryškios spalvos
38;5;n, 48;5;n priekinio plano arba fono spalva iš 256 spalvų lentelės
38;2;r;g;b, 48;2;r;g;b 24 bitų tikroji priekinio plano arba fono spalva
39, 49 numatytoji priekinio plano arba fono spalva

Paslėptasis (8) ir viršutinis pabraukimas (53) išanalizuojami, bet išvesties nekeičia; kiti kodai ignoruojami. Stiliai išlieka per eilučių lūžius, kol atkuriami, kaip ir terminale.

Spalvos

16 pavadintų spalvų paimtos iš temos terminal.ansi* spalvų (terminal.ansiRed, terminal.ansiBrightBlue ir t. t.). Jei tema vienos iš jų neapibrėžia, naudojama numatytoji VS Code paletė (#cd3131 raudonai, #2472C8 mėlynai ir t. t.). Jei tekstui spalva nenustatyta, naudojama temos priekinio plano spalva, o bloko fonas atitinka temos foną, kaip ir gramatika pagrįsto paryškinimo atveju. 256 spalvų lentelėje įrašai nuo 0 iki 15 yra tos pačios 16 pavadintų spalvų; įrašai nuo 16 iki 255 (6×6×6 spalvų kubas ir pilkų atspalvių skalė) bei tikrosios spalvos reikšmės nuo temos nepriklauso.

colorReplacements taikomi ir ANSI spalvoms.

Dvi temos

ANSI atsižvelgia į themes žemėlapį taip pat kaip gramatika pagrįstas paryškinimas ir netemoms pagal numatytąją nustato CSS kintamuosius:

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

Kiekviena pavadinta spalva parenkama iš atskiros kiekvienos temos paletės, todėl raudona šviesioje ir tamsioje temoje gali skirtis.

Be gramatikos būsenos

Kadangi ANSI nenaudoja TextMate gramatikos, nėra ir gramatikos būsenos, kurią reikėtų išsaugoti. getLastGrammarState išmeta klaidą, jei pateikiama lang: 'ansi', o codeToTokensResult grąžina null grammarState.