ShikiPHP
Ren PHP-syntaksfremhæver, en port af Shiki. Formatér kodeblokke med VS Code-temaer og TextMate-grammatikker uden Node; outputtet matcher Shiki 3.23.0 på tværs af 214 oracle-scenarier.
composer require shikiphp/shikiphpSeneste udgivelse 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',
]);I praksis
Fremhæv et uddrag fra en PHP-skabelon eller et byggescript, og udskriv den HTML, det returnerer.
Ét kald pr. kodeblok
Shikiphp::codeToHtml tager koden, et sprog-id og et tema-id. Den returnerer en komplet pre-blok med farverne skrevet inline, så den vises uden et ekstra stilark.
Send et themes-kort i stedet for theme, så får den samme blok lyse og mørke farver via CSS-variabler.
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'],
]);Ægte TextMate-grammatikker
En trofast port af vscode-textmate: indlejrede sprog, injektioner og indlejrede repositories. De samme grammatikker, som Shiki og VS Code tokeniserer med.
VS Code-temaer
Specificitet for scopevælgere og matchning af overordnede scopes, porteret fra vscode-textmate. Ét tema eller dobbelt lyst/mørkt via CSS-variabler.
Output identisk med Shiki
214 oracle-scenarier, der dækker 167 af de 253 medfølgende grammatikker, ANSI og alle 65 temaer, matcher HTML fra Shiki 3.23.0 med dens JavaScript-regexmotor, nøjagtigt bortset fra indledende og afsluttende blanktegn.
Regexmotor i ren PHP
En medfølgende JavaScript RegExp-motor fra inline0/phasis, drevet af en port af oniguruma-to-es. Shikis JavaScript-regexmotor følger samme sti fra Oniguruma til RegExp.
Transformere
Alle Shiki-hooks (preprocess, tokens, root, pre, code, line, span, postprocess) samt de indbyggede transformationsværktøjer til notation, meta og mellemrum.
Hele pakken
Alle tm-grammars-sprog (235 plus 18 hjælpegrammatikker) og tm-themes-temaer (65) følger med. ANSI-terminaloutput, dekorationer og colorReplacements er også inkluderet.
CLI
Fremhæv en fil med HTML, eller få en liste over medfølgende sprog og temaer direkte fra kommandolinjen med bin/shikiphp.
Ingen Node
Kører på PHP 8.2+ med kun ext-json og ext-mbstring. Ingen Node-runtime, ingen native Oniguruma-binding og ingen kald til shellen.
Hvorfor ShikiPHP
Kører dér, hvor din PHP kører
Fremhævningen foregår i PHP-processen uden kald til shellen for at starte Node eller kontakt til en hostet API. Det passer til et byggetrin for Laravel, WordPress eller et statisk websted.
Output, der kan caches
Den samme kode med de samme indstillinger giver altid det samme HTML. Fremhæv ved byggetidspunktet, eller cache HTML efter kode og indstillinger, indtil kilden ændres.
Én blok til lyst og mørkt
Et temakort skriver det andet tema som CSS-variabler i den samme markup, og nogle få linjer CSS skifter til det. Indstillingen defaultColor vælger, hvilket tema der skrives inline.
Begrænsninger for ikke-betroet input
Regexmotoren gemmer mislykkede forsøg i cache og beskytter mod ReDoS, så et patologisk mønster gør behandlingen langsommere i stedet for at hænge. Indstillingen tokenizeMaxLineLength udsender for lange linjer som ét almindeligt token.
Sammenlignet med
Andre måder at fremhæve kode på et PHP-websted, og hvordan ShikiPHP adskiller sig.
| Værktøj | God til | Forskel fra ShikiPHP |
|---|---|---|
| Shiki | God tilReferenceimplementeringen i JavaScript. Den virker i enhver moderne JavaScript-runtime uden Node.js-API'er, indlæser grammatikker og temaer efter behov og har TypeScript-integrationer til Twoslash. | Forskel fra ShikiPHPShikiPHP porterer denne pipeline til PHP til sider, der gengives på en PHP-server. Dets oracle-testværktøj sammenligner dets HTML med Shiki 3.23.0, mens Shikis hovedgren er gået videre til v4. |
| Phiki | God tilEn PHP-fremhæver, der også bruger TextMate-grammatikker og VS Code-temaer. Den leveres med en league/commonmark-udvidelse, der virker med Laravels Str::markdown, terminaloutput og et kommandolinjeprogram. | Forskel fra ShikiPHPPhiki beskriver sin tokenizer som inspireret af vscode-textmate, men ikke som en 1-til-1-oversættelse. ShikiPHP porter vscode-textmate og oniguruma-to-es og tester sin HTML mod Shikis output i 214 oracle-scenarier. |
| highlight.php | God tilEn serverbaseret port af highlight.js til PHP, der understøtter 185 sprog med de oprindelige sprog- og stildefinitioner og kan registrere sproget automatisk. | Forskel fra ShikiPHPShikiPHP tokeniserer med TextMate-grammatikker og farvelægger med VS Code-temaer, de samme filer som Shiki bruger, og hvert kald angiver sproget. |
| Torchlight | God tilEn fremhævningstjeneste, der er kompatibel med VS Code. Den er en HTTP API med kommentarannotationer til fremhævning, fokus og forskelle samt førstepartsklienter til Laravel, CommonMark, Statamic og andre teknologistakke. | Forskel fra ShikiPHPShikiPHP kører i din PHP-proces uden en hostet API. De indbyggede notationstransformere læser tilsvarende kommentarer for fremhævede linjer, fokuslinjer og ændringslinjer. |
Spørgsmål og svar
Korte svar fra ShikiPHP-dokumentationen.
Send et temakort med lyse og mørke værdier. De lyse farver skrives inline, og de mørke som --shiki-dark-variabler, som aktiveres af en kort CSS-regel med scope html.dark .shiki. Sæt defaultColor til false for kun at udsende variabler.
Alle grammatikker fra tm-grammars 1.31.15, 235 sprog plus 18 hjælpegrammatikker samt alle 65 temaer fra tm-themes. Kør vendor/bin/shikiphp langs eller vendor/bin/shikiphp themes for at få vist id'erne, eller kald bundledLanguages() og bundledThemes() på fremhæveren.
Ja. Afkod .tmLanguage.json-filen, og registrer den med loadGrammar ved at angive et id og eventuelle aliasser, eller registrer et VS Code-tema med loadTheme. Registrer først enhver grammatik, det indeholder eller indlejrer.
Regexmotoren gemmer mislykkede forsøg i cache og beskytter mod ReDoS, så et patologisk mønster gør behandlingen langsommere i stedet for at hænge. Indstil tokenizeMaxLineLength, så enhver linje med den længde eller mere udsendes som ét almindeligt token.
Dokumentationen fraråder det. Fremhæv ved byggetidspunktet for statiske sider, eller cache den gengivne HTML efter kode og indstillinger. Genbrug én fremhæver i hver proces; det gør Shikiphp-facaden for dig.
Oracle-testværktøjet sammenligner ShikiPHPs HTML med Shiki 3.23.0 ved hjælp af Shikis JavaScript-regexmotor. Dets 214 scenarier dækker 167 af de 253 medfølgende grammatikker, ANSI og alle 65 temaer, og indstillingerne samt de indbyggede transformere har deres egne paritetstests.
Begynd med introduktionsvejledningen, og tilføj derefter transformere, brugerdefinerede grammatikker eller ANSI-output, når dine sider har brug for dem.