ShikiPHP
Grynasis PHP sintaksės paryškintuvas, Shiki perkėlimas. Formatuokite kodo blokus naudodami VS Code temas ir TextMate gramatikas be Node; išvestis sutampa su Shiki 3.23.0 per 214 etaloninius scenarijus.
composer require shikiphp/shikiphpNaujausia versija 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',
]);Praktinis pritaikymas
Paryškinkite ištrauką iš PHP šablono arba kūrimo scenarijaus ir išspausdinkite jo grąžinamą HTML.
Vienas iškvietimas kiekvienam kodo blokui
Shikiphp::codeToHtml gauna kodą, kalbos ID ir temos ID. Jis grąžina visą pre bloką su įterptosiomis spalvomis, todėl jis atvaizduojamas be papildomos stiliaus lentelės.
Vietoj theme perduokite themes atvaizdį, ir tas pats blokas turės šviesios bei tamsios temos spalvas per CSS kintamuosius.
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'],
]);Tikros TextMate gramatikos
Tikslus vscode-textmate perkėlimas: įterptosios kalbos, gramatikų injekcijos ir įdėtosios saugyklos. Tos pačios gramatikos, kurias naudoja Shiki ir VS Code.
VS Code temos
Srities parinkiklio specifiškumas ir pirminės srities atitikimas, perkelti iš vscode-textmate. Viena tema arba dviguba šviesi ir tamsi tema per CSS kintamuosius.
Išvestis identiška Shiki
214 etaloninių scenarijų, apimančių 167 iš 253 įtrauktų gramatikų, ANSI ir visas 65 temas, rezultatai sutampa su HTML, kurį pateikia Shiki 3.23.0 su JavaScript regex varikliu; išimtys – tik pradžios ir pabaigos tuščiojo tarpo simboliai (tarpai, tabuliacijos ir eilučių lūžiai).
Grynasis PHP regex variklis
Įtrauktas JavaScript RegExp variklis iš inline0/phasis, maitinamas oniguruma-to-es perkėlimo. Shiki JavaScript regex variklis naudoja tą patį Oniguruma kelią į RegExp.
Transformatoriai
Visi Shiki kabliukai (preprocess, tokens, root, pre, code, line, span, postprocess) ir integruoti notacijos, metaduomenų bei tarpų transformatoriai.
Visas paketas
Įtrauktos visos tm-grammars kalbos (235 ir 18 pagalbinių gramatikų) bei tm-themes temos (65). Taip pat įtraukta ANSI terminalo išvestis, dekoracijos ir colorReplacements.
CLI
Paryškinkite failą naudodami HTML arba iš komandinės eilutės išvardykite įtrauktas kalbas ir temas su bin/shikiphp.
Be Node
Veikia su PHP 8.2+ ir tik ext-json bei ext-mbstring. Nereikia Node vykdymo aplinkos, savųjų Oniguruma susiejimų ar išorinių komandų.
Kodėl ShikiPHP
Veikia ten, kur veikia jūsų PHP
Paryškinimas atliekamas PHP procese, nekviečiant Node iš išorinės komandos ir nenaudojant prieglobos API. Tai tinka Laravel, WordPress arba statinės svetainės kūrimo etapui.
Išvestis, kurią galima spartinti talpykla
Tas pats kodas su tomis pačiomis parinktimis visada sukuria tą pačią HTML išvestį. Paryškinkite kūrimo metu arba talpykloje laikykite HTML pagal kodą ir parinktis, kol pasikeis šaltinis.
Vienas blokas šviesiai ir tamsiai temai
Temų atvaizdyje antroji tema įrašo CSS kintamuosius į tą pačią žymą, o keliomis CSS eilutėmis įjungiama ši tema. Parinktis defaultColor nustato, kurios temos stilius įrašomas tiesiogiai.
Nepatikimos įvesties apribojimai
Regex variklis įsimena nesėkmes ir apsisaugo nuo ReDoS, todėl neįprastai sudėtingas šablonas sulėtėja, bet nesustabdo veikimo. Parinktis tokenizeMaxLineLength per ilgas eilutes pateikia kaip vieną paprastą žetoną.
Palyginimas su
Kiti kodo paryškinimo būdai PHP svetainei ir kuo ShikiPHP skiriasi.
| Įrankis | Stipriosios pusės | Skirtumas nuo ShikiPHP |
|---|---|---|
| Shiki | Stipriosios pusėsEtaloninis įgyvendinimas, sukurtas naudojant JavaScript. Jis veikia bet kurioje šiuolaikinėje JavaScript vykdymo aplinkoje be Node.js API, pagal poreikį įkelia gramatikas ir temas bei turi TypeScript Twoslash integracijas. | Skirtumas nuo ShikiPHPShikiPHP perkelia šį srautą į PHP, skirtą puslapiams, atvaizduojamiems PHP serveryje. Jo etaloninis tikrinimo įrankis lygina HTML su Shiki 3.23.0, o pagrindinė Shiki šaka jau perėjo prie v4. |
| Phiki | Stipriosios pusėsPHP paryškintuvas, kuris taip pat naudoja TextMate gramatikas ir VS Code temas. Jame yra league/commonmark plėtinys, veikiantis su Laravel Str::markdown, terminalo išvestis ir dvejetainė komandų eilutės programa. | Skirtumas nuo ShikiPHPPhiki teigia, kad jo žetonų skaidiklis įkvėptas vscode-textmate, tačiau nėra tiesioginis vertimas santykiu 1:1. ShikiPHP perkelia vscode-textmate ir oniguruma-to-es bei tikrina savo HTML pagal Shiki išvestį 214 etaloniniuose scenarijuose. |
| highlight.php | Stipriosios pusėsServerio pusėje veikiantis PHP perkėlimas, palaikantis 185 kalbų su originaliais kalbų ir stilių aprašais bei automatinį kalbos aptikimą; jis paremtas highlight.js. | Skirtumas nuo ShikiPHPShikiPHP žetonus skaidо pagal TextMate gramatikas ir spalvina pagal VS Code temas — tuos pačius failus naudoja Shiki, o kiekviename iškvietime būtina nurodyti kalbą. |
| Torchlight | Stipriosios pusėsVS Code suderinama paryškinimo paslauga. Tai HTTP API su komentarų anotacijomis paryškinimui, fokusavimui ir skirtumams; turi oficialius klientus, skirtus Laravel, CommonMark, Statamic ir kitoms technologijų grupėms. | Skirtumas nuo ShikiPHPShikiPHP veikia jūsų PHP procese be prieglobos API. Integruoti notacijos transformatoriai nuskaito panašius komentarus paryškintoms, fokusuotoms ir skirtumų eilutėms. |
Šaltiniai, pažymėta
Klausimai ir atsakymai
Trumpi atsakymai iš ShikiPHP dokumentacijos.
Perduokite temų atvaizdį su šviesios ir tamsios temos įrašais. Šviesios temos spalvos įrašomos tiesiogiai, o tamsios — kaip --shiki-dark kintamieji; juos įjungia trumpa CSS taisyklė, taikoma html.dark .shiki. Nustatykite defaultColor į false, kad būtų pateikti tik kintamieji.
Visos tm-grammars 1.31.15 gramatikos, 235 kalbos ir 18 pagalbinių gramatikų bei visos 65 temos iš tm-themes. Paleiskite vendor/bin/shikiphp langs arba vendor/bin/shikiphp themes, kad išvardytumėte ID, arba iškvieskite paryškintuvo bundledLanguages() ir bundledThemes().
Taip. Iškoduokite .tmLanguage.json failą ir užregistruokite jį naudodami loadGrammar, nurodydami ID ir, jei reikia, alternatyvius pavadinimus, arba užregistruokite VS Code temą naudodami loadTheme. Pirmiausia užregistruokite visas jos įtraukiamas ar įterpiamas gramatikas.
Regex variklis įsimena nesėkmes ir apsisaugo nuo ReDoS, todėl neįprastai sudėtingas šablonas sulėtėja, bet nesustabdo veikimo. Nustatykite tokenizeMaxLineLength, kad bet kuri tokio ilgio arba ilgesnė eilutė būtų pateikta kaip vienas paprastas žetonas.
Dokumentacijoje to nerekomenduojama. Statinius puslapius paryškinkite kūrimo metu arba talpykloje laikykite atvaizduotą HTML pagal kodą ir parinktis. Procese naudokite tą patį paryškintuvą; Shikiphp fasadas tai atlieka už jus.
Etaloninis tikrinimo įrankis lygina ShikiPHP HTML su Shiki 3.23.0, naudodamas Shiki JavaScript regex variklį. Jo 214 scenarijai apima 167 iš 253 įtrauktų gramatikų, ANSI ir visas 65 temas; parinktys ir integruoti transformatoriai taip pat turi atskirus atitikties testus.
Pradėkite nuo įvadinio vadovo, tada prireikus pridėkite transformatorių, pasirinktinių gramatikų arba ANSI išvestį.