Zum Inhalt springen

ShikiPHP

Reiner PHP-Syntaxhervorheber, Portierung von Shiki. Gestalte Codeblöcke mit VS Code-Themes und TextMate-Grammatiken ohne Node. Die Ausgabe stimmt in 214 Oracle-Szenarien mit Shiki 3.23.0 überein.

Terminal
composer require shikiphp/shikiphp

Neueste Version v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

In der Praxis

Hebe ein Snippet aus einem PHP-Template oder Build-Skript hervor und gib das resultierende HTML aus.

Ein Aufruf pro Codeblock

Shikiphp::codeToHtml erhält den Code sowie eine Sprach-ID und eine Theme-ID. Es gibt einen vollständigen pre-Block zurück, dessen Farben inline angegeben sind, sodass er ohne zusätzliches Stylesheet gerendert wird.

Übergib statt theme eine themes-Map. Derselbe Block enthält dann helle und dunkle Farben in CSS-Variablen.

PHP
use Shikiphp\Shikiphp;

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

Echte TextMate-Grammatiken

Eine originalgetreue Portierung von vscode-textmate: eingebettete Sprachen, Injections und verschachtelte Repositories. Dieselben Grammatiken, die Shiki und VS Code zur Tokenisierung verwenden.

VS Code-Themes

Spezifität von Scope-Selektoren und Abgleich übergeordneter Scopes, portiert von vscode-textmate. Einzelnes Theme oder hell/dunkel mit CSS-Variablen.

Ausgabe wie bei Shiki

In 214 Oracle-Szenarien stimmen 167 der 253 gebündelten Grammatiken, ANSI und alle 65 Themes exakt mit der HTML von Shiki 3.23.0 und seiner Regex-Engine JavaScript überein, abgesehen von vorangestelltem und nachfolgendem Leerraum.

Reine PHP-Regex-Engine

Eine mitgelieferte JavaScript-RegExp-Engine von inline0/phasis, basierend auf einer oniguruma-to-es-Portierung. Shikis Regex-Engine JavaScript nutzt denselben Weg von Oniguruma zu RegExp.

Transformer

Jeder Shiki-Hook (preprocess, tokens, root, pre, code, line, span, postprocess) sowie die integrierten Transformer für Notation, Metadaten und Leerzeichen.

Das vollständige Paket

Alle tm-grammars-Sprachen (235 plus 18 Hilfsgrammatiken) und tm-themes-Themes (65) sind enthalten. ANSI-Terminalausgabe, Dekorationen und colorReplacements ebenfalls.

CLI

Hebe eine Datei bis zu HTML hervor oder führe direkt über die Kommandozeile mit bin/shikiphp eine Liste der gebündelten Sprachen und Themes aus.

Kein Node

Läuft mit PHP 8.2+ und benötigt nur ext-json und ext-mbstring. Keine Node-Laufzeitumgebung, keine native Oniguruma-Bindung und kein Aufruf externer Programme.

Warum ShikiPHP

Läuft dort, wo auch dein PHP läuft

Die Hervorhebung erfolgt im PHP-Prozess, ohne Node aufzurufen oder eine gehostete API zu verwenden. Das passt zu einem Laravel- oder WordPress-Build-Schritt sowie zu statischen Websites.

Ausgabe, die sich cachen lässt

Derselbe Code mit denselben Optionen erzeugt immer dieselbe HTML. Hebe Code zur Build-Zeit hervor oder cache das HTML anhand von Code und Optionen, bis sich der Quelltext ändert.

Ein Block für hell und dunkel

Eine Theme-Map schreibt das zweite Theme als CSS-Variablen in dasselbe Markup. Mit ein paar Zeilen CSS schaltest du darauf um. Die Option defaultColor legt fest, welches Theme inline geschrieben wird.

Schutz für nicht vertrauenswürdige Eingaben

Die Regex-Engine speichert fehlgeschlagene Muster zwischen und schützt vor ReDoS. Dadurch wird ein extremes Muster langsam statt endlos zu laufen. Die Option tokenizeMaxLineLength gibt überlange Zeilen als einzelnes einfaches Token aus.

Im Vergleich zu

Weitere Möglichkeiten zur Codehervorhebung auf einer PHP-Website und die Unterschiede zu ShikiPHP.

ShikiPHP im Vergleich zu anderen Werkzeugen
Shiki Gut geeignet fürDie Referenzimplementierung in JavaScript. Sie läuft in jeder modernen JavaScript-Laufzeitumgebung ohne Node.js-APIs, lädt Grammatiken und Themes bei Bedarf und bietet Twoslash-Integrationen von TypeScript. Unterschiede zu ShikiPHPShikiPHP portiert diese Pipeline nach PHP für Seiten, die auf einem PHP-Server gerendert werden. Der Oracle-Harness vergleicht die HTML-Ausgabe mit Shiki 3.23.0, während sich der Hauptbranch von Shiki inzwischen auf v4 weiterentwickelt hat.
Phiki Gut geeignet fürEin PHP-Highlighter, der ebenfalls TextMate-Grammatiken und VS Code-Themes verwendet. Er enthält eine league/commonmark-Erweiterung für Str::markdown von Laravel, Terminalausgabe und eine Befehlszeilen-Binärdatei. Unterschiede zu ShikiPHPPhiki beschreibt seinen Tokenizer als von vscode-textmate inspiriert, aber nicht als 1:1-Portierung. ShikiPHP portiert vscode-textmate und oniguruma-to-es und prüft seine HTML in 214 Oracle-Szenarien anhand der Ausgabe von Shiki.
highlight.php Gut geeignet fürEine serverseitige PHP-Portierung von highlight.js, die 185 Sprachen mit den originalen Sprach- und Stildefinitionen unterstützt und die Sprache automatisch erkennen kann. Unterschiede zu ShikiPHPShikiPHP zerlegt Text mit TextMate-Grammatiken in Tokens und färbt ihn mit VS Code-Themes – denselben Dateien, die auch Shiki verwendet. Bei jedem Aufruf muss die Sprache angegeben werden.
Torchlight Gut geeignet fürEin mit VS Code kompatibler Dienst zur Codehervorhebung. Es ist ein HTTP-API mit Kommentaranmerkungen für Hervorhebungen, Fokus und Diffs. Dazu kommen offizielle Clients für Laravel, CommonMark, Statamic und andere Tech-Stacks. Unterschiede zu ShikiPHPShikiPHP läuft im PHP-Prozess, ohne gehostete API. Seine integrierten Notations-Transformer lesen vergleichbare Kommentare für hervorgehobene, fokussierte und geänderte Zeilen aus.

Fragen und Antworten

Kurze Antworten aus der ShikiPHP-Dokumentation.

Beginne mit der Anleitung für den Einstieg und ergänze Transformer, eigene Grammatiken oder ANSI-Ausgabe, wenn deine Seiten sie benötigen.