ShikiPHP
Čistý zvýrazňovač syntaxe PHP, port Shiki. Bloky kódu môžete štýlovať pomocou tém VS Code a gramatík TextMate bez Node; výstup sa zhoduje s Shiki 3.23.0 v oracle scenároch 214.
composer require shikiphp/shikiphpNajnovšie vydanie 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',
]);V praxi
Zvýraznite úryvok zo šablóny PHP alebo zostavovacieho skriptu a vypíšte HTML, ktorý vráti.
Jedno volanie na blok kódu
Shikiphp::codeToHtml prijíma kód, identifikátor jazyka a identifikátor témy. Vráti kompletný blok pre s farbami zapísanými priamo v ňom, takže sa vykreslí aj bez ďalšieho štýlopisu.
Namiesto theme odovzdajte mapu themes a v tom istom bloku sa prenesú svetlé aj tmavé farby cez premenné 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'],
]);Skutočné gramatiky TextMate
Verný port vscode-textmate: vložené jazyky, injekcie a vnorené repozitáre. Tie isté gramatiky, s ktorými tokenizujú Shiki a VS Code.
Témy VS Code
Špecifickosť selektorov rozsahov a párovanie nadradených rozsahov, prenesené z vscode-textmate. Jedna téma alebo dvojica svetlej a tmavej témy cez premenné CSS.
Výstup zhodný s Shiki
Oracle scenáre 214 pokrývajú 167 z 253 pribalených gramatík, ANSI a všetkých 65 tém; výsledok sa zhoduje s HTML Shiki 3.23.0 a jeho regexovým jadrom JavaScript, s výnimkou úvodných a koncových medzier.
Regexové jadro čisto v PHP
Pribalené regexové jadro RegExp JavaScript z inline0/phasis, napájané portom oniguruma-to-es. Regexové jadro Shiki JavaScript vedie rovnakou cestou z Oniguruma do RegExp.
Transformátory
Každý háčik Shiki (preprocess, tokens, root, pre, code, line, span, postprocess) a vstavané transformátory zápisu, metadát a medzier.
Kompletný balík
Súčasťou balíka je každý jazyk tm-grammars (235 a 18 pomocných gramatík) a každá téma tm-themes (65). Zahŕňa výstup terminálu ANSI, dekorácie a náhrady farieb.
CLI
Zvýraznite súbor do HTML alebo si priamo z príkazového riadka vypíšte pribalené jazyky a témy pomocou bin/shikiphp.
Bez Node
Funguje na PHP 8.2+ a vyžaduje iba ext-json a ext-mbstring. Bez prostredia Node, natívnej väzby Oniguruma či spúšťania externých príkazov.
Prečo ShikiPHP
Beží tam, kde beží vaše PHP
Zvýrazňovanie prebieha v rámci procesu PHP bez spúšťania Node ani volania hostovaného API. Hodí sa to ako krok zostavenia pre Laravel, WordPress alebo statický web.
Výstup vhodný na ukladanie do vyrovnávacej pamäte
Rovnaký kód s rovnakými možnosťami vždy vytvorí rovnaký HTML. Zvýraznite kód počas zostavovania alebo ukladajte HTML do vyrovnávacej pamäte podľa kódu a možností, kým sa zdroj nezmení.
Jeden blok pre svetlý aj tmavý režim
Mapa tém zapíše druhú tému ako premenné CSS do toho istého značkovania a niekoľko riadkov CSS ju aktivuje. Možnosť defaultColor určuje, ktorá téma sa zapíše priamo do kódu.
Obmedzenia pre nedôveryhodný vstup
Regexové jadro ukladá neúspešné výsledky do pamäte a chráni pred ReDoS, takže problematický vzor spomalí spracovanie namiesto jeho zablokovania. Možnosť tokenizeMaxLineLength odovzdá príliš dlhé riadky ako jeden obyčajný token.
V porovnaní s
Ďalšie spôsoby zvýrazňovania kódu na webe PHP a rozdiely oproti ShikiPHP.
| Nástroj | V čom vyniká | Rozdiel oproti ShikiPHP |
|---|---|---|
| Shiki | V čom vynikáReferenčná implementácia v JavaScript. Funguje v každom modernom prostredí JavaScript bez rozhraní Node.js, načítava gramatiky a témy podľa potreby a má integrácie Twoslash TypeScript. | Rozdiel oproti ShikiPHPShikiPHP prenáša tento reťazec do PHP pre stránky vykresľované na serveri PHP. Jeho oracle testovací nástroj porovnáva HTML s Shiki 3.23.0, zatiaľ čo hlavná vetva Shiki už prešla na v4. |
| Phiki | V čom vynikáZvýrazňovač PHP, ktorý používa aj gramatiky TextMate a témy VS Code. Obsahuje rozšírenie league/commonmark, ktoré funguje s metódou Str::markdown od Laravel, výstupom pre terminál a binárnym súborom príkazového riadka. | Rozdiel oproti ShikiPHPPhiki opisuje svoj tokenizátor ako inšpirovaný projektom vscode-textmate, no nejde o preklad 1 : 1. ShikiPHP prenáša vscode-textmate a oniguruma-to-es a v oracle scenároch 214 testuje svoj HTML oproti výstupu Shiki. |
| highlight.php | V čom vynikáServerový port PHP projektu highlight.js, ktorý podporuje jazyky 185 s pôvodnými definíciami jazykov a štýlov a dokáže jazyk zistiť automaticky. | Rozdiel oproti ShikiPHPShikiPHP tokenizuje pomocou gramatík TextMate a farbí pomocou tém VS Code — tých istých súborov, aké používa Shiki; pri každom volaní treba uviesť jazyk. |
| Torchlight | V čom vynikáSlužba zvýrazňovania kompatibilná s VS Code. Ide o HTTP API s komentármi na označenie zvýraznenia, zamerania a rozdielov; má oficiálnych klientov pre Laravel, CommonMark, Statamic a ďalšie technológie. | Rozdiel oproti ShikiPHPShikiPHP beží vo vašom procese PHP bez hostovaného API. Jeho vstavané transformátory zápisu čítajú podobné komentáre na označenie zvýraznených, zameraných a zmenených riadkov. |
Zdroje, overené
Otázky a odpovede
Stručné odpovede z dokumentácie ShikiPHP.
Odovzdajte mapu tém so svetlou a tmavou témou. Svetlé farby sa zapíšu priamo a tmavé ako premenné --shiki-dark, ktoré aktivuje krátke pravidlo CSS s rozsahom pôsobnosti html.dark .shiki. Ak chcete vypísať iba premenné, nastavte defaultColor na false.
Každá gramatika z tm-grammars 1.31.15, 235 jazykov a 18 pomocných gramatík a všetkých 65 tém z tm-themes. Spustením vendor/bin/shikiphp langs alebo vendor/bin/shikiphp themes vypíšete identifikátory; prípadne zavolajte bundledLanguages() a bundledThemes() na zvýrazňovači.
Áno. Dekódujte súbor .tmLanguage.json a zaregistrujte ho pomocou loadGrammar; zadajte identifikátor a prípadné aliasy. Tému VS Code zaregistrujte pomocou loadTheme. Najprv zaregistrujte všetky gramatiky, ktoré daná gramatika obsahuje alebo vkladá.
Regexové jadro si pamätá neúspešné výsledky a chráni pred ReDoS, takže problematický vzor spomalí spracovanie namiesto jeho zablokovania. Nastavte tokenizeMaxLineLength, aby sa každý riadok s touto dĺžkou alebo dlhší odovzdal ako jeden obyčajný token.
Dokumentácia to neodporúča. Pri statických stránkach zvýrazňujte kód počas zostavovania alebo ukladajte vykreslené HTML do vyrovnávacej pamäte podľa kódu a možností. V rámci procesu opätovne používajte jeden zvýrazňovač; fasáda Shikiphp to zabezpečuje za vás.
Oracle testovací nástroj porovnáva ShikiPHP HTML s Shiki 3.23.0 pomocou regexového jadra JavaScript od Shiki. Jeho scenáre 214 pokrývajú 167 z 253 pribalených gramatík, ANSI a všetkých 65 tém; možnosti a vstavané transformátory majú vlastné testy zhody.
Začnite príručkou pre začiatočníkov a potom podľa potreby svojich stránok pridajte transformátory, vlastné gramatiky alebo výstup ANSI.