Aller au contenu

ShikiPHP

Coloriseur syntaxique purement PHP, un port de Shiki. Stylisez les blocs de code avec les thèmes VS Code et les grammaires TextMate sans Node ; la sortie correspond à Shiki 3.23.0 dans tous les scénarios de référence 214.

Terminal
composer require shikiphp/shikiphp

Dernière version v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

En pratique

Mettez en évidence un extrait d’un modèle ou script de build PHP et affichez le résultat HTML.

Un appel par bloc de code

Shikiphp::codeToHtml prend le code, un identifiant de langage et un identifiant de thème. Il renvoie un bloc pre complet avec les couleurs intégrées, qui s’affiche sans feuille de style supplémentaire.

Transmettez une map themes plutôt que theme et le même bloc utilise les variables CSS pour gérer les couleurs claires et sombres.

PHP
use Shikiphp\Shikiphp;

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

Véritables grammaires TextMate

Un port fidèle de vscode-textmate : langages intégrés, injections et dépôts imbriqués. Les mêmes grammaires avec lesquelles Shiki et VS Code effectuent la tokenisation.

Thèmes VS Code

Spécificité des sélecteurs de portée et correspondance des portées parentes, repris de vscode-textmate. Un thème unique ou deux thèmes clair et sombre via les variables CSS.

Sortie identique à Shiki

Dans 214 scénarios de référence couvrant 167 des 253 grammaires incluses, ANSI et les 65 thèmes, la sortie correspond à celle de HTML de Shiki 3.23.0 avec son moteur regex JavaScript, à l’espace blanc initial et final près.

Moteur regex pur PHP

Moteur RegExp JavaScript fourni avec le projet, issu de inline0/phasis et alimenté par un port oniguruma-to-es. Le moteur regex JavaScript de Shiki suit le même parcours de Oniguruma vers RegExp.

Transformateurs

Chaque hook Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), ainsi que les transformateurs intégrés de notation, de métadonnées et d’espaces blancs.

Le bundle complet

Toutes les grammaires tm-grammars (235, plus 18 grammaires auxiliaires) et tous les thèmes tm-themes (65) sont inclus. Sortie pour terminal ANSI, décorations et colorReplacements inclus.

CLI

Mettez en évidence un fichier pour HTML, ou listez les langages et les thèmes inclus directement depuis la ligne de commande avec bin/shikiphp.

Sans Node

Fonctionne avec PHP 8.2+ et les seules extensions ext-json et ext-mbstring. Pas de runtime Node, de binding natif Oniguruma ni d’appel à un programme externe.

Pourquoi ShikiPHP

S’exécute là où s’exécute votre PHP

La coloration s’effectue dans le processus PHP, sans appeler Node ni un API hébergé. Cela convient à une étape de build Laravel, WordPress ou de site statique.

Une sortie qui se met en cache

Le même code avec les mêmes options produit toujours la même sortie HTML. Effectuez la coloration au moment du build ou mettez en cache le HTML selon le code et les options jusqu’à ce que la source change.

Un bloc pour les thèmes clair et sombre

Une map de thèmes écrit le second thème sous forme de variables CSS dans le même balisage ; quelques lignes de CSS permettent de l’activer. L’option defaultColor détermine le thème écrit en ligne.

Limites pour les entrées non fiables

Le moteur regex mémorise les échecs et se protège contre ReDoS : un motif pathologique ralentit le traitement au lieu de le bloquer. L’option tokenizeMaxLineLength émet les lignes trop longues sous la forme d’un seul jeton brut.

Comparaison avec

Autres moyens de colorer le code pour un site PHP, et différences de ShikiPHP.

ShikiPHP comparé à d'autres outils
Shiki Idéal pourL’implémentation de référence, en JavaScript. Elle fonctionne dans tout runtime JavaScript moderne sans API Node.js, charge les grammaires et les thèmes à la demande et propose des intégrations Twoslash TypeScript. Différence avec ShikiPHPShikiPHP porte ce pipeline en PHP pour les pages rendues sur un serveur PHP. Son banc de référence compare sa sortie HTML avec Shiki 3.23.0, tandis que la branche principale de Shiki est passée à v4.
Phiki Idéal pourUn coloriseur PHP qui utilise aussi les grammaires TextMate et les thèmes VS Code. Il fournit une extension league/commonmark compatible avec Str::markdown de Laravel, une sortie pour terminal et un exécutable en ligne de commande. Différence avec ShikiPHPPhiki décrit son tokenizer comme inspiré de vscode-textmate, mais pas comme une traduction à l’identique. ShikiPHP porte vscode-textmate et oniguruma-to-es et teste sa sortie HTML en la comparant à celle de Shiki dans 214 scénarios de référence.
highlight.php Idéal pourUn port PHP côté serveur de highlight.js prenant en charge les langages 185 avec les définitions de langage et de style originales, et capable de détecter automatiquement le langage. Différence avec ShikiPHPShikiPHP effectue la tokenisation avec les grammaires TextMate et applique les couleurs des thèmes VS Code, à partir des mêmes fichiers que Shiki ; chaque appel doit indiquer son langage.
Torchlight Idéal pourUn service de coloration compatible avec VS Code. C’est une application HTTP API qui utilise des annotations de commentaire pour mettre en évidence, focaliser et comparer les modifications ; elle propose des clients officiels pour Laravel, CommonMark, Statamic et d’autres piles. Différence avec ShikiPHPShikiPHP s’exécute dans votre processus PHP sans API hébergé. Ses transformateurs de notation intégrés interprètent des commentaires similaires pour les lignes mises en évidence, focalisées et comparées.

Questions et réponses

Réponses courtes issues de la documentation de ShikiPHP.

Commencez par le guide de démarrage, puis ajoutez des transformateurs, des grammaires personnalisées ou la sortie ANSI selon les besoins de vos pages.