ShikiPHP
Čistě PHP zvýrazňovač syntaxe, port nástroje Shiki. Stylujte bloky kódu pomocí motivů VS Code a gramatik TextMate bez Node; výstup odpovídá Shiki 3.23.0 napříč 214 ověřovacími scénáři.
composer require shikiphp/shikiphpNejnovější vydání 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ýrazněte ukázku z šablony nebo sestavovacího skriptu PHP a vypište HTML, které vrací.
Jedno volání na blok kódu
Shikiphp::codeToHtml přijímá kód, ID jazyka a ID motivu. Vrací kompletní blok pre s barvami zapsanými přímo ve značkách, takže se vykreslí bez další šablony stylů.
Místo theme předejte mapu themes a stejný blok ponese světlé i tmavé barvy prostřednictvím proměnných 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'],
]);Skutečné gramatiky TextMate
Věrný port nástroje vscode-textmate: vložené jazyky, injekce a vnořené repozitáře. Stejné gramatiky, s nimiž pracují Shiki a VS Code.
Motivy VS Code
Specifičnost selektorů rozsahu a párování nadřazených rozsahů převzaté z vscode-textmate. Jeden motiv nebo dvojice světlého a tmavého motivu přes proměnné CSS.
Výstup totožný s Shiki
Scénáře oracle 214 pokrývají 167 přibalených gramatik 253, ANSI a všech 65 motivů. Odpovídají HTML nástroje Shiki 3.23.0 s regexovým enginem JavaScript, přesně kromě úvodních a závěrečných mezer.
Regexový engine pouze v PHP
Přibalený engine RegExp JavaScript z inline0/phasis, napojený na port oniguruma-to-es. Regexový engine JavaScript nástroje Shiki používá stejnou cestu Oniguruma do RegExp.
Transformátory
Každý hook Shiki (preprocess, tokens, root, pre, code, line, span, postprocess) a také vestavěné transformátory zápisu, metadat a bílých znaků.
Kompletní balíček
Součástí jsou všechny jazyky tm-grammars (235 a 18 pomocných gramatik) i motivy tm-themes (65). Balíček obsahuje také výstup pro terminál ANSI, dekorace a colorReplacements.
CLI
Zvýrazněte soubor do HTML nebo vypište přibalené jazyky a motivy přímo z příkazového řádku pomocí bin/shikiphp.
Bez Node
Funguje na PHP 8.2+ pouze s ext-json a ext-mbstring. Bez běhového prostředí Node, nativní vazby Oniguruma i spouštění externích příkazů.
Proč ShikiPHP
Běží tam, kde běží vaše PHP
Zvýrazňování probíhá uvnitř procesu PHP, bez spouštění Node ani volání hostované služby API. Hodí se pro Laravel, WordPress nebo sestavení statického webu.
Výstup vhodný pro ukládání do mezipaměti
Stejný kód se stejnými možnostmi vždy vytvoří stejný HTML. Zvýrazňujte při sestavení nebo ukládejte HTML do mezipaměti podle kódu a možností, dokud se zdroj nezmění.
Jeden blok pro světlý i tmavý motiv
Mapa motivů zapíše druhý motiv jako proměnné CSS do stejných značek a několik řádků CSS na něj přepne. Volba defaultColor určuje, který motiv se zapíše přímo do značek.
Omezení pro nedůvěryhodný vstup
Regexový engine ukládá selhání do mezipaměti a chrání před ReDoS, takže patologický vzor zpomalí zpracování místo jeho zablokování. Volba tokenizeMaxLineLength vydá příliš dlouhé řádky jako jediný prostý token.
Srovnání
Další způsoby zvýrazňování kódu pro web PHP a rozdíly oproti ShikiPHP.
| Nástroj | Vhodné pro | Rozdíl oproti ShikiPHP |
|---|---|---|
| Shiki | Vhodné proReferenční implementace v JavaScript. Funguje v jakémkoli moderním běhovém prostředí JavaScript bez API Node.js, načítá gramatiky a motivy podle potřeby a nabízí integrace Twoslash od TypeScript. | Rozdíl oproti ShikiPHPShikiPHP převádí tento postup do PHP pro stránky vykreslované na serveru PHP. Jeho ověřovací sada porovnává HTML s Shiki 3.23.0, zatímco hlavní větev Shiki přešla na v4. |
| Phiki | Vhodné proZvýrazňovač PHP, který také používá gramatiky TextMate a motivy VS Code. Obsahuje rozšíření league/commonmark, které funguje s metodou Str::markdown nástroje Laravel, výstupem pro terminál a binárním souborem příkazového řádku. | Rozdíl oproti ShikiPHPPhiki popisuje svůj tokenizer jako inspirovaný nástrojem vscode-textmate, nikoli jako jeho přesný překlad. ShikiPHP převádí vscode-textmate a oniguruma-to-es a v ověřovacích scénářích 214 porovnává svůj HTML s výstupem nástroje Shiki. |
| highlight.php | Vhodné proPort PHP nástroje highlight.js na straně serveru, který podporuje jazyky 185 s původními definicemi jazyků a stylů a dokáže jazyk rozpoznat automaticky. | Rozdíl oproti ShikiPHPShikiPHP tokenizuje pomocí gramatik TextMate a obarvuje pomocí motivů VS Code, tedy stejných souborů, jaké používá Shiki; při každém volání je nutné uvést jazyk. |
| Torchlight | Vhodné proSlužba zvýrazňování kompatibilní s VS Code. Jde o HTTP API s komentářovými anotacemi pro zvýraznění, zaměření a rozdíly. Nabízí oficiální klienty pro Laravel, CommonMark, Statamic a další platformy. | Rozdíl oproti ShikiPHPShikiPHP běží uvnitř procesu PHP bez hostované služby API. Jeho vestavěné transformátory zápisu čtou podobné komentáře pro zvýrazněné, zaměřené a rozdílové řádky. |
Zdroje, zaškrtnuto
Otázky a odpovědi
Stručné odpovědi z dokumentace ShikiPHP.
Předejte mapu motivů se světlou a tmavou variantou. Světlé barvy se zapíší přímo do značek a tmavé jako proměnné --shiki-dark, které aktivuje krátké pravidlo CSS omezené na html.dark .shiki. Nastavte defaultColor na false, chcete-li vydávat pouze proměnné.
Všechny gramatiky z tm-grammars 1.31.15, jazyky 235 a 18 pomocných gramatik, a všech 65 motivů z tm-themes. ID vypíšete příkazy vendor/bin/shikiphp langs nebo vendor/bin/shikiphp themes, případně na zvýrazňovači zavolejte bundledLanguages() a bundledThemes().
Ano. Dekódujte soubor .tmLanguage.json a zaregistrujte jej pomocí loadGrammar; zadejte ID a případné aliasy. Motiv VS Code zaregistrujte pomocí loadTheme. Nejprve zaregistrujte všechny gramatiky, které obsahuje nebo vkládá.
Regexový engine si pamatuje selhání a chrání před ReDoS, takže patologický vzor zpomalí zpracování místo jeho zablokování. Nastavením tokenizeMaxLineLength se každý řádek této délky nebo delší vydá jako jediný prostý token.
Dokumentace to nedoporučuje. U statických stránek zvýrazňujte při sestavení nebo ukládejte vykreslené HTML do mezipaměti podle kódu a možností. V rámci procesu znovu používejte jeden zvýrazňovač; fasáda Shikiphp to dělá za vás.
Ověřovací sada porovnává HTML nástroje ShikiPHP s Shiki 3.23.0 pomocí regexového enginu JavaScript nástroje Shiki. Její scénáře 214 pokrývají 167 přibalených gramatik 253, ANSI a všech 65 motivů; vlastní testy shody mají také volby a vestavěné transformátory.
Začněte příručkou pro první kroky a podle potřeby svých stránek pak přidejte transformátory, vlastní gramatiky nebo výstup ANSI.