ShikiPHP
Puhdas PHP-syntaksikorostin, Shiki-siirros. Muotoile koodilohkoja VS Code-teemoilla ja TextMate-kielioppeilla ilman Nodea; tuloste vastaa Shiki 3.23.0 -tulosta kaikissa 214-vertailutilanteissa.
composer require shikiphp/shikiphpUusin julkaisu 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',
]);Käytännössä
Korosta koodikatkelma kohteen PHP mallista tai koontiskriptistä ja tulosta sen palauttama HTML.
Yksi kutsu koodilohkoa kohti
Shikiphp::codeToHtml saa koodin, kielen tunnuksen ja teeman tunnuksen. Se palauttaa täydellisen pre-lohkon, jonka värit on kirjoitettu sisäisiin tyyleihin, joten se näkyy ilman erillistä tyylitiedostoa.
Välitä themes-kartta kohteen theme sijaan, niin sama lohko sisältää vaaleat ja tummat värit CSS-muuttujien kautta.
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'],
]);Aidot TextMate-kieliopit
Tarkka siirros kohteesta vscode-textmate: upotetut kielet, injektiot ja sisäkkäiset tietovarastot. Samat kieliopit, joilla Shiki ja VS Code tokenisoivat.
VS Code-teemat
Rajausvalitsimien tarkkuus ja ylärajausten täsmäytys siirrettynä kohteesta vscode-textmate. Yksi teema tai vaalea/tumma pari CSS-muuttujien avulla.
Tuloste identtinen kohteen Shiki kanssa
214 vertailuskenaariota kattaa 167 mukana toimitetuista 253 kieliopista, ANSI:n ja kaikki 65 teemaa. HTML-tuloste vastaa JavaScript-regexmoottoria käyttävän Shiki 3.23.0:n tulostetta täsmälleen alun ja lopun tyhjemerkkejä lukuun ottamatta.
Puhdas PHP-säännöllisten lausekkeiden moottori
JavaScript-RegExp-moottori, joka on sisällytetty toimittajan mukana lähteestä inline0/phasis ja jota käyttää oniguruma-to-es-siirros. Shiki-kohteen JavaScript-säännöllisten lausekkeiden moottori käyttää samaa Oniguruma-polkua RegExpiin.
Muuntimet
Jokainen Shiki-koukku (preprocess, tokens, root, pre, code, line, span, postprocess) sekä valmiit merkintä-, meta- ja tyhjemuuntimet.
Koko paketti
Kaikki tm-grammars-kielet (235 sekä 18 apukielioppia) ja tm-themes-teemat (65) sisältyvät pakettiin. Mukana myös ANSI-päätetuloste, koristelut ja colorReplacements.
CLI
Korosta tiedosto kohteeseen HTML tai luettele mukana toimitetut kielet ja teemat suoraan komentoriviltä komennolla bin/shikiphp.
Ei Nodea
Toimii versiolla PHP 8.2+ ja tarvitsee vain ext-json- ja ext-mbstring-laajennukset. Ei Node-ympäristöä, natiivia Oniguruma-sidosta eikä ulkoisia komentokutsuja.
Miksi ShikiPHP
Toimii siellä, missä PHP toimii
Korostus tehdään PHP-prosessin sisällä ilman ulkoista Node-kutsua tai isännöidyn API-palvelun kutsumista. Sopii Laravel-, WordPress- tai staattisen sivuston koontivaiheeseen.
Tuloste, joka voidaan välimuistittaa
Sama koodi samoilla asetuksilla tuottaa aina saman HTML-tuloksen. Korosta koontivaiheessa tai välimuistita HTML koodin ja asetusten perusteella, kunnes lähde muuttuu.
Yksi lohko vaalealle ja tummalle teemalle
Teemakartta kirjoittaa toisen teeman värit CSS-muuttujiksi samaan merkintään, ja muutamalla CSS-rivillä otetaan ne käyttöön. defaultColor-valinta määrittää, minkä teeman värit kirjoitetaan sisäisiin tyyleihin.
Rajoitukset epäluotetuille syötteille
Säännöllisten lausekkeiden moottori tallentaa epäonnistumiset välimuistiin ja torjuu ReDoS-hyökkäyksiä, joten ongelmallinen kuvio hidastaa toimintaa sen jumittamisen sijaan. tokenizeMaxLineLength-valinta tulostaa liian pitkät rivit yhtenä tavallisena tokenina.
Vertailu
Muita tapoja korostaa koodia PHP-sivustolla ja ShikiPHP-projektin erot.
| Työkalu | Sopii hyvin | Ero kohteeseen ShikiPHP |
|---|---|---|
| Shiki | Sopii hyvinVertailutoteutus kohteessa JavaScript. Se toimii missä tahansa nykyaikaisessa JavaScript-ympäristössä ilman Node.js-rajapintoja, lataa kieliopit ja teemat tarpeen mukaan ja tarjoaa TypeScript Twoslash-integraatiot. | Ero kohteeseen ShikiPHPShikiPHP siirtää putken PHP-ympäristöön PHP-palvelimella renderöidyille sivuille. Sen vertailuympäristö vertaa HTML-tuloksia arvoon Shiki 3.23.0, kun taas Shiki:n päähaara on siirtynyt käyttämään v4:ää. |
| Phiki | Sopii hyvinPHP-korostin, joka käyttää myös TextMate-kielioppeja ja VS Code-teemoja. Pakettiin kuuluu league/commonmark-laajennus, joka toimii kohteen Laravel Str::markdown-metodin kanssa, sekä päätetuloste ja komentoriviohjelma. | Ero kohteeseen ShikiPHPPhiki kuvaa tokenisaattoriaan kohteen vscode-textmate inspiroimaksi, mutta ei suoraksi käännökseksi. ShikiPHP siirtää kohteet vscode-textmate ja oniguruma-to-es sekä testaa HTML-tulostetta kohteen Shiki tulostetta vasten 214-vertailutilanteissa. |
| highlight.php | Sopii hyvinPalvelinpuolen PHP-siirros kohteesta highlight.js, joka tukee 185 kieltä alkuperäisine kieli- ja tyylimäärittelyineen ja tunnistaa kielen automaattisesti. | Ero kohteeseen ShikiPHPShikiPHP tokenisoi TextMate-kieliopilla ja värittää VS Code-teemoilla käyttäen samoja tiedostoja kuin Shiki; jokaisessa kutsussa määritetään kieli. |
| Torchlight | Sopii hyvinVS Code-yhteensopiva korostuspalvelu. Se on HTTP API, jossa kommenttimerkinnöillä voi korostaa, kohdistaa huomion ja näyttää erot. Ensimmäisen osapuolen asiakasohjelmia on kohteille Laravel, CommonMark, Statamic ja muille teknologiapinoille. | Ero kohteeseen ShikiPHPShikiPHP toimii PHP-prosessissa ilman isännöityä API-palvelua. Sen valmiit merkintämuuntimet lukevat vastaavat kommentit korostetuille, huomion kohteena oleville ja erojen riveille. |
Lähteet, valittu
Kysymykset ja vastaukset
Lyhyet vastaukset ShikiPHP-dokumentaatiosta.
Välitä teemakartta, jossa on vaaleat ja tummat merkinnät. Vaaleat värit kirjoitetaan sisäisiin tyyleihin ja tummat --shiki-dark-muuttujiksi, jotka lyhyt CSS-sääntö ottaa käyttöön kohteen html.dark .shiki-elementissä. Aseta defaultColor arvoksi false, jos haluat tulostaa vain muuttujat.
Kaikki kohteen tm-grammars 1.31.15 kieliopit, 235 kieltä sekä 18 apukielioppia, ja kaikki kohteen tm-themes 65 teemaa. Luettele tunnukset komennoilla vendor/bin/shikiphp langs tai vendor/bin/shikiphp themes tai kutsu korostimen metodeja bundledLanguages() ja bundledThemes().
Kyllä. Pura .tmLanguage.json-tiedosto ja rekisteröi se loadGrammar-metodilla antamalla tunnus ja halutessasi aliaksia, tai rekisteröi mukautettu VS Code-teema loadTheme-metodilla. Rekisteröi ensin kaikki sen sisältämät tai upottamat kieliopit.
Säännöllisten lausekkeiden moottori tallentaa epäonnistumiset välimuistiin ja suojaa ReDoS-hyökkäyksiltä, joten ongelmallinen kuvio hidastaa toimintaa sen jumittamisen sijaan. Aseta tokenizeMaxLineLength, niin vähintään rajan pituiset rivit tulostetaan yhtenä tavallisena tokenina.
Ohjeissa sitä ei suositella. Korosta staattiset sivut koontivaiheessa tai välimuistita renderöity HTML koodin ja asetusten perusteella. Käytä prosessin sisällä samaa korostinta uudelleen; Shikiphp-julkisivu hoitaa tämän puolestasi.
Vertailuohjelma vertaa kohteen ShikiPHP HTML-tulosta kohteen Shiki 3.23.0-tulokseen kohteen Shiki JavaScript-säännöllisten lausekkeiden moottorilla. Sen 214-vertailutilanteet kattavat 167 kohteen 253 mukana toimitetuista kieliopeista, ANSI:n ja kaikki 65 teemaa; valinnoilla ja valmiilla muuntimilla on lisäksi omat vastaavuustestinsä.
Aloita aloitusoppaasta ja lisää muuntimia, mukautettuja kielioppeja tai ANSI-tuloste, kun sivusi niitä tarvitsevat.