انتقل إلى المحتوى

ShikiPHP

مميّز صياغة نقي لـPHP، منقول من Shiki. نسّق كتل الشيفرة باستخدام سمات VS Code وقواعد TextMate النحوية دون Node؛ تطابق المخرجات Shiki 3.23.0 في 214 سيناريو مرجعيًا.

الطرفية
composer require shikiphp/shikiphp

أحدث إصدار v0.1.0 MIT PHP 8.2+, ext-json, ext-mbstring

في التطبيق العملي

أبرز مقتطفًا من قالب PHP أو من سكربت بناء، واطبع HTML الذي يعيده.

استدعاء واحد لكل كتلة شيفرة

تأخذ Shikiphp::codeToHtml الشيفرة ومعرّف اللغة ومعرّف السمة. وتعيد كتلة pre كاملة مع الألوان مكتوبة مباشرةً، فتُعرض دون ورقة أنماط إضافية.

مرّر خريطة themes بدلًا من theme، وستحمل الكتلة نفسها الألوان الفاتحة والداكنة عبر متغيرات CSS.

PHP
use Shikiphp\Shikiphp;

echo Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

قواعد TextMate نحوية حقيقية

نقل أمين لـvscode-textmate: اللغات المضمّنة، والحقن، والمستودعات المتداخلة. القواعد النحوية نفسها التي يستخدمها Shiki وVS Code لتقسيم النص إلى رموز.

سمات VS Code

خصوصية محددات النطاقات ومطابقة النطاقات الأم، منقولة من vscode-textmate. سمة واحدة أو وضع فاتح/داكن مزدوج عبر متغيرات CSS.

مخرجات مطابقة لـShiki

تطابق 214 سيناريو مرجعيًا، تغطي 167 من أصل 253 قاعدة نحوية مضمّنة، وANSI والسمات الـ65 كلها، HTML في Shiki 3.23.0 باستخدام محرك التعبيرات النمطية JavaScript، بدقة تامة باستثناء المسافات البيضاء في البداية والنهاية.

محرك تعبيرات نمطية نقي بـPHP

محرك RegExp JavaScript مضمّن من inline0/phasis، وتغذّيه عملية نقل oniguruma-to-es. يتبع محرك التعبيرات النمطية JavaScript الخاص بـ Shiki مسار Oniguruma إلى RegExp نفسه.

المحوّلات

كل خطافات Shiki (preprocess, tokens, root, pre, code, line, span, postprocess)، إلى جانب محولات الترميز والبيانات الوصفية والمسافات البيضاء المضمّنة.

الحزمة الكاملة

تأتي جميع لغات tm-grammars (235، بالإضافة إلى 18 قاعدة نحوية مساعدة) وسمات tm-themes (65) مضمّنة. ويشمل ذلك مخرجات طرفية ANSI والزخارف وcolorReplacements.

CLI

أبرز ملفًا لإخراج HTML، أو اعرض اللغات والسمات المضمّنة مباشرةً من سطر الأوامر باستخدام bin/shikiphp.

من دون Node

يعمل على PHP 8.2+ مع ext-json وext-mbstring فقط. لا بيئة تشغيل Node، ولا ربط أصلي بـOniguruma، ولا تشغيل أوامر خارجية.

لماذا ShikiPHP؟

يعمل حيث تعمل PHP لديك

يحدث التمييز داخل عملية PHP، دون تشغيل Node كأمر خارجي أو استدعاء API مستضافة. يناسب ذلك خطوة بناء في Laravel أو WordPress أو موقع ثابت.

مخرجات قابلة للتخزين المؤقت

تنتج الشيفرة نفسها مع الخيارات نفسها دائمًا HTML نفسه. أجرِ التمييز وقت البناء، أو خزّن HTML مؤقتًا باستخدام الشيفرة والخيارات كمفتاح إلى أن يتغير المصدر.

كتلة واحدة للوضعين الفاتح والداكن

تكتب خريطة السمات السمة الثانية كمتغيرات CSS في الترميز نفسه، وتبدّل إليها بضعة أسطر من CSS. يحدد الخيار defaultColor السمة التي تُكتب مباشرةً.

قيود على المدخلات غير الموثوقة

يخزّن محرك التعبيرات النمطية حالات الإخفاق مؤقتًا ويوفر حماية من ReDoS، لذا يتباطأ النمط الإشكالي بدلًا من تعليق التنفيذ. ويُخرج الخيار tokenizeMaxLineLength الأسطر الأطول من الحد كرمز عادي واحد.

مقارنة مع

طرق أخرى لتمييز الشيفرة في موقع PHP، وما يميّز ShikiPHP.

ShikiPHP مقارنةً بأدوات أخرى
Shiki مناسب لـالتنفيذ المرجعي بلغة JavaScript. يعمل في أي بيئة تشغيل حديثة لـJavaScript دون واجهات Node.js، ويحمّل القواعد النحوية والسمات عند الطلب، ويتضمن تكاملات Twoslash من TypeScript. الاختلاف عن ShikiPHPينقل ShikiPHP هذا المسار إلى PHP للصفحات التي يعرضها خادم PHP. تقارن بيئة الاختبار المرجعية HTML مع Shiki 3.23.0، بينما انتقل الفرع الرئيسي لـShiki إلى v4.
Phiki مناسب لـأداة تمييز بلغة PHP تستخدم أيضًا قواعد TextMate النحوية وسمات VS Code. تتضمن إضافة league/commonmark تعمل مع Str::markdown في Laravel، ومخرجات طرفية، وملفًا ثنائيًا لسطر الأوامر. الاختلاف عن ShikiPHPيصف Phiki أداة تقسيم النص إلى رموز بأنها مستوحاة من vscode-textmate، لكنها ليست ترجمة مطابقة واحدًا لواحد. ينقل ShikiPHP vscode-textmate وoniguruma-to-es، ويختبر HTML بمقارنتها بمخرجات Shiki في 214 سيناريو مرجعيًا.
highlight.php مناسب لـنقل PHP من highlight.js على جانب الخادم، يدعم 185 لغة بتعريفات اللغة والأنماط الأصلية، ويمكنه اكتشاف اللغة تلقائيًا. الاختلاف عن ShikiPHPيقسم ShikiPHP النص إلى رموز باستخدام قواعد TextMate النحوية، ويطبّق الألوان باستخدام سمات VS Code، أي الملفات نفسها التي يستخدمها Shiki، مع تحديد اللغة في كل استدعاء.
Torchlight مناسب لـخدمة تمييز متوافقة مع VS Code. إنها HTTP API مع تعليقات توضيحية لتمييز الأسطر والتركيز والفروق، وتوفر عملاء رسميين لـLaravel وCommonMark وStatamic وغيرها من التقنيات. الاختلاف عن ShikiPHPيعمل ShikiPHP داخل عملية PHP دون API مستضافة. وتقرأ محوّلات الترميز المضمّنة تعليقات مماثلة لتمييز الأسطر وإبرازها ومقارنة الفروق.

الأسئلة والأجوبة

إجابات موجزة من توثيق ShikiPHP.

ابدأ بدليل البدء، ثم أضف المحوّلات أو القواعد النحوية المخصصة أو مخرجات ANSI عندما تحتاج إليها صفحاتك.