ShikiPHP
Evidențiator de sintaxă pur PHP, portare a Shiki. Stilizați blocurile de cod cu teme VS Code și gramatici TextMate fără Node; rezultatul corespunde celui din Shiki 3.23.0 în scenariile oracle 214.
composer require shikiphp/shikiphpCea mai recentă versiune 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',
]);În practică
Evidențiați un fragment dintr-un șablon PHP sau un script de compilare și afișați HTML returnat.
Un apel pentru fiecare bloc de cod
Shikiphp::codeToHtml primește codul, un id de limbaj și un id de temă. Returnează un bloc pre complet, cu culorile scrise inline, care se redă fără o foaie de stiluri suplimentară.
Transmiteți o mapare themes în loc de theme, iar blocul va include culorile pentru tema luminoasă și cea întunecată prin variabile CSS.
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'],
]);Gramatici TextMate autentice
O portare fidelă a vscode-textmate: limbaje încorporate, injecții și depozite imbricate. Aceleași gramatici cu care tokenizează Shiki și VS Code.
Teme VS Code
Specificitatea selectorilor de domeniu și potrivirea domeniilor părinte, portate din vscode-textmate. O singură temă sau variante luminoasă/întunecată prin variabile CSS.
Rezultat identic cu Shiki
Cele 214 scenarii de referință, care acoperă 167 dintre cele 253 de gramatici incluse, ANSI și toate cele 65 de teme, produc același HTML ca Shiki 3.23.0 cu motorul său regex JavaScript, exceptând spațiile albe de la început și sfârșit.
Motor regex pur PHP
Motor RegExp JavaScript inclus de la inline0/phasis, alimentat de o portare oniguruma-to-es. Motorul regex JavaScript al Shiki urmează aceeași cale de la Oniguruma la RegExp.
Transformatoare
Fiecare hook Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), plus transformatoarele încorporate pentru notație, meta și spații albe.
Pachetul complet
Toate limbajele tm-grammars (235, plus 18 gramatici auxiliare) și toate temele tm-themes (65) sunt incluse. Include ieșire pentru terminal ANSI, decorațiuni și colorReplacements.
CLI
Evidențiați un fișier pentru HTML sau listați limbajele și temele incluse, direct din linia de comandă cu bin/shikiphp.
Fără Node
Rulează pe PHP 8.2+ doar cu ext-json și ext-mbstring. Fără mediu de execuție Node, fără legătură nativă Oniguruma și fără lansarea de procese externe.
De ce ShikiPHP
Rulează acolo unde rulează PHP
Evidențierea are loc în procesul PHP, fără a lansa procese Node externe sau a apela un API găzduit. Potrivită pentru un pas de compilare Laravel, WordPress sau al unui site static.
Rezultat care poate fi stocat în cache
Același cod, cu aceleași opțiuni, produce întotdeauna același HTML. Evidențiați la compilare sau stocați în cache HTML în funcție de cod și opțiuni, până la modificarea sursei.
Un bloc pentru tema luminoasă și cea întunecată
O mapare de teme scrie a doua temă ca variabile CSS în același marcaj, iar câteva linii de CSS comută la aceasta. Opțiunea defaultColor alege tema scrisă inline.
Limite pentru intrări nesigure
Motorul regex memorează eșecurile și protejează împotriva ReDoS, astfel încât un tipar problematic încetinește procesarea în loc să o blocheze. Opțiunea tokenizeMaxLineLength emite liniile prea lungi ca un singur token simplu.
Comparativ cu
Alte metode de evidențiere a codului pentru un site PHP și diferențele față de ShikiPHP.
| Instrument | Potrivit pentru | Diferența față de ShikiPHP |
|---|---|---|
| Shiki | Potrivit pentruImplementarea de referință, în JavaScript. Funcționează în orice mediu de execuție JavaScript modern, fără API-uri Node.js, încarcă gramaticile și temele la cerere și oferă integrări TypeScript Twoslash de primă parte. | Diferența față de ShikiPHPShikiPHP portează acel flux de procesare în PHP pentru pagini randate pe un server PHP. Setul său de teste oracle compară rezultatul HTML cu 3.23.0 Shiki, în timp ce ramura principală a Shiki a trecut la v4. |
| Phiki | Potrivit pentruUn evidențiator PHP care folosește și gramatici TextMate și teme VS Code. Include o extensie league/commonmark care funcționează cu Str::markdown din Laravel, ieșire pentru terminal și un executabil în linia de comandă. | Diferența față de ShikiPHPPhiki descrie tokenizerul său ca fiind inspirat de vscode-textmate, dar nu o traducere 1-la-1. ShikiPHP portează vscode-textmate și oniguruma-to-es și își testează HTML comparându-l cu rezultatul Shiki în scenariile oracle 214. |
| highlight.php | Potrivit pentruO portare PHP pe server a highlight.js, care acceptă limbaje 185 cu definițiile originale pentru limbaj și stil și poate detecta automat limbajul. | Diferența față de ShikiPHPShikiPHP tokenizează cu gramatici TextMate și colorează cu teme VS Code, aceleași fișiere folosite de Shiki, iar fiecare apel specifică limbajul. |
| Torchlight | Potrivit pentruUn serviciu de evidențiere compatibil cu VS Code. Este un HTTP API cu adnotări în comentarii pentru evidențieri, focalizare și diferențe și are clienți oficiali pentru Laravel, CommonMark, Statamic și alte stive. | Diferența față de ShikiPHPShikiPHP rulează în procesul PHP, fără un API găzduit. Transformatoarele de notație încorporate citesc comentarii similare pentru liniile evidențiate, focalizate și cu diferențe. |
Întrebări și răspunsuri
Răspunsuri scurte din documentația ShikiPHP.
Transmiteți o mapare de teme cu intrări pentru tema luminoasă și cea întunecată. Culorile luminoase sunt scrise inline, iar cele întunecate ca variabile --shiki-dark, activate de o regulă CSS scurtă, aplicată la html.dark .shiki. Setați defaultColor la false pentru a emite doar variabile.
Toate gramaticile din tm-grammars 1.31.15, cele 235 de limbaje plus 18 gramatici auxiliare și toate cele 65 de teme din tm-themes. Rulați vendor/bin/shikiphp langs sau vendor/bin/shikiphp themes pentru a lista id-urile ori apelați bundledLanguages() și bundledThemes() pentru evidențiator.
Da. Decodați fișierul .tmLanguage.json și înregistrați-l cu loadGrammar, oferind un id și eventuale aliasuri, sau înregistrați o temă VS Code cu loadTheme. Înregistrați mai întâi orice gramatică pe care o include sau o încorporează.
Motorul regex memorează eșecurile și oferă protecție împotriva ReDoS, astfel încât un tipar problematic încetinește procesarea în loc să o blocheze. Setați tokenizeMaxLineLength pentru a emite un singur token simplu pentru orice linie care atinge sau depășește acea lungime.
Documentația recomandă să nu faceți asta. Evidențiați la compilare pentru pagini statice sau stocați în cache rezultatul randat HTML în funcție de cod și opțiuni. În cadrul unui proces, reutilizați un singur evidențiator; fațada Shikiphp face acest lucru pentru dvs.
Setul de teste oracle compară HTML din ShikiPHP cu 3.23.0 Shiki folosind motorul regex JavaScript din Shiki. Scenariile 214 acoperă 167 dintre cele 253 de gramatici incluse, ANSI și toate cele 65 de teme, iar opțiunile și transformatoarele încorporate au propriile teste de paritate.
Începeți cu ghidul de inițiere, apoi adăugați transformatoare, gramatici personalizate sau ieșire ANSI când paginile dvs. au nevoie de acestea.