Přejít k obsahu

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.

Terminál
composer require shikiphp/shikiphp

Nejnovější vydání v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

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.

PHP
use Shikiphp\Shikiphp;

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

ShikiPHP ve srovnání s ostatními nástroji
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.

Otázky a odpovědi

Stručné odpovědi z dokumentace ShikiPHP.

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.