Hoppa till innehåll

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.

Terminal
composer require shikiphp/shikiphp

Senaste versionen v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

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.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => '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.

ShikiPHP jämfört med andra verktyg
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.

Börja med snabbstartsguiden och lägg sedan till transformatorer, anpassade grammatiker eller ANSI-utdata när dina sidor behöver dem.