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