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
use Shikiphp\Shikiphp;
echo Shikiphp::codeToHtml("\e[31merror\e[0m: something broke", [
'lang' => 'ansi',
'theme' => 'github-dark',
]);في التطبيق العملي
أبرز مقتطفًا من قالب PHP أو من سكربت بناء، واطبع HTML الذي يعيده.
استدعاء واحد لكل كتلة شيفرة
تأخذ Shikiphp::codeToHtml الشيفرة ومعرّف اللغة ومعرّف السمة. وتعيد كتلة pre كاملة مع الألوان مكتوبة مباشرةً، فتُعرض دون ورقة أنماط إضافية.
مرّر خريطة themes بدلًا من theme، وستحمل الكتلة نفسها الألوان الفاتحة والداكنة عبر متغيرات 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'],
]);قواعد 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.
مرّر خريطة سمات تتضمن خيارين فاتحًا وداكنًا. تُكتب الألوان الفاتحة مباشرةً، والداكنة كمتغيرات --shiki-dark، وتفعّلها قاعدة CSS قصيرة محددة النطاق إلى html.dark .shiki. عيّن defaultColor إلى false لإخراج المتغيرات فقط.
كل القواعد النحوية من tm-grammars 1.31.15: 235 لغة بالإضافة إلى 18 قاعدة مساعدة، والسمات الـ65 كلها من tm-themes. نفّذ vendor/bin/shikiphp langs أو vendor/bin/shikiphp themes لسرد المعرّفات، أو استدعِ bundledLanguages() وbundledThemes() على أداة التمييز.
نعم. فك ترميز ملف .tmLanguage.json وسجّله باستخدام loadGrammar، مع تحديد معرّف وأسماء بديلة اختيارية، أو سجّل سمة VS Code باستخدام loadTheme. سجّل أولًا أي قاعدة نحوية تتضمنها أو تدمجها.
يوفر محرك التعبيرات النمطية تخزينًا مؤقتًا للإخفاقات وحماية من ReDoS، لذا يتباطأ النمط الإشكالي بدلًا من تعليق التنفيذ. عيّن tokenizeMaxLineLength لإخراج رمز عادي واحد لأي سطر يبلغ ذلك الطول أو يتجاوزه.
لا توصي الوثائق بذلك. أجرِ التمييز وقت البناء للصفحات الثابتة، أو خزّن HTML المعروض مؤقتًا باستخدام الشيفرة والخيارات كمفتاح. أعد استخدام أداة تمييز واحدة داخل العملية؛ وتتولى واجهة Shikiphp ذلك نيابةً عنك.
تقارن بيئة الاختبار المرجعية ShikiPHP وHTML الخاصين به مع Shiki 3.23.0 باستخدام محرك التعبيرات النمطية JavaScript في Shiki. تغطي سيناريوهاته الـ214 عدد 167 من أصل 253 قاعدة نحوية مضمّنة، وANSI والسمات الـ65 كلها، كما تخضع الخيارات والمحوّلات المضمّنة لاختبارات توافق خاصة بها.
ابدأ بدليل البدء، ثم أضف المحوّلات أو القواعد النحوية المخصصة أو مخرجات ANSI عندما تحتاج إليها صفحاتك.