shikiphp
shikiphp on puhdas-PHP-porttaus lähteestä Shiki, syntaksikorostimesta, joka värittää koodin samoilla TextMate-kieliopilla ja teemoilla kuin VS Code. Se pilkkoo koodin samoilla TextMate-kieliopilla ja värittää sen samoilla VS Code-teemoilla, joita Shiki käyttää, tuottaen saman HTMLn kuin Shiki 3.23.0 — kokonaan ympäristössä PHP.
Ei Node-ympäristöä. Ei muita json-laajennuksia kuin PHP ja mbstring. Ei natiivia Oniguruma-sidosta. Ei ulkoisen JavaScript-prosessin käynnistämistä eikä isännöityä API-palvelua.
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
return "Hello, {$name}!";
}
PHP, [
'lang' => 'php',
'theme' => 'github-dark',
]);
Miksi shikiphp
Palvelimella renderöity syntaksikorostus ympäristössä PHP tarkoittaa yleensä jotakin kolmesta kompromissista: Node-prosessin käynnistämistä, isännöidyn API-palvelun kutsumista tai tyytymistä säännöllisiin lausekkeisiin perustuvaan korostimeen, joka ei oikeasti ymmärrä kieltä. Mikään näistä ei sovi hyvin ympäristöön Laravel, WordPress tai staattisen sivuston koontivaiheeseen.
shikiphp poistaa kompromissin porttaamalla lähteen Shiki todellisen käsittelyketjun ympäristöön PHP:
- TextMate-kieliopin jäsennin (uskollinen porttaus lähteestä
vscode-textmate), joka tukee upotettuja kieliä, injektioita ja sisäkkäisiä repositorioita - VS Code-teemojen selvitys laajuusvalitsimen tarkkuuden ja ylälaajuuden täsmäytyksen perusteella
- Shiki-yhteensopiva HTML: vaaleat ja tummat teemat CSS-muuttujilla,
codeToHast, muuntimet (kaikki koukut), koristeet,colorReplacements,structure: 'inline'ja ANSI-korostus (lang: 'ansi') - koko Shiki-paketti — kaikki
tm-grammarskielet (235 sekä 18 niiden upottamaa apukielioppia) ja kaikkitm-themesteemaa (65)
Vastaavuus lähteen Shiki 3.23.0 kanssa
Tuloste ei ole vain ”riittävän lähellä”, vaan se tarkistetaan lukittua Shiki-julkaisua vasten.
| Paketti | Versio | Käyttötarkoitus |
|---|---|---|
shiki |
3.23.0 | vertailukohta, suoritetaan sen JavaScript-säännöllisten lausekkeiden moottorilla |
tm-grammars |
1.31.15 | mukana toimitetut kieliopit |
tm-themes |
1.12.2 | mukana toimitetut teemat |
@shikijs/transformers |
4.2.0 | muuntimien vastaavuustestit |
Shiki itse toimii vertailukohtana. Regressiotestien aineistossa on 214 skenaariota. Kukin niistä on yhdellä kielellä ja yhdellä teemalla korostettu näyte oletusasetuksilla. Sekä Shiki että shikiphp korostavat jokaisen skenaarion, ja tuloksena syntyvien HTML-merkkijonojen on oltava samat, kun alun ja lopun tyhjemerkit on poistettu. Skenaariot kattavat yhdessä 167 253-paketin kieliopista, lang: 'ansi' ja kaikki 65 teemaa. Asetukset (structure, tabindex, colorReplacements, kahden teeman tila, defaultColor ja muut), codeToTokensWithThemes sekä sisäänrakennetut muuntimet käydään läpi erillisissä vastaavuustesteissä, joiden odotetut tulosteet tallennettiin samoista Shiki-versioista.
Tästä seuraa kaksi rajoitusta. Shikin oletusmoottori on Oniguruma, joka on käännetty WebAssemblyksi. Vertailukohta käyttää sen sijaan Shikin JavaScript-säännöllisten lausekkeiden moottoria, jota shikiphp porttaa. Myöskään myöhempiä Shiki-julkaisuja (4.x-sarjaa) ei ole tarkistettu.
Näin se toimii
shikiphp perustuu vendoroituun, puhtaasti PHP-kielellä toteutettuun JavaScript-regex-moottoriin, joka on peräisin lähteestä inline0/phasis ja käyttää syötteenä PHP-porttausta lähteestä oniguruma-to-es. Shiki:n JavaScript-regex-moottori muuntaa TextMate-kielioppien Oniguruma-mallit JavaScript RegExp-muotoon, joten JS-regex-moottori on luonteva perusta: sen avulla shikiphp voi täsmätä moottorin tulokseen tavu tavulta.
code → grammar tokenizer → theme resolver → themed tokens → HTML
│
└─ OnigScanner → PatternConverter (oniguruma-to-es) → Shikiphp\Regex (JS RegExp engine)
Katso koko käsittelyketju kohdasta Arkkitehtuuri.
Vaatimukset
- PHP 8.2 tai uudempi (CI suorittaa testisarjan versiolla PHP 8.4)
ext-jsonjaext-mbstring(sisältyvät lähes kaikkiin PHP-koontiversioihin)
Seuraavaksi
- Aloitus — asenna työkalu ja luo ensimmäinen lohkosi.
- API — kaikki käytettävissä olevat metodit.
- Valinnat — kaikki asetukset, jotka
codeToHtmlhyväksyy. - Muuntimet — koukkukäsittelyketju ja sisäänrakennetut muuntimet.
- CLI —
bin/shikiphp highlight,langsjathemes.
Lisenssi
MIT, tekijänoikeudet inline0. Mukana toimitettujen TextMate-kielioppien ja teemojen alkuperäiset lisenssit säilyvät voimassa.