Treci la conținut

ShikiPHP

Evidențiator de sintaxă pur PHP, portare a Shiki. Stilizați blocurile de cod cu teme VS Code și gramatici TextMate fără Node; rezultatul corespunde celui din Shiki 3.23.0 în scenariile oracle 214.

Terminal
composer require shikiphp/shikiphp

Cea mai recentă versiune v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

În practică

Evidențiați un fragment dintr-un șablon PHP sau un script de compilare și afișați HTML returnat.

Un apel pentru fiecare bloc de cod

Shikiphp::codeToHtml primește codul, un id de limbaj și un id de temă. Returnează un bloc pre complet, cu culorile scrise inline, care se redă fără o foaie de stiluri suplimentară.

Transmiteți o mapare themes în loc de theme, iar blocul va include culorile pentru tema luminoasă și cea întunecată prin variabile CSS.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

Gramatici TextMate autentice

O portare fidelă a vscode-textmate: limbaje încorporate, injecții și depozite imbricate. Aceleași gramatici cu care tokenizează Shiki și VS Code.

Teme VS Code

Specificitatea selectorilor de domeniu și potrivirea domeniilor părinte, portate din vscode-textmate. O singură temă sau variante luminoasă/întunecată prin variabile CSS.

Rezultat identic cu Shiki

Cele 214 scenarii de referință, care acoperă 167 dintre cele 253 de gramatici incluse, ANSI și toate cele 65 de teme, produc același HTML ca Shiki 3.23.0 cu motorul său regex JavaScript, exceptând spațiile albe de la început și sfârșit.

Motor regex pur PHP

Motor RegExp JavaScript inclus de la inline0/phasis, alimentat de o portare oniguruma-to-es. Motorul regex JavaScript al Shiki urmează aceeași cale de la Oniguruma la RegExp.

Transformatoare

Fiecare hook Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), plus transformatoarele încorporate pentru notație, meta și spații albe.

Pachetul complet

Toate limbajele tm-grammars (235, plus 18 gramatici auxiliare) și toate temele tm-themes (65) sunt incluse. Include ieșire pentru terminal ANSI, decorațiuni și colorReplacements.

CLI

Evidențiați un fișier pentru HTML sau listați limbajele și temele incluse, direct din linia de comandă cu bin/shikiphp.

Fără Node

Rulează pe PHP 8.2+ doar cu ext-json și ext-mbstring. Fără mediu de execuție Node, fără legătură nativă Oniguruma și fără lansarea de procese externe.

De ce ShikiPHP

Rulează acolo unde rulează PHP

Evidențierea are loc în procesul PHP, fără a lansa procese Node externe sau a apela un API găzduit. Potrivită pentru un pas de compilare Laravel, WordPress sau al unui site static.

Rezultat care poate fi stocat în cache

Același cod, cu aceleași opțiuni, produce întotdeauna același HTML. Evidențiați la compilare sau stocați în cache HTML în funcție de cod și opțiuni, până la modificarea sursei.

Un bloc pentru tema luminoasă și cea întunecată

O mapare de teme scrie a doua temă ca variabile CSS în același marcaj, iar câteva linii de CSS comută la aceasta. Opțiunea defaultColor alege tema scrisă inline.

Limite pentru intrări nesigure

Motorul regex memorează eșecurile și protejează împotriva ReDoS, astfel încât un tipar problematic încetinește procesarea în loc să o blocheze. Opțiunea tokenizeMaxLineLength emite liniile prea lungi ca un singur token simplu.

Comparativ cu

Alte metode de evidențiere a codului pentru un site PHP și diferențele față de ShikiPHP.

ShikiPHP în comparație cu alte instrumente
Shiki Potrivit pentruImplementarea de referință, în JavaScript. Funcționează în orice mediu de execuție JavaScript modern, fără API-uri Node.js, încarcă gramaticile și temele la cerere și oferă integrări TypeScript Twoslash de primă parte. Diferența față de ShikiPHPShikiPHP portează acel flux de procesare în PHP pentru pagini randate pe un server PHP. Setul său de teste oracle compară rezultatul HTML cu 3.23.0 Shiki, în timp ce ramura principală a Shiki a trecut la v4.
Phiki Potrivit pentruUn evidențiator PHP care folosește și gramatici TextMate și teme VS Code. Include o extensie league/commonmark care funcționează cu Str::markdown din Laravel, ieșire pentru terminal și un executabil în linia de comandă. Diferența față de ShikiPHPPhiki descrie tokenizerul său ca fiind inspirat de vscode-textmate, dar nu o traducere 1-la-1. ShikiPHP portează vscode-textmate și oniguruma-to-es și își testează HTML comparându-l cu rezultatul Shiki în scenariile oracle 214.
highlight.php Potrivit pentruO portare PHP pe server a highlight.js, care acceptă limbaje 185 cu definițiile originale pentru limbaj și stil și poate detecta automat limbajul. Diferența față de ShikiPHPShikiPHP tokenizează cu gramatici TextMate și colorează cu teme VS Code, aceleași fișiere folosite de Shiki, iar fiecare apel specifică limbajul.
Torchlight Potrivit pentruUn serviciu de evidențiere compatibil cu VS Code. Este un HTTP API cu adnotări în comentarii pentru evidențieri, focalizare și diferențe și are clienți oficiali pentru Laravel, CommonMark, Statamic și alte stive. Diferența față de ShikiPHPShikiPHP rulează în procesul PHP, fără un API găzduit. Transformatoarele de notație încorporate citesc comentarii similare pentru liniile evidențiate, focalizate și cu diferențe.

Întrebări și răspunsuri

Răspunsuri scurte din documentația ShikiPHP.

Începeți cu ghidul de inițiere, apoi adăugați transformatoare, gramatici personalizate sau ieșire ANSI când paginile dvs. au nevoie de acestea.