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.
composer require shikiphp/shikiphpLegújabb kiadás v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
'lang' => 'ansi',
'theme' => 'github-dark',
]);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.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
return "Hello, {$name}!";
}
PHP, [
'lang' => 'php',
'theme' => 'github-dark',
]);use Shikiphp\Shikiphp;
$code = 'const answer: number = 42';
echo Shikiphp::codeToHtml($code, [
'lang' => 'ts',
'themes' => ['light' => 'github-light', 'dark' => '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.
| Eszköz | Amiben jó | Különbségek ShikiPHP-hoz képest |
|---|---|---|
| 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. |
Források, bejelölve
Kérdések és válaszok
Rövid válaszok a ShikiPHP dokumentációjából.
Adjon át világos és sötét bejegyzéseket tartalmazó tématérképet. A világos színek beágyazva, a sötétek pedig --shiki-dark változókként jelennek meg; ezeket egy rövid, az html.dark .shiki elemre korlátozott CSS szabály aktiválja. Állítsa a defaultColor értékét false-ra, ha csak a változókat szeretné kiadni.
Az összes nyelvtan a tm-grammars 1.31.15 kínálatából, azaz 235 nyelv és 18 segédnyelvtan, valamint mind a 65 téma az tm-themes kínálatából. A azonosítók listázásához futtassa az vendor/bin/shikiphp langs vagy az vendor/bin/shikiphp themes parancsot, vagy hívja meg a kiemelőn az bundledLanguages() és az bundledThemes() metódust.
Igen. Dekódolja a .tmLanguage.json fájlt, és regisztrálja a loadGrammar segítségével; adjon meg egy azonosítót és opcionális aliasokat. Egyéni VS Code témát a loadTheme segítségével regisztrálhat. Először regisztráljon minden olyan nyelvtant, amelyet az adott nyelvtan tartalmaz vagy beágyaz.
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ással az adott hosszt elérő vagy meghaladó sorok egyetlen egyszerű tokenként jelennek meg.
A dokumentáció ezt nem javasolja. Emeljen ki buildidőben statikus oldalakhoz, vagy gyorsítótárazza a megjelenített HTML értéket a kód és a beállítások alapján. Egy folyamaton belül használjon újra egy kiemelőt; erről a Shikiphp homlokzat gondoskodik.
Az oracle harness a ShikiPHP HTML értékét hasonlítja össze a Shiki 3.23.0 értékével, a Shiki JavaScript regexmotorjával. A 214 forgatókönyv lefedi a 253 csomagban található nyelvtanok 167 részét, az ANSI-t és mind a 65 témát; a beállításokhoz és a beépített transzformerekhez külön paritástesztek tartoznak.
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.