Siirry sisältöön

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.

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

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

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.