Preskočiť na obsah

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.

Terminál
composer require shikiphp/shikiphp

Najnovšie vydanie v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

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.

PHP
use Shikiphp\Shikiphp;

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

ShikiPHP v porovnaní s inými nástrojmi
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.

Otázky a odpovede

Stručné odpovede z dokumentácie ShikiPHP.

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.