Lewati ke konten

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.

Terminal
composer require shikiphp/shikiphp

Rilis terbaru v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

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.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => '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.

ShikiPHP dibandingkan dengan alat lainnya
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.

Tanya jawab

Jawaban singkat dari dokumentasi ShikiPHP.

Mulailah dengan panduan memulai, lalu tambahkan transformer, tata bahasa khusus, atau output ANSI saat halaman Anda membutuhkannya.