ShikiPHP
Pure PHP-syntaxmarkering, een port van Shiki. Stijl codeblokken met VS Code thema's en TextMate grammatica's zonder Node; de uitvoer komt overeen met Shiki 3.23.0 in 214 oracle-scenario's.
composer require shikiphp/shikiphpNieuwste release 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',
]);In de praktijk
Markeer een fragment uit een PHP-template of buildscripts en druk de HTML af die het oplevert.
Eén aanroep per codeblok
Shikiphp::codeToHtml neemt de code, een taal-id en een thema-id. Het retourneert een volledig pre-blok met inline geschreven kleuren, zodat het zonder extra stylesheet wordt weergegeven.
Geef een kaart met themes door in plaats van theme, en hetzelfde blok bevat lichte en donkere kleuren via variabelen van 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'],
]);Echte TextMate-grammatica's
Een getrouwe port van vscode-textmate: ingebedde talen, injecties en geneste repositories. Dezelfde grammatica's waarmee Shiki en VS Code tokeniseren.
VS Code-thema's
Specificiteit van scope-selectors en matching van bovenliggende scopes, overgezet vanuit vscode-textmate. Eén thema of een dubbel licht/donker-thema via CSS-variabelen.
Uitvoer identiek aan Shiki
In 214 oracle-scenario's komt de uitvoer overeen met die van HTML in Shiki 3.23.0 en de JavaScript-regex-engine, op witruimte aan begin en einde na; de scenario's omvatten 167 van de 253 meegeleverde grammatica's, ANSI en alle 65 thema's.
Pure PHP-regex-engine
Een meegeleverde JavaScript RegExp-engine van inline0/phasis, aangedreven door een oniguruma-to-es-port. De regex-engine van Shiki JavaScript volgt hetzelfde pad van Oniguruma naar RegExp.
Transformers
Alle hooks van Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), plus de ingebouwde transformers voor notaties, metadata en witruimte.
De volledige bundel
Alle talen van tm-grammars (235 plus 18 hulpgrammatica's) en alle thema's van tm-themes (65) zijn inbegrepen. Inclusief uitvoer voor ANSI-terminals, decoraties en colorReplacements.
CLI
Markeer een bestand met HTML, of geef de meegeleverde talen en thema's rechtstreeks vanaf de opdrachtregel weer met bin/shikiphp.
Geen Node
Werkt met PHP 8.2+ en alleen ext-json en ext-mbstring. Geen Node-runtime, geen native Oniguruma-binding en geen externe opdrachten.
Waarom ShikiPHP
Draait waar uw PHP draait
Markeren gebeurt binnen het PHP-proces, zonder Node als externe opdracht uit te voeren of een gehoste API aan te roepen. Dat past bij een buildstap voor Laravel, WordPress of een statische site.
Uitvoer die u kunt cachen
Dezelfde code met dezelfde opties levert altijd dezelfde HTML op. Markeer tijdens het bouwen of cache de HTML op basis van code en opties totdat de bron verandert.
Eén blok voor licht en donker
Een themakaart schrijft het tweede thema als variabelen van CSS in dezelfde markup; met enkele regels CSS schakelt u ernaar over. De optie defaultColor bepaalt welk thema inline wordt geschreven.
Grenzen voor niet-vertrouwde invoer
De regex-engine onthoudt mislukte pogingen en beschermt tegen ReDoS, zodat een pathologisch patroon trager wordt in plaats van vast te lopen. De optie tokenizeMaxLineLength geeft te lange regels als één gewoon token weer.
Vergeleken met
Andere manieren om code te markeren voor een PHP-site, en waarin ShikiPHP verschilt.
| Tool | Goed in | Verschil met ShikiPHP |
|---|---|---|
| Shiki | Goed inDe referentie-implementatie, in JavaScript. Deze werkt in elke moderne JavaScript-runtime zonder Node.js-API's, laadt grammatica's en thema's op aanvraag en heeft TypeScript-integraties voor Twoslash. | Verschil met ShikiPHPShikiPHP zet die pipeline over naar PHP voor pagina's die op een PHP-server worden gerenderd. Het oracle-testharnas vergelijkt de HTML met Shiki 3.23.0, terwijl de hoofdtak van Shiki is overgestapt op v4. |
| Phiki | Goed inEen PHP-highlighter die ook grammatica's van TextMate en thema's van VS Code gebruikt. Het levert een league/commonmark-extensie die werkt met Str::markdown van Laravel, terminaluitvoer en een uitvoerbaar bestand voor de opdrachtregel. | Verschil met ShikiPHPPhiki beschrijft zijn tokenizer als geïnspireerd door vscode-textmate, maar niet als een 1-op-1-vertaling. ShikiPHP zet vscode-textmate en oniguruma-to-es over en test de HTML tegen de uitvoer van Shiki in 214 oracle-scenario's. |
| highlight.php | Goed inEen server-side PHP-port van highlight.js die 185 talen ondersteunt met de oorspronkelijke taal- en stijldefinities en de taal automatisch kan herkennen. | Verschil met ShikiPHPShikiPHP tokeniseert met grammatica's van TextMate en kleurt met thema's van VS Code, dezelfde bestanden die Shiki gebruikt; bij elke aanroep moet de taal worden opgegeven. |
| Torchlight | Goed inEen VS Code-compatibele markeerdienst. Het is een HTTP API met commentaarannotaties voor markeringen, focus en verschillen, en heeft officiële clients voor Laravel, CommonMark, Statamic en andere stacks. | Verschil met ShikiPHPShikiPHP draait binnen uw PHP-proces zonder gehoste API. De ingebouwde notatietransformers lezen vergelijkbare commentaren voor gemarkeerde, gefocuste en gewijzigde regels. |
Bronnen, aangevinkt
Vragen en antwoorden
Korte antwoorden uit de documentatie van ShikiPHP.
Geef een themakaart met lichte en donkere items door. De lichte kleuren worden inline geschreven en de donkere als variabelen van --shiki-dark. Een korte CSS-regel met scope html.dark .shiki activeert die variabelen. Stel defaultColor in op false om alleen variabelen uit te geven.
Alle grammatica's uit tm-grammars 1.31.15, 235 talen plus 18 hulpgrammatica's, en alle 65 thema's uit tm-themes. Voer vendor/bin/shikiphp langs of vendor/bin/shikiphp themes uit om de id's weer te geven, of roep bundledLanguages() en bundledThemes() aan op de highlighter.
Ja. Decodeer het bestand .tmLanguage.json en registreer het met loadGrammar, met een id en optionele aliassen, of registreer met loadTheme een thema van VS Code. Registreer eerst alle grammatica's die het bevat of insluit.
De regex-engine onthoudt mislukte pogingen en beschermt tegen ReDoS, zodat een pathologisch patroon trager wordt in plaats van vast te lopen. Stel tokenizeMaxLineLength in om elke regel die deze lengte bereikt of overschrijdt als één gewoon token weer te geven.
De documentatie raadt dit af. Markeer tijdens het bouwen voor statische pagina's, of cache de gerenderde HTML op basis van code en opties. Gebruik binnen een proces dezelfde highlighter opnieuw; de Shikiphp-facade doet dat voor u.
De oracle-harnas vergelijkt ShikiPHP's HTML met Shiki 3.23.0 met de regex-engine van Shiki JavaScript. De 214-scenario's bestrijken 167 van de 253 meegeleverde grammatica's, ANSI en alle 65 thema's; de opties en ingebouwde transformers hebben daarnaast hun eigen pariteitstests.
Begin met de snelstartgids en voeg daarna transformers, aangepaste grammatica's of ANSI-uitvoer toe wanneer uw pagina's dat nodig hebben.