Ugrás a tartalomhoz

ShikiPHP

Tisztán PHP nyelvű szintaxiskiemelő, a Shiki átültetése. Kódblokkok formázása VS Code témákkal és TextMate nyelvtanokkal Node nélkül; a kimenet 214 tesztkörnyezetben megegyezik a Shiki 3.23.0 eredményével.

Terminál
composer require shikiphp/shikiphp

Legújabb kiadás v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

A gyakorlatban

Emeljen ki egy kódrészletet egy PHP sablonból vagy buildszkriptből, és írassa ki a visszaadott HTML értéket.

Egy hívás kódblokkonként

Az Shikiphp::codeToHtml fogadja a kódot, egy nyelvazonosítót és egy témaazonosítót. Teljes pre blokkot ad vissza, amelynek színei beágyazottan szerepelnek, így külön stíluslap nélkül is megjeleníthető.

Az theme helyett adjon át egy themes térképet; ugyanaz a blokk az CSS változókon keresztül tartalmazza a világos és sötét színeket.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

Valódi TextMate-nyelvtanok

A vscode-textmate hű átültetése: beágyazott nyelvekkel, injekciókkal és beágyazott adattárakkal. Ugyanazokat a nyelvtanokat használja a tokenizáláshoz, mint a Shiki és a VS Code.

VS Code témák

Hatókörválasztó-specifitás és szülőhatókör-egyezés, a vscode-textmate átültetése. Egyetlen téma vagy kettős világos/sötét mód CSS változókkal.

A Shiki-val azonos kimenet

214 referenciaszcenárió lefedi a 253 mellékelt nyelvtan közül 167-et, az ANSI-t és mind a 65 témát. A kimenet megegyezik a Shiki 3.23.0 JavaScript reguláriskifejezés-motorjával előállított HTML-lel, az elején és végén található üres karakterektől eltekintve.

Tisztán PHP-alapú reguláriskifejezés-motor

A inline0/phasis által biztosított, JavaScript nyelvű RegExp-motor, amelyet egy oniguruma-to-es-átültetés táplál. Az Shiki JavaScript reguláriskifejezés-motorja ugyanazt az Oniguruma–RegExp útvonalat követi.

Transzformátorok

Minden Shiki hook (preprocess, tokens, root, pre, code, line, span, postprocess), valamint a beépített jelölés-, metaadat- és szóköztranszformátorok.

A teljes csomag

Az összes tm-grammars nyelv (235 és 18 segédnyelvtan), valamint mind a 65 tm-themes téma megtalálható benne. ANSI terminálkimenet, dekorációk és colorReplacements is.

CLI

Emeljen ki egy fájlt HTML formátumban, vagy listázza a csomagban található nyelveket és témákat közvetlenül a parancssorból az bin/shikiphp segítségével.

Node nélkül

PHP 8.2+ verzióval fut, csak az ext-json és ext-mbstring kiterjesztésekkel. Nincs Node-futtatókörnyezet, natív Oniguruma-kötés vagy külső parancs.

Miért ShikiPHP?

Ott fut, ahol az Ön PHP folyamata

A kiemelés az PHP folyamaton belül történik, Node külső futtatása vagy hosztolt API hívása nélkül. Ez jól illik a Laravel, WordPress vagy statikus webhelyeket felépítő lépéshez.

Gyorsítótárazható kimenet

Ugyanaz a kód azonos beállításokkal mindig ugyanazt az HTML eredményt adja. Emeljen ki buildidőben, vagy gyorsítótárazza a megjelenített HTML értéket a kód és a beállítások alapján a forrás módosulásáig.

Egy blokk világos és sötét módhoz

A tématérkép a második téma színeit CSS változókként írja ugyanabba a jelölésbe; néhány sor CSS segítségével átválthat erre. A defaultColor beállítás határozza meg, melyik téma kerüljön beágyazva a kimenetbe.

Korlátok nem megbízható bemenethez

A reguláriskifejezés-motor megjegyzi a hibákat és véd a ReDoS ellen, így a szélsőséges minták csak lassítják a feldolgozást, de nem akasztják meg. A tokenizeMaxLineLength beállítás a túl hosszú sorokat egyetlen egyszerű tokenként adja ki.

Összehasonlítás

Más lehetőségek kód kiemelésére egy PHP webhelyhez, és miben különbözik az ShikiPHP.

ShikiPHP összehasonlítása más eszközökkel
Shiki Amiben jóA referencia-megvalósítás JavaScript nyelven. Bármely modern JavaScript-futtatókörnyezetben működik Node.js API-k nélkül, igény szerint tölti be a nyelvtanokat és témákat, és rendelkezik TypeScript Twoslash-integrációval. Különbségek ShikiPHP-hoz képestAz ShikiPHP ezt a folyamatot PHP nyelvre ülteti át, a PHP szerveren megjelenített oldalakhoz. A tesztkörnyezet az HTML kimenetét az Shiki 3.23.0 értékével hasonlítja össze, miközben az Shiki fő ága időközben áttért az v4 használatára.
Phiki Amiben jóPHP nyelvű kiemelő, amely szintén TextMate nyelvtanokat és VS Code témákat használ. league/commonmark-bővítménnyel érkezik, amely működik az Laravel Str::markdown metódusával, terminálkimenettel és parancssori programmal. Különbségek ShikiPHP-hoz képestA Phiki leírása szerint a tokenizálója a vscode-textmate ihlette, de nem annak pontos fordítása. Az ShikiPHP átülteti a vscode-textmate és a oniguruma-to-es elemet, és az HTML kimenetét az Shiki eredményével hasonlítja össze 214 tesztkörnyezetben.
highlight.php Amiben jóA highlight.js szerveroldali PHP-átültetése, amely 185 nyelvet támogat az eredeti nyelv- és stílusdefiníciókkal, és automatikusan felismeri a nyelvet. Különbségek ShikiPHP-hoz képestAz ShikiPHP a TextMate nyelvtanokkal tokenizál, a VS Code témáival színez; ugyanazokat a fájlokat használja, mint az Shiki, és minden hívásnál meg kell adni a nyelvet.
Torchlight Amiben jóVS Code-kompatibilis kiemelőszolgáltatás. HTTP API, amely megjegyzésekkel jelöl kiemeléseket, fókuszt és diffeket; saját klienseket kínál többek között a Laravel, a CommonMark és a Statamic rendszerekhez. Különbségek ShikiPHP-hoz képestAz ShikiPHP az Ön PHP folyamatán belül fut, hosztolt API nélkül. A beépített jelölés-transzformátorok hasonló megjegyzésekkel kezelik a kiemelt, fókuszált és eltérésként jelölt sorokat.

Kérdések és válaszok

Rövid válaszok a ShikiPHP dokumentációjából.

Kezdje az első lépéseket bemutató útmutatóval, majd adjon hozzá transzformereket, egyéni nyelvtanokat vagy ANSI-kimenetet, amikor szüksége van rájuk az oldalain.