ShikiPHP
Syntaxfärgläggare i ren PHP, en portning av Shiki. Formatera kodblock med VS Code-teman och TextMate-grammatiker utan Node; utdata matchar Shiki 3.23.0 i 214 orakelscenarier.
composer require shikiphp/shikiphpSenaste versionen 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 praktiken
Markera ett kodavsnitt från en PHP-mall eller ett byggskript och skriv ut det HTML som returneras.
Ett anrop per kodblock
Shikiphp::codeToHtml tar koden, ett språk-id och ett tema-id. Det returnerar ett komplett pre-block med färgerna skrivna inline, så att det visas utan en extra formatmall.
Skicka en themes-karta i stället för theme så får samma block ljusa och mörka färger 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'],
]);Riktiga TextMate-grammatiker
En trogen portning av vscode-textmate: inbäddade språk, injektioner och nästlade repositories. Samma grammatiker som Shiki och VS Code tokeniserar med.
VS Code-teman
Specificitet för scope-selektorer och matchning av överordnade scope, porterat från vscode-textmate. Ett tema eller dubbla ljusa/mörka teman via CSS-variabler.
Utdata identiska med Shiki
214 oracle-scenarier som täcker 167 av de 253 medföljande grammatikerna, ANSI och alla 65 teman, matchar HTML från Shiki 3.23.0 med dess JavaScript-regexmotor, exakt bortsett från inledande och avslutande blanksteg.
Regexmotor helt i PHP
En medföljande JavaScript RegExp-motor från inline0/phasis, matad av en portning av oniguruma-to-es. Shikis JavaScript-regexmotor använder samma sökväg från Oniguruma till RegExp.
Transformers
Varje Shiki-hook (preprocess, tokens, root, pre, code, line, span, postprocess) samt de inbyggda transformatorerna för notation, meta och blanksteg.
Hela paketet
Alla tm-grammars-språk (235 plus 18 hjälpargrammatiker) och tm-themes-teman (65) ingår. ANSI-terminalutdata, dekorationer och colorReplacements ingår också.
CLI
Markera en fil för HTML eller lista medföljande språk och teman direkt från kommandoraden med bin/shikiphp.
Ingen Node
Körs med PHP 8.2+ och endast ext-json och ext-mbstring. Ingen Node-körmiljö, ingen inbyggd Oniguruma-bindning och inga externa shell-kommandon.
Varför ShikiPHP
Körs där din PHP körs
Markeringen sker i PHP-processen, utan att anropa Node via shell eller kontakta ett värdbaserat API. Det passar som byggsteg för Laravel, WordPress eller en statisk webbplats.
Utdata som kan cachelagras
Samma kod med samma alternativ ger alltid samma HTML. Markera vid byggtillfället eller cachelagra HTML med en nyckel baserad på kod och alternativ tills källan ändras.
Ett block för ljust och mörkt
En temakarta skriver det andra temat som variablerna CSS i samma markup, och några rader CSS växlar till det. Alternativet defaultColor väljer vilket tema som skrivs inline.
Begränsningar för obetrodd indata
Regexmotorn memorerar misslyckanden och skyddar mot ReDoS, så att ett extremt mönster blir långsammare i stället för att låsa sig. Alternativet tokenizeMaxLineLength ger för långa rader en enda vanlig token.
Jämfört med
Andra sätt att markera kod för en PHP-webbplats och vad som skiljer ShikiPHP.
| Verktyg | Bra på | Skillnaden jämfört med ShikiPHP |
|---|---|---|
| Shiki | Bra påReferensimplementationen i JavaScript. Den fungerar i alla moderna JavaScript-körmiljöer utan Node.js-API:er, läser in grammatiker och teman vid behov och har TypeScript Twoslash-integrationer. | Skillnaden jämfört med ShikiPHPShikiPHP porterar den kedjan till PHP för sidor som renderas på en PHP-server. Dess oracle-testverktyg jämför dess HTML med Shiki 3.23.0, medan Shikis huvudgren har gått vidare till v4. |
| Phiki | Bra påEn PHP-kodmarkerare som också använder TextMate-grammatiker och VS Code-teman. Den innehåller ett league/commonmark-tillägg som fungerar med Laravels Str::markdown, terminalutdata och en kommandoradsbinär. | Skillnaden jämfört med ShikiPHPPhiki beskriver sin tokenizer som inspirerad av vscode-textmate, men inte som en 1-1-översättning. ShikiPHP porterar vscode-textmate och oniguruma-to-es och testar sin HTML mot utdata från Shiki i 214 oracle-scenarier. |
| highlight.php | Bra påEn serverbaserad PHP-portning av highlight.js som stöder 185 språk med de ursprungliga språk- och stildefinitionerna och kan identifiera språket automatiskt. | Skillnaden jämfört med ShikiPHPShikiPHP tokeniserar med TextMate-grammatiker och färglägger med VS Code-teman, samma filer som Shiki använder, och varje anrop anger sitt språk. |
| Torchlight | Bra påEn VS Code-kompatibel tjänst för syntaxmarkering. Den är ett HTTP API med kommentarannotationer för markeringar, fokus och diffar, och har förstapartsklienter för Laravel, CommonMark, Statamic och andra teknikstackar. | Skillnaden jämfört med ShikiPHPShikiPHP körs i din PHP-process utan något värdbaserat API. De inbyggda notationstransformatorerna läser jämförbara kommentarer för markerade rader, fokuserade rader och diffar. |
Frågor och svar
Korta svar från dokumentationen för ShikiPHP.
Skicka en karta med ljusa och mörka teman. De ljusa färgerna skrivs inline och de mörka som --shiki-dark-variabler, som en kort CSS-regel avgränsad till html.dark .shiki aktiverar. Ange defaultColor till false för att bara skriva ut variabler.
Alla grammatiker från tm-grammars 1.31.15, 235 språk plus 18 hjälpargrammatiker, och alla 65 teman från tm-themes. Kör vendor/bin/shikiphp langs eller vendor/bin/shikiphp themes för att lista id:n, eller anropa bundledLanguages() och bundledThemes() på kodmarkeraren.
Ja. Avkoda filen .tmLanguage.json och registrera den med loadGrammar, med ett id och eventuella alias, eller registrera ett VS Code-tema med loadTheme. Registrera först alla grammatiker som den innehåller eller bäddar in.
Regexmotorn har minneslagring av misslyckanden och skydd mot ReDoS, så att ett extremt mönster blir långsammare i stället för att låsa sig. Ställ in tokenizeMaxLineLength för att ge en enda vanlig token för varje rad som är minst så lång.
Dokumentationen avråder från det. Markera vid byggtillfället för statiska sidor eller cachelagra renderad HTML med en nyckel baserad på kod och alternativ. Återanvänd en kodmarkerare inom processen; Shikiphp-fasaden gör det åt dig.
Oracle-testverktyget jämför ShikiPHPs HTML med Shiki 3.23.0 med hjälp av Shikis JavaScript-regexmotor. Dess 214 scenarier täcker 167 av de 253 medföljande grammatikerna, ANSI och alla 65 teman, och alternativen samt de inbyggda transformatorerna har egna likvärdighetstester.
Börja med snabbstartsguiden och lägg sedan till transformatorer, anpassade grammatiker eller ANSI-utdata när dina sidor behöver dem.