Vai al contenuto

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.

Terminale
composer require shikiphp/shikiphp

Ultima versione v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

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.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => '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.

ShikiPHP a confronto con altri strumenti
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.

Domande e risposte

Risposte brevi dalla documentazione di ShikiPHP.

Iniziate con la guida introduttiva, poi aggiungete trasformatori, grammatiche personalizzate o output ANSI quando le vostre pagine ne hanno bisogno.