Izhod ANSI
Nastavite lang na 'ansi', da poudarite izhod terminala — besedilo, ki vsebuje ubežna zaporedja ANSI — namesto razčlenjevanja z gramatiko. shikiphp razčleni ubežne kode in obarva besedilo z ANSI-paleto teme. Gre za prenos razčlenjevalnika žetonov lang: 'ansi' projekta Shiki; štirje scenariji oracle preverjajo njegovo HTML glede na Shiki 3.23.0.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
'lang' => 'ansi',
'theme' => 'github-dark',
]);
To je naraven način prikaza zajetega izhoda CLI — izvajalniki testov, dnevniki gradnje, izhod git — z ohranjenimi izvirnimi barvami. Ubežna zaporedja se odstranijo iz izhoda; ostane samo besedilo, ovito v barvne razpone.
Bodite pozorni na niz PHP z dvojnimi narekovaji: "\e" je ubežni znak. Pri prikazu izhoda, zajetega iz procesa (na primer z shell_exec ali proc_open), so ubežni znaki že v nizu.
Kaj razume
Razčlenjevalnik žetonov bere zaporedja SGR (Select Graphic Rendition), ESC [ … m, s poljubnim številom kod, ločenih z ;:
| Kode | Učinek |
|---|---|
0 |
ponastavi vse barve in atribute |
1, 3, 4, 9 |
krepko, ležeče, podčrtano, prečrtano |
2 |
zatemnjeno: ospredje je prikazano s polovično prosojnostjo |
7 |
obrnjeno: ospredje in ozadje zamenjata mesti |
21, 23, 24, 27, 29 |
izklopi ustrezni atribut |
22 |
običajna intenzivnost: izklopi zatemnitev in krepki zapis |
30–37, 90–97 |
ospredje: 8 standardnih in 8 svetlih barv |
40–47, 100–107 |
ozadje: 8 standardnih in 8 svetlih barv |
38;5;n, 48;5;n |
barva ospredja ali ozadja iz 256-barvne tabele 256 |
38;2;r;g;b, 48;2;r;g;b |
24-bitna barva ospredja ali ozadja |
39, 49 |
privzeta barva ospredja ali ozadja |
Skritega sloga (8) in nadčrte (53) razčleni, vendar ne spremenita izhoda; druge kode prezre. Slogi se prenašajo čez prelome vrstic, dokler jih ne ponastavite, tako kot v terminalu.
Barve
16 poimenovanih barv izvira iz barv teme terminal.ansi* (terminal.ansiRed, terminal.ansiBrightBlue itd.). Če tema katere od njih ne določa, se uporabi privzeta paleta VS Code (#cd3131 za rdečo, #2472C8 za modro itd.). Besedilo brez nastavljene barve prevzame barvo ospredja teme, ozadje bloka pa ozadje teme, tako kot pri poudarjanju na podlagi gramatike. V 256-barvni tabeli 256 je prvih 16 vnosov enakih tem 16 poimenovanim barvam; vnosi od 16 do 255 (barvna kocka 6×6×6 in lestvica sivin) ter vrednosti pravih barv niso odvisni od teme.
colorReplacements veljajo tudi za barve ANSI.
Dve temi
ANSI upošteva preslikavo themes enako kot poudarjanje na podlagi gramatike in za teme, ki niso privzete, ustvari različice, odvisne od CSS:
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'],
]);
Vsaka poimenovana barva se določi glede na paleto posamezne teme, zato je lahko rdeča v svetli temi drugačna kot rdeča v temni temi.
Brez stanja gramatike
Ker ANSI ne uporablja gramatike TextMate, ni stanja gramatike, ki bi ga bilo treba ohraniti. getLastGrammarState sproži napako za lang: 'ansi', codeToTokensResult pa vrne null grammarState.