ANSI-tuloste
Aseta lang arvoon 'ansi' korostaaksesi päätteen tulostetta — tekstiä, joka sisältää ANSI-
escape-sekvenssejä — kieliopin jäsennyksen sijaan. shikiphp jäsentää
escape-koodit ja värittää tekstin teeman ANSI-paletin mukaan. Se on sovitus
Shiki-järjestelmän lang: 'ansi'-jäsentimestä, ja neljä oracle-skenaariota tarkistaa sen HTML-toiminnan suhteessa kohteeseen Shiki 3.23.0.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
'lang' => 'ansi',
'theme' => 'github-dark',
]);
Tämä on luonteva tapa esittää talteen otettu CLI-tuloste — testiajojen tulokset, koontiversioiden lokit ja git-tuloste — alkuperäiset värit säilyttäen. Escape-sekvenssit poistetaan tulosteesta; jäljelle jää vain teksti, joka kääritään värillisiin span-elementteihin.
Huomaa lainausmerkeissä oleva PHP-merkkijono: "\e" on escape-merkki. Kun esität prosessista talteen otettua tulostetta (esimerkiksi komennolla shell_exec tai proc_open), escape-merkit ovat jo merkkijonossa.
Mitä se tunnistaa
Jäsennin lukee SGR-sekvenssejä (Select Graphic Rendition), ESC [ … m, joissa voi olla mikä tahansa määrä ;-eroteltuja koodeja:
| Koodit | Vaikutus |
|---|---|
0 |
nollaa kaikki värit ja määritteet |
1, 3, 4, 9 |
lihavointi, kursivointi, alleviivaus, yliviivaus |
2 |
himmennys: etuala piirretään puolikkaalla peittävyydellä |
7 |
käänteinen: etuala ja tausta vaihtavat paikkaa |
21, 23, 24, 27, 29 |
poistaa vastaavan määritteen käytöstä |
22 |
normaali voimakkuus: poistaa himmennyksen ja lihavoinnin käytöstä |
30–37, 90–97 |
etuala: 8 vakioväriä ja 8 kirkasta väriä |
40–47, 100–107 |
tausta: 8 vakioväriä ja 8 kirkasta väriä |
38;5;n, 48;5;n |
etuala tai tausta 256 värin taulukosta |
38;2;r;g;b, 48;2;r;g;b |
24-bittinen aidon värin etuala tai tausta |
39, 49 |
oletusetuala tai -tausta |
Piilotus (8) ja yliviivausviiva (53) jäsennetään, mutta ne eivät muuta tulostetta, ja muut koodit ohitetaan. Tyylit säilyvät rivinvaihtojen yli, kunnes ne nollataan, kuten päätteessä.
Värit
16 nimettyä väriä ovat teeman terminal.ansi*-värejä (terminal.ansiRed, terminal.ansiBrightBlue ja niin edelleen). Jos teemassa ei ole jotakin väriä määritelty, käytetään VS Code-oletuspalettia (#cd3131 punaiselle, #2472C8 siniselle ja niin edelleen). Värittömäksi määritetty teksti käyttää teeman etualaväriä, ja lohkon tausta on teeman tausta, kuten kielioppiin perustuvassa korostuksessa. 256 värin taulukon kohdat 0–15 ovat samat 16 nimettyä väriä; kohdat 16–255 (6×6×6-värikuutio ja harmaasävyliuku) ja aidot väriarvot eivät riipu teemasta.
colorReplacements koskevat myös ANSI-värejä.
Kaksi teemaa
ANSI noudattaa themes-karttaa kuten kielioppiin perustuva korostus ja tuottaa CSS-kohtaisia muunnelmia muille kuin oletusteemoille:
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'],
]);
Kukin nimetty väri ratkaistaan kunkin teeman oman paletin mukaan, joten vaalean ja tumman teeman punainen voivat olla erilaisia.
Ei kielioppitilaa
Koska ANSI ei käytä TextMate-kielioppia, kielioppitilaa ei tarvitse säilyttää. getLastGrammarState heittää virheen arvolla lang: 'ansi', ja codeToTokensResult palauttaa arvon null grammarState.