ShikiPHP
Tamamen PHP ile yazılmış, Shiki uyarlaması bir sözdizimi vurgulayıcısı. Node olmadan VS Code temaları ve TextMate dilbilgileriyle kod bloklarını biçimlendirin; çıktı 214 oracle senaryosunda Shiki 3.23.0 ile eşleşir.
composer require shikiphp/shikiphpEn son sürüm 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',
]);Uygulamada
Bir PHP şablonundan veya derleme betiğinden bir kod parçasını vurgulayın ve döndürdüğü HTML çıktısını yazdırın.
Her kod bloğu için tek çağrı
Shikiphp::codeToHtml kodu, bir dil kimliğini ve tema kimliğini alır. Renkleri satır içi yazılmış eksiksiz bir pre bloğu döndürür; böylece ek bir stil sayfası olmadan görüntülenir.
theme yerine bir themes eşlemesi iletin; aynı blok açık ve koyu renkleri CSS değişkenleri aracılığıyla taşır.
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'],
]);Gerçek TextMate Dilbilgileri
vscode-textmate öğesinin aslına sadık uyarlaması: gömülü diller, eklemeler ve iç içe depolar. Aynı dilbilgileri Shiki ve VS Code ile belirteçleştirir.
VS Code Temaları
vscode-textmate'dan uyarlanan kapsam seçici önceliği ve üst kapsam eşleştirmesi. Tek tema veya CSS değişkenleriyle açık/koyu çift teması.
Shiki ile Birebir Aynı Çıktı
253 paketindeki dilbilgilerinin 167 kadarını, ANSI'yi ve 65 temanın tümünü kapsayan 214 oracle senaryosunun çıktısı, JavaScript düzenli ifade altyapısını kullanan Shiki 3.23.0 çıktısıyla, baştaki ve sondaki boşluklar dışında birebir eşleşir: HTML.
Saf PHP Düzenli İfade Altyapısı
inline0/phasis kaynaklı, sağlayıcıyla paketlenmiş bir JavaScript RegExp altyapısı; girdisi oniguruma-to-es uyarlamasıdır. Shiki öğesinin JavaScript düzenli ifade altyapısı da aynı Oniguruma-RegExp yolunu izler.
Dönüştürücüler
Yerleşik notasyon, meta ve boşluk dönüştürücüleriyle birlikte her Shiki kancası (preprocess, tokens, root, pre, code, line, span, postprocess).
Pakette Her Şey
Her tm-grammars dili (235 ve 18 yardımcı dilbilgisi) ile tm-themes temasının (65) tümü pakete dahildir. ANSI terminal çıktısı, dekorasyonlar ve colorReplacements da içerilir.
CLI
bin/shikiphp ile bir dosyayı HTML için vurgulayın veya paketlenmiş dilleri ve temaları doğrudan komut satırından listeleyin.
Node Gerektirmez
Yalnızca ext-json ve ext-mbstring gerektiren PHP 8.2+ üzerinde çalışır. Node çalışma zamanı, yerel Oniguruma bağlaması veya kabuk komutu çağırma gerekmez.
ShikiPHP neden tercih edilmeli
PHP nerede çalışıyorsa orada çalışır
Vurgulama, Node'u kabuktan çağırmadan veya barındırılan bir API hizmetine başvurmadan, PHP sürecinde gerçekleşir. Laravel, WordPress veya statik site derleme adımı için uygundur.
Önbelleğe alınabilir çıktı
Aynı seçeneklerle aynı kod her zaman aynı HTML çıktısını üretir. Derleme zamanında vurgulayın veya kaynağı değişene kadar kod ve seçeneklere göre anahtarlanmış HTML çıktısını önbelleğe alın.
Açık ve koyu için tek blok
Tema eşlemesi ikinci temayı aynı işaretlemede CSS değişkenleri olarak yazar; birkaç satır CSS ile bu temaya geçebilirsiniz. defaultColor seçeneği, hangi temanın satır içi yazılacağını belirler.
Güvenilmeyen girdiler için sınırlar
Düzenli ifade altyapısı başarısızlıkları belleğe alır ve ReDoS'a karşı korur; bu nedenle sorunlu desen sistemi kilitlemek yerine yavaşlar. tokenizeMaxLineLength seçeneği, aşırı uzun satırları tek bir düz metin belirteci olarak verir.
Karşılaştırma
PHP sitesi için kod vurgulamanın diğer yolları ve ShikiPHP ile aralarındaki farklar.
| Araç | Şu konularda başarılı | ShikiPHP ile farkı |
|---|---|---|
| Shiki | Şu konularda başarılıJavaScript içindeki başvuru uygulamasıdır. Modern tüm JavaScript çalışma zamanlarında Node.js API'leri olmadan çalışır, dilbilgilerini ve temaları isteğe bağlı yükler ve TypeScript Twoslash entegrasyonlarına sahiptir. | ShikiPHP ile farkıShikiPHP, bu işlem hattını PHP diline taşıyarak PHP sunucusunda işlenen sayfalara uyarlar. Oracle altyapısı HTML çıktısını Shiki 3.23.0 ile karşılaştırırken, Shiki ana dalı artık v4 kullanıyor. |
| Phiki | Şu konularda başarılıPHP tabanlı ve TextMate dilbilgileriyle VS Code temalarını da kullanan bir vurgulayıcıdır. Laravel Str::markdown ile çalışan bir league/commonmark uzantısı, terminal çıktısı ve komut satırı ikilisi sunar. | ShikiPHP ile farkıPhiki, belirteç ayrıştırıcısını vscode-textmate'dan esinlenmiş olarak tanımlar; ancak bire bir çeviri olmadığını belirtir. ShikiPHP, vscode-textmate ve oniguruma-to-es öğelerini uyarlar ve HTML çıktısını 214 oracle senaryolarında Shiki çıktısıyla karşılaştırarak test eder. |
| highlight.php | Şu konularda başarılıOrijinal dil ve stil tanımlarıyla 185 dili destekleyen ve dili otomatik algılayabilen, sunucu tarafında çalışan bir highlight.js uyarlaması olan PHP. | ShikiPHP ile farkıShikiPHP, TextMate gramerleriyle belirteçlere ayırır ve VS Code temalarıyla renklendirir; aynı dosyaları Shiki kullanır ve her çağrıda dil adı belirtilir. |
| Torchlight | Şu konularda başarılıVS Code uyumlu bir vurgulama hizmeti. Vurgulamalar, odak ve farklar için yorum ek açıklamaları sunan bir HTTP API’dır ve Laravel, CommonMark, Statamic ve diğer teknoloji yığınları için birinci taraf istemcilere sahiptir. | ShikiPHP ile farkıShikiPHP, barındırılan bir API olmadan PHP süreciniz içinde çalışır. Yerleşik gösterim dönüştürücüleri; vurgulanan, odaklanan ve fark satırları için karşılık gelen yorumları okur. |
Kaynaklar, işaretli
Sorular ve yanıtlar
ShikiPHP dokümantasyonundan kısa yanıtlar.
Açık ve koyu temalar için girdiler içeren bir themes eşlemesi geçirin. Açık renkler satır içine yazılır, koyu renkler ise --shiki-dark değişkenleri olarak yazılır; html.dark .shiki kapsamındaki kısa bir CSS kuralı bunları etkinleştirir. Yalnızca değişkenleri üretmek için defaultColor değerini false olarak ayarlayın.
1.31.15 tm-grammars içindeki her gramer, 18 yardımcı gramerle birlikte 235 dil ve tm-themes içindeki 65 temanın tamamı dahildir. Kimlikleri listelemek için vendor/bin/shikiphp langs veya vendor/bin/shikiphp themes komutunu çalıştırın ya da vurgulayıcıda bundledLanguages() ve bundledThemes() çağrılarını yapın.
Evet. .tmLanguage.json dosyasının kodunu çözün ve bir kimlik ile isteğe bağlı takma adlar vererek loadGrammar ile kaydedin ya da loadTheme ile bir VS Code teması kaydedin. Önce bu gramerin içerdiği veya içine gömdüğü tüm gramerleri kaydedin.
Regex motorunda başarısızlık notlandırması ve ReDoS koruması bulunur; bu sayede sorunlu bir desen sistemi kilitlemek yerine yavaşlatır. Bu uzunluğa ulaşan veya aşan her satırın tek bir düz belirteç olarak üretilmesi için tokenizeMaxLineLength değerini ayarlayın.
Belgeler bunu önermiyor. Statik sayfalar için derleme zamanında vurgulama yapın veya oluşturulan HTML çıktısını kod ve seçeneklere göre önbelleğe alın. Bir süreç içinde aynı vurgulayıcıyı yeniden kullanın; Shikiphp arayüzü bunu sizin için yapar.
Oracle test düzeneği, ShikiPHP’ın HTML çıktısını Shiki 3.23.0 ile, Shiki’ın JavaScript regex motorunu kullanarak karşılaştırır. 214 senaryoları, paketle gelen 253 gramerin 167 tanesini, ANSI’yi ve 65 temanın tamamını kapsar; seçenekler ve yerleşik dönüştürücüler de kendi uyumluluk testlerine sahiptir.
Başlangıç kılavuzuyla başlayın; ardından sayfalarınız ihtiyaç duyduğunda dönüştürücüler, özel gramerler veya ANSI çıktısı ekleyin.