ShikiPHP
Tīrs PHP sintakses izcēlājs, Shiki ports. Veidojiet koda bloku stilu ar VS Code motīviem un TextMate gramatikām bez Node; izvade sakrīt ar Shiki 3.23.0 visos 214 etalontesta scenārijos.
composer require shikiphp/shikiphpJaunākais laidiens 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',
]);Praksē
Iezīmējiet fragmentu no PHP veidnes vai būvēšanas skripta un izdrukājiet tā atgriezto HTML.
Viens izsaukums katram koda blokam
Shikiphp::codeToHtml saņem kodu, valodas ID un tēmas ID. Tas atgriež pilnu pre bloku ar iekļautām krāsām, tāpēc tas tiek attēlots bez papildu stilu lapas.
Padodiet themes karti theme vietā, un tas pats bloks ar CSS mainīgajiem ietvers gaišās un tumšās krāsas.
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'],
]);Īstas TextMate gramatikas
Uzticams vscode-textmate ports: iegultās valodas, injekcijas un ligzdotas repozitorijas. Tās pašas gramatikas, ar ko tokenizē Shiki un VS Code.
VS Code motīvi
Tvēruma atlasītāja specifiskums un vecāktvēruma atbilstība, pārnesti no vscode-textmate. Viens motīvs vai gaišais/tumšais pāris, izmantojot CSS mainīgos.
Shiki-identiska izvade
214 etalona scenāriji, kas aptver 167 no 253 iekļautajām gramatikām, ANSI un visas 65 tēmas, sakrīt ar Shiki 3.23.0 HTML izvadi ar JavaScript regulāro izteiksmju dzinēju, izņemot sākuma un beigu baltstarpas (arī tabulāciju un rindu pārnesumus).
Tīrs PHP regulāro izteiksmju dzinējs
Komplektā iekļauts JavaScript RegExp dzinējs no inline0/phasis, ko darbina oniguruma-to-es ports. Shiki JavaScript regulāro izteiksmju dzinējs izmanto to pašu Oniguruma ceļu uz RegExp.
Pārveidotāji
Visi Shiki āķi (preprocess, tokens, root, pre, code, line, span, postprocess), kā arī iebūvētie notācijas, meta un baltstarpju pārveidotāji.
Pilns komplekts
Komplektā iekļauta katra tm-grammars valoda (235 un 18 palīggramatikas) un tm-themes tēma (65). Iekļauta ANSI termināļa izvade, dekorācijas un colorReplacements.
CLI
Izcelt faila sintaksi HTML formātā vai uzskaitīt iekļautās valodas un tēmas var tieši komandrindā ar bin/shikiphp.
Bez Node
Darbojas ar PHP 8.2+ tikai ar ext-json un ext-mbstring. Nav Node izpildvides, vietējās Oniguruma saistvielas vai ārēju komandu izsaukšanas.
Kāpēc ShikiPHP
Darbojas tur, kur darbojas jūsu PHP
Izcēlšana notiek PHP procesā, neizsaucot Node no čaulas un neizsaucot mitinātu API. Tas ir piemērots Laravel, WordPress vai statiskas vietnes būvēšanas posmam.
Izvade, ko var kešot
Tas pats kods ar tām pašām opcijām vienmēr rada to pašu HTML. Veiciet izcelšanu būvēšanas laikā vai kešojiet HTML pēc koda un opcijām, līdz mainās avots.
Viens bloks gaišajam un tumšajam režīmam
Tēmu karte ieraksta otrās tēmas krāsas kā CSS mainīgos tajā pašā marķējumā, un dažas CSS rindas pārslēdz to. Opcija defaultColor izvēlas, kuras tēmas krāsas iekļaut.
Ierobežojumi neuzticamai ievadei
Regulāro izteiksmju dzinējs iegaumē neveiksmīgus mēģinājumus un aizsargā pret ReDoS, tāpēc patoloģisks raksts palēninās, nevis iestrēgst. Opcija tokenizeMaxLineLength izvada pārāk garas rindas kā vienu vienkāršu tokenu.
Salīdzinājums ar
Citi veidi, kā izcelt kodu PHP vietnei, un ar ko atšķiras ShikiPHP.
| Rīks | Piemērots | Atšķirība no ShikiPHP |
|---|---|---|
| Shiki | PiemērotsEtalonimplementācija JavaScript vidē. Tā darbojas jebkurā mūsdienīgā JavaScript izpildvidē bez Node.js API, ielādē gramatikas un tēmas pēc pieprasījuma un nodrošina TypeScript Twoslash integrācijas. | Atšķirība no ShikiPHPShikiPHP pārnes šo apstrādes plūsmu uz PHP lapām, ko renderē PHP serverī. Etalonuzdevumu ietvars salīdzina tā HTML ar Shiki 3.23.0, kamēr Shiki galvenā zara versija ir pārgājusi uz v4. |
| Phiki | PiemērotsPHP sintakses izcēlējs, kas arī izmanto TextMate gramatikas un VS Code tēmas. Komplektā iekļauts league/commonmark paplašinājums, kas darbojas ar Laravel Str::markdown, termināļa izvadi un komandrindas bināro failu. | Atšķirība no ShikiPHPPhiki raksturo savu tokenizētāju kā iedvesmotu no vscode-textmate, bet ne kā tā precīzu tulkojumu. ShikiPHP pārnes vscode-textmate un oniguruma-to-es un HTML izvadi salīdzina ar Shiki izvadi 214 orākula scenārijos. |
| highlight.php | PiemērotsServera puses PHP ports highlight.js, kas atbalsta 185 valodas ar oriģinālajām valodu un stilu definīcijām un var automātiski noteikt valodu. | Atšķirība no ShikiPHPShikiPHP tokenizē ar TextMate gramatikām un iekrāso ar VS Code tēmām — tiem pašiem failiem, ko izmanto Shiki, un katrā izsaukumā jānorāda valoda. |
| Torchlight | PiemērotsAr VS Code saderīgs izcelšanas pakalpojums. Tas ir HTTP API ar komentāru anotācijām izcēlumiem, fokusam un atšķirībām, un tam ir pirmās puses klienti priekš Laravel, CommonMark, Statamic un citām tehnoloģiju kopām. | Atšķirība no ShikiPHPShikiPHP darbojas jūsu PHP procesā bez mitināta API. Tā iebūvētie notācijas pārveidotāji nolasa līdzīgus komentārus izceltām, fokusētām un atšķirību rindām. |
Avoti, atzīmēts
Jautājumi un atbildes
Īsas atbildes no ShikiPHP dokumentācijas.
Padodiet tēmu karti ar gaišo un tumšo variantu. Gaišās krāsas tiek iekļautas tieši, bet tumšās — kā --shiki-dark mainīgie, ko aktivizē īss CSS noteikums, kas attiecas uz html.dark .shiki. Iestatiet defaultColor uz false, lai izvadītu tikai mainīgos.
Visas gramatikas no tm-grammars 1.31.15 — 235 valodas un 18 palīggramatikas — un visas 65 tēmas no tm-themes. Izpildiet vendor/bin/shikiphp langs vai vendor/bin/shikiphp themes, lai uzskaitītu ID, vai izsauciet bundledLanguages() un bundledThemes() izcēlājā.
Jā. Atkodējiet .tmLanguage.json failu un reģistrējiet to ar loadGrammar, norādot ID un neobligātos aizstājvārdus, vai reģistrējiet VS Code tēmu ar loadTheme. Vispirms reģistrējiet visas tajā iekļautās vai iegultās gramatikas.
Regulāro izteiksmju dzinējs iegaumē neveiksmīgus mēģinājumus un aizsargā pret ReDoS, tāpēc patoloģisks raksts palēninās, nevis iestrēgst. Iestatiet tokenizeMaxLineLength, lai jebkura rinda, kas sasniedz vai pārsniedz šo garumu, tiktu izvadīta kā viens vienkāršs tokens.
Dokumentācijā tas nav ieteikts. Veiciet izcelšanu statisku lapu būvēšanas laikā vai kešojiet renderēto HTML pēc koda un opcijām. Viena procesa ietvaros izmantojiet to pašu izcēlēju; Shikiphp fasāde to izdara jūsu vietā.
Etalonuzdevumu ietvars salīdzina ShikiPHP HTML ar Shiki 3.23.0, izmantojot Shiki JavaScript regulāro izteiksmju dzinēju. Tā 214 etalonuzdevumi aptver 167 no 253 komplektā iekļautajām gramatikām, ANSI un visām 65 tēmām; opcijām un iebūvētajiem pārveidotājiem ir atsevišķi saderības testi.
Sāciet ar darba sākšanas pamācību, pēc tam pievienojiet pārveidotājus, pielāgotas gramatikas vai ANSI izvadi, kad tas vajadzīgs jūsu lapām.