ShikiPHP
Evidenziatore di sintassi in puro PHP, port di Shiki. Applicate stili ai blocchi di codice con temi VS Code e grammatiche TextMate senza Node; l'output corrisponde a Shiki 3.23.0 in tutti gli scenari oracle 214.
composer require shikiphp/shikiphpUltima versione 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',
]);Nella pratica
Evidenziate uno snippet da un template o script di build PHP e stampate l'HTML restituito.
Una chiamata per blocco di codice
Shikiphp::codeToHtml accetta il codice, un id di linguaggio e un id di tema. Restituisce un blocco pre completo con i colori inline, che viene visualizzato senza un foglio di stile aggiuntivo.
Passate una mappa themes al posto di theme e lo stesso blocco includerà i colori chiari e scuri tramite variabili 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'],
]);Grammatiche TextMate reali
Port fedele di vscode-textmate: linguaggi incorporati, injection e repository annidati. Le stesse grammatiche con cui tokenizzano Shiki e VS Code.
Temi VS Code
Specificità dei selettori di scope e corrispondenza degli scope genitori, portate da vscode-textmate. Tema singolo o modalità chiara/scura tramite variabili CSS.
Output identico a Shiki
Gli scenari oracle 214, che coprono 167 delle 253 grammatiche incluse, ANSI e tutti i 65 temi, corrispondono a HTML di Shiki 3.23.0 con il motore regex JavaScript, a eccezione degli spazi bianchi iniziali e finali.
Motore regex PHP puro
Motore RegExp JavaScript incluso nel progetto, proveniente da inline0/phasis e basato su un port di oniguruma-to-es. Il motore regex Shiki JavaScript segue lo stesso percorso da Oniguruma a RegExp.
Trasformatori
Tutti gli hook Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), oltre ai trasformatori integrati per notazioni, metadati e spazi bianchi.
Il bundle completo
Tutti i linguaggi tm-grammars (235, più 18 grammatiche di supporto) e tutti i temi tm-themes (65) sono inclusi. Comprende output per terminali ANSI, decorazioni e sostituzioni dei colori.
CLI
Evidenziate un file in HTML o elencate i linguaggi e i temi inclusi direttamente dalla riga di comando con bin/shikiphp.
Senza Node
Funziona su PHP 8.2+ usando solo ext-json e ext-mbstring. Nessun runtime Node, nessun binding nativo Oniguruma, nessun comando di shell esterno.
Perché ShikiPHP
Funziona dove gira il vostro PHP
L'evidenziazione avviene nel processo PHP, senza avviare Node dalla shell né chiamare un API ospitato. È adatto a Laravel, WordPress o a una fase di build di un sito statico.
Output memorizzabile nella cache
Lo stesso codice con le stesse opzioni produce sempre lo stesso HTML. Evidenziate in fase di build oppure memorizzate nella cache l'HTML usando codice e opzioni come chiave, finché la sorgente non cambia.
Un blocco per modalità chiara e scura
Una mappa di temi scrive il secondo tema come variabili CSS sullo stesso markup e bastano poche righe di CSS per attivarlo. L'opzione defaultColor determina quale tema viene inserito inline.
Limiti per input non attendibili
Il motore regex memorizza i tentativi falliti e protegge da ReDoS, così uno schema patologico rallenta l'elaborazione invece di bloccarla. L'opzione tokenizeMaxLineLength emette le righe troppo lunghe come un unico token semplice.
A confronto con
Altri metodi per evidenziare il codice in un sito PHP e differenze rispetto a ShikiPHP.
| Strumento | Ideale per | Differenze rispetto a ShikiPHP |
|---|---|---|
| Shiki | Ideale perL'implementazione di riferimento in JavaScript. Funziona in qualsiasi runtime JavaScript moderno senza API Node.js, carica grammatiche e temi su richiesta e dispone di integrazioni Twoslash di prima parte TypeScript. | Differenze rispetto a ShikiPHPShikiPHP porta questa pipeline in PHP per pagine renderizzate su un server PHP. Il suo strumento oracle confronta il proprio HTML con Shiki 3.23.0, mentre il branch principale di Shiki è passato a v4. |
| Phiki | Ideale perUn evidenziatore PHP che usa anch'esso grammatiche TextMate e temi VS Code. Include un'estensione league/commonmark compatibile con Str::markdown di Laravel, output per terminali e un eseguibile da riga di comando. | Differenze rispetto a ShikiPHPPhiki descrive il proprio tokenizer come ispirato a vscode-textmate, ma non come una traduzione 1-1. ShikiPHP porta vscode-textmate e oniguruma-to-es e verifica il proprio HTML confrontandolo con l'output di Shiki in 214 scenari oracle. |
| highlight.php | Ideale perPort PHP lato server di highlight.js che supporta i linguaggi 185 con le definizioni originali di linguaggi e stili e può rilevare automaticamente il linguaggio. | Differenze rispetto a ShikiPHPShikiPHP tokenizza con le grammatiche TextMate e applica i colori con i temi VS Code, gli stessi file usati da Shiki; ogni chiamata specifica il linguaggio. |
| Torchlight | Ideale perServizio di evidenziazione compatibile con VS Code. È un HTTP API con annotazioni nei commenti per evidenziazioni, focus e differenze; offre client ufficiali per Laravel, CommonMark, Statamic e altri stack. | Differenze rispetto a ShikiPHPShikiPHP viene eseguito nel vostro processo PHP senza un API ospitato. I trasformatori di notazione integrati leggono commenti analoghi per le righe evidenziate, messe a fuoco e con differenze. |
Fonti, selezionato
Domande e risposte
Risposte brevi dalla documentazione di ShikiPHP.
Passate una mappa di temi con voci chiare e scure. I colori chiari vengono inseriti inline, quelli scuri come variabili --shiki-dark; una breve regola CSS applicata a html.dark .shiki le attiva. Impostate defaultColor su false per emettere solo variabili.
Sono incluse tutte le grammatiche di tm-grammars 1.31.15, i linguaggi 235 più 18 grammatiche di supporto e tutti i 65 temi di tm-themes. Eseguite vendor/bin/shikiphp langs o vendor/bin/shikiphp themes per elencarne gli id, oppure chiamate bundledLanguages() e bundledThemes() sull'highlighter.
Sì. Decodificate il file .tmLanguage.json e registratelo con loadGrammar, indicando un id e, facoltativamente, degli alias; oppure registrate un tema VS Code con loadTheme. Registrate prima le grammatiche che include o incorpora.
Il motore regex memorizza i tentativi falliti e protegge da ReDoS, così uno schema patologico rallenta invece di bloccare l'elaborazione. Impostate tokenizeMaxLineLength per emettere un unico token semplice per ogni riga che raggiunge o supera tale lunghezza.
La documentazione lo sconsiglia. Per le pagine statiche, evidenziate il codice in fase di build oppure memorizzate nella cache il risultato renderizzato HTML usando codice e opzioni come chiave. All'interno di un processo, riutilizzate un solo evidenziatore: la facciata Shikiphp lo fa già per voi.
L'harness di riferimento confronta HTML di ShikiPHP con 3.23.0 Shiki usando il motore regex JavaScript di Shiki. Gli scenari 214 coprono 167 delle grammatiche 253 incluse, ANSI e tutti i 65 temi; le opzioni e i trasformatori integrati hanno test di parità dedicati.
Iniziate con la guida introduttiva, poi aggiungete trasformatori, grammatiche personalizzate o output ANSI quando le vostre pagine ne hanno bisogno.