ShikiPHP
Penyorot sintaks PHP murni, adaptasi dari Shiki. Tata blok kode dengan tema VS Code dan tata bahasa TextMate tanpa Node; keluaran cocok dengan Shiki 3.23.0 di seluruh skenario oracle 214.
composer require shikiphp/shikiphpRilis terbaru 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',
]);Dalam praktik
Sorot cuplikan dari templat PHP atau skrip build, lalu tampilkan HTML yang dihasilkannya.
Satu pemanggilan untuk setiap blok kode
Shikiphp::codeToHtml menerima kode, id bahasa, dan id tema. Hasilnya berupa blok pre lengkap dengan warna yang ditulis inline, sehingga dapat dirender tanpa stylesheet tambahan.
Teruskan peta themes sebagai pengganti theme agar blok yang sama menyertakan warna terang dan gelap melalui variabel CSS.
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'],
]);Tata Bahasa TextMate Asli
Adaptasi setia dari vscode-textmate: bahasa tertanam, injeksi, dan repositori bersarang. Tata bahasa yang sama digunakan untuk tokenisasi oleh Shiki dan VS Code.
Tema VS Code
Spesifisitas pemilih cakupan dan pencocokan cakupan induk, diadaptasi dari vscode-textmate. Satu tema atau tema terang/gelap ganda melalui variabel CSS.
Keluaran Identik dengan Shiki
214 skenario oracle mencakup 167 dari 253 tata bahasa bawaan, ANSI, dan semua 65 tema. HTML sama persis dengan Shiki 3.23.0 yang memakai mesin regex JavaScript, kecuali karakter whitespace di awal dan akhir (termasuk spasi, tab, dan baris baru).
Mesin Regex PHP Murni
Mesin RegExp JavaScript bawaan dari inline0/phasis, dengan masukan dari adaptasi oniguruma-to-es. Mesin regex JavaScript milik Shiki menggunakan jalur RegExp yang sama dari Oniguruma.
Transformer
Setiap hook Shiki (preprocess, tokens, root, pre, code, line, span, postprocess), beserta transformer notasi, meta, dan spasi bawaan.
Bundle Lengkap
Semua bahasa tm-grammars (235, ditambah 18 tata bahasa pendukung) dan tema tm-themes (65) sudah disertakan. Keluaran terminal ANSI, dekorasi, dan colorReplacements juga tersedia.
CLI
Sorot file ke HTML, atau tampilkan bahasa dan tema yang disertakan langsung dari baris perintah dengan bin/shikiphp.
Tanpa Node
Berjalan pada PHP 8.2+ hanya dengan ext-json dan ext-mbstring. Tanpa runtime Node, binding native Oniguruma, atau menjalankan perintah shell.
Mengapa ShikiPHP
Berjalan di tempat PHP Anda berjalan
Penyorotan dilakukan di dalam proses PHP, tanpa menjalankan Node melalui shell atau memanggil API yang dihosting. Cocok untuk langkah build Laravel, WordPress, atau situs statis.
Keluaran yang dapat di-cache
Kode yang sama dengan opsi yang sama selalu menghasilkan HTML yang sama. Lakukan penyorotan saat build, atau cache HTML dengan kunci berupa kode dan opsi hingga sumbernya berubah.
Satu blok untuk tampilan terang dan gelap
Peta tema menulis tema kedua sebagai variabel CSS pada markup yang sama, lalu beberapa baris CSS mengaktifkannya. Opsi defaultColor menentukan tema yang ditulis inline.
Batas untuk masukan tidak tepercaya
Mesin regex menyimpan hasil kegagalan dalam memo dan mencegah ReDoS, sehingga pola patologis akan melambat alih-alih membuat proses macet. Opsi tokenizeMaxLineLength mengeluarkan baris yang terlalu panjang sebagai satu token biasa.
Dibandingkan dengan
Cara lain menyorot kode untuk situs PHP, dan perbedaan ShikiPHP.
| Alat | Keunggulan | Perbedaan dengan ShikiPHP |
|---|---|---|
| Shiki | KeunggulanImplementasi referensi dalam JavaScript. Berjalan di runtime JavaScript modern apa pun tanpa API Node.js, memuat tata bahasa dan tema sesuai kebutuhan, serta memiliki integrasi Twoslash TypeScript. | Perbedaan dengan ShikiPHPShikiPHP mengadaptasi pipeline tersebut ke PHP untuk halaman yang dirender di server PHP. Harness oracle-nya membandingkan HTML dengan Shiki 3.23.0, sementara cabang utama Shiki telah beralih ke v4. |
| Phiki | KeunggulanPenyorot PHP yang juga menggunakan tata bahasa TextMate dan tema VS Code. Menyertakan ekstensi league/commonmark yang berfungsi dengan Str::markdown milik Laravel, keluaran terminal, dan program biner baris perintah. | Perbedaan dengan ShikiPHPPhiki menjelaskan bahwa tokenizer-nya terinspirasi oleh vscode-textmate, tetapi bukan terjemahan 1-1. ShikiPHP mengadaptasi vscode-textmate dan oniguruma-to-es serta menguji HTML terhadap keluaran Shiki dalam skenario oracle 214. |
| highlight.php | KeunggulanAdaptasi PHP sisi server dari highlight.js yang mendukung bahasa 185 dengan definisi bahasa dan gaya asli, serta dapat mendeteksi bahasa secara otomatis. | Perbedaan dengan ShikiPHPShikiPHP melakukan tokenisasi menggunakan tata bahasa TextMate dan memberi warna dengan tema VS Code, file yang sama dengan yang digunakan Shiki, dan setiap pemanggilan mencantumkan bahasanya. |
| Torchlight | KeunggulanLayanan penyorotan yang kompatibel dengan VS Code. Layanan ini merupakan HTTP API dengan anotasi komentar untuk sorotan, fokus, dan perbedaan, serta memiliki klien resmi untuk Laravel, CommonMark, Statamic, dan tumpukan lainnya. | Perbedaan dengan ShikiPHPShikiPHP berjalan di dalam proses PHP Anda tanpa API yang dihosting. Transformer notasi bawaannya membaca komentar serupa untuk baris yang disorot, difokuskan, dan ditandai sebagai perbedaan. |
Sumber, dicentang
Tanya jawab
Jawaban singkat dari dokumentasi ShikiPHP.
Teruskan peta tema dengan entri terang dan gelap. Warna terang ditulis inline dan warna gelap ditulis sebagai variabel --shiki-dark, yang diaktifkan oleh aturan CSS singkat dengan cakupan html.dark .shiki. Atur defaultColor ke false agar hanya variabel yang dihasilkan.
Semua tata bahasa dari tm-grammars 1.31.15, sebanyak 235 bahasa ditambah 18 tata bahasa pendukung, serta seluruh 65 tema dari tm-themes. Jalankan vendor/bin/shikiphp langs atau vendor/bin/shikiphp themes untuk menampilkan id, atau panggil bundledLanguages() dan bundledThemes() pada highlighter.
Bisa. Dekode file .tmLanguage.json dan daftarkan dengan loadGrammar, sertakan id dan alias opsional, atau daftarkan tema VS Code dengan loadTheme. Daftarkan terlebih dahulu tata bahasa apa pun yang disertakan atau disematkannya.
Mesin regex memiliki memo hasil kegagalan dan perlindungan ReDoS, sehingga pola patologis melambat alih-alih membuat proses macet. Atur tokenizeMaxLineLength agar satu token biasa dihasilkan untuk setiap baris yang panjangnya mencapai atau melebihi batas tersebut.
Dokumentasi menyarankan untuk tidak melakukannya. Lakukan penyorotan saat proses build untuk halaman statis, atau cache HTML yang sudah dirender berdasarkan kode dan opsi. Dalam satu proses, gunakan kembali satu highlighter; facade Shikiphp melakukannya untuk Anda.
Harness oracle membandingkan ShikiPHP milik HTML dengan Shiki 3.23.0 menggunakan mesin regex JavaScript milik Shiki. Skenario 214 mencakup 167 dari tata bahasa 253 yang disertakan, ANSI dan seluruh 65 tema; opsi serta transformer bawaan juga memiliki pengujian kesesuaian masing-masing.
Mulailah dengan panduan memulai, lalu tambahkan transformer, tata bahasa khusus, atau output ANSI saat halaman Anda membutuhkannya.