Liigu sisu juurde

ANSI-väljund

Seadke lang väärtuseks 'ansi', et tõsta esile terminaliväljund — ANSI-paokoode sisaldav tekst — selle asemel, et seda grammatikaga märgendada. shikiphp parsib paokoodid ja värvib teksti teema ANSI-paletiga. See on Shiki-i lang: 'ansi' märgendaja teisendus ning neli võrdlusstsenaariumi kontrollivad selle HTML-i Shiki-i 3.23.0 vastu.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
    'lang'  => 'ansi',
    'theme' => 'github-dark',
]);

See on loomulik viis kuvada algsete värvidega jäädvustatud CLI väljundit — testikäivitajate, järgu git väljundit. Paokoodid eemaldatakse väljundist; alles jääb ainult tekst, mis on ümbritsetud värviliste elementidega.

Pange tähele jutumärkides PHP stringi: "\e" on paomärk. Kui kuvate protsessist jäädvustatud väljundit (näiteks shell_exec või proc_open abil), on paomärgid stringis juba olemas.

Mida see mõistab

Märgendi tõmmits loeb SGR-jadasid (Select Graphic Rendition), ESC [ … m, milles võib olla suvaline arv eraldajaga ; eraldatud koode:

Koodid Mõju
0 lähtestab kõik värvid ja atribuudid
1, 3, 4, 9 paks kiri, kaldkiri, allajoonimine, läbikriipsutus
2 tuhm: esiplaan kuvatakse poole läbipaistmatusega
7 pööratud: esi- ja taustavärv vahetavad koha
21, 23, 24, 27, 29 lülitab vastava atribuudi välja
22 tavaline intensiivsus: lülitab tuhmuse ja paksu kirja välja
30–37, 90–97 esiplaan: 8 standardvärvi ja 8 heledat värvi
40–47, 100–107 taust: 8 standardvärvi ja 8 heledat värvi
38;5;n, 48;5;n esi- või taustavärv 256-värvi tabelist
38;2;r;g;b, 48;2;r;g;b 24-bitine tõevärviline esi- või taustavärv
39, 49 vaikimisi esi- või taustavärv

Peidetud (8) ja ülakriips (53) parsitakse, kuid need väljundit ei muuda; muud koodid eiratakse. Vormingud säilivad reavahetuste üle kuni nende lähtestamiseni, nagu terminalis.

Värvid

16 nimega värvi pärinevad teema terminal.ansi* värvidest (terminal.ansiRed, terminal.ansiBrightBlue jne). Kui teema mõnd värvi ei määra, kasutatakse VS Code vaikepaletti (punase jaoks #cd3131, sinise jaoks #2472C8 jne). Värvimääranguta tekst kasutab teema esiplaani ja ploki taust teema taustavärvi, nagu grammatikapõhisel esiletõstmisel. 256-värvi tabelis on kirjed 0–15 samad 16 nimega värvi; kirjed 16–255 (6×6×6 värvikuup ja halltoonide astmestik) ning tõevärviväärtused ei sõltu teemast.

colorReplacements kehtivad ka ANSI-värvide kohta.

Kaks teemat

ANSI järgib themes vastendust nagu grammatikapõhine esiletõstminegi, väljastades vaikeväärtuseta teemade jaoks CSS-muutuja variante:

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

Iga nimega värv määratakse iga teema enda paleti põhjal, seega võivad heleda ja tumeda teema punased värvid erineda.

Grammatikaseisund puudub

Kuna ANSI ei kasuta TextMate grammatikat, pole säilitatavat grammatikaseisundit. getLastGrammarState annab vea väärtuse lang: 'ansi' korral ning codeToTokensResult tagastab null grammarState.