شيفرة هذه الصفحة لم تبدأ العمل.

فتح index.html مباشرة من مجلد يمنع المتصفح من تحميل وحدات JavaScript، فلا يحدث شيء عند اختيار ملف. قدّم المجلد عبر HTTP بدلا من ذلك:

powershell -ExecutionPolicy Bypass -File serve.ps1

ثم افتح http://localhost:8080/.

مقارن النصوص — قارِن نصّين جنباً إلى جنب

نصّان يدخلان، وكل فرق يخرج معلَّماً، سطراً سطراً وكلمةً كلمة. ولا شيء يُلصَق في خادم أحد آخر.

اللغة: العربية
عرض الشيفرة المصدرية
نصوصك لا تُرفع أبدا. لا يوجد خادم.

المقارنة حسابٌ على سلسلتين نصّيتين، يجري هنا، في هذه الصفحة. والخوارزمية خوارزميةُ Myers — وهي التي يستعملها git diff — مكتوبةً يدوياً في src/diff.js حيث تستطيع قراءتها. وليست لهذه الأداة وظيفة شبكية من أي نوع — لا شيء يُجلَب ولا شيء يُرسَل — وذلك يهمّ هنا: فالذي يقارنه الناس عقودٌ وملفات إعدادات وشيفرةٌ لم تُنشَر بعد، وكلها أزواجاً.

فحص حي: جارٍ الفحص…

دون اتصال: جارٍ الفحص…

لا داعي لأن تصدّقنا: افتح أدوات المطوّر، وراقب تبويب «الشبكة»، ثم قارِن شيئاً. لن يحمل أي طلب محرفاً واحداً مما لصقته. أو اقطع الاتصال بالإنترنت وقارِنه رغم ذلك.

1 الصق النصّين

فارغ
فارغ

2 اختر كيف تقرؤه

3 اقرأ ما تغيّر

لا شيء بعد.

عرض بصيغة Markdown

كيف تقارن نصّين دون رفعهما

  1. الصق النصّين، أو أفلِت الملفين. الأصل في جهة، والنسخة المتغيرة في الجهة الأخرى. وملفان يُفلَتان معاً على المُنتقي يحطّ كلٌّ في جانب، بالترتيب الذي أفلتّهما به؛ وبدِّل الجانبين إن كانا مقلوبَين.
  2. اختر كيف تقرؤه. جنباً إلى جنب، أو في عمود واحد. والهاتف يبدأ بعمود واحد، لأن الجنب إلى جنب يحتاج عمودَي نصّ وفي الهاتف متسعٌ لواحد تقريباً؛ والقائمة هناك على كل حال.
  3. تجاهل ما لا يهم. المسافات، وحالة الأحرف الكبيرة والصغيرة، والأسطر الفارغة — كلٌّ منها يمكن تجاهله، كي لا يُقرأ ملف أعيد تنسيقه كمئة تغيير. والوسطُ الذي لم يتغير يُطوى افتراضياً إلى عدد، مع إبقاء ثلاثة أسطر على جانبَي كل تغيير.
  4. اقرأ ما تغيّر. الأسطر المحذوفة معلَّمة في جانب الأصل، والمضافة في الجانب الآخر، وداخل السطر المتغير تُبرَز الكلمات المختلفة — فمقارنةُ فقرتين تُظهر الكلمة التي انتقلت لا فقرتين كاملتين.
  5. خذ الرقعة. التنزيل ملفُ .patch بالصيغة الموحَّدة، وهي ما تتوقعه مراجعة الشيفرة وgit apply وكل عارض فروق. والنسخ يضع الشيء نفسه في حافظتك.

النسخة الأطول

كيف تقارن ملفي JSON نسِّق الملفين بالطريقة نفسها، ورتِّب المفاتيح، ثم قارن. لماذا مقارنة JSON الخام جلّها ضجيج، وكيف تقيِّس الجانبين في المتصفح، وما الذي يبقى حتى الرقعة.

أسئلة

هل يُرفع نصّاي إلى أي مكان؟

