ANSI izvade
Iestatiet lang uz 'ansi', lai iezīmētu termināļa izvadi — tekstu, kas satur ANSI
atsoļa secības — tā vietā, lai to tokenizētu ar gramatiku. shikiphp apstrādā
atslēgkodus un iekrāso tekstu, izmantojot tēmas ANSI paleti. Tas ir Shiki
lang: 'ansi' tokenizētāja ports, un četros etalonpiemēros tiek pārbaudīta tā HTML
pret Shiki 3.23.0.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
'lang' => 'ansi',
'theme' => 'github-dark',
]);
Tas ir dabisks veids, kā attēlot no CLI iegūtu izvadi — testu palaidēju un būvējumu
žurnālus, git izvadi —, saglabājot sākotnējās krāsas. Atsoļa secības tiek
izņemtas no izvades; paliek tikai teksts, kas ietverts krāsainos span elementos.
Ņemiet vērā dubultpēdiņās ietverto PHP virkni: "\e" ir atsoļa rakstzīme. Kad
attēlojat no procesa iegūtu izvadi (piemēram, ar shell_exec vai
proc_open), atsoļa rakstzīmes jau ir virknē.
Ko tas saprot
Tokenizētājs nolasa SGR (Select Graphic Rendition) secības — ESC [ … m —, kurās ir
jebkurš skaits ar ; atdalītu kodu:
| Kods | Efekts |
|---|---|
0 |
atiestata visas krāsas un atribūtus |
1, 3, 4, 9 |
treknraksts, kursīvs, pasvītrojums, pārsvītrojums |
2 |
blāvs: priekšplāns tiek attēlots ar pusi no necaurspīdīguma |
7 |
apgriezts: priekšplāna un fona krāsas samainās vietām |
21, 23, 24, 27, 29 |
izslēdz atbilstošo atribūtu |
22 |
normāla intensitāte: izslēdz blāvo un treknrakstu |
30–37, 90–97 |
priekšplāns: 8 standarta un 8 spilgtās krāsas |
40–47, 100–107 |
fons: 8 standarta un 8 spilgtās krāsas |
38;5;n, 48;5;n |
priekšplāna vai fona krāsa no 256 krāsu tabulas |
38;2;r;g;b, 48;2;r;g;b |
24 bitu patieso krāsu priekšplānam vai fonam |
39, 49 |
noklusējuma priekšplāna vai fona krāsa |
Slēptais (8) un virsstrīpa (53) tiek apstrādāti, bet nemaina izvadi, savukārt pārējie kodi tiek ignorēti. Stili saglabājas arī pāri rindu pārtraukumiem, līdz tie tiek atiestatīti — tāpat kā terminālī.
Krāsas
16 nosaukto krāsu avots ir tēmas terminal.ansi* krāsas
(terminal.ansiRed, terminal.ansiBrightBlue utt.). Ja tēma kādu no tām nedefinē, tiek izmantota
VS Code noklusējuma palete (#cd3131 sarkanajai,
#2472C8 zilajai krāsai utt.). Tekstam bez iestatītas krāsas tiek izmantota tēmas
priekšplāna krāsa, bet bloka fonam — tēmas fona krāsa, tāpat kā gramatikā
balstītā iezīmēšanā. 256 krāsu tabulā ieraksti 0–15 ir tās pašas
16 nosauktās krāsas; ieraksti 16–255 (6×6×6 krāsu kubs un pelēktoņu skala)
un patieso krāsu vērtības nav atkarīgas no tēmas.
colorReplacements attiecas arī uz ANSI krāsām.
Divas tēmas
ANSI ievēro themes karti tāpat kā gramatikā balstītā iezīmēšana, izvadot
CSS varianta versijas tēmām, kas nav noklusējuma tēmas:
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'],
]);
Katra nosauktā krāsa tiek iegūta no katras tēmas atsevišķās paletes, tāpēc sarkanā krāsa gaišajā un tumšajā tēmā var atšķirties.
Bez gramatikas stāvokļa
Tā kā ANSI neizmanto TextMate gramatiku, gramatikas stāvoklis nav jāsaglabā.
getLastGrammarState rada izņēmumu, ja tiek padots lang: 'ansi', bet codeToTokensResult atgriež
tukšu null grammarState.