لا. المقارنة دالّةٌ تعمل في متصفحك أنت، على جهازك أنت. وليست لهذه الأداة وظيفة شبكية من أي نوع — فهي لا تجلب شيئاً ولا ترسل شيئاً أبداً — وContent-Security-Policy الخاصة بالصفحة تُسمّي كل عنوان يجوز لها الاتصال به، وليس واحد منها لنا. وذلك هو سبب استعمالها لعقد أو ملف إعدادات أو شيفرة غير منشورة: فلصقُ تلك في مقارن شخص آخر تسليمُ النسختين معاً دفعة واحدة.

ماذا تفعل المقارنة فعلاً؟

تجد أقصر مجموعة تعديلات تحوّل النصّ الأيسر إلى الأيمن، بخوارزمية Myers — التي يستعملها git diff. والأقصرُ هو ما يجعل الفرق مقروءاً: فالسطر المُدرَج في الوسط ينبغي أن يظهر إدراجاً واحداً لا أن يظهر كأن كل سطر بعده قد تغيّر. وداخل السطر المتغيّر تُعلَّم الكلمات المختلفة كذلك، فمقارنةُ فقرتين تعرض الكلمة التي انتقلت لا فقرتين كاملتين.

هل يستطيع مقارنة ملفين بدل لصقتين؟

نعم. أفلِتهما كليهما معاً على المُنتقي فيحطّ كلٌّ في جانب، بالترتيب الذي أفلتّهما به. ويقرؤهما متصفحك إلى هذه الصفحة، وهي المكان الوحيد الذي يذهبان إليه. وبدِّل الجانبين إن أفلتّهما مقلوبَين.

ماذا يخرج من المقارنة، وهل أستطيع تطبيقه؟

التنزيل فرقٌ موحَّد — صيغة @@ -3,5 +3,5 @@ التي يقرؤها git apply وpatch وكلُّ أداة مراجعة شيفرة. و«انسخ» يفعل الشيء نفسه إلى حافظتك. أما الذي على الشاشة فعرضٌ له: جنباً إلى جنب، أو في عمود واحد، والأجزاءُ غير المتغيّرة مطويّة إلى عدد ما لم تطلبها كلها.

هل يستطيع تجاهل المسافات أو حالة الأحرف أو الأسطر الفارغة؟

نعم، كلاً منها على حدة. فتجاهل المسافات يجعل ملفاً أعيد تنسيقه يُقارن على أنه بلا تغيير؛ وتجاهل حالة الأحرف يعامل Error و error كلمةً واحدة؛ وتجاهل الأسطر الفارغة يتخطى الأسطر التي لا تحمل شيئاً. وعندئذ تقول العدّادات فوق النتيجة إن الاثنين متساويان متى جرى تجاهلُ الفروق التي طلبتَ تجاهلها — وهذا ليس الادعاء نفسه القائل إنهما متطابقان، والصفحة تُبقي الادعاءين منفصلين.

ما أكبر مقارنة يستطيع التعامل معها؟

لا حدّ مضبوط هنا، لأنه لا خادم يدفع ثمن واحد. فنصّان من عشرين ألف سطر بينهما حفنة تغييرات يُقارنان في لحظة، لأن البداية والنهاية المشتركتين تُقصّان قبل أن يبدأ العمل الحقيقي. والمقارنةُ بين نصّين لا شيء بينهما مشترك البتة تتوقف مبكراً وتقول ذلك، بدل أن تنفق دقيقة في إثبات ما كان بيّناً أصلاً، والمقارنةُ الطويلة جداً ترسم أول بضعة آلاف من الصفوف وتترك الباقي للرقعة المنزَّلة.

هل هو مجاني، وهل أحتاج إلى حساب؟

هو مجاني، ولا حساب ولا تسجيل دخول ولا فترة تجريبية ولا حدّ لكم تلصق. ويحمل الموقع إعلانات، وهي ما يدفع تكاليفه؛ ولا يُعطى المعلنون شيئاً عن نصّك.

هل يعمل دون اتصال؟

نعم. حمِّل الصفحة مرة، ثم اقطع اتصالك بالإنترنت وستظل تعمل. وهذه أيضاً أبسط طريقة لإثبات أنه لا يُرفع شيء: فأداةٌ ترسل نصّيك بعيداً ليُقارنا كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.